Name: series-workflowlncf9 Phase: Succeeded StartedAt: 2026-09-02 22:37:47 +0000 UTC FinishedAt: 2026-09-03 00:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[0] Phase: Succeeded StartedAt: 2026-09-02 22:37:47 +0000 UTC FinishedAt: 2026-09-02 22:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 22:37:47 +0000 UTC FinishedAt: 2026-09-02 22:40:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "bc322e11-cda7-4f01-952d-42ee99e29cc5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_addsock" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayAoYGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJdCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHJlbGF0ZWQgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciB0eXBlIGNvbmZ1c2lvbikgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2M5YmYzNWQxNTVkMWU0MjEyYzI5ZTgwZDRhYzNmNDdkNDVlZjVhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjI6Mzk6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTE1NDEsNiAmIzQzOzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZXJyID0gLUVCVVNZO1xuJiM0MztcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfYWRkc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3ZjX2FkZHNvY2tgIGluIHRoZSBTVU5SUEMgc2VydmVyIHNvY2tldCBzdWJzeXN0ZW0gdG8gY2hlY2sgd2hldGhlciBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHNvY2tldCwgcmV0dXJuaW5nIC1FQlVTWSBpZiBzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIChlLmcuIHZpYSBORlNEIHBvcnQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzKSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjOWJmMzVkMTU1ZDFlNDIxMmMyOWU4MGQ0YWMzZjQ3ZDQ1ZWY1YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIyOjM5OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MGU1ZTdmNWI3NjJkLi5lOGNjNDMyOWYxMjgyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTU0MSw2ICYjNDM7MTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLAogCWVyciA9IC1FSVNDT05OOwogCWlmIChzby0mZ3Q7c3RhdGUgJmd0OyBTU19VTkNPTk5FQ1RFRCkKIAkJZ290byBvdXQ7CiYjNDM7CWVyciA9IC1FQlVTWTsKJiM0MzsJaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKQomIzQzOwkJZ290byBvdXQ7CiAJZXJyID0gLUVOT0VOVDsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCB0byBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb21taXQgYW5kIHRoZSBjaGFuZ2VzIGl0IGludHJvZHVjZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE1NDEuIFRoaXMgaXMgd2hlcmUgYHN2Y19hZGRzb2NrYCBsaXZlcywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjayBiZWluZyBhZGRlZCBoZXJlLiBTcGVjaWZpY2FsbHksIGEgYHNrX3VzZXJfZGF0YWAgY2hlY2sgb24gdGhlIHNvY2tldCYjMzk7cyBgc2tgIHN0cnVjdHVyZSBpcyBiZWluZyBpbnRyb2R1Y2VkIGJlZm9yZSB0aGUgYHRyeV9tb2R1bGVfZ2V0YCBjYWxsLiBUaGUgcGF0Y2gmIzM5O3MgbmV3IGNoZWNrLCBgaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgIGluZGljYXRlcyBhIHBvdGVudGlhbCBidXN5IHNvY2tldCBiZWluZyByZWplY3RlZC4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBtb3JlIGJyb2FkbHkgYW5kIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGxpbmUgMTU0MS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGBzdmNfYWRkc29ja2A/IFdoYXQgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYHNvLSZndDtzdGF0ZWA/IE1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVzZSBgZmluZC1yZWZlcmVuY2VzYCB0byBiZSBjZXJ0YWluLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIHBhdGggaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGZlYXR1cmUgZmxhZyBvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gVGhpcyB3aWxsIGluZm9ybSBtZSBhYm91dCB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgYWRkZWQgY2hlY2sgaXMgcmVsZXZhbnQgYW5kLCB0aGVyZWZvcmUsIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgY2hhbmdlIGlzIHJlbGV2YW50LiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlamVjdGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2VzIG5vdCBoYXZlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBzdWNoIGFzIGEgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbjE1MjE6XHR7XG4xNTIyOlx0XHRpbnQgZXJyID0gMDtcbjE1MjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbjE1MjQ6XHRcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XG4xNTI1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuMTUyNjpcdFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcjtcbjE1Mjc6XHRcdGludCBzYWxlbjtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmICghc28pXG4xNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbjE1NjA6XHRcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuMTU2MTpcdFx0cmV0dXJuIHN2Y19vbmVfc29ja19uYW1lKHN2c2ssIG5hbWVfcmV0dXJuLCBsZW4pO1xuMTU2MjpcdG91dDpcbjE1NjM6XHRcdHNvY2tmZF9wdXQoc28pO1xuMTU2NDpcdFx0cmV0dXJuIGVycjtcbjE1NjU6XHR9XG4xNTY2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xuMTU2NzpcdFxuMTU2ODpcdC8qXG4xNTY5Olx0ICogQ3JlYXRlIHNvY2tldCBmb3IgUlBDIHNlcnZpY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgc3ZjX2FkZHNvY2tgIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYHN2Y19hZGRzb2NrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQg4oCTIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQsIGFuZCB3aXRoIHdoYXQgcGFyYW1ldGVycy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBydW5uaW5nIGEgcXVpY2sgc2VhcmNoLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2UgYW5kIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2UgY2FyZWZ1bGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucywgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgZWFjaCBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBpcyBjcml0aWNhbCBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMsIG9yIGJ1ZyBmaXhlcyB0byB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBjaGFuZ2VzIGhhdmUgbm8gc2lkZS1lZmZlY3RzIG9yIGJyZWFrIG90aGVyIHBhcnRzIG9mIHRoZSBhcHBsaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfYWRkc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL25mc2N0bC5jPTczMj1zdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5mcy9uZnNkL25mc2N0bC5jLTc0OC1cdHNlcnYgPSBubi1cdTAwM2VuZnNkX3NlcnY7XG5mcy9uZnNkL25mc2N0bC5jOjc0OTpcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcbmZzL25mc2QvbmZzY3RsLmMtNzUwLVxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD02NT12b2lkXHRcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY2OmludFx0XHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02Ny1cdFx0XHQgICAgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbixcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDYtLyoqXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA4LSAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTE5OmludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUyMC1cdFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU2NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5GU2QgQ29udHJvbCBJbnRlcmZhY2UqKgoKT2theSwgc28gYHN2Y19hZGRzb2NrYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSBmaWRkbGluZyB3aXRoIHRoZSBORlNkIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgKG9yIG90aGVyIHJlbGF0ZWQgYG5mc2RjdGxgIGVudHJpZXMpLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgdGhhdCBpbiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBzZWUgaG93IGBmcy9uZnNkL25mc2N0bC5jYCBhY3R1YWxseSAqZXhwb3NlcyogdGhpcyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRyb2wgcGF0aCB0aGUgc3lzdGVtIHRha2VzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoYXQgZmlsZSBhZ2FpbiBhbmQgc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZyb20gdG9wIHRvIGJvdHRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25mc2QvbmZzY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdCAqIG5mc2QgbGlzdGVuZXIuXG4gNzMxOlx0ICovXG4gNzMyOlx0c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4gNzMzOlx0e1xuIDczNDpcdFx0Y2hhciAqbWVzZyA9IGJ1ZjtcbiA3MzU6XHRcdGludCBmZCwgZXJyO1xuIDczNjpcdFx0c3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpO1xuIDczNzpcdFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2O1xuIDczODpcdFxuIDczOTpcdFx0ZXJyID0gZ2V0X2ludChcdTAwMjZtZXNnLCBcdTAwMjZmZCk7XG4gNzQwOlx0XHRpZiAoZXJyICE9IDAgfHwgZmQgXHUwMDNjIDApXG4gNzQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0MjpcdFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkZmQobmV0LCBmZCk7XG4gNzQzOlx0XG4gNzQ0Olx0XHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XG4gNzQ1Olx0XHRpZiAoZXJyICE9IDApXG4gNzQ2Olx0XHRcdHJldHVybiBlcnI7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRzZXJ2ID0gbm4tXHUwMDNlbmZzZF9zZXJ2O1xuIDc0OTpcdFx0ZXJyID0gc3ZjX2FkZHNvY2soc2VydiwgbmV0LCBmZCwgYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsIGNyZWQpO1xuIDc1MDpcdFxuIDc1MTpcdFx0aWYgKCFzZXJ2LVx1MDAzZXN2X25ydGhyZWFkcyBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZubi1cdTAwM2VuZnNkX3NlcnYtXHUwMDNlc3ZfcGVybXNvY2tzKSlcbiA3NTI6XHRcdFx0bmZzZF9kZXN0cm95X3NlcnYobmV0KTtcbiA3NTM6XHRcbiA3NTQ6XHRcdHJldHVybiBlcnI7XG4gNzU1Olx0fVxuIDc1NjpcdFxuIDc1NzpcdC8qXG4gNzU4Olx0ICogQSB0cmFuc3BvcnQgbGlzdGVuZXIgaXMgYWRkZWQgYnkgd3JpdGluZyBpdHMgdHJhbnNwb3J0IG5hbWUgYW5kXG4gNzU5Olx0ICogYSBwb3J0IG51bWJlci5cbiA3NjA6XHQgKi9cbiA3NjE6XHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuIDc2MjpcdHtcbiA3NjM6XHRcdGNoYXIgdHJhbnNwb3J0WzE2XTtcbiA3NjQ6XHRcdHN0cnVjdCBzdmNfeHBydCAqeHBydDtcbiA3NjU6XHRcdGludCBwb3J0LCBlcnI7XG4gNzY2Olx0XHRzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMobmV0LCBuZnNkX25ldF9pZCk7XG4gNzY3Olx0XHRzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnY7XG4gNzY4Olx0XG4gNzY5Olx0XHRpZiAoc3NjYW5mKGJ1ZiwgXCYjMzQ7JTE1cyAlNXVcJiMzNDssIHRyYW5zcG9ydCwgXHUwMDI2cG9ydCkgIT0gMilcbiA3NzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzcxOlx0XG4gNzcyOlx0XHRpZiAocG9ydCBcdTAwM2MgMSB8fCBwb3J0IFx1MDAzZSBVU0hSVF9NQVgpXG4gNzczOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc3NDpcdFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkeHBydChuZXQsIHRyYW5zcG9ydCwgcG9ydCk7XG4gNzc1Olx0XG4gNzc2Olx0XHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XG4gNzc3Olx0XHRpZiAoZXJyICE9IDApXG4gNzc4Olx0XHRcdHJldHVybiBlcnI7XG4gNzc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggZmlndXJpbmcgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGZvciBTVU5SUEMgYW5kIE5GU0Q6CgoqKkRldGVybWluaW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBTVU5SUEMgYW5kIE5GU0QqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBmb3IgU1VOUlBDIGFuZCBORlNELiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNyYWNrIG9wZW4gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIGBuZXQvc3VucnBjL0tjb25maWdgIGFuZCBgZnMvbmZzZC9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCwgYXMgdGhleSBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRob3NlIHN1YnN5c3RlbXMuIEhvcGVmdWxseSwgdGhvc2UgZmlsZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgdGllcyB2YXJpb3VzIG9wdGlvbnMgdG9nZXRoZXIuIFRoaXMgaW5pdGlhbCBleHBsb3JhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgc2hvdyBtZSB0aGUgJiMzNDtidWlsZGluZyBibG9ja3MmIzM0OyBvZiB3aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoLipcXCkgJiM0Mzs9IHN1bnJwYy5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBSUEMgQ29uZmlndXJhdGlvbiBJc3N1ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gUlBDIGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBSUEMgTWFrZWZpbGUuIEkmIzM5O2xsIGxvb2sgYXQgYG5ldC9zdW5ycGMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgUlBDIHN1YnN5c3RlbS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gc2VlIHdoYXQmIzM5O3MgYmVpbmcgY29tcGlsZWQgYW5kIGhvdyBkaWZmZXJlbnQgbW9kdWxlcyBhcmUgYnJvdWdodCB0b2dldGhlci4KCkJleW9uZCB0aGUgTWFrZWZpbGUsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlICpjb25maWd1cmF0aW9uKiBpcyBoYW5kbGVkLiBJcyBpdCBhIG1vZHVsZSwgb3Igc29tZXRoaW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbD8gV2hlcmUgYXJlIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgZGVmaW5lZD8gU28sIEkmIzM5O2xsIGNoZWNrIGBuZXQvS2NvbmZpZ2AgZmlyc3QuIElmIGl0JiMzOTtzIG5ldHdvcmstcmVsYXRlZCwgdGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgc3BvdCBmb3IgdGhlIHNldHRpbmdzLgoKSWYgdGhlIFJQQyBmdW5jdGlvbmFsaXR5IGlzIG1vcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBmaWxlc3lzdGVtLCB0aGVuIGBmcy9LY29uZmlnYCBtaWdodCBiZSB0aGUgYmV0dGVyIHBsYWNlIHRvIGNoZWNrIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBhIGJpdCBvZiBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24gYW5kIHBhdHRlcm4gbWF0Y2hpbmcsIHNlZWluZyB3aGljaCBvbmUgbWFrZXMgbW9yZSBzZW5zZSwgYW5kIHNlZWluZyB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJlZmVyZW5jZS4gSSYjMzk7bSByZWFkeSB0byBmaW5kIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBzZWUgd2hhdCB0aGUgbG9naWMgaXMgYmVoaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFNVTiBSUENcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0XG4gICA3Olx0b2JqLSQoQ09ORklHX1NVTlJQQykgJiM0Mzs9IHN1bnJwYy5vXG4gICA4Olx0b2JqLSQoQ09ORklHX1NVTlJQQ19HU1MpICYjNDM7PSBhdXRoX2dzcy9cbiAgIDk6XHRvYmotJChDT05GSUdfU1VOUlBDX1hQUlRfUkRNQSkgJiM0Mzs9IHhwcnRyZG1hL1xuICAxMDpcdFxuICAxMTpcdHN1bnJwYy15IDo9IGNsbnQubyB4cHJ0Lm8gc29ja2xpYi5vIHhwcnRzb2NrLm8gc2NoZWQubyBcXFxuICAxMjpcdFx0ICAgIGF1dGgubyBhdXRoX251bGwubyBhdXRoX3Rscy5vIGF1dGhfdW5peC5vIFxcXG4gIDEzOlx0XHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxuICAxNDpcdFx0ICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFxcXG4gIDE1Olx0XHQgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gc3lzZnMubyBcXFxuICAxNjpcdFx0ICAgIHN2Y194cHJ0Lm8gXFxcbiAgMTc6XHRcdCAgICB4cHJ0bXVsdGlwYXRoLm8gbmV0bGluay5vXG4gIDE4Olx0c3VucnBjLSQoQ09ORklHX1NVTlJQQ19ERUJVRykgJiM0Mzs9IGRlYnVnZnMub1xuICAxOTpcdHN1bnJwYy0kKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpICYjNDM7PSBiYWNrY2hhbm5lbF9ycXN0Lm9cbiAgMjA6XHRzdW5ycGMtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHN0YXRzLm9cbiAgMjE6XHRzdW5ycGMtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBSUEMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19TVU5SUENgIGFuZCBgQ09ORklHX05GU0RgLiBUaGlzIHVzdWFsbHkgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L3N1bnJwYy9LY29uZmlnYC4gVGhpcyBmaWxlIGxpa2VseSBkZWZpbmVzIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpb3VzIFN1blJQQyBjb21wb25lbnRzIGFuZCwgc2luY2UgYE5GU0RgIGlzIE5ldHdvcmsgRmlsZSBTeXN0ZW0sIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGBDT05GSUdfTkZTRGAgd2lsbCBiZSBzb21ld2hlcmUgaW4gdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGV4cGxpY2l0bHkgaW4gdGhlIEtjb25maWcgZmlsZSB1c2luZyBsYW5ndWFnZSBsaWtlIGBkZXBlbmRzIG9uYCBvciBgc2VsZWN0YC4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVU5SUENcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xubmV0L3N1bnJwYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBLY29uZmlnIGZpbGVzOgoKKipEaXZpbmcgaW50byBSUEMgYW5kIE5GUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhlYWQgYmFjayBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZ2FtZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBSUEMgYW5kIE5GUyBzZXJ2ZXIgc2V0dXAsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9zdW5ycGMvS2NvbmZpZ2AgYW5kIGBmcy9uZnNkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBSUEMgYW5kIE5GUyBzZXJ2ZXIgb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlcyBJJiMzOTttIGN1cnJlbnRseSB3cmVzdGxpbmcgd2l0aC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgY2xlYXIgaGllcmFyY2h5IG9mIG9wdGlvbnMsIHdpdGggY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnRzIG9uIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBvciBsZWdhY3kgZmVhdHVyZSBzdXBwb3J0IHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuIEhvcGVmdWxseSwgdGhlIGZpbGUgb3JnYW5pemF0aW9uIGFuZCBjb21tZW50cyB3aWxsIGJlIGNsZWFyIGFuZCBsb2dpY2FsLCBlbmFibGluZyBtZSB0byBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBmbG93IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNVTlJQQ1xuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTVVMVElVU0VSXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFNVTlJQQ19HU1NcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XHRzZWxlY3QgT0lEX1JFR0lTVFJZXG4gICA5Olx0XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcdGRlcGVuZHMgb24gU1VOUlBDXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFNVTlJQQ19TV0FQXG4gIDE2Olx0XHRib29sXG4gIDE3Olx0XHRkZXBlbmRzIG9uIFNVTlJQQ1xuICAxODpcdFxuICAxOTpcdGNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgQ1JZUFRPXG4gIDIyOlx0XHRkZWZhdWx0IHlcbiAgMjM6XHRcdHNlbGVjdCBTVU5SUENfR1NTXG4gIDI0Olx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgQ2hvb3NlIFkgaGVyZSB0byBlbmFibGUgU2VjdXJlIFJQQyB1c2luZyB0aGUgS2VyYmVyb3MgdmVyc2lvbiA1XG4gIDI3Olx0XHQgIEdTUy1BUEkgbWVjaGFuaXNtIChSRkMgMTk2NCkuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIFNlY3VyZSBSUEMgY2FsbHMgd2l0aCBLZXJiZXJvcyByZXF1aXJlIGFuIGF1eGlsaWFyeSB1c2VyLXNwYWNlXG4gIDMwOlx0XHQgIGRhZW1vbiB3aGljaCBtYXkgYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlscyBwYWNrYWdlXG4gIDMxOlx0XHQgIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9saW51eC1uZnMub3JnLy4gIEluIGFkZGl0aW9uLCB1c2VyLXNwYWNlXG4gIDMyOlx0XHQgIEtlcmJlcm9zIHN1cHBvcnQgc2hvdWxkIGJlIGluc3RhbGxlZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgU1VOUlBDX0RFQlVHXG4gIDM3Olx0XHRib29sIFwmIzM0O1JQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgU1lTQ1RMXG4gIDM5Olx0XHRzZWxlY3QgREVCVUdfRlNcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGZzL25mc2QvS2NvbmZpZ2AgZmlsZToKCioqQW5hbHl6aW5nIHRoZSBgZnMvbmZzZC9LY29uZmlnYCBGaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBmcy9uZnNkL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gcHJvdmlkZSB0aGUgY29yZSBvcHRpb25zIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSBORlMgc2VydmVyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqVG9wLWxldmVsIGVuYWJsZS9kaXNhYmxlIHN3aXRjaGVzOioqIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gc3ltYm9scyB0aGF0IGNvbnRyb2wgd2hldGhlciBORlMgc2VydmVyIHN1cHBvcnQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGF0IGFsbC4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LgoqICAgKipQcm90b2NvbCB2ZXJzaW9uIG9wdGlvbnM6KiogSSBmdWxseSBleHBlY3QgdGhpcyBLY29uZmlnIHRvIGluY2x1ZGUgb3B0aW9ucyBmb3Igc2VsZWN0aW5nIGRpZmZlcmVudCBORlMgcHJvdG9jb2wgdmVyc2lvbnMgKE5GU3YzLCBORlN2NCwgYW5kIHBvc3NpYmx5IE5GU3YyIGlmIGl0JiMzOTtzIHN0aWxsIHN1cHBvcnRlZCkgYW5kIGFueSByZWxhdGVkIGZlYXR1cmVzIGZvciBlYWNoIHZlcnNpb24uCiogICAqKlNlY3VyaXR5LXJlbGF0ZWQgY2hvaWNlczoqKiBXZSBtdXN0IHNlZSBjaG9pY2VzIHJlbGF0ZWQgdG8gc2VjdXJpdHkgbWVjaGFuaXNtcyBsaWtlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uLCBkaWZmZXJlbnQgUlBDU0VDX0dTUyBpbXBsZW1lbnRhdGlvbnMsIGFuZCBwZXJoYXBzIGV2ZW4gb3B0aW9ucyB0byBjb250cm9sIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgc2VjdXJpdHkgZmxhdm9ycyBvciBhY2Nlc3MgY29udHJvbCBsaXN0cy4KKiAgICoqUGVyZm9ybWFuY2UgdHVuaW5nIGtub2JzOioqIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBvcHRpb25zIHRoYXQgbWlnaHQgYWxsb3cgbWUgdG8gdHVuZSB0aGUgTkZTIHNlcnZlciYjMzk7cyBwZXJmb3JtYW5jZSDigJMgcGVyaGFwcyByZWxhdGVkIHRvIGNhY2hpbmcsIHRocmVhZCBwb29saW5nLCBvciBvdGhlciBzZXJ2ZXItc2lkZSBvcHRpbWl6YXRpb25zLgoqICAgKipGaWxlIGxvY2tpbmc6KiogSG93IGFyZSB3ZSBoYW5kbGluZyBmaWxlIGxvY2tpbmc/IFRoZXJlIG11c3QgYmUgS2NvbmZpZyBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSBsb2NraW5nIHByb3RvY29scyBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzLgoqICAgKipEb2N1bWVudGF0aW9uIGFuZCBEZXBlbmRlbmNpZXM6KiogSSYjMzk7bGwgYWxzbyBnbGFuY2UgYXQgdGhlIGhlbHAgdGV4dCBmb3IgZWFjaCBvcHRpb24uIEl0IHNob3VsZCBwcm92aWRlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBhbmQgZGVwZW5kZW5jaWVzLiBJIG1heSBuZWVkIHRvIG5hdmlnYXRlIHRvIG90aGVyIEtjb25maWcgZmlsZXMgb3IgY29kZSBzZWN0aW9ucyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSB3aGF0IHRoZSAqZGVwZW5kZW5jaWVzKiBhcmUsIGFuZCB3aGVyZSBpdCBtYXkgbmVlZCB0byBpbXBvcnQgb3RoZXIgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIGl0JiMzOTtzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGlzIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLCBvcHRpb25zLCBhbmQgZGVwZW5kZW5jaWVzIG9mIHRoZSBORlMgc2VydmVyIGltcGxlbWVudGF0aW9uIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRvIGNvcnJlY3RseSBidWlsZCB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBORlNEXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBGSUxFX0xPQ0tJTkdcbiAgIDY6XHRcdGRlcGVuZHMgb24gRlNOT1RJRllcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IENSWVBUT19MSUJfTUQ1IGlmIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2IGlmIE5GU0RfVjRcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE8gIyByZXF1aXJlZCBieSBSUENTRUNfR1NTX0tSQjUgYW5kIHNpZ25lZCBmaWxlaGFuZGxlc1xuICAxMTpcdFx0c2VsZWN0IExPQ0tEXG4gIDEyOlx0XHRzZWxlY3QgU1VOUlBDXG4gIDEzOlx0XHRzZWxlY3QgRVhQT1JURlNcbiAgMTQ6XHRcdHNlbGVjdCBORlNfQ09NTU9OXG4gIDE1Olx0XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjJfQUNMXG4gIDE2Olx0XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXG4gIDE3Olx0XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBDaG9vc2UgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGFsbG93IG90aGVyIGNvbXB1dGVycyB0byBhY2Nlc3NcbiAgMjA6XHRcdCAgZmlsZXMgcmVzaWRpbmcgb24gdGhpcyBzeXN0ZW0gdXNpbmcgU3VuJiMzOTtzIE5ldHdvcmsgRmlsZSBTeXN0ZW1cbiAgMjE6XHRcdCAgcHJvdG9jb2wuICBUbyBjb21waWxlIHRoZSBORlMgc2VydmVyIHN1cHBvcnQgYXMgYSBtb2R1bGUsXG4gIDIyOlx0XHQgIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbmZzZC5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgWW91IG1heSBjaG9vc2UgdG8gdXNlIGEgdXNlci1zcGFjZSBORlMgc2VydmVyIGluc3RlYWQsIGluIHdoaWNoXG4gIDI1Olx0XHQgIGNhc2UgeW91IGNhbiBjaG9vc2UgTiBoZXJlLlxuICAyNjpcdFxuICAyNzpcdFx0ICBUbyBleHBvcnQgbG9jYWwgZmlsZSBzeXN0ZW1zIHVzaW5nIE5GUywgeW91IGFsc28gbmVlZCB0byBpbnN0YWxsXG4gIDI4Olx0XHQgIHVzZXIgc3BhY2UgcHJvZ3JhbXMgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHNcbiAgMjk6XHRcdCAgcGFja2FnZSwgYXZhaWxhYmxlIGZyb20gaHR0cDovL2xpbnV4LW5mcy5vcmcvLiAgTW9yZSBkZXRhaWwgYWJvdXRcbiAgMzA6XHRcdCAgdGhlIExpbnV4IE5GUyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHZpYSB0aGVcbiAgMzE6XHRcdCAgZXhwb3J0cyg1KSBtYW4gcGFnZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgQmVsb3cgeW91IGNhbiBjaG9vc2Ugd2hpY2ggdmVyc2lvbnMgb2YgdGhlIE5GUyBwcm90b2NvbCBhcmVcbiAgMzQ6XHRcdCAgYXZhaWxhYmxlIHRvIGNsaWVudHMgbW91bnRpbmcgdGhlIE5GUyBzZXJ2ZXIgb24gdGhpcyBzeXN0ZW0uXG4gIDM1Olx0XHQgIFN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDMgKFJGQyAxODEzKSBpcyBhbHdheXMgYXZhaWxhYmxlIHdoZW5cbiAgMzY6XHRcdCAgQ09ORklHX05GU0QgaXMgc2VsZWN0ZWQuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIE5GU0RfVjJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxMAoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3ZjX2FkZHNvY2tgIEZ1bmN0aW9uIGFuZCBSZWxhdGVkIEtlcm5lbCBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN2Y19hZGRzb2NrYCBmdW5jdGlvbiBhbmQgZmlndXJlIG91dCBpdHMgaW1wbGljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgY2FsbGluZyBpdCBvciB1c2luZyB0aGUgYHN2Y3NvY2tgIG1lY2hhbmlzbSB3aXRoaW4gdGhlIFNVTlJQQyBjb250ZXh0LiBJJiMzOTtsbCBydW4gYW5vdGhlciBgZ3JlcGAgc2VhcmNoLiBJdCBsb29rcyBsaWtlIGBzdmNfYWRkc29ja2AgaXMgb25seSBjYWxsZWQgZnJvbSBgZnMvbmZzZC9uZnNjdGwuY2AuIE5vdywgbGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnM6IGBzdmNfc2V0dXBfc29ja2V0YCwgYHN2Y19hZGRzb2NrYCwgYHN2Y19jcmVhdGVfc29ja2V0YCwgZXRjLiwgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cuCgpXaGF0IGV4YWN0bHkgZG9lcyBgc3ZjX2FkZHNvY2tgICpkbyo/IEFoLCBpdCYjMzk7cyBhbiBleHBvcnRlZCBzeW1ib2wgKGBFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jaylgKSwgbWVhbmluZyBpdCYjMzk7cyBhIG5vbi1pbmxpbmVkLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludC4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjazoKYGBgYwplcnIgPSAtRUJVU1k7CglpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCgkJZ290byBvdXQ7CmBgYApUaGlzIGlzIGtleS4gSXQmIzM5O3MgcHJldmVudGluZyBhIHNvY2tldCB0aGF0IGFscmVhZHkgaGFzIGBza191c2VyX2RhdGFgIOKAkyB3aGljaCBjb3VsZCBiZSBhbm90aGVyIGtlcm5lbCBjb25zdW1lciwgYW4gZXhpc3RpbmcgYHN2Y19zb2NrYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGZyb20gYmVpbmcgYXR0YWNoZWQgdG8gYW4gUlBDIHNlcnZpY2UuIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLCBiZWNhdXNlIGl0IHByZXZlbnRzIHNvY2tldCBzdGVhbGluZyBhbmQgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi4KClRoaXMgbG9naWMgaXMgc21hY2stZGFiIGluIHRoZSBjb3JlIGtlcm5lbCwgdG91Y2hpbmcgbmV0d29ya2luZywgZmlsZXN5c3RlbXMgKHNwZWNpZmljYWxseSBTVU5SUEMgYW5kIE5GU0QpLiBUZXN0aW5nIHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB1c2luZyBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBJIGNhbiBtYW5pcHVsYXRlIGl0IHVzaW5nIHVzZXJzcGFjZSBieSB3cml0aW5nIGFuIEZEIHRvIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCwgb3IgdXNpbmcgYG5mc2RjdGxgIG9yIHN5c2ZzLgoKVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsOyBpdCBwcmV2ZW50cyBzb2NrZXQgY29ycnVwdGlvbiBpbiB0aGVzZSBzcGVjaWZpYyBjYXNlcy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB3aGF0IHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZS4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gYHN2Y19hZGRzb2NrYC4gQXJlIHRoZXJlIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBzeW1ib2xzIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2A/IGBzdmNfc2V0dXBfc29ja2V0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHJlbGF0ZWQgYnV0IG5vdCB0aGUgcHJpbWFyeSBmb2N1cywgd2hpbGUgYHN2Y19hZGRzb2NrYCBpcyBub24tc3RhdGljLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYE5GU0RgIHNlbGVjdHMgYFNVTlJQQ2AsIGBMT0NLRGAsIGV0Yy4gYFNVTlJQQ2AgaXMgdHJpc3RhdGUgYW5kIHNlbGVjdGVkIGJ5IGBORlNEYCwgYE5GU19GU2AsIGV0Yy4gU28sIGBTVU5SUENgIGFuZCBgTkZTRGAgc2VlbSBsaWtlIHRoZSByZWxldmFudCBjb25maWdzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjb25maWdzIG9yIHN5bWJvbHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGBzdmNfYWRkc29ja2Agc3ltYm9sIGRlZmluaXRpb24gb25lIGxhc3QgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZDoKYGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpYApMaW5lIDE1MTkgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gT2theSwgYWxsIGxvb2tzIGdvb2QuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19hZGRzb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19hZGRzb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSByZWxhdGVkIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgdHlwZSBjb25mdXNpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzliZjM1ZDE1NWQxZTQyMTJjMjllODBkNGFjM2Y0N2Q0NWVmNWExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjozOTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTE1NDEsNiAmIzQzOzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCwKIAllcnIgPSAtRUlTQ09OTjsKIAlpZiAoc28tJmd0O3N0YXRlICZndDsgU1NfVU5DT05ORUNURUQpCiAJCWdvdG8gb3V0OwomIzQzOwllcnIgPSAtRUJVU1k7CiYjNDM7CWlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkKJiM0MzsJCWdvdG8gb3V0OwogCWVyciA9IC1FTk9FTlQ7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiAJCWdvdG8gb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN1blJQQyBTb2NrZXQgQWRkaXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2Ugd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcmVmaW5lIHNvY2tldCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgU3VuUlBDIHNlcnZpY2UgbGF5ZXIuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYGlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCBUaGlzIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgYWRkaXRpb24gYmVjYXVzZSBpdCBhcHBlYXJzIHRvIGJlIHByZXZlbnRpbmcgdGhlIGFkZGl0aW9uIG9mIGEgc29ja2V0IGlmIHRoZSBzb2NrZXQmIzM5O3MgYHNrX3VzZXJfZGF0YWAgZmllbGQgaXMgYWxyZWFkeSBpbiB1c2UuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZSBvciBhIHN1YnRsZSBzdGF0ZSBtYW5hZ2VtZW50IHByb2JsZW0uIFdlJiMzOTtyZSByZWplY3RpbmcgdGhlIGFkZCB3aXRoIGAtRUJVU1lgLgoKVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza191c2VyX2RhdGFgIGlzIHVzZWQgZm9yIGluIHRoaXMgY29udGV4dC4gSXMgaXQgdHJhY2tpbmcgY29ubmVjdGlvbiBzdGF0ZSwgc2VydmVyLXNwZWNpZmljIGRhdGEsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGhhcHBlbnMgaWYgdGhpcyBjb25kaXRpb24gKmlzKiBtZXQ/IERvZXMgdGhpcyBwcmV2ZW50IGEgY2xpZW50IGZyb20gY29ubmVjdGluZyBvciB0aGUgc2VydmVyIGZyb20gYWNjZXB0aW5nIGEgY29ubmVjdGlvbj8KCkkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgYXJvdW5kIGxpbmUgMTU0MS4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc29gLCBgc2tgLCBgU1NfVU5DT05ORUNURURgLCBhbmQgYHN2Y19hZGRzb2NrYCBhcmUgd2l0aGluIHRoZSBncmVhdGVyIGBuZXQvc3VucnBjYCBzdHJ1Y3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgcmF0aW9uYWxlIGJlaGluZCBhZGRpbmcgdGhpcyBidXN5LWNoZWNrLiBUaGlzIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY29uZGl0aW9uIGFuZCBpdHMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbjE1MjE6XHR7XG4xNTIyOlx0XHRpbnQgZXJyID0gMDtcbjE1MjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbjE1MjQ6XHRcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XG4xNTI1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuMTUyNjpcdFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcjtcbjE1Mjc6XHRcdGludCBzYWxlbjtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmICghc28pXG4xNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbjE1NjA6XHRcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuMTU2MTpcdFx0cmV0dXJuIHN2Y19vbmVfc29ja19uYW1lKHN2c2ssIG5hbWVfcmV0dXJuLCBsZW4pO1xuMTU2MjpcdG91dDpcbjE1NjM6XHRcdHNvY2tmZF9wdXQoc28pO1xuMTU2NDpcdFx0cmV0dXJuIGVycjtcbjE1NjU6XHR9XG4xNTY2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xuMTU2NzpcdFxuMTU2ODpcdC8qXG4xNTY5Olx0ICogQ3JlYXRlIHNvY2tldCBmb3IgUlBDIHNlcnZpY2UuXG4xNTcwOlx0ICovXG4xNTcxOlx0c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuMTU3MjpcdFx0XHRcdFx0XHQgIGludCBwcm90b2NvbCxcbjE1NzM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsXG4xNTc0Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNvY2thZGRyICpzaW4sIGludCBsZW4sXG4xNTc1Olx0XHRcdFx0XHRcdCAgaW50IGZsYWdzKVxuMTU3NjpcdHtcbjE1Nzc6XHRcdHN0cnVjdCBzdmNfc29ja1x0KnN2c2s7XG4xNTc4Olx0XHRzdHJ1Y3Qgc29ja2V0XHQqc29jaztcbjE1Nzk6XHRcdGludFx0XHRlcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMAoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA2MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgTWVtb3J5IFNhZmV0eSBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGluIGBzdmNfYWRkc29jaygpYCBpcyBkb2luZy4gSXQmIzM5O3MgdGFraW5nIGEgdXNlci1wcm92aWRlZCBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIChgZmRgKSBhbmQgdHJ5aW5nIHRvIHJlZ2lzdGVyIGl0IGFzIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgYHN2Y19zZXR1cF9zb2NrZXQoKWAsIHdoaWNoIGhhbmRsZXMgdGhlIGF0dGFjaG1lbnQgb2YgdGhpcyBzb2NrZXQgYW5kIHRoZSBjcml0aWNhbCBgc3Zza2AgZGF0YSwgcG90ZW50aWFsbHkgb3ZlcndyaXRpbmcgKG9yIGF0IGxlYXN0ICp1c2luZyopIGBza191c2VyX2RhdGFgIGluIHRoZSB1bmRlcmx5aW5nIGBzdHJ1Y3Qgc29ja2AuCgpUaGUgcGF0Y2gmIzM5O3MgZ290IGEgY2hlY2sgdGhlcmUsIGBpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpIGdvdG8gb3V0O2AuIEdvb2QsIGJlY2F1c2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBwb3B1bGF0ZWQsIHRyeWluZyB0byBhdHRhY2ggdGhpcyBzb2NrZXQgYWdhaW4sIG9yIHdvcnNlLCBvdmVyd3JpdGluZyBgc2tfdXNlcl9kYXRhYCBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXM6IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBldmVuIGNyYXNoZXMsIGVzcGVjaWFsbHkgbGF0ZXIgd2hlbiB0aG9zZSBjYWxsYmFja3MgdGllZCB0byBgc2tfdXNlcl9kYXRhYCBhcmUgaW52b2tlZC4gU28sIHRoaXMgY2hlY2sgKnByZXZlbnRzKiByZXVzaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgc29ja2V0LiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEkgbmVlZCB0byBhbmFseXplIGl0IHN5c3RlbWF0aWNhbGx5LgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8qKiBObywgbm90aGluZyBoZXJlIGlzIHNlbmRpbmcga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIFRoZSBjaGVjayB1c2VzIGBzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YWAsIHdoaWNoIGlzIGEgcG9pbnRlciB3aXRoaW4gYHN0cnVjdCBzb2NrYC4gVGhlIGBzdHJ1Y3Qgc29ja2AgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGtlcm5lbCBkdXJpbmcgc29ja2V0IGNyZWF0aW9uIChvciBsYXRlciB3aGVuIHVzZXIgZGF0YSBpcyBjb25maWd1cmVkKS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uPyoqIE5vdCBoZXJlLiBUaGlzIGlzbiYjMzk7dCBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtYWtpbmcgbGFyZ2UgY2hhbmdlcyBpbiBob3cgZGF0YSBpcyBpbml0aWFsaXplZC4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBhIGNoZWNrIHRvIGF2b2lkIGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIHNvY2tldC4KClNvLCBmcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgbWVyZWx5IGFkZGluZyBhIHNhZmV0eSBjaGVjayB0byBwcmV2ZW50IHJlLWF0dGFjaGluZyBhIHNvY2tldCwgYW5kIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGEgc2FuaXR5IGNoZWNrIGFnYWluc3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3RhdGUgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1hc3NvY2lhdGlvbiBidWdzLiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYWxyZWFkeSBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcyAobGlrZSB0aGUgVUFGIGlzc3VlcykuIE5vIEtNU0FOIGZ1enppbmcgbmVlZGVkLCBpdCBzZWVtcy4KCioqTXkgRmluYWwgUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggKmFkZHMqIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAuIEl0IHZlcmlmaWVzIHRoYXQgdGhlIHByb3ZpZGVkIHNvY2tldCBkb2VzbiYjMzk7dCBoYXZlIGBza191c2VyX2RhdGFgIGFscmVhZHkgYXNzaWduZWQgKmJlZm9yZSogc2V0dGluZyBpdCB1cCBhcyBhbiBSUEMgc2VydmljZSBzb2NrZXQuIFRoaXMgY2hlY2sgcHJldmVudHMgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgc3RhdGUgY29ycnVwdGlvbiwgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIGhhbmRsZSB0aGVzZSBzYWZldHkgY29uY2VybnMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSByZWxhdGVkIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgdHlwZSBjb25mdXNpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSByZWxhdGVkIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgdHlwZSBjb25mdXNpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozOTo1MC40NzAxODMzOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI0NzM1MzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfYWRkc29ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcmVsYXRlZCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHR5cGUgY29uZnVzaW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc3ZjX2FkZHNvY2tgIGluIHRoZSBTVU5SUEMgc2VydmVyIHNvY2tldCBzdWJzeXN0ZW0gdG8gY2hlY2sgd2hldGhlciBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHNvY2tldCwgcmV0dXJuaW5nIC1FQlVTWSBpZiBzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIChlLmcuIHZpYSBORlNEIHBvcnQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6Mzk6NTAuNDcwMTg4MzQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk5MjY5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzliZjM1ZDE1NWQxZTQyMTJjMjllODBkNGFjM2Y0N2Q0NWVmNWExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMjI6Mzk6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmNcXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG4gXFx0ZXJyID0gLUVJU0NPTk47XFxuIFxcdGlmIChzby1cXHUwMDNlc3RhdGUgXFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdGVyciA9IC1FQlVTWTtcXG4rXFx0aWYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0ZXJyID0gLUVOT0VOVDtcXG4gXFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozOTo1MC45NzA5Mzg1OTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2ODc2OTY3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN2Y19hZGRzb2NrYCBpbiB0aGUgU1VOUlBDIHNlcnZlciBzb2NrZXQgc3Vic3lzdGVtIHRvIGNoZWNrIHdoZXRoZXIgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzb2NrZXQsIHJldHVybmluZyAtRUJVU1kgaWYgc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSAoZS5nLiB2aWEgTkZTRCBwb3J0IGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjOWJmMzVkMTU1ZDFlNDIxMmMyOWU4MGQ0YWMzZjQ3ZDQ1ZWY1YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjM5OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuIFx0ZXJyID0gLUVJU0NPTk47XG4gXHRpZiAoc28tXHUwMDNlc3RhdGUgXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxuIFx0XHRnb3RvIG91dDtcbitcdGVyciA9IC1FQlVTWTtcbitcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4rXHRcdGdvdG8gb3V0O1xuIFx0ZXJyID0gLUVOT0VOVDtcbiBcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuIFx0XHRnb3RvIG91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjM5OjUwLjk3MDk0MDIxM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxODE1MTMyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCB0byBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0IGFuZCB0aGUgY2hhbmdlcyBpdCBpbnRyb2R1Y2VzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE1NDEuIFRoaXMgaXMgd2hlcmUgYHN2Y19hZGRzb2NrYCBsaXZlcywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgbmV3IGNoZWNrIGJlaW5nIGFkZGVkIGhlcmUuIFNwZWNpZmljYWxseSwgYSBgc2tfdXNlcl9kYXRhYCBjaGVjayBvbiB0aGUgc29ja2V0J3MgYHNrYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgaW50cm9kdWNlZCBiZWZvcmUgdGhlIGB0cnlfbW9kdWxlX2dldGAgY2FsbC4gVGhlIHBhdGNoJ3MgbmV3IGNoZWNrLCBgaWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgYnVzeSBzb2NrZXQgYmVpbmcgcmVqZWN0ZWQuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBtb3JlIGJyb2FkbHkgYW5kIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGxpbmUgMTU0MS4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQuIFdoYXQncyB0aGUgcHVycG9zZSBvZiBgc3ZjX2FkZHNvY2tgPyBXaGF0IGFyZSB0aGUgcG9zc2libGUgc3RhdGVzIG9mIGBzby1cdTAwM2VzdGF0ZWA/IE1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVzZSBgZmluZC1yZWZlcmVuY2VzYCB0byBiZSBjZXJ0YWluLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIHBhdGggaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGZlYXR1cmUgZmxhZyBvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gVGhpcyB3aWxsIGluZm9ybSBtZSBhYm91dCB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgYWRkZWQgY2hlY2sgaXMgcmVsZXZhbnQgYW5kLCB0aGVyZWZvcmUsIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgY2hhbmdlIGlzIHJlbGV2YW50LiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlamVjdGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2VzIG5vdCBoYXZlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBzdWNoIGFzIGEgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjM5OjU5LjE1MjQ1NjMwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4xNTIxOlxcdHtcXG4xNTIyOlxcdFxcdGludCBlcnIgPSAwO1xcbjE1MjM6XFx0XFx0c3RydWN0IHNvY2tldCAqc28gPSBzb2NrZmRfbG9va3VwKGZkLCBcXHUwMDI2ZXJyKTtcXG4xNTI0OlxcdFxcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XFxuMTUyNTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xcbjE1MjY6XFx0XFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHI7XFxuMTUyNzpcXHRcXHRpbnQgc2FsZW47XFxuMTUyODpcXHRcXG4xNTI5OlxcdFxcdGlmICghc28pXFxuMTUzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MzE6XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNTMyOlxcdFxcdGlmIChzb2NrX25ldChzby1cXHUwMDNlc2spICE9IG5ldClcXG4xNTMzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1MzQ6XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNTM1OlxcdFxcdGlmICgoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcXG4xNTM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1Mzc6XFx0XFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMTUzODpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbjE1Mzk6XFx0XFx0ICAgIHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuMTU0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQxOlxcdFxcdGVyciA9IC1FSVNDT05OO1xcbjE1NDI6XFx0XFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbjE1NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU0NDpcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTU0NTpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuMTU0NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ3OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTU0ODpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4xNTQ5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTA6XFx0XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcXG4xNTUxOlxcdFxcdGlmIChJU19FUlIoc3ZzaykpIHtcXG4xNTUyOlxcdFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjE1NTM6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cXHUwMDNlc2tfc29jaywgc2luKTtcXG4xNTU3OlxcdFxcdGlmIChzYWxlbiBcXHUwMDNlPSAwKVxcbjE1NTg6XFx0XFx0XFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcXG4xNTU5OlxcdFxcdHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcXG4xNTYwOlxcdFxcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCk7XFxuMTU2MTpcXHRcXHRyZXR1cm4gc3ZjX29uZV9zb2NrX25hbWUoc3ZzaywgbmFtZV9yZXR1cm4sIGxlbik7XFxuMTU2MjpcXHRvdXQ6XFxuMTU2MzpcXHRcXHRzb2NrZmRfcHV0KHNvKTtcXG4xNTY0OlxcdFxcdHJldHVybiBlcnI7XFxuMTU2NTpcXHR9XFxuMTU2NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdC8qXFxuMTU2OTpcXHQgKiBDcmVhdGUgc29ja2V0IGZvciBSUEMgc2VydmljZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6Mzk6NTkuMTUyNTYyNzAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1ODEzMDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzdmNfYWRkc29ja2AgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYHN2Y19hZGRzb2NrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQg4oCTIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZCwgYW5kIHdpdGggd2hhdCBwYXJhbWV0ZXJzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcnVubmluZyBhIHF1aWNrIHNlYXJjaCwgcHJvYmFibHkgdXNpbmcgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sLCBkZXBlbmRpbmcgb24gdGhlIGNvZGViYXNlIGFuZCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbi4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2UgY2FyZWZ1bGx5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG92ZXJhbGwgcHVycG9zZSBvZiBlYWNoIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgaXMgY3JpdGljYWwgYmVmb3JlIEkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzLCBvciBidWcgZml4ZXMgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBjaGFuZ2VzIGhhdmUgbm8gc2lkZS1lZmZlY3RzIG9yIGJyZWFrIG90aGVyIHBhcnRzIG9mIHRoZSBhcHBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MDEuMzEwNjk1OTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgxMzM3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX2FkZHNvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9uZnNjdGwuYz03MzI9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5mcy9uZnNkL25mc2N0bC5jLTc0OC1cXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG5mcy9uZnNkL25mc2N0bC5jOjc0OTpcXHRlcnIgPSBzdmNfYWRkc29jayhzZXJ2LCBuZXQsIGZkLCBidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwgY3JlZCk7XFxuZnMvbmZzZC9uZnNjdGwuYy03NTAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmg9NjU9dm9pZFxcdFxcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaDo2NjppbnRcXHRcXHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjctXFx0XFx0XFx0ICAgIGNvbnN0IGludCBmZCwgY2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwOC0gKiBAc2VydjogcG9pbnRlciB0byBSUEMgc2VydmljZSB0byB3aGljaCB0byBhZGQgYSBuZXcgbGlzdGVuZXJcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUxOTppbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1NjY6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjAzLjAyODgzNTg0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODAyNjk3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORlNkIENvbnRyb2wgSW50ZXJmYWNlKipcblxuT2theSwgc28gYHN2Y19hZGRzb2NrYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHdlJ3JlIGZpZGRsaW5nIHdpdGggdGhlIE5GU2QgY29uZmlndXJhdGlvbiB0aHJvdWdoIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCAob3Igb3RoZXIgcmVsYXRlZCBgbmZzZGN0bGAgZW50cmllcykuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IGluIHRoZSBjb2RlYmFzZS4gTGV0J3Mgc2VlIGhvdyBgZnMvbmZzZC9uZnNjdGwuY2AgYWN0dWFsbHkgKmV4cG9zZXMqIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250cm9sIHBhdGggdGhlIHN5c3RlbSB0YWtlcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoYXQgZmlsZSBhZ2FpbiBhbmQgc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZyb20gdG9wIHRvIGJvdHRvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjA1LjAwOTEwODE1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL25mc2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHQgKiBuZnNkIGxpc3RlbmVyLlxcbiA3MzE6XFx0ICovXFxuIDczMjpcXHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4gNzMzOlxcdHtcXG4gNzM0OlxcdFxcdGNoYXIgKm1lc2cgPSBidWY7XFxuIDczNTpcXHRcXHRpbnQgZmQsIGVycjtcXG4gNzM2OlxcdFxcdHN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIG5mc2RfbmV0X2lkKTtcXG4gNzM3OlxcdFxcdHN0cnVjdCBzdmNfc2VydiAqc2VydjtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0ZXJyID0gZ2V0X2ludChcXHUwMDI2bWVzZywgXFx1MDAyNmZkKTtcXG4gNzQwOlxcdFxcdGlmIChlcnIgIT0gMCB8fCBmZCBcXHUwMDNjIDApXFxuIDc0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQyOlxcdFxcdHRyYWNlX25mc2RfY3RsX3BvcnRzX2FkZGZkKG5ldCwgZmQpO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XFxuIDc0NTpcXHRcXHRpZiAoZXJyICE9IDApXFxuIDc0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG4gNzQ5OlxcdFxcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0aWYgKCFzZXJ2LVxcdTAwM2Vzdl9ucnRocmVhZHMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2bm4tXFx1MDAzZW5mc2Rfc2Vydi1cXHUwMDNlc3ZfcGVybXNvY2tzKSlcXG4gNzUyOlxcdFxcdFxcdG5mc2RfZGVzdHJveV9zZXJ2KG5ldCk7XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdHJldHVybiBlcnI7XFxuIDc1NTpcXHR9XFxuIDc1NjpcXHRcXG4gNzU3OlxcdC8qXFxuIDc1ODpcXHQgKiBBIHRyYW5zcG9ydCBsaXN0ZW5lciBpcyBhZGRlZCBieSB3cml0aW5nIGl0cyB0cmFuc3BvcnQgbmFtZSBhbmRcXG4gNzU5OlxcdCAqIGEgcG9ydCBudW1iZXIuXFxuIDc2MDpcXHQgKi9cXG4gNzYxOlxcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkeHBydChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuIDc2MjpcXHR7XFxuIDc2MzpcXHRcXHRjaGFyIHRyYW5zcG9ydFsxNl07XFxuIDc2NDpcXHRcXHRzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQ7XFxuIDc2NTpcXHRcXHRpbnQgcG9ydCwgZXJyO1xcbiA3NjY6XFx0XFx0c3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpO1xcbiA3Njc6XFx0XFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2O1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRpZiAoc3NjYW5mKGJ1ZiwgXFxcIiUxNXMgJTV1XFxcIiwgdHJhbnNwb3J0LCBcXHUwMDI2cG9ydCkgIT0gMilcXG4gNzcwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRcXHRpZiAocG9ydCBcXHUwMDNjIDEgfHwgcG9ydCBcXHUwMDNlIFVTSFJUX01BWClcXG4gNzczOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NzQ6XFx0XFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkeHBydChuZXQsIHRyYW5zcG9ydCwgcG9ydCk7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGVyciA9IG5mc2RfY3JlYXRlX3NlcnYobmV0KTtcXG4gNzc3OlxcdFxcdGlmIChlcnIgIT0gMClcXG4gNzc4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MDUuMDA5MjY3MjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMzg2NDM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIGZpZ3VyaW5nIG91dCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBmb3IgU1VOUlBDIGFuZCBORlNEOlxuXG4qKkRldGVybWluaW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBTVU5SUEMgYW5kIE5GU0QqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvcnJlY3QgS2NvbmZpZyBvcHRpb25zIGZvciBTVU5SUEMgYW5kIE5GU0QuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY3JhY2sgb3BlbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYm90aCBgbmV0L3N1bnJwYy9LY29uZmlnYCBhbmQgYGZzL25mc2QvS2NvbmZpZ2AuIFRoZXNlIGFyZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQsIGFzIHRoZXkgZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aG9zZSBzdWJzeXN0ZW1zLiBIb3BlZnVsbHksIHRob3NlIGZpbGVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgdGllcyB2YXJpb3VzIG9wdGlvbnMgdG9nZXRoZXIuIFRoaXMgaW5pdGlhbCBleHBsb3JhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgc2hvdyBtZSB0aGUgXCJidWlsZGluZyBibG9ja3NcIiBvZiB3aGF0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MDcuMDQzMTM0NTY1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQzMDIwNTQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKC4qXFxcXCkgKz0gc3VucnBjLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjA5LjQ4NjE2Njg0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTgzMDM3NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZmlsZXM6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUlBDIENvbmZpZ3VyYXRpb24gSXNzdWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gUlBDIGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBSUEMgTWFrZWZpbGUuIEknbGwgbG9vayBhdCBgbmV0L3N1bnJwYy9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBSUEMgc3Vic3lzdGVtLiBJJ20gaG9waW5nIEkgY2FuIHNlZSB3aGF0J3MgYmVpbmcgY29tcGlsZWQgYW5kIGhvdyBkaWZmZXJlbnQgbW9kdWxlcyBhcmUgYnJvdWdodCB0b2dldGhlci5cblxuQmV5b25kIHRoZSBNYWtlZmlsZSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSAqY29uZmlndXJhdGlvbiogaXMgaGFuZGxlZC4gSXMgaXQgYSBtb2R1bGUsIG9yIHNvbWV0aGluZyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWw/IFdoZXJlIGFyZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGRlZmluZWQ/IFNvLCBJJ2xsIGNoZWNrIGBuZXQvS2NvbmZpZ2AgZmlyc3QuIElmIGl0J3MgbmV0d29yay1yZWxhdGVkLCB0aGF0J3MgdGhlIG1vc3QgbGlrZWx5IHNwb3QgZm9yIHRoZSBzZXR0aW5ncy5cblxuSWYgdGhlIFJQQyBmdW5jdGlvbmFsaXR5IGlzIG1vcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBmaWxlc3lzdGVtLCB0aGVuIGBmcy9LY29uZmlnYCBtaWdodCBiZSB0aGUgYmV0dGVyIHBsYWNlIHRvIGNoZWNrIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIGEgYml0IG9mIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBhbmQgcGF0dGVybiBtYXRjaGluZywgc2VlaW5nIHdoaWNoIG9uZSBtYWtlcyBtb3JlIHNlbnNlLCBhbmQgc2VlaW5nIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmVmZXJlbmNlLiBJJ20gcmVhZHkgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgc2VlIHdoYXQgdGhlIGxvZ2ljIGlzIGJlaGluZCB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MTIuMDY5MjA3NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBTVU4gUlBDXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1NVTlJQQykgKz0gc3VucnBjLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19TVU5SUENfR1NTKSArPSBhdXRoX2dzcy9cXG4gICA5OlxcdG9iai0kKENPTkZJR19TVU5SUENfWFBSVF9SRE1BKSArPSB4cHJ0cmRtYS9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3VucnBjLXkgOj0gY2xudC5vIHhwcnQubyBzb2NrbGliLm8geHBydHNvY2subyBzY2hlZC5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgICBhdXRoLm8gYXV0aF9udWxsLm8gYXV0aF90bHMubyBhdXRoX3VuaXgubyBcXFxcXFxuICAxMzpcXHRcXHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxcXFxuICAxNDpcXHRcXHQgICAgYWRkci5vIHJwY2JfY2xudC5vIHRpbWVyLm8geGRyLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICAgIHN1bnJwY19zeW1zLm8gY2FjaGUubyBycGNfcGlwZS5vIHN5c2ZzLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICAgIHN2Y194cHJ0Lm8gXFxcXFxcbiAgMTc6XFx0XFx0ICAgIHhwcnRtdWx0aXBhdGgubyBuZXRsaW5rLm9cXG4gIDE4OlxcdHN1bnJwYy0kKENPTkZJR19TVU5SUENfREVCVUcpICs9IGRlYnVnZnMub1xcbiAgMTk6XFx0c3VucnBjLSQoQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTCkgKz0gYmFja2NoYW5uZWxfcnFzdC5vXFxuICAyMDpcXHRzdW5ycGMtJChDT05GSUdfUFJPQ19GUykgKz0gc3RhdHMub1xcbiAgMjE6XFx0c3VucnBjLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MTIuMDY5MjY3MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI1NDg5NTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJQQyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfU1VOUlBDYCBhbmQgYENPTkZJR19ORlNEYC4gVGhpcyB1c3VhbGx5IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9zdW5ycGMvS2NvbmZpZ2AuIFRoaXMgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdmFyaW91cyBTdW5SUEMgY29tcG9uZW50cyBhbmQsIHNpbmNlIGBORlNEYCBpcyBOZXR3b3JrIEZpbGUgU3lzdGVtLCBpdCdzIHZlcnkgbGlrZWx5IGBDT05GSUdfTkZTRGAgd2lsbCBiZSBzb21ld2hlcmUgaW4gdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGV4cGxpY2l0bHkgaW4gdGhlIEtjb25maWcgZmlsZSB1c2luZyBsYW5ndWFnZSBsaWtlIGBkZXBlbmRzIG9uYCBvciBgc2VsZWN0YC4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjE2LjMyNDE2NjU3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMzgxNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVU5SUENcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoxNi42MDU1NTMzODZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3MDU0NTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgS2NvbmZpZyBmaWxlczpcblxuKipEaXZpbmcgaW50byBSUEMgYW5kIE5GUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGVhZCBiYWNrIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBnYW1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFJQQyBhbmQgTkZTIHNlcnZlciBzZXR1cCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9zdW5ycGMvS2NvbmZpZ2AgYW5kIGBmcy9uZnNkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBSUEMgYW5kIE5GUyBzZXJ2ZXIgb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUga2V5IGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWVzIEknbSBjdXJyZW50bHkgd3Jlc3RsaW5nIHdpdGguIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgY2xlYXIgaGllcmFyY2h5IG9mIG9wdGlvbnMsIHdpdGggY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludHMgb24gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIG9yIGxlZ2FjeSBmZWF0dXJlIHN1cHBvcnQgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBIb3BlZnVsbHksIHRoZSBmaWxlIG9yZ2FuaXphdGlvbiBhbmQgY29tbWVudHMgd2lsbCBiZSBjbGVhciBhbmQgbG9naWNhbCwgZW5hYmxpbmcgbWUgdG8gZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb24gZmxvdyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MTguODc2MTAxOTU5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNVTlJQQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBTVU5SUENfR1NTXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFx0c2VsZWN0IE9JRF9SRUdJU1RSWVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBTVU5SUENcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFNVTlJQQ19TV0FQXFxuICAxNjpcXHRcXHRib29sXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQ1xcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUlBDU0VDX0dTU19LUkI1XFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc21cXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBDUllQVE9cXG4gIDIyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjM6XFx0XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG4gIDI0OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBDaG9vc2UgWSBoZXJlIHRvIGVuYWJsZSBTZWN1cmUgUlBDIHVzaW5nIHRoZSBLZXJiZXJvcyB2ZXJzaW9uIDVcXG4gIDI3OlxcdFxcdCAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAxOTY0KS5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBTZWN1cmUgUlBDIGNhbGxzIHdpdGggS2VyYmVyb3MgcmVxdWlyZSBhbiBhdXhpbGlhcnkgdXNlci1zcGFjZVxcbiAgMzA6XFx0XFx0ICBkYWVtb24gd2hpY2ggbWF5IGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHMgcGFja2FnZVxcbiAgMzE6XFx0XFx0ICBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBJbiBhZGRpdGlvbiwgdXNlci1zcGFjZVxcbiAgMzI6XFx0XFx0ICBLZXJiZXJvcyBzdXBwb3J0IHNob3VsZCBiZSBpbnN0YWxsZWQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIFNVTlJQQ19ERUJVR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBTWVNDVExcXG4gIDM5OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoxOC44NzYxNzQ4MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQxODkxODEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGZzL25mc2QvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIGBmcy9uZnNkL0tjb25maWdgIEZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBmcy9uZnNkL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBwcm92aWRlIHRoZSBjb3JlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhlIE5GUyBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqVG9wLWxldmVsIGVuYWJsZS9kaXNhYmxlIHN3aXRjaGVzOioqIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIG1haW4gY29uZmlndXJhdGlvbiBzeW1ib2xzIHRoYXQgY29udHJvbCB3aGV0aGVyIE5GUyBzZXJ2ZXIgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYXQgYWxsLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludC5cbiogICAqKlByb3RvY29sIHZlcnNpb24gb3B0aW9uczoqKiBJIGZ1bGx5IGV4cGVjdCB0aGlzIEtjb25maWcgdG8gaW5jbHVkZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgZGlmZmVyZW50IE5GUyBwcm90b2NvbCB2ZXJzaW9ucyAoTkZTdjMsIE5GU3Y0LCBhbmQgcG9zc2libHkgTkZTdjIgaWYgaXQncyBzdGlsbCBzdXBwb3J0ZWQpIGFuZCBhbnkgcmVsYXRlZCBmZWF0dXJlcyBmb3IgZWFjaCB2ZXJzaW9uLlxuKiAgICoqU2VjdXJpdHktcmVsYXRlZCBjaG9pY2VzOioqIFdlIG11c3Qgc2VlIGNob2ljZXMgcmVsYXRlZCB0byBzZWN1cml0eSBtZWNoYW5pc21zIGxpa2UgS2VyYmVyb3MgYXV0aGVudGljYXRpb24sIGRpZmZlcmVudCBSUENTRUNfR1NTIGltcGxlbWVudGF0aW9ucywgYW5kIHBlcmhhcHMgZXZlbiBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBzcGVjaWZpYyBzZWN1cml0eSBmbGF2b3JzIG9yIGFjY2VzcyBjb250cm9sIGxpc3RzLlxuKiAgICoqUGVyZm9ybWFuY2UgdHVuaW5nIGtub2JzOioqIEknbSBhbHNvIGxvb2tpbmcgZm9yIG9wdGlvbnMgdGhhdCBtaWdodCBhbGxvdyBtZSB0byB0dW5lIHRoZSBORlMgc2VydmVyJ3MgcGVyZm9ybWFuY2Ug4oCTIHBlcmhhcHMgcmVsYXRlZCB0byBjYWNoaW5nLCB0aHJlYWQgcG9vbGluZywgb3Igb3RoZXIgc2VydmVyLXNpZGUgb3B0aW1pemF0aW9ucy5cbiogICAqKkZpbGUgbG9ja2luZzoqKiBIb3cgYXJlIHdlIGhhbmRsaW5nIGZpbGUgbG9ja2luZz8gVGhlcmUgbXVzdCBiZSBLY29uZmlnIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIGxvY2tpbmcgcHJvdG9jb2xzIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMuXG4qICAgKipEb2N1bWVudGF0aW9uIGFuZCBEZXBlbmRlbmNpZXM6KiogSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgaGVscCB0ZXh0IGZvciBlYWNoIG9wdGlvbi4gSXQgc2hvdWxkIHByb3ZpZGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCBkZXBlbmRlbmNpZXMuIEkgbWF5IG5lZWQgdG8gbmF2aWdhdGUgdG8gb3RoZXIgS2NvbmZpZyBmaWxlcyBvciBjb2RlIHNlY3Rpb25zIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gc2VlIHdoYXQgdGhlICpkZXBlbmRlbmNpZXMqIGFyZSwgYW5kIHdoZXJlIGl0IG1heSBuZWVkIHRvIGltcG9ydCBvdGhlciBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgaXQncyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC5cblxuRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoaXMgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUsIG9wdGlvbnMsIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlIE5GUyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgdG8gY29ycmVjdGx5IGJ1aWxkIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjIyLjI5NTA5NjUwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORlNEXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBGU05PVElGWVxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9NRDUgaWYgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTYgaWYgTkZTRF9WNFxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUTyAjIHJlcXVpcmVkIGJ5IFJQQ1NFQ19HU1NfS1JCNSBhbmQgc2lnbmVkIGZpbGVoYW5kbGVzXFxuICAxMTpcXHRcXHRzZWxlY3QgTE9DS0RcXG4gIDEyOlxcdFxcdHNlbGVjdCBTVU5SUENcXG4gIDEzOlxcdFxcdHNlbGVjdCBFWFBPUlRGU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IE5GU19DT01NT05cXG4gIDE1OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WMl9BQ0xcXG4gIDE2OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIENob29zZSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYWxsb3cgb3RoZXIgY29tcHV0ZXJzIHRvIGFjY2Vzc1xcbiAgMjA6XFx0XFx0ICBmaWxlcyByZXNpZGluZyBvbiB0aGlzIHN5c3RlbSB1c2luZyBTdW4ncyBOZXR3b3JrIEZpbGUgU3lzdGVtXFxuICAyMTpcXHRcXHQgIHByb3RvY29sLiAgVG8gY29tcGlsZSB0aGUgTkZTIHNlcnZlciBzdXBwb3J0IGFzIGEgbW9kdWxlLFxcbiAgMjI6XFx0XFx0ICBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5mc2QuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgWW91IG1heSBjaG9vc2UgdG8gdXNlIGEgdXNlci1zcGFjZSBORlMgc2VydmVyIGluc3RlYWQsIGluIHdoaWNoXFxuICAyNTpcXHRcXHQgIGNhc2UgeW91IGNhbiBjaG9vc2UgTiBoZXJlLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRvIGV4cG9ydCBsb2NhbCBmaWxlIHN5c3RlbXMgdXNpbmcgTkZTLCB5b3UgYWxzbyBuZWVkIHRvIGluc3RhbGxcXG4gIDI4OlxcdFxcdCAgdXNlciBzcGFjZSBwcm9ncmFtcyB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlsc1xcbiAgMjk6XFx0XFx0ICBwYWNrYWdlLCBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBNb3JlIGRldGFpbCBhYm91dFxcbiAgMzA6XFx0XFx0ICB0aGUgTGludXggTkZTIHNlcnZlciBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdmlhIHRoZVxcbiAgMzE6XFx0XFx0ICBleHBvcnRzKDUpIG1hbiBwYWdlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEJlbG93IHlvdSBjYW4gY2hvb3NlIHdoaWNoIHZlcnNpb25zIG9mIHRoZSBORlMgcHJvdG9jb2wgYXJlXFxuICAzNDpcXHRcXHQgIGF2YWlsYWJsZSB0byBjbGllbnRzIG1vdW50aW5nIHRoZSBORlMgc2VydmVyIG9uIHRoaXMgc3lzdGVtLlxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXFxuICAzNjpcXHRcXHQgIENPTkZJR19ORlNEIGlzIHNlbGVjdGVkLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBORlNEX1YyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjIyLjI5NTE4MjI4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDc3MDYxMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN2Y19hZGRzb2NrYCBGdW5jdGlvbiBhbmQgUmVsYXRlZCBLZXJuZWwgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3ZjX2FkZHNvY2tgIGZ1bmN0aW9uIGFuZCBmaWd1cmUgb3V0IGl0cyBpbXBsaWNhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBjYWxsaW5nIGl0IG9yIHVzaW5nIHRoZSBgc3Zjc29ja2AgbWVjaGFuaXNtIHdpdGhpbiB0aGUgU1VOUlBDIGNvbnRleHQuIEknbGwgcnVuIGFub3RoZXIgYGdyZXBgIHNlYXJjaC4gSXQgbG9va3MgbGlrZSBgc3ZjX2FkZHNvY2tgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGZzL25mc2QvbmZzY3RsLmNgLiBOb3csIGxldCdzIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnM6IGBzdmNfc2V0dXBfc29ja2V0YCwgYHN2Y19hZGRzb2NrYCwgYHN2Y19jcmVhdGVfc29ja2V0YCwgZXRjLiwgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cuXG5cbldoYXQgZXhhY3RseSBkb2VzIGBzdmNfYWRkc29ja2AgKmRvKj8gQWgsIGl0J3MgYW4gZXhwb3J0ZWQgc3ltYm9sIChgRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spYCksIG1lYW5pbmcgaXQncyBhIG5vbi1pbmxpbmVkLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludC4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjazpcbmBgYGNcbmVyciA9IC1FQlVTWTtcblx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcblx0XHRnb3RvIG91dDtcbmBgYFxuVGhpcyBpcyBrZXkuIEl0J3MgcHJldmVudGluZyBhIHNvY2tldCB0aGF0IGFscmVhZHkgaGFzIGBza191c2VyX2RhdGFgIOKAkyB3aGljaCBjb3VsZCBiZSBhbm90aGVyIGtlcm5lbCBjb25zdW1lciwgYW4gZXhpc3RpbmcgYHN2Y19zb2NrYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGZyb20gYmVpbmcgYXR0YWNoZWQgdG8gYW4gUlBDIHNlcnZpY2UuIFRoYXQncyBhIGdvb2QgdGhpbmcsIGJlY2F1c2UgaXQgcHJldmVudHMgc29ja2V0IHN0ZWFsaW5nIGFuZCBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLlxuXG5UaGlzIGxvZ2ljIGlzIHNtYWNrLWRhYiBpbiB0aGUgY29yZSBrZXJuZWwsIHRvdWNoaW5nIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zIChzcGVjaWZpY2FsbHkgU1VOUlBDIGFuZCBORlNEKS4gVGVzdGluZyBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdXNpbmcgYSBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSSBjYW4gbWFuaXB1bGF0ZSBpdCB1c2luZyB1c2Vyc3BhY2UgYnkgd3JpdGluZyBhbiBGRCB0byBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAsIG9yIHVzaW5nIGBuZnNkY3RsYCBvciBzeXNmcy5cblxuVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsOyBpdCBwcmV2ZW50cyBzb2NrZXQgY29ycnVwdGlvbiBpbiB0aGVzZSBzcGVjaWZpYyBjYXNlcy5cblxuTm93LCBsZXQncyB2ZXJpZnkgd2hhdCB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhcmUuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBzdmNfYWRkc29ja2AuIEFyZSB0aGVyZSBvdGhlciBjbG9zZWx5IHJlbGF0ZWQgc3ltYm9scyBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgPyBgc3ZjX3NldHVwX3NvY2tldGAgaXMgc3RhdGljLCB3aGljaCBpcyByZWxhdGVkIGJ1dCBub3QgdGhlIHByaW1hcnkgZm9jdXMsIHdoaWxlIGBzdmNfYWRkc29ja2AgaXMgbm9uLXN0YXRpYy4gVGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBORlNEYCBzZWxlY3RzIGBTVU5SUENgLCBgTE9DS0RgLCBldGMuIGBTVU5SUENgIGlzIHRyaXN0YXRlIGFuZCBzZWxlY3RlZCBieSBgTkZTRGAsIGBORlNfRlNgLCBldGMuIFNvLCBgU1VOUlBDYCBhbmQgYE5GU0RgIHNlZW0gbGlrZSB0aGUgcmVsZXZhbnQgY29uZmlncy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCdzIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3Mgb3Igc3ltYm9scyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LlxuXG5GaW5hbGx5LCBsZXQncyB2ZXJpZnkgdGhlIGBzdmNfYWRkc29ja2Agc3ltYm9sIGRlZmluaXRpb24gb25lIGxhc3QgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZDpcbmBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCwgY2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKWBcbkxpbmUgMTUxOSBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBPa2F5LCBhbGwgbG9va3MgZ29vZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDEwLCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjI3Ljc3MjI0NjM3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjU2MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfYWRkc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN2Y19hZGRzb2NrYCBpbiB0aGUgU1VOUlBDIHNlcnZlciBzb2NrZXQgc3Vic3lzdGVtIHRvIGNoZWNrIHdoZXRoZXIgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzb2NrZXQsIHJldHVybmluZyAtRUJVU1kgaWYgc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSAoZS5nLiB2aWEgTkZTRCBwb3J0IGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjI3Ljg0NzkxMDQxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4Njk2MTI2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoyNy44NDg0MjM3MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDg2OTA5NDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcmVsYXRlZCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHR5cGUgY29uZnVzaW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzliZjM1ZDE1NWQxZTQyMTJjMjllODBkNGFjM2Y0N2Q0NWVmNWExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozOTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4rXHRlcnIgPSAtRUJVU1k7XG4rXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuK1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoyNy44NDg0MjQ2NjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODAzOTY1NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN1blJQQyBTb2NrZXQgQWRkaXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2Ugd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcmVmaW5lIHNvY2tldCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgU3VuUlBDIHNlcnZpY2UgbGF5ZXIuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgaWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCBUaGlzIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQncyBhbiBpbnRlcmVzdGluZyBhZGRpdGlvbiBiZWNhdXNlIGl0IGFwcGVhcnMgdG8gYmUgcHJldmVudGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgaWYgdGhlIHNvY2tldCdzIGBza191c2VyX2RhdGFgIGZpZWxkIGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJlc291cmNlIGNvbnRlbnRpb24gaXNzdWUgb3IgYSBzdWJ0bGUgc3RhdGUgbWFuYWdlbWVudCBwcm9ibGVtLiBXZSdyZSByZWplY3RpbmcgdGhlIGFkZCB3aXRoIGAtRUJVU1lgLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHNrX3VzZXJfZGF0YWAgaXMgdXNlZCBmb3IgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCB0cmFja2luZyBjb25uZWN0aW9uIHN0YXRlLCBzZXJ2ZXItc3BlY2lmaWMgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgaGFwcGVucyBpZiB0aGlzIGNvbmRpdGlvbiAqaXMqIG1ldD8gRG9lcyB0aGlzIHByZXZlbnQgYSBjbGllbnQgZnJvbSBjb25uZWN0aW5nIG9yIHRoZSBzZXJ2ZXIgZnJvbSBhY2NlcHRpbmcgYSBjb25uZWN0aW9uP1xuXG5JJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgYXJvdW5kIGxpbmUgMTU0MS4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc29gLCBgc2tgLCBgU1NfVU5DT05ORUNURURgLCBhbmQgYHN2Y19hZGRzb2NrYCBhcmUgd2l0aGluIHRoZSBncmVhdGVyIGBuZXQvc3VucnBjYCBzdHJ1Y3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgcmF0aW9uYWxlIGJlaGluZCBhZGRpbmcgdGhpcyBidXN5LWNoZWNrLiBUaGlzIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY29uZGl0aW9uIGFuZCBpdHMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MzUuODg4MDgxNzIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4xNTIxOlxcdHtcXG4xNTIyOlxcdFxcdGludCBlcnIgPSAwO1xcbjE1MjM6XFx0XFx0c3RydWN0IHNvY2tldCAqc28gPSBzb2NrZmRfbG9va3VwKGZkLCBcXHUwMDI2ZXJyKTtcXG4xNTI0OlxcdFxcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XFxuMTUyNTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xcbjE1MjY6XFx0XFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHI7XFxuMTUyNzpcXHRcXHRpbnQgc2FsZW47XFxuMTUyODpcXHRcXG4xNTI5OlxcdFxcdGlmICghc28pXFxuMTUzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MzE6XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNTMyOlxcdFxcdGlmIChzb2NrX25ldChzby1cXHUwMDNlc2spICE9IG5ldClcXG4xNTMzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1MzQ6XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNTM1OlxcdFxcdGlmICgoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcXG4xNTM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1Mzc6XFx0XFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMTUzODpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbjE1Mzk6XFx0XFx0ICAgIHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuMTU0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQxOlxcdFxcdGVyciA9IC1FSVNDT05OO1xcbjE1NDI6XFx0XFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbjE1NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU0NDpcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTU0NTpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuMTU0NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ3OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTU0ODpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4xNTQ5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTA6XFx0XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcXG4xNTUxOlxcdFxcdGlmIChJU19FUlIoc3ZzaykpIHtcXG4xNTUyOlxcdFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjE1NTM6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cXHUwMDNlc2tfc29jaywgc2luKTtcXG4xNTU3OlxcdFxcdGlmIChzYWxlbiBcXHUwMDNlPSAwKVxcbjE1NTg6XFx0XFx0XFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcXG4xNTU5OlxcdFxcdHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcXG4xNTYwOlxcdFxcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCk7XFxuMTU2MTpcXHRcXHRyZXR1cm4gc3ZjX29uZV9zb2NrX25hbWUoc3ZzaywgbmFtZV9yZXR1cm4sIGxlbik7XFxuMTU2MjpcXHRvdXQ6XFxuMTU2MzpcXHRcXHRzb2NrZmRfcHV0KHNvKTtcXG4xNTY0OlxcdFxcdHJldHVybiBlcnI7XFxuMTU2NTpcXHR9XFxuMTU2NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdC8qXFxuMTU2OTpcXHQgKiBDcmVhdGUgc29ja2V0IGZvciBSUEMgc2VydmljZS5cXG4xNTcwOlxcdCAqL1xcbjE1NzE6XFx0c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbjE1NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgcHJvdG9jb2wsXFxuMTU3MzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldCxcXG4xNTc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2thZGRyICpzaW4sIGludCBsZW4sXFxuMTU3NTpcXHRcXHRcXHRcXHRcXHRcXHQgIGludCBmbGFncylcXG4xNTc2OlxcdHtcXG4xNTc3OlxcdFxcdHN0cnVjdCBzdmNfc29ja1xcdCpzdnNrO1xcbjE1Nzg6XFx0XFx0c3RydWN0IHNvY2tldFxcdCpzb2NrO1xcbjE1Nzk6XFx0XFx0aW50XFx0XFx0ZXJyb3I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjM1Ljg4ODIyMjU1MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODI5MjczODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpbiBgc3ZjX2FkZHNvY2soKWAgaXMgZG9pbmcuIEl0J3MgdGFraW5nIGEgdXNlci1wcm92aWRlZCBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIChgZmRgKSBhbmQgdHJ5aW5nIHRvIHJlZ2lzdGVyIGl0IGFzIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgYHN2Y19zZXR1cF9zb2NrZXQoKWAsIHdoaWNoIGhhbmRsZXMgdGhlIGF0dGFjaG1lbnQgb2YgdGhpcyBzb2NrZXQgYW5kIHRoZSBjcml0aWNhbCBgc3Zza2AgZGF0YSwgcG90ZW50aWFsbHkgb3ZlcndyaXRpbmcgKG9yIGF0IGxlYXN0ICp1c2luZyopIGBza191c2VyX2RhdGFgIGluIHRoZSB1bmRlcmx5aW5nIGBzdHJ1Y3Qgc29ja2AuXG5cblRoZSBwYXRjaCdzIGdvdCBhIGNoZWNrIHRoZXJlLCBgaWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSkgZ290byBvdXQ7YC4gR29vZCwgYmVjYXVzZSBpZiBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHBvcHVsYXRlZCwgdHJ5aW5nIHRvIGF0dGFjaCB0aGlzIHNvY2tldCBhZ2Fpbiwgb3Igd29yc2UsIG92ZXJ3cml0aW5nIGBza191c2VyX2RhdGFgIGNvdWxkIGxlYWQgdG8gc2VyaW91cyBwcm9ibGVtczogbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGV2ZW4gY3Jhc2hlcywgZXNwZWNpYWxseSBsYXRlciB3aGVuIHRob3NlIGNhbGxiYWNrcyB0aWVkIHRvIGBza191c2VyX2RhdGFgIGFyZSBpbnZva2VkLiBTbywgdGhpcyBjaGVjayAqcHJldmVudHMqIHJldXNpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCBzb2NrZXQuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEkgbmVlZCB0byBhbmFseXplIGl0IHN5c3RlbWF0aWNhbGx5LlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyoqIE5vLCBub3RoaW5nIGhlcmUgaXMgc2VuZGluZyBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlIHRoYXQncyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gVGhlIGNoZWNrIHVzZXMgYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAsIHdoaWNoIGlzIGEgcG9pbnRlciB3aXRoaW4gYHN0cnVjdCBzb2NrYC4gVGhlIGBzdHJ1Y3Qgc29ja2AgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGtlcm5lbCBkdXJpbmcgc29ja2V0IGNyZWF0aW9uIChvciBsYXRlciB3aGVuIHVzZXIgZGF0YSBpcyBjb25maWd1cmVkKS5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbj8qKiBOb3QgaGVyZS4gVGhpcyBpc24ndCBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtYWtpbmcgbGFyZ2UgY2hhbmdlcyBpbiBob3cgZGF0YSBpcyBpbml0aWFsaXplZC5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8uIFRoaXMgcGF0Y2ggc2ltcGx5IGFkZHMgYSBjaGVjayB0byBhdm9pZCBhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCBzb2NrZXQuXG5cblNvLCBmcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyBtZXJlbHkgYWRkaW5nIGEgc2FmZXR5IGNoZWNrIHRvIHByZXZlbnQgcmUtYXR0YWNoaW5nIGEgc29ja2V0LCBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGEgc2FuaXR5IGNoZWNrIGFnYWluc3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3RhdGUgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1hc3NvY2lhdGlvbiBidWdzLiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYWxyZWFkeSBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcyAobGlrZSB0aGUgVUFGIGlzc3VlcykuIE5vIEtNU0FOIGZ1enppbmcgbmVlZGVkLCBpdCBzZWVtcy5cblxuKipNeSBGaW5hbCBSZWFzb25pbmc6KiogVGhpcyBwYXRjaCAqYWRkcyogYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzdmNfYWRkc29jaygpYC4gSXQgdmVyaWZpZXMgdGhhdCB0aGUgcHJvdmlkZWQgc29ja2V0IGRvZXNuJ3QgaGF2ZSBgc2tfdXNlcl9kYXRhYCBhbHJlYWR5IGFzc2lnbmVkICpiZWZvcmUqIHNldHRpbmcgaXQgdXAgYXMgYW4gUlBDIHNlcnZpY2Ugc29ja2V0LiBUaGlzIGNoZWNrIHByZXZlbnRzIGJ1Z3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHN0YXRlIGNvcnJ1cHRpb24sIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIGhhbmRsZSB0aGVzZSBzYWZldHkgY29uY2VybnMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDo0Mi43MTc1MDAyNDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIChgaWYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJdCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHJlbGF0ZWQgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciB0eXBlIGNvbmZ1c2lvbikgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcmVsYXRlZCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHR5cGUgY29uZnVzaW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 22:37:47 +0000 UTC FinishedAt: 2026-09-02 22:40:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "bc322e11-cda7-4f01-952d-42ee99e29cc5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_addsock" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayAoYGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJdCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHJlbGF0ZWQgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciB0eXBlIGNvbmZ1c2lvbikgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2M5YmYzNWQxNTVkMWU0MjEyYzI5ZTgwZDRhYzNmNDdkNDVlZjVhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjI6Mzk6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTE1NDEsNiAmIzQzOzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZXJyID0gLUVCVVNZO1xuJiM0MztcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfYWRkc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3ZjX2FkZHNvY2tgIGluIHRoZSBTVU5SUEMgc2VydmVyIHNvY2tldCBzdWJzeXN0ZW0gdG8gY2hlY2sgd2hldGhlciBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHNvY2tldCwgcmV0dXJuaW5nIC1FQlVTWSBpZiBzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIChlLmcuIHZpYSBORlNEIHBvcnQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzKSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjOWJmMzVkMTU1ZDFlNDIxMmMyOWU4MGQ0YWMzZjQ3ZDQ1ZWY1YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIyOjM5OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MGU1ZTdmNWI3NjJkLi5lOGNjNDMyOWYxMjgyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTU0MSw2ICYjNDM7MTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLAogCWVyciA9IC1FSVNDT05OOwogCWlmIChzby0mZ3Q7c3RhdGUgJmd0OyBTU19VTkNPTk5FQ1RFRCkKIAkJZ290byBvdXQ7CiYjNDM7CWVyciA9IC1FQlVTWTsKJiM0MzsJaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKQomIzQzOwkJZ290byBvdXQ7CiAJZXJyID0gLUVOT0VOVDsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCB0byBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb21taXQgYW5kIHRoZSBjaGFuZ2VzIGl0IGludHJvZHVjZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE1NDEuIFRoaXMgaXMgd2hlcmUgYHN2Y19hZGRzb2NrYCBsaXZlcywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjayBiZWluZyBhZGRlZCBoZXJlLiBTcGVjaWZpY2FsbHksIGEgYHNrX3VzZXJfZGF0YWAgY2hlY2sgb24gdGhlIHNvY2tldCYjMzk7cyBgc2tgIHN0cnVjdHVyZSBpcyBiZWluZyBpbnRyb2R1Y2VkIGJlZm9yZSB0aGUgYHRyeV9tb2R1bGVfZ2V0YCBjYWxsLiBUaGUgcGF0Y2gmIzM5O3MgbmV3IGNoZWNrLCBgaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgIGluZGljYXRlcyBhIHBvdGVudGlhbCBidXN5IHNvY2tldCBiZWluZyByZWplY3RlZC4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBtb3JlIGJyb2FkbHkgYW5kIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGxpbmUgMTU0MS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGBzdmNfYWRkc29ja2A/IFdoYXQgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYHNvLSZndDtzdGF0ZWA/IE1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVzZSBgZmluZC1yZWZlcmVuY2VzYCB0byBiZSBjZXJ0YWluLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIHBhdGggaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGZlYXR1cmUgZmxhZyBvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gVGhpcyB3aWxsIGluZm9ybSBtZSBhYm91dCB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgYWRkZWQgY2hlY2sgaXMgcmVsZXZhbnQgYW5kLCB0aGVyZWZvcmUsIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgY2hhbmdlIGlzIHJlbGV2YW50LiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlamVjdGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2VzIG5vdCBoYXZlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBzdWNoIGFzIGEgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbjE1MjE6XHR7XG4xNTIyOlx0XHRpbnQgZXJyID0gMDtcbjE1MjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbjE1MjQ6XHRcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XG4xNTI1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuMTUyNjpcdFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcjtcbjE1Mjc6XHRcdGludCBzYWxlbjtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmICghc28pXG4xNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbjE1NjA6XHRcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuMTU2MTpcdFx0cmV0dXJuIHN2Y19vbmVfc29ja19uYW1lKHN2c2ssIG5hbWVfcmV0dXJuLCBsZW4pO1xuMTU2MjpcdG91dDpcbjE1NjM6XHRcdHNvY2tmZF9wdXQoc28pO1xuMTU2NDpcdFx0cmV0dXJuIGVycjtcbjE1NjU6XHR9XG4xNTY2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xuMTU2NzpcdFxuMTU2ODpcdC8qXG4xNTY5Olx0ICogQ3JlYXRlIHNvY2tldCBmb3IgUlBDIHNlcnZpY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgc3ZjX2FkZHNvY2tgIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYHN2Y19hZGRzb2NrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQg4oCTIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQsIGFuZCB3aXRoIHdoYXQgcGFyYW1ldGVycy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBydW5uaW5nIGEgcXVpY2sgc2VhcmNoLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2UgYW5kIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2UgY2FyZWZ1bGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucywgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgZWFjaCBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBpcyBjcml0aWNhbCBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMsIG9yIGJ1ZyBmaXhlcyB0byB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBjaGFuZ2VzIGhhdmUgbm8gc2lkZS1lZmZlY3RzIG9yIGJyZWFrIG90aGVyIHBhcnRzIG9mIHRoZSBhcHBsaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfYWRkc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL25mc2N0bC5jPTczMj1zdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5mcy9uZnNkL25mc2N0bC5jLTc0OC1cdHNlcnYgPSBubi1cdTAwM2VuZnNkX3NlcnY7XG5mcy9uZnNkL25mc2N0bC5jOjc0OTpcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcbmZzL25mc2QvbmZzY3RsLmMtNzUwLVxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD02NT12b2lkXHRcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY2OmludFx0XHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02Ny1cdFx0XHQgICAgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbixcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDYtLyoqXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA4LSAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTE5OmludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUyMC1cdFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU2NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5GU2QgQ29udHJvbCBJbnRlcmZhY2UqKgoKT2theSwgc28gYHN2Y19hZGRzb2NrYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSBmaWRkbGluZyB3aXRoIHRoZSBORlNkIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgKG9yIG90aGVyIHJlbGF0ZWQgYG5mc2RjdGxgIGVudHJpZXMpLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgdGhhdCBpbiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBzZWUgaG93IGBmcy9uZnNkL25mc2N0bC5jYCBhY3R1YWxseSAqZXhwb3NlcyogdGhpcyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRyb2wgcGF0aCB0aGUgc3lzdGVtIHRha2VzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoYXQgZmlsZSBhZ2FpbiBhbmQgc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZyb20gdG9wIHRvIGJvdHRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25mc2QvbmZzY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdCAqIG5mc2QgbGlzdGVuZXIuXG4gNzMxOlx0ICovXG4gNzMyOlx0c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4gNzMzOlx0e1xuIDczNDpcdFx0Y2hhciAqbWVzZyA9IGJ1ZjtcbiA3MzU6XHRcdGludCBmZCwgZXJyO1xuIDczNjpcdFx0c3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpO1xuIDczNzpcdFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2O1xuIDczODpcdFxuIDczOTpcdFx0ZXJyID0gZ2V0X2ludChcdTAwMjZtZXNnLCBcdTAwMjZmZCk7XG4gNzQwOlx0XHRpZiAoZXJyICE9IDAgfHwgZmQgXHUwMDNjIDApXG4gNzQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0MjpcdFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkZmQobmV0LCBmZCk7XG4gNzQzOlx0XG4gNzQ0Olx0XHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XG4gNzQ1Olx0XHRpZiAoZXJyICE9IDApXG4gNzQ2Olx0XHRcdHJldHVybiBlcnI7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRzZXJ2ID0gbm4tXHUwMDNlbmZzZF9zZXJ2O1xuIDc0OTpcdFx0ZXJyID0gc3ZjX2FkZHNvY2soc2VydiwgbmV0LCBmZCwgYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsIGNyZWQpO1xuIDc1MDpcdFxuIDc1MTpcdFx0aWYgKCFzZXJ2LVx1MDAzZXN2X25ydGhyZWFkcyBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZubi1cdTAwM2VuZnNkX3NlcnYtXHUwMDNlc3ZfcGVybXNvY2tzKSlcbiA3NTI6XHRcdFx0bmZzZF9kZXN0cm95X3NlcnYobmV0KTtcbiA3NTM6XHRcbiA3NTQ6XHRcdHJldHVybiBlcnI7XG4gNzU1Olx0fVxuIDc1NjpcdFxuIDc1NzpcdC8qXG4gNzU4Olx0ICogQSB0cmFuc3BvcnQgbGlzdGVuZXIgaXMgYWRkZWQgYnkgd3JpdGluZyBpdHMgdHJhbnNwb3J0IG5hbWUgYW5kXG4gNzU5Olx0ICogYSBwb3J0IG51bWJlci5cbiA3NjA6XHQgKi9cbiA3NjE6XHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuIDc2MjpcdHtcbiA3NjM6XHRcdGNoYXIgdHJhbnNwb3J0WzE2XTtcbiA3NjQ6XHRcdHN0cnVjdCBzdmNfeHBydCAqeHBydDtcbiA3NjU6XHRcdGludCBwb3J0LCBlcnI7XG4gNzY2Olx0XHRzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMobmV0LCBuZnNkX25ldF9pZCk7XG4gNzY3Olx0XHRzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnY7XG4gNzY4Olx0XG4gNzY5Olx0XHRpZiAoc3NjYW5mKGJ1ZiwgXCYjMzQ7JTE1cyAlNXVcJiMzNDssIHRyYW5zcG9ydCwgXHUwMDI2cG9ydCkgIT0gMilcbiA3NzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzcxOlx0XG4gNzcyOlx0XHRpZiAocG9ydCBcdTAwM2MgMSB8fCBwb3J0IFx1MDAzZSBVU0hSVF9NQVgpXG4gNzczOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc3NDpcdFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkeHBydChuZXQsIHRyYW5zcG9ydCwgcG9ydCk7XG4gNzc1Olx0XG4gNzc2Olx0XHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XG4gNzc3Olx0XHRpZiAoZXJyICE9IDApXG4gNzc4Olx0XHRcdHJldHVybiBlcnI7XG4gNzc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggZmlndXJpbmcgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGZvciBTVU5SUEMgYW5kIE5GU0Q6CgoqKkRldGVybWluaW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBTVU5SUEMgYW5kIE5GU0QqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBmb3IgU1VOUlBDIGFuZCBORlNELiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNyYWNrIG9wZW4gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIGBuZXQvc3VucnBjL0tjb25maWdgIGFuZCBgZnMvbmZzZC9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCwgYXMgdGhleSBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRob3NlIHN1YnN5c3RlbXMuIEhvcGVmdWxseSwgdGhvc2UgZmlsZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgdGllcyB2YXJpb3VzIG9wdGlvbnMgdG9nZXRoZXIuIFRoaXMgaW5pdGlhbCBleHBsb3JhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgc2hvdyBtZSB0aGUgJiMzNDtidWlsZGluZyBibG9ja3MmIzM0OyBvZiB3aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoLipcXCkgJiM0Mzs9IHN1bnJwYy5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBSUEMgQ29uZmlndXJhdGlvbiBJc3N1ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gUlBDIGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBSUEMgTWFrZWZpbGUuIEkmIzM5O2xsIGxvb2sgYXQgYG5ldC9zdW5ycGMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgUlBDIHN1YnN5c3RlbS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gc2VlIHdoYXQmIzM5O3MgYmVpbmcgY29tcGlsZWQgYW5kIGhvdyBkaWZmZXJlbnQgbW9kdWxlcyBhcmUgYnJvdWdodCB0b2dldGhlci4KCkJleW9uZCB0aGUgTWFrZWZpbGUsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlICpjb25maWd1cmF0aW9uKiBpcyBoYW5kbGVkLiBJcyBpdCBhIG1vZHVsZSwgb3Igc29tZXRoaW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbD8gV2hlcmUgYXJlIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgZGVmaW5lZD8gU28sIEkmIzM5O2xsIGNoZWNrIGBuZXQvS2NvbmZpZ2AgZmlyc3QuIElmIGl0JiMzOTtzIG5ldHdvcmstcmVsYXRlZCwgdGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgc3BvdCBmb3IgdGhlIHNldHRpbmdzLgoKSWYgdGhlIFJQQyBmdW5jdGlvbmFsaXR5IGlzIG1vcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBmaWxlc3lzdGVtLCB0aGVuIGBmcy9LY29uZmlnYCBtaWdodCBiZSB0aGUgYmV0dGVyIHBsYWNlIHRvIGNoZWNrIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBhIGJpdCBvZiBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24gYW5kIHBhdHRlcm4gbWF0Y2hpbmcsIHNlZWluZyB3aGljaCBvbmUgbWFrZXMgbW9yZSBzZW5zZSwgYW5kIHNlZWluZyB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJlZmVyZW5jZS4gSSYjMzk7bSByZWFkeSB0byBmaW5kIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBzZWUgd2hhdCB0aGUgbG9naWMgaXMgYmVoaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFNVTiBSUENcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0XG4gICA3Olx0b2JqLSQoQ09ORklHX1NVTlJQQykgJiM0Mzs9IHN1bnJwYy5vXG4gICA4Olx0b2JqLSQoQ09ORklHX1NVTlJQQ19HU1MpICYjNDM7PSBhdXRoX2dzcy9cbiAgIDk6XHRvYmotJChDT05GSUdfU1VOUlBDX1hQUlRfUkRNQSkgJiM0Mzs9IHhwcnRyZG1hL1xuICAxMDpcdFxuICAxMTpcdHN1bnJwYy15IDo9IGNsbnQubyB4cHJ0Lm8gc29ja2xpYi5vIHhwcnRzb2NrLm8gc2NoZWQubyBcXFxuICAxMjpcdFx0ICAgIGF1dGgubyBhdXRoX251bGwubyBhdXRoX3Rscy5vIGF1dGhfdW5peC5vIFxcXG4gIDEzOlx0XHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxuICAxNDpcdFx0ICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFxcXG4gIDE1Olx0XHQgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gc3lzZnMubyBcXFxuICAxNjpcdFx0ICAgIHN2Y194cHJ0Lm8gXFxcbiAgMTc6XHRcdCAgICB4cHJ0bXVsdGlwYXRoLm8gbmV0bGluay5vXG4gIDE4Olx0c3VucnBjLSQoQ09ORklHX1NVTlJQQ19ERUJVRykgJiM0Mzs9IGRlYnVnZnMub1xuICAxOTpcdHN1bnJwYy0kKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpICYjNDM7PSBiYWNrY2hhbm5lbF9ycXN0Lm9cbiAgMjA6XHRzdW5ycGMtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHN0YXRzLm9cbiAgMjE6XHRzdW5ycGMtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBSUEMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19TVU5SUENgIGFuZCBgQ09ORklHX05GU0RgLiBUaGlzIHVzdWFsbHkgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L3N1bnJwYy9LY29uZmlnYC4gVGhpcyBmaWxlIGxpa2VseSBkZWZpbmVzIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpb3VzIFN1blJQQyBjb21wb25lbnRzIGFuZCwgc2luY2UgYE5GU0RgIGlzIE5ldHdvcmsgRmlsZSBTeXN0ZW0sIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGBDT05GSUdfTkZTRGAgd2lsbCBiZSBzb21ld2hlcmUgaW4gdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGV4cGxpY2l0bHkgaW4gdGhlIEtjb25maWcgZmlsZSB1c2luZyBsYW5ndWFnZSBsaWtlIGBkZXBlbmRzIG9uYCBvciBgc2VsZWN0YC4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVU5SUENcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xubmV0L3N1bnJwYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBLY29uZmlnIGZpbGVzOgoKKipEaXZpbmcgaW50byBSUEMgYW5kIE5GUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhlYWQgYmFjayBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZ2FtZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBSUEMgYW5kIE5GUyBzZXJ2ZXIgc2V0dXAsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9zdW5ycGMvS2NvbmZpZ2AgYW5kIGBmcy9uZnNkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBSUEMgYW5kIE5GUyBzZXJ2ZXIgb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlcyBJJiMzOTttIGN1cnJlbnRseSB3cmVzdGxpbmcgd2l0aC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgY2xlYXIgaGllcmFyY2h5IG9mIG9wdGlvbnMsIHdpdGggY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnRzIG9uIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBvciBsZWdhY3kgZmVhdHVyZSBzdXBwb3J0IHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuIEhvcGVmdWxseSwgdGhlIGZpbGUgb3JnYW5pemF0aW9uIGFuZCBjb21tZW50cyB3aWxsIGJlIGNsZWFyIGFuZCBsb2dpY2FsLCBlbmFibGluZyBtZSB0byBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBmbG93IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNVTlJQQ1xuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTVVMVElVU0VSXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFNVTlJQQ19HU1NcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XHRzZWxlY3QgT0lEX1JFR0lTVFJZXG4gICA5Olx0XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcdGRlcGVuZHMgb24gU1VOUlBDXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFNVTlJQQ19TV0FQXG4gIDE2Olx0XHRib29sXG4gIDE3Olx0XHRkZXBlbmRzIG9uIFNVTlJQQ1xuICAxODpcdFxuICAxOTpcdGNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgQ1JZUFRPXG4gIDIyOlx0XHRkZWZhdWx0IHlcbiAgMjM6XHRcdHNlbGVjdCBTVU5SUENfR1NTXG4gIDI0Olx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgQ2hvb3NlIFkgaGVyZSB0byBlbmFibGUgU2VjdXJlIFJQQyB1c2luZyB0aGUgS2VyYmVyb3MgdmVyc2lvbiA1XG4gIDI3Olx0XHQgIEdTUy1BUEkgbWVjaGFuaXNtIChSRkMgMTk2NCkuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIFNlY3VyZSBSUEMgY2FsbHMgd2l0aCBLZXJiZXJvcyByZXF1aXJlIGFuIGF1eGlsaWFyeSB1c2VyLXNwYWNlXG4gIDMwOlx0XHQgIGRhZW1vbiB3aGljaCBtYXkgYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlscyBwYWNrYWdlXG4gIDMxOlx0XHQgIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9saW51eC1uZnMub3JnLy4gIEluIGFkZGl0aW9uLCB1c2VyLXNwYWNlXG4gIDMyOlx0XHQgIEtlcmJlcm9zIHN1cHBvcnQgc2hvdWxkIGJlIGluc3RhbGxlZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgU1VOUlBDX0RFQlVHXG4gIDM3Olx0XHRib29sIFwmIzM0O1JQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgU1lTQ1RMXG4gIDM5Olx0XHRzZWxlY3QgREVCVUdfRlNcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGZzL25mc2QvS2NvbmZpZ2AgZmlsZToKCioqQW5hbHl6aW5nIHRoZSBgZnMvbmZzZC9LY29uZmlnYCBGaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBmcy9uZnNkL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gcHJvdmlkZSB0aGUgY29yZSBvcHRpb25zIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSBORlMgc2VydmVyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqVG9wLWxldmVsIGVuYWJsZS9kaXNhYmxlIHN3aXRjaGVzOioqIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gc3ltYm9scyB0aGF0IGNvbnRyb2wgd2hldGhlciBORlMgc2VydmVyIHN1cHBvcnQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGF0IGFsbC4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LgoqICAgKipQcm90b2NvbCB2ZXJzaW9uIG9wdGlvbnM6KiogSSBmdWxseSBleHBlY3QgdGhpcyBLY29uZmlnIHRvIGluY2x1ZGUgb3B0aW9ucyBmb3Igc2VsZWN0aW5nIGRpZmZlcmVudCBORlMgcHJvdG9jb2wgdmVyc2lvbnMgKE5GU3YzLCBORlN2NCwgYW5kIHBvc3NpYmx5IE5GU3YyIGlmIGl0JiMzOTtzIHN0aWxsIHN1cHBvcnRlZCkgYW5kIGFueSByZWxhdGVkIGZlYXR1cmVzIGZvciBlYWNoIHZlcnNpb24uCiogICAqKlNlY3VyaXR5LXJlbGF0ZWQgY2hvaWNlczoqKiBXZSBtdXN0IHNlZSBjaG9pY2VzIHJlbGF0ZWQgdG8gc2VjdXJpdHkgbWVjaGFuaXNtcyBsaWtlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uLCBkaWZmZXJlbnQgUlBDU0VDX0dTUyBpbXBsZW1lbnRhdGlvbnMsIGFuZCBwZXJoYXBzIGV2ZW4gb3B0aW9ucyB0byBjb250cm9sIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgc2VjdXJpdHkgZmxhdm9ycyBvciBhY2Nlc3MgY29udHJvbCBsaXN0cy4KKiAgICoqUGVyZm9ybWFuY2UgdHVuaW5nIGtub2JzOioqIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBvcHRpb25zIHRoYXQgbWlnaHQgYWxsb3cgbWUgdG8gdHVuZSB0aGUgTkZTIHNlcnZlciYjMzk7cyBwZXJmb3JtYW5jZSDigJMgcGVyaGFwcyByZWxhdGVkIHRvIGNhY2hpbmcsIHRocmVhZCBwb29saW5nLCBvciBvdGhlciBzZXJ2ZXItc2lkZSBvcHRpbWl6YXRpb25zLgoqICAgKipGaWxlIGxvY2tpbmc6KiogSG93IGFyZSB3ZSBoYW5kbGluZyBmaWxlIGxvY2tpbmc/IFRoZXJlIG11c3QgYmUgS2NvbmZpZyBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSBsb2NraW5nIHByb3RvY29scyBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzLgoqICAgKipEb2N1bWVudGF0aW9uIGFuZCBEZXBlbmRlbmNpZXM6KiogSSYjMzk7bGwgYWxzbyBnbGFuY2UgYXQgdGhlIGhlbHAgdGV4dCBmb3IgZWFjaCBvcHRpb24uIEl0IHNob3VsZCBwcm92aWRlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBhbmQgZGVwZW5kZW5jaWVzLiBJIG1heSBuZWVkIHRvIG5hdmlnYXRlIHRvIG90aGVyIEtjb25maWcgZmlsZXMgb3IgY29kZSBzZWN0aW9ucyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSB3aGF0IHRoZSAqZGVwZW5kZW5jaWVzKiBhcmUsIGFuZCB3aGVyZSBpdCBtYXkgbmVlZCB0byBpbXBvcnQgb3RoZXIgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIGl0JiMzOTtzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGlzIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLCBvcHRpb25zLCBhbmQgZGVwZW5kZW5jaWVzIG9mIHRoZSBORlMgc2VydmVyIGltcGxlbWVudGF0aW9uIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRvIGNvcnJlY3RseSBidWlsZCB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBORlNEXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBGSUxFX0xPQ0tJTkdcbiAgIDY6XHRcdGRlcGVuZHMgb24gRlNOT1RJRllcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IENSWVBUT19MSUJfTUQ1IGlmIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2IGlmIE5GU0RfVjRcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE8gIyByZXF1aXJlZCBieSBSUENTRUNfR1NTX0tSQjUgYW5kIHNpZ25lZCBmaWxlaGFuZGxlc1xuICAxMTpcdFx0c2VsZWN0IExPQ0tEXG4gIDEyOlx0XHRzZWxlY3QgU1VOUlBDXG4gIDEzOlx0XHRzZWxlY3QgRVhQT1JURlNcbiAgMTQ6XHRcdHNlbGVjdCBORlNfQ09NTU9OXG4gIDE1Olx0XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjJfQUNMXG4gIDE2Olx0XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXG4gIDE3Olx0XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBDaG9vc2UgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGFsbG93IG90aGVyIGNvbXB1dGVycyB0byBhY2Nlc3NcbiAgMjA6XHRcdCAgZmlsZXMgcmVzaWRpbmcgb24gdGhpcyBzeXN0ZW0gdXNpbmcgU3VuJiMzOTtzIE5ldHdvcmsgRmlsZSBTeXN0ZW1cbiAgMjE6XHRcdCAgcHJvdG9jb2wuICBUbyBjb21waWxlIHRoZSBORlMgc2VydmVyIHN1cHBvcnQgYXMgYSBtb2R1bGUsXG4gIDIyOlx0XHQgIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbmZzZC5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgWW91IG1heSBjaG9vc2UgdG8gdXNlIGEgdXNlci1zcGFjZSBORlMgc2VydmVyIGluc3RlYWQsIGluIHdoaWNoXG4gIDI1Olx0XHQgIGNhc2UgeW91IGNhbiBjaG9vc2UgTiBoZXJlLlxuICAyNjpcdFxuICAyNzpcdFx0ICBUbyBleHBvcnQgbG9jYWwgZmlsZSBzeXN0ZW1zIHVzaW5nIE5GUywgeW91IGFsc28gbmVlZCB0byBpbnN0YWxsXG4gIDI4Olx0XHQgIHVzZXIgc3BhY2UgcHJvZ3JhbXMgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHNcbiAgMjk6XHRcdCAgcGFja2FnZSwgYXZhaWxhYmxlIGZyb20gaHR0cDovL2xpbnV4LW5mcy5vcmcvLiAgTW9yZSBkZXRhaWwgYWJvdXRcbiAgMzA6XHRcdCAgdGhlIExpbnV4IE5GUyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHZpYSB0aGVcbiAgMzE6XHRcdCAgZXhwb3J0cyg1KSBtYW4gcGFnZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgQmVsb3cgeW91IGNhbiBjaG9vc2Ugd2hpY2ggdmVyc2lvbnMgb2YgdGhlIE5GUyBwcm90b2NvbCBhcmVcbiAgMzQ6XHRcdCAgYXZhaWxhYmxlIHRvIGNsaWVudHMgbW91bnRpbmcgdGhlIE5GUyBzZXJ2ZXIgb24gdGhpcyBzeXN0ZW0uXG4gIDM1Olx0XHQgIFN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDMgKFJGQyAxODEzKSBpcyBhbHdheXMgYXZhaWxhYmxlIHdoZW5cbiAgMzY6XHRcdCAgQ09ORklHX05GU0QgaXMgc2VsZWN0ZWQuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIE5GU0RfVjJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxMAoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3ZjX2FkZHNvY2tgIEZ1bmN0aW9uIGFuZCBSZWxhdGVkIEtlcm5lbCBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN2Y19hZGRzb2NrYCBmdW5jdGlvbiBhbmQgZmlndXJlIG91dCBpdHMgaW1wbGljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgY2FsbGluZyBpdCBvciB1c2luZyB0aGUgYHN2Y3NvY2tgIG1lY2hhbmlzbSB3aXRoaW4gdGhlIFNVTlJQQyBjb250ZXh0LiBJJiMzOTtsbCBydW4gYW5vdGhlciBgZ3JlcGAgc2VhcmNoLiBJdCBsb29rcyBsaWtlIGBzdmNfYWRkc29ja2AgaXMgb25seSBjYWxsZWQgZnJvbSBgZnMvbmZzZC9uZnNjdGwuY2AuIE5vdywgbGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnM6IGBzdmNfc2V0dXBfc29ja2V0YCwgYHN2Y19hZGRzb2NrYCwgYHN2Y19jcmVhdGVfc29ja2V0YCwgZXRjLiwgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cuCgpXaGF0IGV4YWN0bHkgZG9lcyBgc3ZjX2FkZHNvY2tgICpkbyo/IEFoLCBpdCYjMzk7cyBhbiBleHBvcnRlZCBzeW1ib2wgKGBFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jaylgKSwgbWVhbmluZyBpdCYjMzk7cyBhIG5vbi1pbmxpbmVkLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludC4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjazoKYGBgYwplcnIgPSAtRUJVU1k7CglpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCgkJZ290byBvdXQ7CmBgYApUaGlzIGlzIGtleS4gSXQmIzM5O3MgcHJldmVudGluZyBhIHNvY2tldCB0aGF0IGFscmVhZHkgaGFzIGBza191c2VyX2RhdGFgIOKAkyB3aGljaCBjb3VsZCBiZSBhbm90aGVyIGtlcm5lbCBjb25zdW1lciwgYW4gZXhpc3RpbmcgYHN2Y19zb2NrYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGZyb20gYmVpbmcgYXR0YWNoZWQgdG8gYW4gUlBDIHNlcnZpY2UuIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLCBiZWNhdXNlIGl0IHByZXZlbnRzIHNvY2tldCBzdGVhbGluZyBhbmQgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi4KClRoaXMgbG9naWMgaXMgc21hY2stZGFiIGluIHRoZSBjb3JlIGtlcm5lbCwgdG91Y2hpbmcgbmV0d29ya2luZywgZmlsZXN5c3RlbXMgKHNwZWNpZmljYWxseSBTVU5SUEMgYW5kIE5GU0QpLiBUZXN0aW5nIHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB1c2luZyBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBJIGNhbiBtYW5pcHVsYXRlIGl0IHVzaW5nIHVzZXJzcGFjZSBieSB3cml0aW5nIGFuIEZEIHRvIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCwgb3IgdXNpbmcgYG5mc2RjdGxgIG9yIHN5c2ZzLgoKVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsOyBpdCBwcmV2ZW50cyBzb2NrZXQgY29ycnVwdGlvbiBpbiB0aGVzZSBzcGVjaWZpYyBjYXNlcy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB3aGF0IHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZS4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gYHN2Y19hZGRzb2NrYC4gQXJlIHRoZXJlIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBzeW1ib2xzIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2A/IGBzdmNfc2V0dXBfc29ja2V0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHJlbGF0ZWQgYnV0IG5vdCB0aGUgcHJpbWFyeSBmb2N1cywgd2hpbGUgYHN2Y19hZGRzb2NrYCBpcyBub24tc3RhdGljLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYE5GU0RgIHNlbGVjdHMgYFNVTlJQQ2AsIGBMT0NLRGAsIGV0Yy4gYFNVTlJQQ2AgaXMgdHJpc3RhdGUgYW5kIHNlbGVjdGVkIGJ5IGBORlNEYCwgYE5GU19GU2AsIGV0Yy4gU28sIGBTVU5SUENgIGFuZCBgTkZTRGAgc2VlbSBsaWtlIHRoZSByZWxldmFudCBjb25maWdzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjb25maWdzIG9yIHN5bWJvbHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGBzdmNfYWRkc29ja2Agc3ltYm9sIGRlZmluaXRpb24gb25lIGxhc3QgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZDoKYGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpYApMaW5lIDE1MTkgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gT2theSwgYWxsIGxvb2tzIGdvb2QuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19hZGRzb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19hZGRzb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSByZWxhdGVkIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgdHlwZSBjb25mdXNpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzliZjM1ZDE1NWQxZTQyMTJjMjllODBkNGFjM2Y0N2Q0NWVmNWExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjozOTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTE1NDEsNiAmIzQzOzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCwKIAllcnIgPSAtRUlTQ09OTjsKIAlpZiAoc28tJmd0O3N0YXRlICZndDsgU1NfVU5DT05ORUNURUQpCiAJCWdvdG8gb3V0OwomIzQzOwllcnIgPSAtRUJVU1k7CiYjNDM7CWlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkKJiM0MzsJCWdvdG8gb3V0OwogCWVyciA9IC1FTk9FTlQ7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiAJCWdvdG8gb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN1blJQQyBTb2NrZXQgQWRkaXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2Ugd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcmVmaW5lIHNvY2tldCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgU3VuUlBDIHNlcnZpY2UgbGF5ZXIuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYGlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCBUaGlzIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgYWRkaXRpb24gYmVjYXVzZSBpdCBhcHBlYXJzIHRvIGJlIHByZXZlbnRpbmcgdGhlIGFkZGl0aW9uIG9mIGEgc29ja2V0IGlmIHRoZSBzb2NrZXQmIzM5O3MgYHNrX3VzZXJfZGF0YWAgZmllbGQgaXMgYWxyZWFkeSBpbiB1c2UuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZSBvciBhIHN1YnRsZSBzdGF0ZSBtYW5hZ2VtZW50IHByb2JsZW0uIFdlJiMzOTtyZSByZWplY3RpbmcgdGhlIGFkZCB3aXRoIGAtRUJVU1lgLgoKVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza191c2VyX2RhdGFgIGlzIHVzZWQgZm9yIGluIHRoaXMgY29udGV4dC4gSXMgaXQgdHJhY2tpbmcgY29ubmVjdGlvbiBzdGF0ZSwgc2VydmVyLXNwZWNpZmljIGRhdGEsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGhhcHBlbnMgaWYgdGhpcyBjb25kaXRpb24gKmlzKiBtZXQ/IERvZXMgdGhpcyBwcmV2ZW50IGEgY2xpZW50IGZyb20gY29ubmVjdGluZyBvciB0aGUgc2VydmVyIGZyb20gYWNjZXB0aW5nIGEgY29ubmVjdGlvbj8KCkkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgYXJvdW5kIGxpbmUgMTU0MS4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc29gLCBgc2tgLCBgU1NfVU5DT05ORUNURURgLCBhbmQgYHN2Y19hZGRzb2NrYCBhcmUgd2l0aGluIHRoZSBncmVhdGVyIGBuZXQvc3VucnBjYCBzdHJ1Y3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgcmF0aW9uYWxlIGJlaGluZCBhZGRpbmcgdGhpcyBidXN5LWNoZWNrLiBUaGlzIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY29uZGl0aW9uIGFuZCBpdHMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbjE1MjE6XHR7XG4xNTIyOlx0XHRpbnQgZXJyID0gMDtcbjE1MjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbjE1MjQ6XHRcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XG4xNTI1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuMTUyNjpcdFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcjtcbjE1Mjc6XHRcdGludCBzYWxlbjtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmICghc28pXG4xNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbjE1NjA6XHRcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuMTU2MTpcdFx0cmV0dXJuIHN2Y19vbmVfc29ja19uYW1lKHN2c2ssIG5hbWVfcmV0dXJuLCBsZW4pO1xuMTU2MjpcdG91dDpcbjE1NjM6XHRcdHNvY2tmZF9wdXQoc28pO1xuMTU2NDpcdFx0cmV0dXJuIGVycjtcbjE1NjU6XHR9XG4xNTY2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xuMTU2NzpcdFxuMTU2ODpcdC8qXG4xNTY5Olx0ICogQ3JlYXRlIHNvY2tldCBmb3IgUlBDIHNlcnZpY2UuXG4xNTcwOlx0ICovXG4xNTcxOlx0c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuMTU3MjpcdFx0XHRcdFx0XHQgIGludCBwcm90b2NvbCxcbjE1NzM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsXG4xNTc0Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNvY2thZGRyICpzaW4sIGludCBsZW4sXG4xNTc1Olx0XHRcdFx0XHRcdCAgaW50IGZsYWdzKVxuMTU3NjpcdHtcbjE1Nzc6XHRcdHN0cnVjdCBzdmNfc29ja1x0KnN2c2s7XG4xNTc4Olx0XHRzdHJ1Y3Qgc29ja2V0XHQqc29jaztcbjE1Nzk6XHRcdGludFx0XHRlcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMAoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA2MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgTWVtb3J5IFNhZmV0eSBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGluIGBzdmNfYWRkc29jaygpYCBpcyBkb2luZy4gSXQmIzM5O3MgdGFraW5nIGEgdXNlci1wcm92aWRlZCBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIChgZmRgKSBhbmQgdHJ5aW5nIHRvIHJlZ2lzdGVyIGl0IGFzIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgYHN2Y19zZXR1cF9zb2NrZXQoKWAsIHdoaWNoIGhhbmRsZXMgdGhlIGF0dGFjaG1lbnQgb2YgdGhpcyBzb2NrZXQgYW5kIHRoZSBjcml0aWNhbCBgc3Zza2AgZGF0YSwgcG90ZW50aWFsbHkgb3ZlcndyaXRpbmcgKG9yIGF0IGxlYXN0ICp1c2luZyopIGBza191c2VyX2RhdGFgIGluIHRoZSB1bmRlcmx5aW5nIGBzdHJ1Y3Qgc29ja2AuCgpUaGUgcGF0Y2gmIzM5O3MgZ290IGEgY2hlY2sgdGhlcmUsIGBpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpIGdvdG8gb3V0O2AuIEdvb2QsIGJlY2F1c2UgaWYgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBwb3B1bGF0ZWQsIHRyeWluZyB0byBhdHRhY2ggdGhpcyBzb2NrZXQgYWdhaW4sIG9yIHdvcnNlLCBvdmVyd3JpdGluZyBgc2tfdXNlcl9kYXRhYCBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXM6IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBldmVuIGNyYXNoZXMsIGVzcGVjaWFsbHkgbGF0ZXIgd2hlbiB0aG9zZSBjYWxsYmFja3MgdGllZCB0byBgc2tfdXNlcl9kYXRhYCBhcmUgaW52b2tlZC4gU28sIHRoaXMgY2hlY2sgKnByZXZlbnRzKiByZXVzaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgc29ja2V0LiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEkgbmVlZCB0byBhbmFseXplIGl0IHN5c3RlbWF0aWNhbGx5LgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8qKiBObywgbm90aGluZyBoZXJlIGlzIHNlbmRpbmcga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIFRoZSBjaGVjayB1c2VzIGBzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YWAsIHdoaWNoIGlzIGEgcG9pbnRlciB3aXRoaW4gYHN0cnVjdCBzb2NrYC4gVGhlIGBzdHJ1Y3Qgc29ja2AgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGtlcm5lbCBkdXJpbmcgc29ja2V0IGNyZWF0aW9uIChvciBsYXRlciB3aGVuIHVzZXIgZGF0YSBpcyBjb25maWd1cmVkKS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uPyoqIE5vdCBoZXJlLiBUaGlzIGlzbiYjMzk7dCBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtYWtpbmcgbGFyZ2UgY2hhbmdlcyBpbiBob3cgZGF0YSBpcyBpbml0aWFsaXplZC4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBhIGNoZWNrIHRvIGF2b2lkIGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIHNvY2tldC4KClNvLCBmcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgbWVyZWx5IGFkZGluZyBhIHNhZmV0eSBjaGVjayB0byBwcmV2ZW50IHJlLWF0dGFjaGluZyBhIHNvY2tldCwgYW5kIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGEgc2FuaXR5IGNoZWNrIGFnYWluc3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3RhdGUgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1hc3NvY2lhdGlvbiBidWdzLiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYWxyZWFkeSBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcyAobGlrZSB0aGUgVUFGIGlzc3VlcykuIE5vIEtNU0FOIGZ1enppbmcgbmVlZGVkLCBpdCBzZWVtcy4KCioqTXkgRmluYWwgUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggKmFkZHMqIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAuIEl0IHZlcmlmaWVzIHRoYXQgdGhlIHByb3ZpZGVkIHNvY2tldCBkb2VzbiYjMzk7dCBoYXZlIGBza191c2VyX2RhdGFgIGFscmVhZHkgYXNzaWduZWQgKmJlZm9yZSogc2V0dGluZyBpdCB1cCBhcyBhbiBSUEMgc2VydmljZSBzb2NrZXQuIFRoaXMgY2hlY2sgcHJldmVudHMgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgc3RhdGUgY29ycnVwdGlvbiwgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlcnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIGhhbmRsZSB0aGVzZSBzYWZldHkgY29uY2VybnMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSByZWxhdGVkIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgdHlwZSBjb25mdXNpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSByZWxhdGVkIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgdHlwZSBjb25mdXNpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozOTo1MC40NzAxODMzOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI0NzM1MzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfYWRkc29ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcmVsYXRlZCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHR5cGUgY29uZnVzaW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc3ZjX2FkZHNvY2tgIGluIHRoZSBTVU5SUEMgc2VydmVyIHNvY2tldCBzdWJzeXN0ZW0gdG8gY2hlY2sgd2hldGhlciBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHNvY2tldCwgcmV0dXJuaW5nIC1FQlVTWSBpZiBzZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIChlLmcuIHZpYSBORlNEIHBvcnQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6Mzk6NTAuNDcwMTg4MzQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk5MjY5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzliZjM1ZDE1NWQxZTQyMTJjMjllODBkNGFjM2Y0N2Q0NWVmNWExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMjI6Mzk6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmNcXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG4gXFx0ZXJyID0gLUVJU0NPTk47XFxuIFxcdGlmIChzby1cXHUwMDNlc3RhdGUgXFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdGVyciA9IC1FQlVTWTtcXG4rXFx0aWYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0ZXJyID0gLUVOT0VOVDtcXG4gXFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozOTo1MC45NzA5Mzg1OTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2ODc2OTY3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN2Y19hZGRzb2NrYCBpbiB0aGUgU1VOUlBDIHNlcnZlciBzb2NrZXQgc3Vic3lzdGVtIHRvIGNoZWNrIHdoZXRoZXIgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzb2NrZXQsIHJldHVybmluZyAtRUJVU1kgaWYgc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSAoZS5nLiB2aWEgTkZTRCBwb3J0IGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjOWJmMzVkMTU1ZDFlNDIxMmMyOWU4MGQ0YWMzZjQ3ZDQ1ZWY1YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjM5OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuIFx0ZXJyID0gLUVJU0NPTk47XG4gXHRpZiAoc28tXHUwMDNlc3RhdGUgXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxuIFx0XHRnb3RvIG91dDtcbitcdGVyciA9IC1FQlVTWTtcbitcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4rXHRcdGdvdG8gb3V0O1xuIFx0ZXJyID0gLUVOT0VOVDtcbiBcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuIFx0XHRnb3RvIG91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjM5OjUwLjk3MDk0MDIxM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxODE1MTMyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCB0byBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0IGFuZCB0aGUgY2hhbmdlcyBpdCBpbnRyb2R1Y2VzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE1NDEuIFRoaXMgaXMgd2hlcmUgYHN2Y19hZGRzb2NrYCBsaXZlcywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgbmV3IGNoZWNrIGJlaW5nIGFkZGVkIGhlcmUuIFNwZWNpZmljYWxseSwgYSBgc2tfdXNlcl9kYXRhYCBjaGVjayBvbiB0aGUgc29ja2V0J3MgYHNrYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgaW50cm9kdWNlZCBiZWZvcmUgdGhlIGB0cnlfbW9kdWxlX2dldGAgY2FsbC4gVGhlIHBhdGNoJ3MgbmV3IGNoZWNrLCBgaWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgYnVzeSBzb2NrZXQgYmVpbmcgcmVqZWN0ZWQuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBtb3JlIGJyb2FkbHkgYW5kIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGxpbmUgMTU0MS4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQuIFdoYXQncyB0aGUgcHVycG9zZSBvZiBgc3ZjX2FkZHNvY2tgPyBXaGF0IGFyZSB0aGUgcG9zc2libGUgc3RhdGVzIG9mIGBzby1cdTAwM2VzdGF0ZWA/IE1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVzZSBgZmluZC1yZWZlcmVuY2VzYCB0byBiZSBjZXJ0YWluLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIHBhdGggaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGZlYXR1cmUgZmxhZyBvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gVGhpcyB3aWxsIGluZm9ybSBtZSBhYm91dCB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgYWRkZWQgY2hlY2sgaXMgcmVsZXZhbnQgYW5kLCB0aGVyZWZvcmUsIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgY2hhbmdlIGlzIHJlbGV2YW50LiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlamVjdGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2VzIG5vdCBoYXZlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBzdWNoIGFzIGEgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjM5OjU5LjE1MjQ1NjMwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4xNTIxOlxcdHtcXG4xNTIyOlxcdFxcdGludCBlcnIgPSAwO1xcbjE1MjM6XFx0XFx0c3RydWN0IHNvY2tldCAqc28gPSBzb2NrZmRfbG9va3VwKGZkLCBcXHUwMDI2ZXJyKTtcXG4xNTI0OlxcdFxcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XFxuMTUyNTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xcbjE1MjY6XFx0XFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHI7XFxuMTUyNzpcXHRcXHRpbnQgc2FsZW47XFxuMTUyODpcXHRcXG4xNTI5OlxcdFxcdGlmICghc28pXFxuMTUzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MzE6XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNTMyOlxcdFxcdGlmIChzb2NrX25ldChzby1cXHUwMDNlc2spICE9IG5ldClcXG4xNTMzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1MzQ6XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNTM1OlxcdFxcdGlmICgoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcXG4xNTM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1Mzc6XFx0XFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMTUzODpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbjE1Mzk6XFx0XFx0ICAgIHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuMTU0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQxOlxcdFxcdGVyciA9IC1FSVNDT05OO1xcbjE1NDI6XFx0XFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbjE1NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU0NDpcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTU0NTpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuMTU0NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ3OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTU0ODpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4xNTQ5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTA6XFx0XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcXG4xNTUxOlxcdFxcdGlmIChJU19FUlIoc3ZzaykpIHtcXG4xNTUyOlxcdFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjE1NTM6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cXHUwMDNlc2tfc29jaywgc2luKTtcXG4xNTU3OlxcdFxcdGlmIChzYWxlbiBcXHUwMDNlPSAwKVxcbjE1NTg6XFx0XFx0XFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcXG4xNTU5OlxcdFxcdHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcXG4xNTYwOlxcdFxcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCk7XFxuMTU2MTpcXHRcXHRyZXR1cm4gc3ZjX29uZV9zb2NrX25hbWUoc3ZzaywgbmFtZV9yZXR1cm4sIGxlbik7XFxuMTU2MjpcXHRvdXQ6XFxuMTU2MzpcXHRcXHRzb2NrZmRfcHV0KHNvKTtcXG4xNTY0OlxcdFxcdHJldHVybiBlcnI7XFxuMTU2NTpcXHR9XFxuMTU2NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdC8qXFxuMTU2OTpcXHQgKiBDcmVhdGUgc29ja2V0IGZvciBSUEMgc2VydmljZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6Mzk6NTkuMTUyNTYyNzAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1ODEzMDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzdmNfYWRkc29ja2AgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYHN2Y19hZGRzb2NrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQg4oCTIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZCwgYW5kIHdpdGggd2hhdCBwYXJhbWV0ZXJzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcnVubmluZyBhIHF1aWNrIHNlYXJjaCwgcHJvYmFibHkgdXNpbmcgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sLCBkZXBlbmRpbmcgb24gdGhlIGNvZGViYXNlIGFuZCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbi4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2UgY2FyZWZ1bGx5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG92ZXJhbGwgcHVycG9zZSBvZiBlYWNoIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgaXMgY3JpdGljYWwgYmVmb3JlIEkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzLCBvciBidWcgZml4ZXMgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBjaGFuZ2VzIGhhdmUgbm8gc2lkZS1lZmZlY3RzIG9yIGJyZWFrIG90aGVyIHBhcnRzIG9mIHRoZSBhcHBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MDEuMzEwNjk1OTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgxMzM3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX2FkZHNvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9uZnNjdGwuYz03MzI9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5mcy9uZnNkL25mc2N0bC5jLTc0OC1cXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG5mcy9uZnNkL25mc2N0bC5jOjc0OTpcXHRlcnIgPSBzdmNfYWRkc29jayhzZXJ2LCBuZXQsIGZkLCBidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwgY3JlZCk7XFxuZnMvbmZzZC9uZnNjdGwuYy03NTAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmg9NjU9dm9pZFxcdFxcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaDo2NjppbnRcXHRcXHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjctXFx0XFx0XFx0ICAgIGNvbnN0IGludCBmZCwgY2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwNi0vKipcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwOC0gKiBAc2VydjogcG9pbnRlciB0byBSUEMgc2VydmljZSB0byB3aGljaCB0byBhZGQgYSBuZXcgbGlzdGVuZXJcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUxOTppbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTIwLVxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1NjY6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjAzLjAyODgzNTg0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODAyNjk3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORlNkIENvbnRyb2wgSW50ZXJmYWNlKipcblxuT2theSwgc28gYHN2Y19hZGRzb2NrYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHdlJ3JlIGZpZGRsaW5nIHdpdGggdGhlIE5GU2QgY29uZmlndXJhdGlvbiB0aHJvdWdoIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCAob3Igb3RoZXIgcmVsYXRlZCBgbmZzZGN0bGAgZW50cmllcykuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IGluIHRoZSBjb2RlYmFzZS4gTGV0J3Mgc2VlIGhvdyBgZnMvbmZzZC9uZnNjdGwuY2AgYWN0dWFsbHkgKmV4cG9zZXMqIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250cm9sIHBhdGggdGhlIHN5c3RlbSB0YWtlcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoYXQgZmlsZSBhZ2FpbiBhbmQgc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZyb20gdG9wIHRvIGJvdHRvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjA1LjAwOTEwODE1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL25mc2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHQgKiBuZnNkIGxpc3RlbmVyLlxcbiA3MzE6XFx0ICovXFxuIDczMjpcXHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4gNzMzOlxcdHtcXG4gNzM0OlxcdFxcdGNoYXIgKm1lc2cgPSBidWY7XFxuIDczNTpcXHRcXHRpbnQgZmQsIGVycjtcXG4gNzM2OlxcdFxcdHN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIG5mc2RfbmV0X2lkKTtcXG4gNzM3OlxcdFxcdHN0cnVjdCBzdmNfc2VydiAqc2VydjtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0ZXJyID0gZ2V0X2ludChcXHUwMDI2bWVzZywgXFx1MDAyNmZkKTtcXG4gNzQwOlxcdFxcdGlmIChlcnIgIT0gMCB8fCBmZCBcXHUwMDNjIDApXFxuIDc0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQyOlxcdFxcdHRyYWNlX25mc2RfY3RsX3BvcnRzX2FkZGZkKG5ldCwgZmQpO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XFxuIDc0NTpcXHRcXHRpZiAoZXJyICE9IDApXFxuIDc0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG4gNzQ5OlxcdFxcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0aWYgKCFzZXJ2LVxcdTAwM2Vzdl9ucnRocmVhZHMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2bm4tXFx1MDAzZW5mc2Rfc2Vydi1cXHUwMDNlc3ZfcGVybXNvY2tzKSlcXG4gNzUyOlxcdFxcdFxcdG5mc2RfZGVzdHJveV9zZXJ2KG5ldCk7XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdHJldHVybiBlcnI7XFxuIDc1NTpcXHR9XFxuIDc1NjpcXHRcXG4gNzU3OlxcdC8qXFxuIDc1ODpcXHQgKiBBIHRyYW5zcG9ydCBsaXN0ZW5lciBpcyBhZGRlZCBieSB3cml0aW5nIGl0cyB0cmFuc3BvcnQgbmFtZSBhbmRcXG4gNzU5OlxcdCAqIGEgcG9ydCBudW1iZXIuXFxuIDc2MDpcXHQgKi9cXG4gNzYxOlxcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkeHBydChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuIDc2MjpcXHR7XFxuIDc2MzpcXHRcXHRjaGFyIHRyYW5zcG9ydFsxNl07XFxuIDc2NDpcXHRcXHRzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQ7XFxuIDc2NTpcXHRcXHRpbnQgcG9ydCwgZXJyO1xcbiA3NjY6XFx0XFx0c3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpO1xcbiA3Njc6XFx0XFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2O1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRpZiAoc3NjYW5mKGJ1ZiwgXFxcIiUxNXMgJTV1XFxcIiwgdHJhbnNwb3J0LCBcXHUwMDI2cG9ydCkgIT0gMilcXG4gNzcwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRcXHRpZiAocG9ydCBcXHUwMDNjIDEgfHwgcG9ydCBcXHUwMDNlIFVTSFJUX01BWClcXG4gNzczOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NzQ6XFx0XFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkeHBydChuZXQsIHRyYW5zcG9ydCwgcG9ydCk7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGVyciA9IG5mc2RfY3JlYXRlX3NlcnYobmV0KTtcXG4gNzc3OlxcdFxcdGlmIChlcnIgIT0gMClcXG4gNzc4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MDUuMDA5MjY3MjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMzg2NDM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIGZpZ3VyaW5nIG91dCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBmb3IgU1VOUlBDIGFuZCBORlNEOlxuXG4qKkRldGVybWluaW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBTVU5SUEMgYW5kIE5GU0QqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvcnJlY3QgS2NvbmZpZyBvcHRpb25zIGZvciBTVU5SUEMgYW5kIE5GU0QuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY3JhY2sgb3BlbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYm90aCBgbmV0L3N1bnJwYy9LY29uZmlnYCBhbmQgYGZzL25mc2QvS2NvbmZpZ2AuIFRoZXNlIGFyZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQsIGFzIHRoZXkgZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aG9zZSBzdWJzeXN0ZW1zLiBIb3BlZnVsbHksIHRob3NlIGZpbGVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgdGllcyB2YXJpb3VzIG9wdGlvbnMgdG9nZXRoZXIuIFRoaXMgaW5pdGlhbCBleHBsb3JhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgc2hvdyBtZSB0aGUgXCJidWlsZGluZyBibG9ja3NcIiBvZiB3aGF0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MDcuMDQzMTM0NTY1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQzMDIwNTQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKC4qXFxcXCkgKz0gc3VucnBjLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjA5LjQ4NjE2Njg0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTgzMDM3NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZmlsZXM6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUlBDIENvbmZpZ3VyYXRpb24gSXNzdWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gUlBDIGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBSUEMgTWFrZWZpbGUuIEknbGwgbG9vayBhdCBgbmV0L3N1bnJwYy9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBSUEMgc3Vic3lzdGVtLiBJJ20gaG9waW5nIEkgY2FuIHNlZSB3aGF0J3MgYmVpbmcgY29tcGlsZWQgYW5kIGhvdyBkaWZmZXJlbnQgbW9kdWxlcyBhcmUgYnJvdWdodCB0b2dldGhlci5cblxuQmV5b25kIHRoZSBNYWtlZmlsZSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSAqY29uZmlndXJhdGlvbiogaXMgaGFuZGxlZC4gSXMgaXQgYSBtb2R1bGUsIG9yIHNvbWV0aGluZyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWw/IFdoZXJlIGFyZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGRlZmluZWQ/IFNvLCBJJ2xsIGNoZWNrIGBuZXQvS2NvbmZpZ2AgZmlyc3QuIElmIGl0J3MgbmV0d29yay1yZWxhdGVkLCB0aGF0J3MgdGhlIG1vc3QgbGlrZWx5IHNwb3QgZm9yIHRoZSBzZXR0aW5ncy5cblxuSWYgdGhlIFJQQyBmdW5jdGlvbmFsaXR5IGlzIG1vcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBmaWxlc3lzdGVtLCB0aGVuIGBmcy9LY29uZmlnYCBtaWdodCBiZSB0aGUgYmV0dGVyIHBsYWNlIHRvIGNoZWNrIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIGEgYml0IG9mIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBhbmQgcGF0dGVybiBtYXRjaGluZywgc2VlaW5nIHdoaWNoIG9uZSBtYWtlcyBtb3JlIHNlbnNlLCBhbmQgc2VlaW5nIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmVmZXJlbmNlLiBJJ20gcmVhZHkgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgc2VlIHdoYXQgdGhlIGxvZ2ljIGlzIGJlaGluZCB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MTIuMDY5MjA3NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBTVU4gUlBDXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1NVTlJQQykgKz0gc3VucnBjLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19TVU5SUENfR1NTKSArPSBhdXRoX2dzcy9cXG4gICA5OlxcdG9iai0kKENPTkZJR19TVU5SUENfWFBSVF9SRE1BKSArPSB4cHJ0cmRtYS9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3VucnBjLXkgOj0gY2xudC5vIHhwcnQubyBzb2NrbGliLm8geHBydHNvY2subyBzY2hlZC5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgICBhdXRoLm8gYXV0aF9udWxsLm8gYXV0aF90bHMubyBhdXRoX3VuaXgubyBcXFxcXFxuICAxMzpcXHRcXHQgICAgc3ZjLm8gc3Zjc29jay5vIHN2Y2F1dGgubyBzdmNhdXRoX3VuaXgubyBcXFxcXFxuICAxNDpcXHRcXHQgICAgYWRkci5vIHJwY2JfY2xudC5vIHRpbWVyLm8geGRyLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICAgIHN1bnJwY19zeW1zLm8gY2FjaGUubyBycGNfcGlwZS5vIHN5c2ZzLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICAgIHN2Y194cHJ0Lm8gXFxcXFxcbiAgMTc6XFx0XFx0ICAgIHhwcnRtdWx0aXBhdGgubyBuZXRsaW5rLm9cXG4gIDE4OlxcdHN1bnJwYy0kKENPTkZJR19TVU5SUENfREVCVUcpICs9IGRlYnVnZnMub1xcbiAgMTk6XFx0c3VucnBjLSQoQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTCkgKz0gYmFja2NoYW5uZWxfcnFzdC5vXFxuICAyMDpcXHRzdW5ycGMtJChDT05GSUdfUFJPQ19GUykgKz0gc3RhdHMub1xcbiAgMjE6XFx0c3VucnBjLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MTIuMDY5MjY3MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI1NDg5NTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJQQyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfU1VOUlBDYCBhbmQgYENPTkZJR19ORlNEYC4gVGhpcyB1c3VhbGx5IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9zdW5ycGMvS2NvbmZpZ2AuIFRoaXMgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdmFyaW91cyBTdW5SUEMgY29tcG9uZW50cyBhbmQsIHNpbmNlIGBORlNEYCBpcyBOZXR3b3JrIEZpbGUgU3lzdGVtLCBpdCdzIHZlcnkgbGlrZWx5IGBDT05GSUdfTkZTRGAgd2lsbCBiZSBzb21ld2hlcmUgaW4gdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGV4cGxpY2l0bHkgaW4gdGhlIEtjb25maWcgZmlsZSB1c2luZyBsYW5ndWFnZSBsaWtlIGBkZXBlbmRzIG9uYCBvciBgc2VsZWN0YC4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjE2LjMyNDE2NjU3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMzgxNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVU5SUENcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoxNi42MDU1NTMzODZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3MDU0NTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgS2NvbmZpZyBmaWxlczpcblxuKipEaXZpbmcgaW50byBSUEMgYW5kIE5GUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGVhZCBiYWNrIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBnYW1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFJQQyBhbmQgTkZTIHNlcnZlciBzZXR1cCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9zdW5ycGMvS2NvbmZpZ2AgYW5kIGBmcy9uZnNkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBSUEMgYW5kIE5GUyBzZXJ2ZXIgb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUga2V5IGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWVzIEknbSBjdXJyZW50bHkgd3Jlc3RsaW5nIHdpdGguIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgY2xlYXIgaGllcmFyY2h5IG9mIG9wdGlvbnMsIHdpdGggY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludHMgb24gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIG9yIGxlZ2FjeSBmZWF0dXJlIHN1cHBvcnQgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBIb3BlZnVsbHksIHRoZSBmaWxlIG9yZ2FuaXphdGlvbiBhbmQgY29tbWVudHMgd2lsbCBiZSBjbGVhciBhbmQgbG9naWNhbCwgZW5hYmxpbmcgbWUgdG8gZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb24gZmxvdyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MTguODc2MTAxOTU5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNVTlJQQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBTVU5SUENfR1NTXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFx0c2VsZWN0IE9JRF9SRUdJU1RSWVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBTVU5SUENcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFNVTlJQQ19TV0FQXFxuICAxNjpcXHRcXHRib29sXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQ1xcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUlBDU0VDX0dTU19LUkI1XFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc21cXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBDUllQVE9cXG4gIDIyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjM6XFx0XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG4gIDI0OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBDaG9vc2UgWSBoZXJlIHRvIGVuYWJsZSBTZWN1cmUgUlBDIHVzaW5nIHRoZSBLZXJiZXJvcyB2ZXJzaW9uIDVcXG4gIDI3OlxcdFxcdCAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAxOTY0KS5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBTZWN1cmUgUlBDIGNhbGxzIHdpdGggS2VyYmVyb3MgcmVxdWlyZSBhbiBhdXhpbGlhcnkgdXNlci1zcGFjZVxcbiAgMzA6XFx0XFx0ICBkYWVtb24gd2hpY2ggbWF5IGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHMgcGFja2FnZVxcbiAgMzE6XFx0XFx0ICBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBJbiBhZGRpdGlvbiwgdXNlci1zcGFjZVxcbiAgMzI6XFx0XFx0ICBLZXJiZXJvcyBzdXBwb3J0IHNob3VsZCBiZSBpbnN0YWxsZWQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIFNVTlJQQ19ERUJVR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBTWVNDVExcXG4gIDM5OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoxOC44NzYxNzQ4MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQxODkxODEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGZzL25mc2QvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIGBmcy9uZnNkL0tjb25maWdgIEZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBmcy9uZnNkL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBwcm92aWRlIHRoZSBjb3JlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhlIE5GUyBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqVG9wLWxldmVsIGVuYWJsZS9kaXNhYmxlIHN3aXRjaGVzOioqIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIG1haW4gY29uZmlndXJhdGlvbiBzeW1ib2xzIHRoYXQgY29udHJvbCB3aGV0aGVyIE5GUyBzZXJ2ZXIgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYXQgYWxsLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludC5cbiogICAqKlByb3RvY29sIHZlcnNpb24gb3B0aW9uczoqKiBJIGZ1bGx5IGV4cGVjdCB0aGlzIEtjb25maWcgdG8gaW5jbHVkZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgZGlmZmVyZW50IE5GUyBwcm90b2NvbCB2ZXJzaW9ucyAoTkZTdjMsIE5GU3Y0LCBhbmQgcG9zc2libHkgTkZTdjIgaWYgaXQncyBzdGlsbCBzdXBwb3J0ZWQpIGFuZCBhbnkgcmVsYXRlZCBmZWF0dXJlcyBmb3IgZWFjaCB2ZXJzaW9uLlxuKiAgICoqU2VjdXJpdHktcmVsYXRlZCBjaG9pY2VzOioqIFdlIG11c3Qgc2VlIGNob2ljZXMgcmVsYXRlZCB0byBzZWN1cml0eSBtZWNoYW5pc21zIGxpa2UgS2VyYmVyb3MgYXV0aGVudGljYXRpb24sIGRpZmZlcmVudCBSUENTRUNfR1NTIGltcGxlbWVudGF0aW9ucywgYW5kIHBlcmhhcHMgZXZlbiBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBzcGVjaWZpYyBzZWN1cml0eSBmbGF2b3JzIG9yIGFjY2VzcyBjb250cm9sIGxpc3RzLlxuKiAgICoqUGVyZm9ybWFuY2UgdHVuaW5nIGtub2JzOioqIEknbSBhbHNvIGxvb2tpbmcgZm9yIG9wdGlvbnMgdGhhdCBtaWdodCBhbGxvdyBtZSB0byB0dW5lIHRoZSBORlMgc2VydmVyJ3MgcGVyZm9ybWFuY2Ug4oCTIHBlcmhhcHMgcmVsYXRlZCB0byBjYWNoaW5nLCB0aHJlYWQgcG9vbGluZywgb3Igb3RoZXIgc2VydmVyLXNpZGUgb3B0aW1pemF0aW9ucy5cbiogICAqKkZpbGUgbG9ja2luZzoqKiBIb3cgYXJlIHdlIGhhbmRsaW5nIGZpbGUgbG9ja2luZz8gVGhlcmUgbXVzdCBiZSBLY29uZmlnIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIGxvY2tpbmcgcHJvdG9jb2xzIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMuXG4qICAgKipEb2N1bWVudGF0aW9uIGFuZCBEZXBlbmRlbmNpZXM6KiogSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgaGVscCB0ZXh0IGZvciBlYWNoIG9wdGlvbi4gSXQgc2hvdWxkIHByb3ZpZGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCBkZXBlbmRlbmNpZXMuIEkgbWF5IG5lZWQgdG8gbmF2aWdhdGUgdG8gb3RoZXIgS2NvbmZpZyBmaWxlcyBvciBjb2RlIHNlY3Rpb25zIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gc2VlIHdoYXQgdGhlICpkZXBlbmRlbmNpZXMqIGFyZSwgYW5kIHdoZXJlIGl0IG1heSBuZWVkIHRvIGltcG9ydCBvdGhlciBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgaXQncyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC5cblxuRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoaXMgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUsIG9wdGlvbnMsIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlIE5GUyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgdG8gY29ycmVjdGx5IGJ1aWxkIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjIyLjI5NTA5NjUwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORlNEXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBGU05PVElGWVxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9NRDUgaWYgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTYgaWYgTkZTRF9WNFxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUTyAjIHJlcXVpcmVkIGJ5IFJQQ1NFQ19HU1NfS1JCNSBhbmQgc2lnbmVkIGZpbGVoYW5kbGVzXFxuICAxMTpcXHRcXHRzZWxlY3QgTE9DS0RcXG4gIDEyOlxcdFxcdHNlbGVjdCBTVU5SUENcXG4gIDEzOlxcdFxcdHNlbGVjdCBFWFBPUlRGU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IE5GU19DT01NT05cXG4gIDE1OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WMl9BQ0xcXG4gIDE2OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIENob29zZSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYWxsb3cgb3RoZXIgY29tcHV0ZXJzIHRvIGFjY2Vzc1xcbiAgMjA6XFx0XFx0ICBmaWxlcyByZXNpZGluZyBvbiB0aGlzIHN5c3RlbSB1c2luZyBTdW4ncyBOZXR3b3JrIEZpbGUgU3lzdGVtXFxuICAyMTpcXHRcXHQgIHByb3RvY29sLiAgVG8gY29tcGlsZSB0aGUgTkZTIHNlcnZlciBzdXBwb3J0IGFzIGEgbW9kdWxlLFxcbiAgMjI6XFx0XFx0ICBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5mc2QuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgWW91IG1heSBjaG9vc2UgdG8gdXNlIGEgdXNlci1zcGFjZSBORlMgc2VydmVyIGluc3RlYWQsIGluIHdoaWNoXFxuICAyNTpcXHRcXHQgIGNhc2UgeW91IGNhbiBjaG9vc2UgTiBoZXJlLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRvIGV4cG9ydCBsb2NhbCBmaWxlIHN5c3RlbXMgdXNpbmcgTkZTLCB5b3UgYWxzbyBuZWVkIHRvIGluc3RhbGxcXG4gIDI4OlxcdFxcdCAgdXNlciBzcGFjZSBwcm9ncmFtcyB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlsc1xcbiAgMjk6XFx0XFx0ICBwYWNrYWdlLCBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBNb3JlIGRldGFpbCBhYm91dFxcbiAgMzA6XFx0XFx0ICB0aGUgTGludXggTkZTIHNlcnZlciBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdmlhIHRoZVxcbiAgMzE6XFx0XFx0ICBleHBvcnRzKDUpIG1hbiBwYWdlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEJlbG93IHlvdSBjYW4gY2hvb3NlIHdoaWNoIHZlcnNpb25zIG9mIHRoZSBORlMgcHJvdG9jb2wgYXJlXFxuICAzNDpcXHRcXHQgIGF2YWlsYWJsZSB0byBjbGllbnRzIG1vdW50aW5nIHRoZSBORlMgc2VydmVyIG9uIHRoaXMgc3lzdGVtLlxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXFxuICAzNjpcXHRcXHQgIENPTkZJR19ORlNEIGlzIHNlbGVjdGVkLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBORlNEX1YyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjIyLjI5NTE4MjI4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDc3MDYxMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN2Y19hZGRzb2NrYCBGdW5jdGlvbiBhbmQgUmVsYXRlZCBLZXJuZWwgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3ZjX2FkZHNvY2tgIGZ1bmN0aW9uIGFuZCBmaWd1cmUgb3V0IGl0cyBpbXBsaWNhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBjYWxsaW5nIGl0IG9yIHVzaW5nIHRoZSBgc3Zjc29ja2AgbWVjaGFuaXNtIHdpdGhpbiB0aGUgU1VOUlBDIGNvbnRleHQuIEknbGwgcnVuIGFub3RoZXIgYGdyZXBgIHNlYXJjaC4gSXQgbG9va3MgbGlrZSBgc3ZjX2FkZHNvY2tgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGZzL25mc2QvbmZzY3RsLmNgLiBOb3csIGxldCdzIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnM6IGBzdmNfc2V0dXBfc29ja2V0YCwgYHN2Y19hZGRzb2NrYCwgYHN2Y19jcmVhdGVfc29ja2V0YCwgZXRjLiwgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cuXG5cbldoYXQgZXhhY3RseSBkb2VzIGBzdmNfYWRkc29ja2AgKmRvKj8gQWgsIGl0J3MgYW4gZXhwb3J0ZWQgc3ltYm9sIChgRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spYCksIG1lYW5pbmcgaXQncyBhIG5vbi1pbmxpbmVkLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludC4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjazpcbmBgYGNcbmVyciA9IC1FQlVTWTtcblx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcblx0XHRnb3RvIG91dDtcbmBgYFxuVGhpcyBpcyBrZXkuIEl0J3MgcHJldmVudGluZyBhIHNvY2tldCB0aGF0IGFscmVhZHkgaGFzIGBza191c2VyX2RhdGFgIOKAkyB3aGljaCBjb3VsZCBiZSBhbm90aGVyIGtlcm5lbCBjb25zdW1lciwgYW4gZXhpc3RpbmcgYHN2Y19zb2NrYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGZyb20gYmVpbmcgYXR0YWNoZWQgdG8gYW4gUlBDIHNlcnZpY2UuIFRoYXQncyBhIGdvb2QgdGhpbmcsIGJlY2F1c2UgaXQgcHJldmVudHMgc29ja2V0IHN0ZWFsaW5nIGFuZCBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLlxuXG5UaGlzIGxvZ2ljIGlzIHNtYWNrLWRhYiBpbiB0aGUgY29yZSBrZXJuZWwsIHRvdWNoaW5nIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zIChzcGVjaWZpY2FsbHkgU1VOUlBDIGFuZCBORlNEKS4gVGVzdGluZyBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdXNpbmcgYSBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSSBjYW4gbWFuaXB1bGF0ZSBpdCB1c2luZyB1c2Vyc3BhY2UgYnkgd3JpdGluZyBhbiBGRCB0byBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAsIG9yIHVzaW5nIGBuZnNkY3RsYCBvciBzeXNmcy5cblxuVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsOyBpdCBwcmV2ZW50cyBzb2NrZXQgY29ycnVwdGlvbiBpbiB0aGVzZSBzcGVjaWZpYyBjYXNlcy5cblxuTm93LCBsZXQncyB2ZXJpZnkgd2hhdCB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhcmUuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBzdmNfYWRkc29ja2AuIEFyZSB0aGVyZSBvdGhlciBjbG9zZWx5IHJlbGF0ZWQgc3ltYm9scyBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgPyBgc3ZjX3NldHVwX3NvY2tldGAgaXMgc3RhdGljLCB3aGljaCBpcyByZWxhdGVkIGJ1dCBub3QgdGhlIHByaW1hcnkgZm9jdXMsIHdoaWxlIGBzdmNfYWRkc29ja2AgaXMgbm9uLXN0YXRpYy4gVGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBORlNEYCBzZWxlY3RzIGBTVU5SUENgLCBgTE9DS0RgLCBldGMuIGBTVU5SUENgIGlzIHRyaXN0YXRlIGFuZCBzZWxlY3RlZCBieSBgTkZTRGAsIGBORlNfRlNgLCBldGMuIFNvLCBgU1VOUlBDYCBhbmQgYE5GU0RgIHNlZW0gbGlrZSB0aGUgcmVsZXZhbnQgY29uZmlncy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCdzIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3Mgb3Igc3ltYm9scyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LlxuXG5GaW5hbGx5LCBsZXQncyB2ZXJpZnkgdGhlIGBzdmNfYWRkc29ja2Agc3ltYm9sIGRlZmluaXRpb24gb25lIGxhc3QgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZDpcbmBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCwgY2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKWBcbkxpbmUgMTUxOSBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBPa2F5LCBhbGwgbG9va3MgZ29vZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDEwLCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjI3Ljc3MjI0NjM3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjU2MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfYWRkc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzdmNfYWRkc29ja2AgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgc29ja2V0IHN1YnN5c3RlbSB0byBjaGVjayB3aGV0aGVyIGBza191c2VyX2RhdGFgIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc29ja2V0LCByZXR1cm5pbmcgLUVCVVNZIGlmIHNldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgKGUuZy4gdmlhIE5GU0QgcG9ydCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN2Y19hZGRzb2NrYCBpbiB0aGUgU1VOUlBDIHNlcnZlciBzb2NrZXQgc3Vic3lzdGVtIHRvIGNoZWNrIHdoZXRoZXIgYHNrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzb2NrZXQsIHJldHVybmluZyAtRUJVU1kgaWYgc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSAoZS5nLiB2aWEgTkZTRCBwb3J0IGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjI3Ljg0NzkxMDQxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4Njk2MTI2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoyNy44NDg0MjM3MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDg2OTA5NDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcmVsYXRlZCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHR5cGUgY29uZnVzaW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzliZjM1ZDE1NWQxZTQyMTJjMjllODBkNGFjM2Y0N2Q0NWVmNWExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozOTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4rXHRlcnIgPSAtRUJVU1k7XG4rXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuK1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDoyNy44NDg0MjQ2NjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODAzOTY1NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN1blJQQyBTb2NrZXQgQWRkaXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2Ugd2l0aGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzdmNfYWRkc29ja2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcmVmaW5lIHNvY2tldCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgU3VuUlBDIHNlcnZpY2UgbGF5ZXIuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgaWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCBUaGlzIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQncyBhbiBpbnRlcmVzdGluZyBhZGRpdGlvbiBiZWNhdXNlIGl0IGFwcGVhcnMgdG8gYmUgcHJldmVudGluZyB0aGUgYWRkaXRpb24gb2YgYSBzb2NrZXQgaWYgdGhlIHNvY2tldCdzIGBza191c2VyX2RhdGFgIGZpZWxkIGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJlc291cmNlIGNvbnRlbnRpb24gaXNzdWUgb3IgYSBzdWJ0bGUgc3RhdGUgbWFuYWdlbWVudCBwcm9ibGVtLiBXZSdyZSByZWplY3RpbmcgdGhlIGFkZCB3aXRoIGAtRUJVU1lgLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHNrX3VzZXJfZGF0YWAgaXMgdXNlZCBmb3IgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCB0cmFja2luZyBjb25uZWN0aW9uIHN0YXRlLCBzZXJ2ZXItc3BlY2lmaWMgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgaGFwcGVucyBpZiB0aGlzIGNvbmRpdGlvbiAqaXMqIG1ldD8gRG9lcyB0aGlzIHByZXZlbnQgYSBjbGllbnQgZnJvbSBjb25uZWN0aW5nIG9yIHRoZSBzZXJ2ZXIgZnJvbSBhY2NlcHRpbmcgYSBjb25uZWN0aW9uP1xuXG5JJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgYXJvdW5kIGxpbmUgMTU0MS4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc29gLCBgc2tgLCBgU1NfVU5DT05ORUNURURgLCBhbmQgYHN2Y19hZGRzb2NrYCBhcmUgd2l0aGluIHRoZSBncmVhdGVyIGBuZXQvc3VucnBjYCBzdHJ1Y3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgcmF0aW9uYWxlIGJlaGluZCBhZGRpbmcgdGhpcyBidXN5LWNoZWNrLiBUaGlzIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY29uZGl0aW9uIGFuZCBpdHMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6NDA6MzUuODg4MDgxNzIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdFxcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4xNTIxOlxcdHtcXG4xNTIyOlxcdFxcdGludCBlcnIgPSAwO1xcbjE1MjM6XFx0XFx0c3RydWN0IHNvY2tldCAqc28gPSBzb2NrZmRfbG9va3VwKGZkLCBcXHUwMDI2ZXJyKTtcXG4xNTI0OlxcdFxcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XFxuMTUyNTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xcbjE1MjY6XFx0XFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHI7XFxuMTUyNzpcXHRcXHRpbnQgc2FsZW47XFxuMTUyODpcXHRcXG4xNTI5OlxcdFxcdGlmICghc28pXFxuMTUzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MzE6XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNTMyOlxcdFxcdGlmIChzb2NrX25ldChzby1cXHUwMDNlc2spICE9IG5ldClcXG4xNTMzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1MzQ6XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNTM1OlxcdFxcdGlmICgoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcXG4xNTM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1Mzc6XFx0XFx0ZXJyID0gIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMTUzODpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbjE1Mzk6XFx0XFx0ICAgIHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuMTU0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQxOlxcdFxcdGVyciA9IC1FSVNDT05OO1xcbjE1NDI6XFx0XFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbjE1NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU0NDpcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTU0NTpcXHRcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuMTU0NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ3OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTU0ODpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4xNTQ5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTA6XFx0XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcXG4xNTUxOlxcdFxcdGlmIChJU19FUlIoc3ZzaykpIHtcXG4xNTUyOlxcdFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjE1NTM6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cXHUwMDNlc2tfc29jaywgc2luKTtcXG4xNTU3OlxcdFxcdGlmIChzYWxlbiBcXHUwMDNlPSAwKVxcbjE1NTg6XFx0XFx0XFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcXG4xNTU5OlxcdFxcdHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcXG4xNTYwOlxcdFxcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCk7XFxuMTU2MTpcXHRcXHRyZXR1cm4gc3ZjX29uZV9zb2NrX25hbWUoc3ZzaywgbmFtZV9yZXR1cm4sIGxlbik7XFxuMTU2MjpcXHRvdXQ6XFxuMTU2MzpcXHRcXHRzb2NrZmRfcHV0KHNvKTtcXG4xNTY0OlxcdFxcdHJldHVybiBlcnI7XFxuMTU2NTpcXHR9XFxuMTU2NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdC8qXFxuMTU2OTpcXHQgKiBDcmVhdGUgc29ja2V0IGZvciBSUEMgc2VydmljZS5cXG4xNTcwOlxcdCAqL1xcbjE1NzE6XFx0c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbjE1NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgcHJvdG9jb2wsXFxuMTU3MzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldCxcXG4xNTc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2thZGRyICpzaW4sIGludCBsZW4sXFxuMTU3NTpcXHRcXHRcXHRcXHRcXHRcXHQgIGludCBmbGFncylcXG4xNTc2OlxcdHtcXG4xNTc3OlxcdFxcdHN0cnVjdCBzdmNfc29ja1xcdCpzdnNrO1xcbjE1Nzg6XFx0XFx0c3RydWN0IHNvY2tldFxcdCpzb2NrO1xcbjE1Nzk6XFx0XFx0aW50XFx0XFx0ZXJyb3I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjQwOjM1Ljg4ODIyMjU1MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODI5MjczODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpbiBgc3ZjX2FkZHNvY2soKWAgaXMgZG9pbmcuIEl0J3MgdGFraW5nIGEgdXNlci1wcm92aWRlZCBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIChgZmRgKSBhbmQgdHJ5aW5nIHRvIHJlZ2lzdGVyIGl0IGFzIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgYHN2Y19zZXR1cF9zb2NrZXQoKWAsIHdoaWNoIGhhbmRsZXMgdGhlIGF0dGFjaG1lbnQgb2YgdGhpcyBzb2NrZXQgYW5kIHRoZSBjcml0aWNhbCBgc3Zza2AgZGF0YSwgcG90ZW50aWFsbHkgb3ZlcndyaXRpbmcgKG9yIGF0IGxlYXN0ICp1c2luZyopIGBza191c2VyX2RhdGFgIGluIHRoZSB1bmRlcmx5aW5nIGBzdHJ1Y3Qgc29ja2AuXG5cblRoZSBwYXRjaCdzIGdvdCBhIGNoZWNrIHRoZXJlLCBgaWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSkgZ290byBvdXQ7YC4gR29vZCwgYmVjYXVzZSBpZiBgc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHBvcHVsYXRlZCwgdHJ5aW5nIHRvIGF0dGFjaCB0aGlzIHNvY2tldCBhZ2Fpbiwgb3Igd29yc2UsIG92ZXJ3cml0aW5nIGBza191c2VyX2RhdGFgIGNvdWxkIGxlYWQgdG8gc2VyaW91cyBwcm9ibGVtczogbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGV2ZW4gY3Jhc2hlcywgZXNwZWNpYWxseSBsYXRlciB3aGVuIHRob3NlIGNhbGxiYWNrcyB0aWVkIHRvIGBza191c2VyX2RhdGFgIGFyZSBpbnZva2VkLiBTbywgdGhpcyBjaGVjayAqcHJldmVudHMqIHJldXNpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCBzb2NrZXQuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEkgbmVlZCB0byBhbmFseXplIGl0IHN5c3RlbWF0aWNhbGx5LlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyoqIE5vLCBub3RoaW5nIGhlcmUgaXMgc2VuZGluZyBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlIHRoYXQncyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gVGhlIGNoZWNrIHVzZXMgYHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YWAsIHdoaWNoIGlzIGEgcG9pbnRlciB3aXRoaW4gYHN0cnVjdCBzb2NrYC4gVGhlIGBzdHJ1Y3Qgc29ja2AgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGtlcm5lbCBkdXJpbmcgc29ja2V0IGNyZWF0aW9uIChvciBsYXRlciB3aGVuIHVzZXIgZGF0YSBpcyBjb25maWd1cmVkKS5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbj8qKiBOb3QgaGVyZS4gVGhpcyBpc24ndCBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtYWtpbmcgbGFyZ2UgY2hhbmdlcyBpbiBob3cgZGF0YSBpcyBpbml0aWFsaXplZC5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8uIFRoaXMgcGF0Y2ggc2ltcGx5IGFkZHMgYSBjaGVjayB0byBhdm9pZCBhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCBzb2NrZXQuXG5cblNvLCBmcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyBtZXJlbHkgYWRkaW5nIGEgc2FmZXR5IGNoZWNrIHRvIHByZXZlbnQgcmUtYXR0YWNoaW5nIGEgc29ja2V0LCBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGEgc2FuaXR5IGNoZWNrIGFnYWluc3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3RhdGUgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1hc3NvY2lhdGlvbiBidWdzLiBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYWxyZWFkeSBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcyAobGlrZSB0aGUgVUFGIGlzc3VlcykuIE5vIEtNU0FOIGZ1enppbmcgbmVlZGVkLCBpdCBzZWVtcy5cblxuKipNeSBGaW5hbCBSZWFzb25pbmc6KiogVGhpcyBwYXRjaCAqYWRkcyogYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzdmNfYWRkc29jaygpYC4gSXQgdmVyaWZpZXMgdGhhdCB0aGUgcHJvdmlkZWQgc29ja2V0IGRvZXNuJ3QgaGF2ZSBgc2tfdXNlcl9kYXRhYCBhbHJlYWR5IGFzc2lnbmVkICpiZWZvcmUqIHNldHRpbmcgaXQgdXAgYXMgYW4gUlBDIHNlcnZpY2Ugc29ja2V0LiBUaGlzIGNoZWNrIHByZXZlbnRzIGJ1Z3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHN0YXRlIGNvcnJ1cHRpb24sIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIGhhbmRsZSB0aGVzZSBzYWZldHkgY29uY2VybnMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjo0MDo0Mi43MTc1MDAyNDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIChgaWYgKHNvLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhKSBnb3RvIG91dDtgKSBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcmVqZWN0IHNvY2tldHMgdGhhdCBhbHJlYWR5IGhhdmUgYHNrX3VzZXJfZGF0YWAgcG9wdWxhdGVkLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHN0YXRlIGNvcnJ1cHRpb24sIGR1cGxpY2F0ZSBzZXR1cCwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gY29udmVydGluZyBhbiBleGlzdGluZyBzb2NrZXQgaW50byBhbiBSUEMgc2VydmljZSBzb2NrZXQuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJdCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHJlbGF0ZWQgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciB0eXBlIGNvbmZ1c2lvbikgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgKGBpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2ApIGluIGBzdmNfYWRkc29jaygpYCB0byByZWplY3Qgc29ja2V0cyB0aGF0IGFscmVhZHkgaGF2ZSBgc2tfdXNlcl9kYXRhYCBwb3B1bGF0ZWQuIFRoaXMgZ3VhcmRzIGFnYWluc3Qgc3RhdGUgY29ycnVwdGlvbiwgZHVwbGljYXRlIHNldHVwLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHNvY2tldCBpbnRvIGFuIFJQQyBzZXJ2aWNlIHNvY2tldC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcmVsYXRlZCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHR5cGUgY29uZnVzaW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[1] Phase: Succeeded StartedAt: 2026-09-02 22:40:54 +0000 UTC FinishedAt: 2026-09-02 22:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 22:40:54 +0000 UTC FinishedAt: 2026-09-02 22:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2] Phase: Succeeded StartedAt: 2026-09-02 22:40:54 +0000 UTC FinishedAt: 2026-09-03 00:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 22:40:54 +0000 UTC FinishedAt: 2026-09-03 00:19:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 22:40:54 +0000 UTC FinishedAt: 2026-09-02 22:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 22:40:54 +0000 UTC FinishedAt: 2026-09-02 22:40:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowlncf9/series-workflowlncf9-convert-artifact-2930045419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 22:41:04 +0000 UTC FinishedAt: 2026-09-02 22:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 22:41:04 +0000 UTC FinishedAt: 2026-09-02 22:58:10 +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:*958a4eeb-0a62-4bb8-8228-30a2003d022b,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-workflowlncf9/series-workflowlncf9-convert-artifact-2930045419/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": "5072e80f-04cc-4999-bc86-106329a4fa3b", "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-workflowlncf9/series-workflowlncf9-build-action-1976002025/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 22:41:04 +0000 UTC FinishedAt: 2026-09-02 22:58:00 +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:*958a4eeb-0a62-4bb8-8228-30a2003d022b,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-workflowlncf9/series-workflowlncf9-convert-artifact-2930045419/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": "5072e80f-04cc-4999-bc86-106329a4fa3b", "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-workflowlncf9/series-workflowlncf9-build-action-1976002025/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 22:58:10 +0000 UTC FinishedAt: 2026-09-02 22:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 22:58:10 +0000 UTC FinishedAt: 2026-09-02 22:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 22:58:10 +0000 UTC FinishedAt: 2026-09-02 22:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 22:58:10 +0000 UTC FinishedAt: 2026-09-02 22:58:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowlncf9/series-workflowlncf9-convert-artifact-642531522/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 22:58:20 +0000 UTC FinishedAt: 2026-09-02 23:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 22:58:20 +0000 UTC FinishedAt: 2026-09-02 23:00:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5072e80f-04cc-4999-bc86-106329a4fa3b,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-workflowlncf9/series-workflowlncf9-build-action-1976002025/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-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 23:00:22 +0000 UTC FinishedAt: 2026-09-02 23:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 23:00:22 +0000 UTC FinishedAt: 2026-09-02 23:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 23:00:22 +0000 UTC FinishedAt: 2026-09-02 23:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 23:00:22 +0000 UTC FinishedAt: 2026-09-02 23:17:31 +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:*958a4eeb-0a62-4bb8-8228-30a2003d022b,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-workflowlncf9/series-workflowlncf9-convert-artifact-642531522/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": "5b018136-19f2-46dc-9950-6685f791491d", "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-workflowlncf9/series-workflowlncf9-build-action-1498084118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 23:00:22 +0000 UTC FinishedAt: 2026-09-02 23:17:21 +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:*958a4eeb-0a62-4bb8-8228-30a2003d022b,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-workflowlncf9/series-workflowlncf9-convert-artifact-642531522/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": "5b018136-19f2-46dc-9950-6685f791491d", "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-workflowlncf9/series-workflowlncf9-build-action-1498084118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 23:17:31 +0000 UTC FinishedAt: 2026-09-02 23:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 23:17:31 +0000 UTC FinishedAt: 2026-09-02 23:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 23:17:31 +0000 UTC FinishedAt: 2026-09-02 23:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 23:17:31 +0000 UTC FinishedAt: 2026-09-02 23:19:22 +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:*5b018136-19f2-46dc-9950-6685f791491d,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-workflowlncf9/series-workflowlncf9-build-action-1498084118/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-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-03 00:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-03 00:19:36 +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":["svc_addsock"],"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:*5072e80f-04cc-4999-bc86-106329a4fa3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b018136-19f2-46dc-9950-6685f791491d,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-workflowlncf9/series-workflowlncf9-build-action-1976002025/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-workflowlncf9/series-workflowlncf9-build-action-1498084118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-02 23:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-02 23:19:35 +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":["svc_addsock"],"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-workflowlncf9/series-workflowlncf9-convert-artifact-704788471/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-02 23:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-02 23:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 23:19:31 +0000 UTC FinishedAt: 2026-09-02 23:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 23:19:41 +0000 UTC FinishedAt: 2026-09-03 00:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlncf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"bc322e11-cda7-4f01-952d-42ee99e29cc5","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 23:19:41 +0000 UTC FinishedAt: 2026-09-03 00:19:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5072e80f-04cc-4999-bc86-106329a4fa3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b018136-19f2-46dc-9950-6685f791491d,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-workflowlncf9/series-workflowlncf9-build-action-1976002025/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-workflowlncf9/series-workflowlncf9-build-action-1498084118/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-workflowlncf9/series-workflowlncf9-convert-artifact-704788471/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,}