Name: series-workflow827lr Phase: Succeeded StartedAt: 2026-09-02 12:19:29 +0000 UTC FinishedAt: 2026-09-02 16:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[0] Phase: Succeeded StartedAt: 2026-09-02 12:19:29 +0000 UTC FinishedAt: 2026-09-02 12:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 12:19:29 +0000 UTC FinishedAt: 2026-09-02 12:52:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BUFFER_HEAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BUFFER_HEAD" ], "series_id": "aa294ce3-4a5b-4769-85ed-7329eec1d8b4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bh_submit", "__block_write_full_folio", "write_dirty_buffer", "__sync_dirty_buffer", "jbd2_journal_write_metadata_buffer", "jbd2_journal_commit_transaction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ymhfc3VibWl0JiMzNDssCiAgICAmIzM0O19fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyYjMzQ7LAogICAgJiMzNDt3cml0ZV9kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVx1MDAzZWJfZm9saW9gIGlzIG5vbi1OVUxMIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgLiBXaGVuIGEgYnVmZmVyIGhlYWQgaXMgYmFja2VkIGJ5IHZpcnR1YWwgbWVtb3J5IChgYmgtXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVx1MDAzZWJfZm9saW9gIGlzIE5VTEwuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGBiaC1cdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYCBpbiBgX19iaF9zdWJtaXQoKWAuIEJ1ZmZlciBoZWFkcyBhbGxvY2F0ZWQgZm9yIG5vbi1wYWdlY2FjaGUgZGF0YSAoc3VjaCBhcyBKQkQyIHNoYWRvdy9mcm96ZW4gbWV0YWRhdGEgYnVmZmVycykgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmb2xpbyBhbmQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZHVyaW5nIHN1Ym1pc3Npb24uIFRoaXMgaXMgY29yZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2Q4ODIyMmIzMTFmNGZlNzY2ZjAxNzJjYTI0YjdlY2U4MGU5NGMzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTI6NDg6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuY1xuaW5kZXggNDI3ZDhhODE3Y2Q1Ni4uZjQ2ZmE2NDEzMDMyZCAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuY1xuQEAgLTExMDYsNyAmIzQzOzExMDYsOCBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuJiM0MztcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG9wX2lzX3dyaXRlKG9wZikpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVUZGRVJfSEVBRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JoX3N1Ym1pdCYjMzQ7LAogICAgJiMzNDtfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8mIzM0OywKICAgICYjMzQ7d3JpdGVfZGlydHlfYnVmZmVyJiMzNDssCiAgICAmIzM0O19fc3luY19kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgYmgtXHUwMDNlYl9mb2xpb2AgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkODgyMjJiMzExZjRmZTc2NmYwMTcyY2EyNGI3ZWNlODBlOTRjM2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEyOjQ4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA0MjdkOGE4MTdjZDU2Li5mNDZmYTY0MTMwMzJkIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuYwpAQCAtMTEwNiw3ICYjNDM7MTEwNiw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAKIAliaW8gPSBiaW9fYWxsb2MoYmgtJmd0O2JfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7CiAKLQlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKSAmYW1wOyZhbXA7IG9wX2lzX3dyaXRlKG9wZikpCiYjNDM7CWlmIChiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgb3BfaXNfd3JpdGUob3BmKSkKIAkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVmZmVyIEhlYWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgaW4gYGZzL2J1ZmZlci5jYC4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBfX2JoX3N1Ym1pdGAgZnVuY3Rpb24uICBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgY29uZGl0aW9uYWwgY2hlY2sgcmVsYXRlZCB0byBgZm9saW9fdGVzdF9kcm9wYmVoaW5kYCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBhIGJpdCBzaW1wbGVyLCBub3cgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUgYSBudWxsIGNoZWNrIGZvciB0aGUgYGJoLSZndDtiX2ZvbGlvYCBmaWVsZC4gSW50ZXJlc3RpbmcuIFRoZXkmIzM5O3ZlIGFkZGVkIGBiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7YCB0byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50LiAgSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IHVzZSBteSBgcmVhZC1maWxlYCB0b29sIGFuZCBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAxMTA2IGluIHRoYXQgZmlsZTsgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBjaGFuZ2UgdG8gZ3Jhc3AgdGhlIGludGVudC4gIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpcyBzb21lIHNvcnQgb2Ygc2FmZXR5IGNoZWNrLCBwcmV2ZW50aW5nIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGBiaC0mZ3Q7Yl9mb2xpb2AgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbWF5YmUgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5MDpcdFx0XHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4xMDkxOlx0XHRcdGJpb19lbmRfaW9fdCBlbmRfYmlvKVxuMTA5MjpcdHtcbjEwOTM6XHRcdHN0cnVjdCBiaW8gKmJpbztcbjEwOTQ6XHRcbjEwOTU6XHRcdEJVR19PTighYnVmZmVyX2xvY2tlZChiaCkpO1xuMTA5NjpcdFx0QlVHX09OKCFidWZmZXJfbWFwcGVkKGJoKSk7XG4xMDk3Olx0XHRCVUdfT04oYnVmZmVyX2RlbGF5KGJoKSk7XG4xMDk4Olx0XHRCVUdfT04oYnVmZmVyX3Vud3JpdHRlbihiaCkpO1xuMTA5OTpcdFxuMTEwMDpcdFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xuMTEwMTpcdFxuMTEwMjpcdFx0aWYgKGJ1ZmZlcl9tZXRhKGJoKSlcbjExMDM6XHRcdFx0b3BmIHw9IFJFUV9NRVRBO1xuMTEwNDpcdFx0aWYgKGJ1ZmZlcl9wcmlvKGJoKSlcbjExMDU6XHRcdFx0b3BmIHw9IFJFUV9QUklPO1xuMTEwNjpcdFxuMTEwNzpcdFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4xMTA4Olx0XG4xMTA5Olx0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbyBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNlxuMTExMDpcdFx0ICAgIG9wX2lzX3dyaXRlKG9wZikpXG4xMTExOlx0XHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbjExMTI6XHRcbjExMTM6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcbjExMTQ6XHRcdFx0YnVmZmVyX3NldF9jcnlwdG9fY3R4KGJpbywgYmgsIEdGUF9OT0lPKTtcbjExMTU6XHRcbjExMTY6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJoLVx1MDAzZWJfYmxvY2tuciAqIChiaC1cdTAwM2ViX3NpemUgXHUwMDNlXHUwMDNlIDkpO1xuMTExNzpcdFx0YmlvLVx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cml0ZV9oaW50O1xuMTExODpcdFxuMTExOTpcdFx0aWYgKGJoLVx1MDAzZWJfZm9saW8pXG4xMTIwOlx0XHRcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtXHUwMDNlYl9mb2xpbywgYmgtXHUwMDNlYl9zaXplLFxuMTEyMTpcdFx0XHRcdFx0ICAgICBiaF9vZmZzZXQoYmgpKTtcbjExMjI6XHRcdGVsc2VcbjExMjM6XHRcdFx0YmlvX2FkZF92aXJ0X25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZGF0YSwgYmgtXHUwMDNlYl9zaXplKTtcbjExMjQ6XHRcbjExMjU6XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xuMTEyNjpcdFx0YmlvLVx1MDAzZWJpX3ByaXZhdGUgPSBiaDtcbjExMjc6XHRcbjExMjg6XHRcdC8qIFRha2UgY2FyZSBvZiBiaCYjMzk7cyB0aGF0IHN0cmFkZGxlIHRoZSBlbmQgb2YgdGhlIGRldmljZSAqL1xuMTEyOTpcdFx0Z3VhcmRfYmlvX2VvZChiaW8pO1xuMTEzMDpcdFxuMTEzMTpcdFx0aWYgKHdiYykge1xuMTEzMjpcdFx0XHR3YmNfaW5pdF9iaW8od2JjLCBiaW8pO1xuMTEzMzpcdFx0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbjExMzQ6XHRcdFx0XHR3YmNfYWNjb3VudF9jZ3JvdXBfb3duZXIod2JjLCBiaC1cdTAwM2ViX2ZvbGlvLCBiaC1cdTAwM2ViX3NpemUpO1xuMTEzNTpcdFx0fVxuMTEzNjpcdFxuMTEzNzpcdFx0YmxrX2NyeXB0b19zdWJtaXRfYmlvKGJpbyk7XG4xMTM4Olx0fVxuMTEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJ1ZmZlciBIZWFkIFN1Ym1pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBfX2JoX3N1Ym1pdGAsIGFuZCBpdCYjMzk7cyBjbGVhciBpdCBoYW5kbGVzIGJ1ZmZlciBoZWFkIHN1Ym1pc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgcG90ZW50aWFsIGZvciBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4gU3BlY2lmaWNhbGx5LCBpZiBgYmgtJmd0O2JfZm9saW9gIGlzIE5VTEwsIHdoaWNoIEkga25vdyBpdCBjYW4gYmUgd2l0aCB2aXJ0dWFsIGJ1ZmZlcnMgb3Igc2ltaWxhciBjb25maWd1cmF0aW9ucyAoSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgYGJpb19hZGRfdmlydF9ub2ZhaWxgIHBhdGggb24gbGluZSAxMTIzKSwgdGhlbiBkZXJlZmVyZW5jaW5nIGBiaC0mZ3Q7Yl9mb2xpb2Agd2l0aGluIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtJmd0O2JfZm9saW8pYCB3b3VsZCBsZWFkIHRvIGEgY3Jhc2guCgpBaCwgYnV0IGhvbGQgb24uIEkgcmVtZW1iZXIgdGhhdCBgYmgtJmd0O2JfZm9saW9gIGNhbiBiZSBOVUxMIGV2ZW4gKndpdGhvdXQqIGJlaW5nIGEgdmlydHVhbCBidWZmZXIhIFRoaXMgaGFwcGVucyB3aGVuIGEgYnVmZmVyIGhlYWQgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19idWZmZXJfaGVhZCgpYCAqd2l0aG91dCogYSBwYWdlIG9yIGZvbGlvIGF0dGFjaGVkLiBUaGluayBhYm91dCBzY2VuYXJpb3MgbGlrZSBgY3JlYXRlX2VtcHR5X2J1ZmZlcnNgIG9yIGRpcmVjdCBjYWxscyB0byBgYWxsb2NfYnVmZmVyX2hlYWQoKWAgZm9yIG1lbW9yeSBidWZmZXJzLCBtZXRhZGF0YSBoYW5kbGluZywgb3IgZXZlbiBibG9jayBkZXZpY2UgcmVhZC93cml0ZSBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgY2FsbGluZyBgX19iaF9zdWJtaXRgIGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgd3JhcHBpbmcgaXQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgYW5kIHNlZSBob3cgdGhlc2UgTlVMTCBgYl9mb2xpb2Agc2l0dWF0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCAob3IgKm5vdCogaGFuZGxlZCwgd2hpY2ggaXMgbGlrZWx5IHRoZSByb290IG9mIHRoZSBwcm9ibGVtKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250ZXh0cyB0aGV5IGFyZSBpbiB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29kZSBhbmQgaG93IHRvIHNvbHZlIHRoaXMgcG90ZW50aWFsIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JoX3N1Ym1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTEwNzA9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9idWZmZXIuYy0xMDg4LVxuZnMvYnVmZmVyLmM6MTA4OTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuZnMvYnVmZmVyLmMtMTA5MC1cdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2J1ZmZlci5jPTExNDk9dm9pZCBiaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwgYmlvX2VuZF9pb190IGVuZF9pbylcbmZzL2J1ZmZlci5jLTExNTAte1xuZnMvYnVmZmVyLmM6MTE1MTpcdF9fYmhfc3VibWl0KGJoLCBvcGYsIFdSSVRFX0xJRkVfTk9UX1NFVCwgTlVMTCwgZW5kX2lvKTtcbmZzL2J1ZmZlci5jLTExNTItfVxuLS1cbmZzL2J1ZmZlci5jPTE3MjY9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2J1ZmZlci5jLTE4MjEtXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9idWZmZXIuYzoxODIyOlx0XHRcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcbmZzL2J1ZmZlci5jLTE4MjMtXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxuLS1cbmZzL2J1ZmZlci5jLTE4NzYtXHRcdFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbmZzL2J1ZmZlci5jOjE4Nzc6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTg3OC1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWZmZXIgSGVhZCBTdWJtaXNzaW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYGJoX3N1Ym1pdGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbiBpbiBgZnMvYnVmZmVyLmNgIHRoYXQga2lja3Mgb2ZmIHRoZSBidWZmZXIgaGVhZCBzdWJtaXNzaW9uIHByb2Nlc3MuIEl0JiMzOTtzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoYXQgcGFydGljdWxhciBmaWxlLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKmNhbGwgZ3JhcGgqKi4gSSBuZWVkIHRvIGRldGVybWluZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUga2VybmVsIGNvZGUgd2hlcmUgZWl0aGVyIGBiaF9zdWJtaXRgIGl0c2VsZiBvciBpdHMgYWxpYXMgYHN1Ym1pdF9iaGAgKGxldCYjMzk7cyBhc3N1bWUgdGhleSYjMzk7cmUgZXF1aXZhbGVudCBmb3Igbm93KSBhcmUgaW52b2tlZC4gVGhhdCBpbmZvcm1hdGlvbiB3aWxsIHBhaW50IGEgcGljdHVyZSBvZiAqaG93KiBidWZmZXIgaGVhZHMgYXJlIHN1Ym1pdHRlZCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBmaWxlIHN5c3RlbSBhbmQgYmxvY2sgSS9PIHN1YnN5c3RlbXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIGFsbG93IGEgbW9yZSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cgYW5kIGRhdGEgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaF9zdWJtaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTE1Nzg9ZnVuY3Rpb24tdHJhY2UsIHdlIGdldCBhIG11Y2ggbGFyZ2VyIG91dHB1dDo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE2MzAtICAgPVx1MDAzZSBzdWJtaXRfYmlvXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTYzMTogICA9XHUwMDNlIGJoX3N1Ym1pdFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE2MzItICAgPVx1MDAzZSBfX2V4dDNfZ2V0X2lub2RlX2xvY1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0xODcxPXRyYWNlcnMuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE5MTUtICAgPVx1MDAzZSBzdWJtaXRfYmlvXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTkxNjogICA9XHUwMDNlIGJoX3N1Ym1pdFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE5MTctICAgPVx1MDAzZSBleHQzX2JyZWFkXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MTc9c3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNTI0LVx0XHRzZXRfYnVmZmVyX21hcHBlZChiaCk7XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjUyNTpcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQywgZW5kX2JpdG1hcF93cml0ZSk7XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUyNi1cdFx0YmggPSBiaC1cdTAwM2ViX3RoaXNfcGFnZTtcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTU1OD1zdGF0aWMgaW50IHJlYWRfZmlsZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAwLVx0XHRcdHNldF9idWZmZXJfbWFwcGVkKGJoKTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjAxOlx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGVuZF9iaXRtYXBfd3JpdGUpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MDItXHRcdH1cbi0tXG5mcy9idWZmZXIuYz0xMjM9c3RhdGljIHZvaWQgYnVmZmVyX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKm1zZylcbi0tXG5mcy9idWZmZXIuYy0xMzYtICogQ2FsbCB0aGlzIGluIHlvdXIgYmlvX2VuZF9pbyBoYW5kbGVyIHRvIHJldHJpZXZlIHRoZSBidWZmZXJfaGVhZFxuZnMvYnVmZmVyLmM6MTM3OiAqIHN1Ym1pdHRlZCBpbiBiaF9zdWJtaXQoKS4gIElmIHlvdSBkaWQgbm90IGNhbGwgYmhfc3VibWl0KCksIGRvIG5vdFxuZnMvYnVmZmVyLmMtMTM4LSAqIGNhbGwgdGhpcyBmdW5jdGlvbjsgaXQgd2lsbCByZXR1cm4gZ2FyYmFnZS5cbi0tXG5mcy9idWZmZXIuYz0xNTc9RVhQT1JUX1NZTUJPTChiaW9fZW5kaW9fYmgpO1xuLS1cbmZzL2J1ZmZlci5jLTE2My0gKlxuZnMvYnVmZmVyLmM6MTY0OiAqIElmIGEgYnVmZmVyIGlzIHJlYWQgdGhyb3VnaCBhIG1lY2hhbmlzbSB0aGF0IGlzbiYjMzk7dCBiaF9zdWJtaXQoKSwgeW91XG5mcy9idWZmZXIuYy0xNjUtICogY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmaW5pc2ggdGhlIHJlYWQuXG4tLVxuZnMvYnVmZmVyLmM9MTc3PUVYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl9yZWFkX3N5bmMpO1xuLS1cbmZzL2J1ZmZlci5jLTE4Mi0gKlxuZnMvYnVmZmVyLmM6MTgzOiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UmIzM5O3JlIHJlYWRpbmcgaW50byB0aGUgYnVmZmVyLFxuZnMvYnVmZmVyLmMtMTg0LSAqIHVubGVzcyB5b3UgbmVlZCB5b3VyIG93biBzcGVjaWFsIEkvTyBlbmQgaGFuZGxlci5cbi0tXG5mcy9idWZmZXIuYz0xOTI9RVhQT1JUX1NZTUJPTChiaF9lbmRfcmVhZCk7XG4tLVxuZnMvYnVmZmVyLmMtMTk3LSAqXG5mcy9idWZmZXIuYzoxOTg6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSYjMzk7cmUgd3JpdGluZyBmcm9tIHRoZSBidWZmZXIsXG5mcy9idWZmZXIuYy0xOTktICogdW5sZXNzIHlvdSBuZWVkIHlvdXIgb3duIHNwZWNpYWwgSS9PIGVuZCBoYW5kbGVyLlxuLS1cbmZzL2J1ZmZlci5jPTM2Mj1zdGF0aWMgdm9pZCBiaF9lbmRfYXN5bmNfcmVhZChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvYnVmZmVyLmMtMzkyLSAqXG5mcy9idWZmZXIuYzozOTM6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSYjMzk7cmUgZG9pbmcgdGhlIGVxdWl2YWxlbnQgb2ZcbmZzL2J1ZmZlci5jLTM5NC0gKiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkuICBUaGF0IGlzLCB0aGUgZm9saW8gaXMgdW5sb2NrZWQsIGFuZCB3aWxsXG4tLVxuZnMvYnVmZmVyLmM9MTA3MD1zdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2J1ZmZlci5jLTEwODgtXG5mcy9idWZmZXIuYzoxMDg5OnN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG5mcy9idWZmZXIuYy0xMDkwLVx0XHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4tLVxuZnMvYnVmZmVyLmMtMTE0MC0vKipcbmZzL2J1ZmZlci5jOjExNDE6ICogYmhfc3VibWl0IC0gU3RhcnQgSS9PIGFnYWluc3QgYSBidWZmZXIgaGVhZFxuZnMvYnVmZmVyLmMtMTE0Mi0gKiBAYmg6IFRoZSBidWZmZXIgaGVhZCB0byBwZXJmb3JtIEkvTyBvbi5cbi0tXG5mcy9idWZmZXIuYy0xMTQ4LSAqL1xuZnMvYnVmZmVyLmM6MTE0OTp2b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLCBiaW9fZW5kX2lvX3QgZW5kX2lvKVxuZnMvYnVmZmVyLmMtMTE1MC17XG5mcy9idWZmZXIuYzoxMTUxOlx0X19iaF9zdWJtaXQoYmgsIG9wZiwgV1JJVEVfTElGRV9OT1RfU0VULCBOVUxMLCBlbmRfaW8pO1xuZnMvYnVmZmVyLmMtMTE1Mi19XG5mcy9idWZmZXIuYzoxMTUzOkVYUE9SVF9TWU1CT0woYmhfc3VibWl0KTtcbmZzL2J1ZmZlci5jLTExNTQtXG5mcy9idWZmZXIuYz0xMTU1PXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fYnJlYWRfc2xvdyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2J1ZmZlci5jLTExNjEtXHR9IGVsc2Uge1xuZnMvYnVmZmVyLmM6MTE2MjpcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xuZnMvYnVmZmVyLmMtMTE2My1cdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL2J1ZmZlci5jPTE2ODI9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fY3JlYXRlX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9idWZmZXIuYy0xNzE4LSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuZnMvYnVmZmVyLmM6MTcxOTogKiB0aGUgYnVmZmVyIGRpcmVjdGx5LCB3aXRoIGJoX3N1Ym1pdCgpLiAgQXQgdGhlIGFkZHJlc3Nfc3BhY2UgbGV2ZWxcbmZzL2J1ZmZlci5jLTE3MjAtICogdGhlIGZvbGlvIHdyaXRlYmFjayBmbGFnIHByZXZlbnRzIHRoaXMgY29udGVudGlvbiBmcm9tIG9jY3VycmluZy5cbi0tXG5mcy9idWZmZXIuYz0xNzI2PWludCBfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9idWZmZXIuYy0xODIxLVx0XHRpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkge1xuZnMvYnVmZmVyLmM6MTgyMjpcdFx0XHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXG5mcy9idWZmZXIuYy0xODIzLVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcbi0tXG5mcy9idWZmZXIuYy0xODM2LVx0XHQgKiBjbGVhbi4gIFNvbWVvbmUgd3JvdGUgdGhlbSBiYWNrIGJ5IGhhbmQgd2l0aFxuZnMvYnVmZmVyLmM6MTgzNzpcdFx0ICogd3JpdGVfZGlydHlfYnVmZmVyL2JoX3N1Ym1pdC4gIEEgcmFyZSBjYXNlLlxuZnMvYnVmZmVyLmMtMTgzOC1cdFx0ICovXG4tLVxuZnMvYnVmZmVyLmMtMTg3Ni1cdFx0XHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xuZnMvYnVmZmVyLmM6MTg3NzpcdFx0XHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXG5mcy9idWZmZXIuYy0xODc4LVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcbi0tXG5mcy9idWZmZXIuYz0yMjgyPWludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaylcbi0tXG5mcy9idWZmZXIuYy0yMzYzLVx0XHRpZiAocHJldilcbmZzL2J1ZmZlci5jOjIzNjQ6XHRcdFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XG5mcy9idWZmZXIuYy0yMzY1LVx0XHRwcmV2ID0gYmg7XG4tLVxuZnMvYnVmZmVyLmMtMjM3Ny1cdGlmIChwcmV2KVxuZnMvYnVmZmVyLmM6MjM3ODpcdFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XG5mcy9idWZmZXIuYy0yMzc5LVx0ZWxzZVxuLS1cbmZzL2J1ZmZlci5jPTI2ODY9dm9pZCB3cml0ZV9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxuLS1cbmZzL2J1ZmZlci5jLTI2OTItXHR9XG5mcy9idWZmZXIuYzoyNjkzOlx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcbmZzL2J1ZmZlci5jLTI2OTQtfVxuLS1cbmZzL2J1ZmZlci5jPTI3MDI9aW50IF9fc3luY19kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxuLS1cbmZzL2J1ZmZlci5jLTI3MTUtXG5mcy9idWZmZXIuYzoyNzE2Olx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xuZnMvYnVmZmVyLmMtMjcxNy1cdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL2J1ZmZlci5jPTI5NDI9aW50IF9fYmhfcmVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsIGJvb2wgd2FpdClcbi0tXG5mcy9idWZmZXIuYy0yOTQ3LVxuZnMvYnVmZmVyLmM6Mjk0ODpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgYmhfZW5kX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjk0OS1cdGlmICh3YWl0KSB7XG4tLVxuZnMvYnVmZmVyLmM9Mjk2OD12b2lkIF9fYmhfcmVhZF9iYXRjaChpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sXG4tLVxuZnMvYnVmZmVyLmMtMjk4OS1cbmZzL2J1ZmZlci5jOjI5OTA6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgYmhfZW5kX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjk5MS1cdH1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NjY0PXN0YXRpYyB2b2lkIGV4dDRfZmNfc3VibWl0X2JoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgaXNfdGFpbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjc0LVx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6Njc1Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncywgYmhfZW5kX3dyaXRlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02NzYtXHRFWFQ0X1NCKHNiKS1cdTAwM2VzX2ZjX2JoID0gTlVMTDtcbi0tXG5mcy9leHQ0L21tcC5jPTQyPXN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbW1wLmMtNDgtXHRsb2NrX2J1ZmZlcihiaCk7XG5mcy9leHQ0L21tcC5jOjQ5Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9NRVRBIHwgUkVRX1BSSU8sXG5mcy9leHQ0L21tcC5jLTUwLVx0XHRcdGJoX2VuZF93cml0ZSk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xODAtXHRcdGVuZF9pbyA9IGJoX2VuZF9yZWFkO1xuZnMvZXh0NC9zdXBlci5jOjE4MTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgZW5kX2lvKTtcbmZzL2V4dDQvc3VwZXIuYy0xODItfVxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MzI1PXN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjM1Ni1cdGNsZWFyX2J1ZmZlcl9kaXJ0eShzYmgpO1xuZnMvZXh0NC9zdXBlci5jOjYzNTc6XHRiaF9zdWJtaXQoc2JoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8XG5mcy9leHQ0L3N1cGVyLmMtNjM1OC1cdFx0ICAodGVzdF9vcHQoc2IsIEJBUlJJRVIpID8gUkVRX0ZVQSA6IDApLCBiaF9lbmRfd3JpdGUpO1xuLS1cbmZzL2dmczIvYm1hcC5jPTI5Nz1zdGF0aWMgdm9pZCBnZnMyX21ldGFwYXRoX3JhKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgX19iZTY0ICpzdGFydCwgX19iZTY0ICplbmQpXG4tLVxuZnMvZ2ZzMi9ibWFwLmMtMzA5LVx0XHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKHJhYmgpKSB7XG5mcy9nZnMyL2JtYXAuYzozMTA6XHRcdFx0XHRiaF9zdWJtaXQocmFiaCxcbmZzL2dmczIvYm1hcC5jLTMxMS1cdFx0XHRcdFx0UkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHwgUkVRX01FVEEgfFxuLS1cbmZzL2dmczIvZGlyLmM9MTQ5Mj1zdGF0aWMgdm9pZCBnZnMyX2Rpcl9yZWFkYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaHNpemUsIHUzMiBpbmRleCxcbi0tXG5mcy9nZnMyL2Rpci5jLTE1MjAtXHRcdFx0fSBlbHNlIHtcbmZzL2dmczIvZGlyLmM6MTUyMTpcdFx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHxcbmZzL2dmczIvZGlyLmMtMTUyMi1cdFx0XHRcdFx0XHRSRVFfTUVUQSB8IFJFUV9QUklPLFxuLS1cbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzctXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9nZnMyL21ldGFfaW8uYzo3ODpcdFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzktXHRcdFx0XHRcdGJoX2VuZF9hc3luY193cml0ZSk7XG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmM9MjAyPXN0YXRpYyB2b2lkIGdmczJfbWV0YV9yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9nZnMyL21ldGFfaW8uYy0yMjQtICogU3VibWl0IHNldmVyYWwgY29uc2VjdXRpdmUgYnVmZmVyIGhlYWQgSS9PIHJlcXVlc3RzIGFzIGEgc2luZ2xlIGJpbyBJL09cbmZzL2dmczIvbWV0YV9pby5jOjIyNTogKiByZXF1ZXN0LiAgKFNlZSBiaF9zdWJtaXQuKVxuZnMvZ2ZzMi9tZXRhX2lvLmMtMjI2LSAqL1xuLS1cbmZzL2piZDIvY29tbWl0LmM9MTE0PXN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfY29tbWl0X3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9jb21taXQuYy0xNTQtXG5mcy9qYmQyL2NvbW1pdC5jOjE1NTpcdGJoX3N1Ym1pdChiaCwgd3JpdGVfZmxhZ3MsIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKTtcbmZzL2piZDIvY29tbWl0LmMtMTU2LVx0KmNiaCA9IGJoO1xuLS1cbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvamJkMi9jb21taXQuYy03NTAtXHRcdFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbmZzL2piZDIvY29tbWl0LmM6NzUxOlx0XHRcdFx0Ymhfc3VibWl0KGJoLFxuZnMvamJkMi9jb21taXQuYy03NTItXHRcdFx0XHRcdFJFUV9PUF9XUklURSB8IEpCRDJfSk9VUk5BTF9SRVFfRkxBR1MsXG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MTc4OD1zdGF0aWMgaW50IGpiZDJfd3JpdGVfc3VwZXJibG9jayhqb3VybmFsX3QgKmpvdXJuYWwsIGJsa19vcGZfdCB3cml0ZV9mbGFncylcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0xODI2LVx0XHRzYi1cdTAwM2VzX2NoZWNrc3VtID0gamJkMl9zdXBlcmJsb2NrX2NzdW0oc2IpO1xuZnMvamJkMi9qb3VybmFsLmM6MTgyNzpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XG5mcy9qYmQyL2pvdXJuYWwuYy0xODI4LVx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL25pbGZzMi9idG5vZGUuYz04Nz1pbnQgbmlsZnNfYnRub2RlX3N1Ym1pdF9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywgX191NjQgYmxvY2tucixcbi0tXG5mcy9uaWxmczIvYnRub2RlLmMtMTM2LVx0YmgtXHUwMDNlYl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovXG5mcy9uaWxmczIvYnRub2RlLmM6MTM3Olx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcbmZzL25pbGZzMi9idG5vZGUuYy0xMzgtXHRiaC1cdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yOyAvKiBzZXQgYmFjayB0byB0aGUgZ2l2ZW4gYmxvY2sgYWRkcmVzcyAqL1xuLS1cbmZzL25pbGZzMi9nY2lub2RlLmM9NTU9aW50IG5pbGZzX2djY2FjaGVfc3VibWl0X3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibGtvZmYsXG4tLVxuZnMvbmlsZnMyL2djaW5vZGUuYy04NS1cdGJoLVx1MDAzZWJfYmxvY2tuciA9IHBibjtcbmZzL25pbGZzMi9nY2lub2RlLmM6ODY6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XG5mcy9uaWxmczIvZ2Npbm9kZS5jLTg3LVx0aWYgKHZibilcbi0tXG5mcy9uaWxmczIvbWR0LmM9MTE2PW5pbGZzX21kdF9zdWJtaXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibGtvZmYsIGJsa19vcGZfdCBvcGYsXG4tLVxuZnMvbmlsZnMyL21kdC5jLTE1MC1cbmZzL25pbGZzMi9tZHQuYzoxNTE6XHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xuZnMvbmlsZnMyL21kdC5jLTE1Mi1cdHJldCA9IDA7XG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zOD1pbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy02NC1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NjU6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSwgYmhfZW5kX3dyaXRlKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjYtXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz04OT1pbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLFxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ3LVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzoxNDg6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ5LVx0fVxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9MTkxPWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0zMjUtXHRcdFx0XHRzZXRfYnVmZmVyX25lZWRzX3ZhbGlkYXRlKGJoKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6MzI2Olx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzI3LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDI1PWludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDYtXHRvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi1cdTAwM2VzYiwgYmgtXHUwMDNlYl9kYXRhLCBcdTAwMjZkaS1cdTAwM2VpX2NoZWNrKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NDQ3Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUsIGJoX2VuZF93cml0ZSk7XG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQ0OC1cbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9NDg9c3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU2LSAqIGEgZm9saW8gKHZpYSBhIGZvbGlvX21hcHBpbmcpIGFuZCBmb3Igd3JhcHBpbmcgYmlvIHN1Ym1pc3Npb25cbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDo1NzogKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIChlLmcuIGJoX3N1Ym1pdCkuXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtNTgtICovXG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTIzMD1ib29sIGJpb19lbmRpb19iaChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjMxLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjIzMjovKiBDb21wbGV0aW9uIHJvdXRpbmVzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGJoX3N1Ym1pdCgpICovXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjMzLXZvaWQgYmhfZW5kX3JlYWQoc3RydWN0IGJpbyAqYmlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9MjY1PXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjY2OnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBibGtfb3BmX3QsIGJpb19lbmRfaW9fdCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjY3LXZvaWQgd3JpdGVfYm91bmRhcnlfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5tbS92bXNjYW4uYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNDQ5LVx0XHQgKiBUaGlzIGhhcHBlbnMgaWYgdGhlIGJ1ZmZlcnMgd2VyZSB3cml0dGVuIG91dCBkaXJlY3RseSxcbm1tL3Ztc2Nhbi5jOjE0NTA6XHRcdCAqIHdpdGggYmhfc3VibWl0KCkuIGV4dDMgd2lsbCBkbyB0aGlzLCBhcyB3ZWxsIGFzXG5tbS92bXNjYW4uYy0xNDUxLVx0XHQgKiB0aGUgYmxvY2tkZXYgbWFwcGluZy4gIGZpbGVtYXBfcmVsZWFzZV9mb2xpbygpIHdpbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIExlZ2FjeSBCdWZmZXIgSGVhZCBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGJ1ZmZlcl9oZWFkIGJ1c2luZXNzIGFnYWluLiBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSAqYW5jaWVudCogYnVmZmVyX2hlYWRzIOKAkyB0aGUgb25lcyBzdGlsbCBraWNraW5nIGFyb3VuZCB3aXRob3V0IHRoZSBtb3JlIG1vZGVybiBmb2xpbyBzdXBwb3J0IOKAkyBhcmUgYmVpbmcgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSBhbmQgd2hhdCB0aGV5IGFyZSB1c2VkIGZvci4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBsZWdhY3kgY29tcG9uZW50cyBjb250aW51ZSB0byBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQga2VybmVsIGFuZCB3aHkgdGhleSBoYXZlIG5vdCBiZWVuIHJlbW92ZWQuCgpNeSBwbGFuIGlzIHNpbXBsZTogbGV0JiMzOTtzIGZpcmUgdXAgYGdyZXBgLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGEgZmV3IGtleSBpbmRpY2F0b3JzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBhbGxvY19idWZmZXJfaGVhZGAg4oCTIHRoYXQgc2hvdWxkIGZsYWcgYW55IGRpcmVjdCBhbGxvY2F0aW9uIHNpdGVzLiBUaGVuLCBJJiMzOTtsbCB1c2UgYGJoLSZndDtiX2ZvbGlvYCB0byBzZWUgd2hlcmUgdGhlIHN5c3RlbSBpcyB3b3JraW5nIHdpdGggdGhlICphYnNlbmNlKiBvZiBmb2xpby1iYWNrZWQgYnVmZmVycy4gRmluYWxseSwgSSYjMzk7bGwgcHJvYmUgZm9yIGBiX2RhdGFgLiBUaGF0IHNob3VsZCBwaWNrIHVwIGEgbG90IG9mIHRoZSBvbGRlciBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoYXQgZmllbGQgZm9yIGFjY2Vzc2luZyB0aGUgYnVmZmVyJiMzOTtzIGNvbnRlbnRzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGxlZ2FjeSBzeXN0ZW0gaXMgYmVpbmcgdXNlZC4gVGhpcyBjb3VsZCBiZSBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCBvciBJIGNvdWxkIGp1c3QgYmUgbG9va2luZyB0byBiZXR0ZXIgdW5kZXJzdGFuZCBhIHN5c3RlbSB0aGF0IGlzIHN0aWxsIGNyaXRpY2FsIHRvIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiX2RhdGEuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWRmcy9zdXBlci5jPTMwMj1zdGF0aWMgaW50IGFkZnNfdmFsaWRhdGVfYmJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2FkZnMvc3VwZXIuYy0zMDctXG5mcy9hZGZzL3N1cGVyLmM6MzA4Olx0Yl9kYXRhID0gYmgtXHUwMDNlYl9kYXRhICYjNDM7IChBREZTX0RJU0NSRUNPUkQgJSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG5mcy9hZGZzL3N1cGVyLmMtMzA5LVx0aWYgKGFkZnNfY2hlY2tiYmxrKGJfZGF0YSkpXG4tLVxuZnMvYWZmcy9hZmZzLmg9MjgxPWFmZnNfYWRqdXN0X2NoZWNrc3VtKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiB2YWwpXG4tLVxuZnMvYWZmcy9hZmZzLmgtMjgzLVx0dTMyIHRtcCA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVs1XSk7XG5mcy9hZmZzL2FmZnMuaDoyODQ6XHQoKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSlbNV0gPSBjcHVfdG9fYmUzMih0bXAgLSB2YWwpO1xuZnMvYWZmcy9hZmZzLmgtMjg1LX1cbi0tXG5mcy9hZmZzL2FmZnMuaD0yODc9YWZmc19hZGp1c3RfYml0bWFwY2hlY2tzdW0oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgdTMyIHZhbClcbi0tXG5mcy9hZmZzL2FmZnMuaC0yODktXHR1MzIgdG1wID0gYmUzMl90b19jcHUoKChfX2JlMzIgKiliaC1cdTAwM2ViX2RhdGEpWzBdKTtcbmZzL2FmZnMvYWZmcy5oOjI5MDpcdCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKHRtcCAtIHZhbCk7XG5mcy9hZmZzL2FmZnMuaC0yOTEtfVxuLS1cbmZzL2FmZnMvYml0bWFwLmM9Mzk9YWZmc19mcmVlX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBibG9jaylcbi0tXG5mcy9hZmZzL2JpdG1hcC5jLTc5LVx0dG1wID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cdTAwM2ViX2RhdGEpO1xuZnMvYWZmcy9iaXRtYXAuYzo4MDpcdCooX19iZTMyICopYmgtXHUwMDNlYl9kYXRhID0gY3B1X3RvX2JlMzIodG1wIC0gbWFzayk7XG5mcy9hZmZzL2JpdG1hcC5jLTgxLVxuLS1cbmZzL2FmZnMvYml0bWFwLmM9MTE1PWFmZnNfYWxsb2NfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGdvYWwpXG4tLVxuZnMvYWZmcy9iaXRtYXAuYy0yMjMtXHR0bXAgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSk7XG5mcy9hZmZzL2JpdG1hcC5jOjIyNDpcdCooX19iZTMyICopYmgtXHUwMDNlYl9kYXRhID0gY3B1X3RvX2JlMzIodG1wICYjNDM7IG1hc2spO1xuZnMvYWZmcy9iaXRtYXAuYy0yMjUtXG4tLVxuZnMvYWZmcy9iaXRtYXAuYz0yNDQ9aW50IGFmZnNfaW5pdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncylcbi0tXG5mcy9hZmZzL2JpdG1hcC5jLTMyNi1cdFx0Ly9pZiAob2xkICE9IG5ldykge1xuZnMvYWZmcy9iaXRtYXAuYzozMjc6XHRcdFx0KChfX2JlMzIgKiliaC1cdTAwM2ViX2RhdGEpW29mZnNldF0gPSBjcHVfdG9fYmUzMihuZXcpO1xuZnMvYWZmcy9iaXRtYXAuYy0zMjgtXHRcdFx0LyogZml4IGNoZWNrc3VtICovXG4tLVxuZnMvYWZmcy9iaXRtYXAuYy0zMzAtXHRcdFx0Ly9vbGQgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSk7XG5mcy9hZmZzL2JpdG1hcC5jOjMzMTpcdFx0XHQvLyooX19iZTMyICopYmgtXHUwMDNlYl9kYXRhID0gY3B1X3RvX2JlMzIob2xkIC0gbmV3KTtcbmZzL2FmZnMvYml0bWFwLmMtMzMyLVx0XHRcdC8vbWFya19idWZmZXJfZGlydHkoYmgpO1xuLS1cbmZzL2FmZnMvYml0bWFwLmMtMzM3LVx0d2hpbGUgKCYjNDM7JiM0MztvZmZzZXQgXHUwMDNjIHNiLVx1MDAzZXNfYmxvY2tzaXplIC8gNClcbmZzL2FmZnMvYml0bWFwLmM6MzM4Olx0XHQoKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSlbb2Zmc2V0XSA9IDA7XG5mcy9hZmZzL2JpdG1hcC5jOjMzOTpcdCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVswXSA9IDA7XG5mcy9hZmZzL2JpdG1hcC5jOjM0MDpcdCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKC1hZmZzX2NoZWNrc3VtX2Jsb2NrKHNiLCBiaCkpO1xuZnMvYWZmcy9iaXRtYXAuYy0zNDEtXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tLVxuZnMvYnVmZmVyLmM9MTQ2OD12b2lkIGZvbGlvX3NldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2J1ZmZlci5jLTE0NzYtXHRcdCAqL1xuZnMvYnVmZmVyLmM6MTQ3NzpcdFx0YmgtXHUwMDNlYl9kYXRhID0gKGNoYXIgKikoMCAmIzQzOyBvZmZzZXQpO1xuZnMvYnVmZmVyLmMtMTQ3OC1cdGVsc2VcbmZzL2J1ZmZlci5jOjE0Nzk6XHRcdGJoLVx1MDAzZWJfZGF0YSA9IGZvbGlvX2FkZHJlc3MoZm9saW8pICYjNDM7IG9mZnNldDtcbmZzL2J1ZmZlci5jLTE0ODAtfVxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9MjIzPXN0YXRpYyBpbnQgbWJ0X2dycF9jdHhfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjI3LVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoyMjg6XHRncnBfY3R4LVx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBremFsbG9jKEVYVDRfQkxPQ0tfU0laRShzYiksIEdGUF9LRVJORUwpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoyMjk6XHRpZiAoZ3JwX2N0eC1cdTAwM2ViaXRtYXBfYmguYl9kYXRhID09IE5VTEwpXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTIzMC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz0yMzc9c3RhdGljIHZvaWQgbWJ0X2dycF9jdHhfcmVsZWFzZShzdHJ1Y3QgbWJ0X2dycF9jdHggKmdycF9jdHgpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0yMzktXHRrZnJlZShncnBfY3R4LVx1MDAzZWJpdG1hcF9iaC5iX2RhdGEpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoyNDA6XHRncnBfY3R4LVx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBOVUxMO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0yNDEtfVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQwODk9ZXh0NF9tYl9tYXJrX2NvbnRleHQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBzdGF0ZSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00MTQxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuZnMvZXh0NC9tYmFsbG9jLmM6NDE0MjpcdFx0XHRpZiAobWJfdGVzdF9iaXQoYmxrb2ZmICYjNDM7IGksIGJpdG1hcF9iaC1cdTAwM2ViX2RhdGEpID09XG5mcy9leHQ0L21iYWxsb2MuYy00MTQzLVx0XHRcdFx0XHRzdGF0ZSlcbi0tXG5mcy9mMmZzL2RlYnVnLmM9MTI3PXN0YXRpYyB2b2lkIHVwZGF0ZV9nZW5lcmFsX3N0YXR1cyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpXG4tLVxuZnMvZjJmcy9kZWJ1Zy5jLTE3NC1cdHNpLVx1MDAzZW5yX3diX2NwX2RhdGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX1dCX0NQX0RBVEEpO1xuZnMvZjJmcy9kZWJ1Zy5jOjE3NTpcdHNpLVx1MDAzZW5yX3diX2RhdGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX1dCX0RBVEEpO1xuZnMvZjJmcy9kZWJ1Zy5jLTE3Ni1cdHNpLVx1MDAzZW5yX3JkX2RhdGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX1JEX0RBVEEpO1xuLS1cbmZzL2Z1c2UvZmlsZS5jPTIyMTM9c3RhdGljIHNzaXplX3QgZnVzZV9pb21hcF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yMjE2LXtcbmZzL2Z1c2UvZmlsZS5jOjIyMTc6XHRzdHJ1Y3QgZnVzZV9maWxsX3diX2RhdGEgKmRhdGEgPSB3cGMtXHUwMDNld2JfY3R4O1xuZnMvZnVzZS9maWxlLmMtMjIxOC1cdHN0cnVjdCBmdXNlX3dyaXRlcGFnZV9hcmdzICp3cGEgPSBkYXRhLVx1MDAzZXdwYTtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0yMjczPXN0YXRpYyBpbnQgZnVzZV9pb21hcF93cml0ZWJhY2tfc3VibWl0KHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvZnVzZS9maWxlLmMtMjI3NS17XG5mcy9mdXNlL2ZpbGUuYzoyMjc2Olx0c3RydWN0IGZ1c2VfZmlsbF93Yl9kYXRhICpkYXRhID0gd3BjLVx1MDAzZXdiX2N0eDtcbmZzL2Z1c2UvZmlsZS5jLTIyNzctXG4tLVxuZnMvZnVzZS9maWxlLmM9MjI5Nj1zdGF0aWMgaW50IGZ1c2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yMzAwLVx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTtcbmZzL2Z1c2UvZmlsZS5jOjIzMDE6XHRzdHJ1Y3QgZnVzZV9maWxsX3diX2RhdGEgZGF0YSA9IHt9O1xuZnMvZnVzZS9maWxlLmMtMjMwMi1cdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0yMzIwPXN0YXRpYyBpbnQgZnVzZV9sYXVuZGVyX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZnVzZS9maWxlLmMtMjMyMi1cdGludCBlcnIgPSAwO1xuZnMvZnVzZS9maWxlLmM6MjMyMzpcdHN0cnVjdCBmdXNlX2ZpbGxfd2JfZGF0YSBkYXRhID0ge307XG5mcy9mdXNlL2ZpbGUuYy0yMzI0LVx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuLS1cbmZzL2dmczIveGF0dHIuYz04OD1zdGF0aWMgaW50IGVhX2ZvcmVhY2hfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZ2ZzMi94YXR0ci5jLTEwMi1cdFx0fVxuZnMvZ2ZzMi94YXR0ci5jOjEwMzpcdFx0aWYgKCEoYmgtXHUwMDNlYl9kYXRhIFx1MDAzYz0gKGNoYXIgKillYSBcdTAwMjZcdTAwMjYgKGNoYXIgKilHRlMyX0VBMk5FWFQoZWEpIFx1MDAzYz1cbmZzL2dmczIveGF0dHIuYy0xMDQtXHRcdFx0XHRcdFx0ICBiaC1cdTAwM2ViX2RhdGEgJiM0MzsgYmgtXHUwMDNlYl9zaXplKSkge1xuLS1cbmZzL2hwZnMvYnVmZmVyLmM9MTE0PXZvaWQgKmhwZnNfbWFwXzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICpxYmgsXG4tLVxuZnMvaHBmcy9idWZmZXIuYy0xMzQtXG5mcy9ocGZzL2J1ZmZlci5jOjEzNTpcdGlmIChsaWtlbHkocWJoLVx1MDAzZWJoWzFdLVx1MDAzZWJfZGF0YSA9PSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhICYjNDM7IDEgKiA1MTIpIFx1MDAyNlx1MDAyNlxuZnMvaHBmcy9idWZmZXIuYzoxMzY6XHQgICAgbGlrZWx5KHFiaC1cdTAwM2ViaFsyXS1cdTAwM2ViX2RhdGEgPT0gcWJoLVx1MDAzZWJoWzBdLVx1MDAzZWJfZGF0YSAmIzQzOyAyICogNTEyKSBcdTAwMjZcdTAwMjZcbmZzL2hwZnMvYnVmZmVyLmM6MTM3Olx0ICAgIGxpa2VseShxYmgtXHUwMDNlYmhbM10tXHUwMDNlYl9kYXRhID09IHFiaC1cdTAwM2ViaFswXS1cdTAwM2ViX2RhdGEgJiM0MzsgMyAqIDUxMikpIHtcbmZzL2hwZnMvYnVmZmVyLmMtMTM4LVx0XHRyZXR1cm4gcWJoLVx1MDAzZWRhdGEgPSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhO1xuLS1cbmZzL2hwZnMvYnVmZmVyLmM9MTY4PXZvaWQgKmhwZnNfZ2V0XzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sXG4tLVxuZnMvaHBmcy9idWZmZXIuYy0xODQtXG5mcy9ocGZzL2J1ZmZlci5jOjE4NTpcdGlmIChsaWtlbHkocWJoLVx1MDAzZWJoWzFdLVx1MDAzZWJfZGF0YSA9PSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhICYjNDM7IDEgKiA1MTIpIFx1MDAyNlx1MDAyNlxuZnMvaHBmcy9idWZmZXIuYzoxODY6XHQgICAgbGlrZWx5KHFiaC1cdTAwM2ViaFsyXS1cdTAwM2ViX2RhdGEgPT0gcWJoLVx1MDAzZWJoWzBdLVx1MDAzZWJfZGF0YSAmIzQzOyAyICogNTEyKSBcdTAwMjZcdTAwMjZcbmZzL2hwZnMvYnVmZmVyLmM6MTg3Olx0ICAgIGxpa2VseShxYmgtXHUwMDNlYmhbM10tXHUwMDNlYl9kYXRhID09IHFiaC1cdTAwM2ViaFswXS1cdTAwM2ViX2RhdGEgJiM0MzsgMyAqIDUxMikpIHtcbmZzL2hwZnMvYnVmZmVyLmMtMTg4LVx0XHRyZXR1cm4gcWJoLVx1MDAzZWRhdGEgPSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhO1xuLS1cbmZzL2piZDIvam91cm5hbC5jPTMyND1pbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0zNjYtXHRcdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbmZzL2piZDIvam91cm5hbC5jOjM2NzpcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG5mcy9qYmQyL2pvdXJuYWwuYy0zNjgtXHR9IGVsc2Uge1xuLS1cbmZzL2piZDIvam91cm5hbC5jLTQxMS1cdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbmZzL2piZDIvam91cm5hbC5jOjQxMjpcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG5mcy9qYmQyL2pvdXJuYWwuYy00MTMtXHR9XG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jPTE5OD1zdGF0aWMgaW50IGNvdW50X3RhZ3Moam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2piZDIvcmVjb3ZlcnkuYy0yMDktXG5mcy9qYmQyL3JlY292ZXJ5LmM6MjEwOlx0d2hpbGUgKCh0YWdwIC0gYmgtXHUwMDNlYl9kYXRhICYjNDM7IHRhZ19ieXRlcykgXHUwMDNjPSBzaXplKSB7XG5mcy9qYmQyL3JlY292ZXJ5LmMtMjExLVx0XHRtZW1jcHkoXHUwMDI2dGFnLCB0YWdwLCBzaXplb2YodGFnKSk7XG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jPTQ5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBqYmQyX2RvX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jLTUwOS1cdHRhZ3AgPSBcdTAwMjZiaC1cdTAwM2ViX2RhdGFbc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpXTtcbmZzL2piZDIvcmVjb3ZlcnkuYzo1MTA6XHR3aGlsZSAodGFncCAtIGJoLVx1MDAzZWJfZGF0YSAmIzQzOyB0YWdfYnl0ZXMgXHUwMDNjPVxuZnMvamJkMi9yZWNvdmVyeS5jLTUxMS1cdCAgICAgICBqb3VybmFsLVx1MDAzZWpfYmxvY2tzaXplIC0gZGVzY3JfY3N1bV9zaXplKSB7XG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jLTU2MS1cdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEpCRDJfRkxBR19FU0NBUEUpIHtcbmZzL2piZDIvcmVjb3ZlcnkuYzo1NjI6XHRcdFx0XHQqKChfX2JlMzIgKiluYmgtXHUwMDNlYl9kYXRhKSA9XG5mcy9qYmQyL3JlY292ZXJ5LmMtNTYzLVx0XHRcdFx0Y3B1X3RvX2JlMzIoSkJEMl9NQUdJQ19OVU1CRVIpO1xuLS1cbmZzL2piZDIvcmV2b2tlLmM9NTczPXN0YXRpYyB2b2lkIHdyaXRlX29uZV9yZXZva2VfcmVjb3JkKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuLS1cbmZzL2piZDIvcmV2b2tlLmMtNjI1LVx0aWYgKGpiZDJfaGFzX2ZlYXR1cmVfNjRiaXQoam91cm5hbCkpXG5mcy9qYmQyL3Jldm9rZS5jOjYyNjpcdFx0KiAoKF9fYmU2NCAqKShcdTAwMjZkZXNjcmlwdG9yLVx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxuZnMvamJkMi9yZXZva2UuYy02MjctXHRcdFx0Y3B1X3RvX2JlNjQocmVjb3JkLVx1MDAzZWJsb2NrbnIpO1xuZnMvamJkMi9yZXZva2UuYy02MjgtXHRlbHNlXG5mcy9qYmQyL3Jldm9rZS5jOjYyOTpcdFx0KiAoKF9fYmUzMiAqKShcdTAwMjZkZXNjcmlwdG9yLVx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxuZnMvamJkMi9yZXZva2UuYy02MzAtXHRcdFx0Y3B1X3RvX2JlMzIocmVjb3JkLVx1MDAzZWJsb2NrbnIpO1xuLS1cbmZzL21pbml4L2lub2RlLmM9MjI0PXN0YXRpYyBpbnQgbWluaXhfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9taW5peC9pbm9kZS5jLTI4My1cdFx0cy1cdTAwM2VzX21heF9saW5rcyA9IE1JTklYMl9MSU5LX01BWDtcbmZzL21pbml4L2lub2RlLmM6Mjg0Olx0fSBlbHNlIGlmICggKihfX3UxNiAqKShiaC1cdTAwM2ViX2RhdGEgJiM0MzsgMjQpID09IE1JTklYM19TVVBFUl9NQUdJQykge1xuZnMvbWluaXgvaW5vZGUuYy0yODUtXHRcdG0zcyA9IChzdHJ1Y3QgbWluaXgzX3N1cGVyX2Jsb2NrICopIGJoLVx1MDAzZWJfZGF0YTtcbi0tXG5mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jPTE0NjE9c3RhdGljIHZvaWQgbzJoYl9kZWJ1Z19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqZGlyLFxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMtMTQ3MS1cdCgqZGIpLVx1MDAzZWRiX2xlbiA9IGxlbjtcbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmM6MTQ3MjpcdCgqZGIpLVx1MDAzZWRiX2RhdGEgPSBkYXRhO1xuZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYy0xNDczLVxuLS1cbmZzL3JvbWZzL3N0b3JhZ2UuYz0xNjM9c3RhdGljIGludCByb21mc19ibGtfc3RyY21wKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zLFxuLS1cbmZzL3JvbWZzL3N0b3JhZ2UuYy0xNzctXHRcdFx0cmV0dXJuIC1FSU87XG5mcy9yb21mcy9zdG9yYWdlLmM6MTc4Olx0XHRtYXRjaGVkID0gKG1lbWNtcChiaC1cdTAwM2ViX2RhdGEgJiM0Mzsgb2Zmc2V0LCBzdHIsIHNlZ21lbnQpID09IDApO1xuZnMvcm9tZnMvc3RvcmFnZS5jLTE3OS1cbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz04Nzc9c3RhdGljIHZvaWQgdGNvbl9zdXBlcl9jYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICphcmcpXG5mcy9zbWIvY2xpZW50L21pc2MuYy04Nzgte1xuZnMvc21iL2NsaWVudC9taXNjLmM6ODc5Olx0c3RydWN0IHN1cGVyX2NiX2RhdGEgKnNkID0gYXJnO1xuZnMvc21iL2NsaWVudC9taXNjLmMtODgwLVx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjtcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTAxLXtcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkwMjpcdHN0cnVjdCBzdXBlcl9jYl9kYXRhIHNkID0ge1xuZnMvc21iL2NsaWVudC9taXNjLmMtOTAzLVx0XHQuZGF0YSA9IGRhdGEsXG4tLVxuZnMvdWRmL3VkZmRlY2wuaD0xMTY9c3RhdGljIGlubGluZSB2b2lkIHVkZl91cGRhdGVkX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy91ZGYvdWRmZGVjbC5oLTEyMS1cdFdBUk5fT05fT05DRSgoKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKVxuZnMvdWRmL3VkZmRlY2wuaDoxMjI6XHRcdCAgICAgYmgtXHUwMDNlYl9kYXRhKS1cdTAwM2VpbnRlZ3JpdHlUeXBlICE9XG5mcy91ZGYvdWRmZGVjbC5oLTEyMy1cdFx0ICAgICBjcHVfdG9fbGUzMihMVklEX0lOVEVHUklUWV9UWVBFX09QRU4pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBqYmQyKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBqYmQyIGpvdXJuYWxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvamJkMi9qb3VybmFsLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBjcmFzaCBpcyBoYXBwZW5pbmcuIFRoZSB0cmFjZSBzZWVtcyB0byBwb2ludCB0byBhIHByb2JsZW0gYXJvdW5kIHRoZSBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIGxpbmU6CgpgYGBjCm5ld19iaC0mZ3Q7Yl9kYXRhID0gamhfaW4tJmd0O2JfZnJvemVuX2RhdGE7CmBgYAoKaXMgcGFydCBvZiB0aGUgcHJvYmxlbS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBpc3N1ZSBzdGVtcyBmcm9tIGhvdyBgbmV3X2JoYCBpcyBiZWluZyBhbGxvY2F0ZWQuIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVpbmcgYWxsb2NhdGVkIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbzsgYG5ld19iaC0mZ3Q7Yl9mb2xpb2AgaXMgZ29pbmcgdG8gYmUgTlVMTCBpbiB0aGlzIHNpdHVhdGlvbi4gTm93LCB0aGUgcG90ZW50aWFsIHByb2JsZW0gaXMgdGhhdCBsYXRlciB3aGVuIGBqYmQyYCB0cmllcyB0byB3cml0ZSB0aGUgbWV0YWRhdGEgYnVmZmVyLCBtYXliZSB1c2luZyBgYmhfc3VibWl0KG5ld19iaCwgLi4uKWAgb3IgYF9fYmhfc3VibWl0YCwgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIGEgYG5ld19iaGAgd2l0aCBhIG51bGwgYGJfZm9saW9gLiBUaGUgdHJhY2Ugc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IGEgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbylgIGNhbGwgaXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gCgpUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmcy9qYmQyL2pvdXJuYWwuY2AgYXJvdW5kIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYCBhbmQgdHJhY2UgaG93IGBuZXdfYmhgIGlzIGJlaW5nIHVzZWQgdG8gY29uZmlybSB0aGlzIGh5cG90aGVzaXMgYW5kIHVuZGVyc3RhbmQgdGhlIHByZWNpc2Ugc2VxdWVuY2Ugb2YgZXZlbnRzIGxlYWRpbmcgdXAgdG8gdGhhdCBwcm9ibGVtYXRpYyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kYCBjYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbmV3X2JoYCBpcyBjcmVhdGVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2piZDIvam91cm5hbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHRcdCAqIGFsc28gcGFydCBvZiBhIHNoYXJlZCBtYXBwaW5nLCBhbmQgYW5vdGhlciB0aHJlYWQgaGFzXG4gMzQxOlx0XHQgKiBkZWNpZGVkIHRvIGxhdW5jaCBhIHdyaXRlcGFnZSgpIGFnYWluc3QgdGhpcyBidWZmZXIuXG4gMzQyOlx0XHQgKi9cbiAzNDM6XHRcdEpfQVNTRVJUX0JIKGJoX2luLCBidWZmZXJfamJkZGlydHkoYmhfaW4pKTtcbiAzNDQ6XHRcbiAzNDU6XHRcdG5ld19iaCA9IGFsbG9jX2J1ZmZlcl9oZWFkKEdGUF9OT0ZTfF9fR0ZQX05PRkFJTCk7XG4gMzQ2Olx0XG4gMzQ3Olx0XHQvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovXG4gMzQ4Olx0XHRhdG9taWNfc2V0KFx1MDAyNm5ld19iaC1cdTAwM2ViX2NvdW50LCAxKTtcbiAzNDk6XHRcbiAzNTA6XHRcdC8qXG4gMzUxOlx0XHQgKiBiX2Zyb3plbl9kYXRhIGlzIHNsYWIgbWVtb3J5LCBub3QgcGFnZSBjYWNoZSwgc28gd2hlbiB3ZSB1c2UgaXQgdGhlXG4gMzUyOlx0XHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcbiAzNTM6XHRcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxuIDM1NDpcdFx0ICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC1cdTAwM2VtYXBwaW5nIHRvXG4gMzU1Olx0XHQgKiBhbnl0aGluZyB0aGF0IGdvZXMgbG9va2luZyBmb3IgYW4gYWRkcmVzc19zcGFjZS5cbiAzNTY6XHRcdCAqL1xuIDM1NzpcdFxuIDM1ODpcdFx0c3Bpbl9sb2NrKFx1MDAyNmpoX2luLVx1MDAzZWJfc3RhdGVfbG9jayk7XG4gMzU5Olx0XHQvKlxuIDM2MDpcdFx0ICogSWYgYSBuZXcgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgZG9uZSBhIGJ1ZmZlciBjb3B5LW91dCwgdGhlblxuIDM2MTpcdFx0ICogd2UgdXNlIHRoYXQgdmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhlIGNvbW1pdC5cbiAzNjI6XHRcdCAqL1xuIDM2MzpcdFx0aWYgKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpIHtcbiAzNjQ6XHRcdFx0ZG9fZXNjYXBlID0gamJkMl9kYXRhX25lZWRzX2VzY2FwaW5nKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuIDM2NTpcdFx0XHRpZiAoZG9fZXNjYXBlKVxuIDM2NjpcdFx0XHRcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gMzY3Olx0XHRcdG5ld19iaC1cdTAwM2ViX2RhdGEgPSBqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhO1xuIDM2ODpcdFx0fSBlbHNlIHtcbiAzNjk6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJoX2luLVx1MDAzZWJfZm9saW87XG4gMzcwOlx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8oZm9saW8sIGJoX2luLVx1MDAzZWJfZGF0YSk7XG4gMzcxOlx0XHRcdGNoYXIgKnRtcDtcbiAzNzI6XHRcdFx0Y2hhciAqbWFwcGVkX2RhdGE7XG4gMzczOlx0XG4gMzc0Olx0XHRcdG1hcHBlZF9kYXRhID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcbiAzNzU6XHRcdFx0LypcbiAzNzY6XHRcdFx0ICogRmlyZSBkYXRhIGZyb3plbiB0cmlnZ2VyIGlmIGRhdGEgYWxyZWFkeSB3YXNuJiMzOTt0IGZyb3plbi4gRG9cbiAzNzc6XHRcdFx0ICogdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yIGVzY2FwaW5nLCBhcyB0aGUgdHJpZ2dlciBtYXkgbW9kaWZ5XG4gMzc4Olx0XHRcdCAqIHRoZSBtYWdpYyBvZmZzZXQuICBJZiBhIGNvcHktb3V0IGhhcHBlbnMgYWZ0ZXJ3YXJkcywgaXQgd2lsbFxuIDM3OTpcdFx0XHQgKiBoYXZlIHRoZSBjb3JyZWN0IGRhdGEgaW4gdGhlIGJ1ZmZlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29tbWVudCBpbiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5OgoKYGBgYwoJCS8qCgkJICogYl9mcm96ZW5fZGF0YSBpcyBzbGFiIG1lbW9yeSwgbm90IHBhZ2UgY2FjaGUsIHNvIHdoZW4gd2UgdXNlIGl0IHRoZQoJCSAqIHNoYWRvdyBidWZmZXIgZ2V0cyBubyBmb2xpbyBhdCBhbGw6IGJfZm9saW8gc3RheXMgTlVMTCBmcm9tIHRoZQoJCSAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuIFBvaW50aW5nIGl0IGF0CgkJICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC0mZ3Q7bWFwcGluZyB0bwoJCSAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLgoJCSAqLwpgYGAKClJpZ2h0LCBhbmQgaXQgc2VlbXMgdGhlIGlzc3VlIGlzIHRoYXQgd2hlbiBgYmhfc3VibWl0YCBpcyBjYWxsZWQgb24gYSBgbmV3X2JoYCwgYF9fYmhfc3VibWl0YCB0aGVuIGNoZWNrcyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYGJoLSZndDtiX2ZvbGlvYCAqY2FuKiBiZSBOVUxMIGJlY2F1c2Ugb2YgdGhhdCBzbGFiIG1lbW9yeSBzaXR1YXRpb24gbWVudGlvbmVkIGluIHRoZSBjb21tZW50LCB3aGljaCBtZWFucyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKWAgd291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIuIENsYXNzaWMhCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4gVXNpbmcgbXkgY3JpdGVyaWE6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKVGhpcyBjb2RlIGlzIGluIGBmcy9idWZmZXIuY2AsIHNwZWNpZmljYWxseSBgX19iaF9zdWJtaXRgLiBUaGF0JiMzOTtzIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gYnVmZmVyIGNhY2hlIGxvZ2ljLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBXZSBjYW4gZnV6eiB0aGlzIHdpdGggc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25z4oCUZXh0NCwgamJkMiBqb3VybmFsaW5nLCB3cml0ZWJhY2ssIGRpcmVjdCBJL08sIGJ1ZmZlcmVkIEkvTywgYWxsIGtpbmRzIG9mIHRoaW5ncy4gU28sIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOZXh0LCBsZXQmIzM5O3MgaWRlbnRpZnkgcmVsZXZhbnQgc3ltYm9scyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvciByZWxldmFudCBzeW1ib2xzIGluIGBmcy9idWZmZXIuY2Agb3IgcmVsYXRlZCBjYWxsZXJzLiBGcm9tIG15IGV4cGVyaWVuY2UgYW5kIGEgcXVpY2sgZ2xhbmNlLCB0aGUgZnVuY3Rpb25zIHRvIGNoZWNrIGFyZToKCiogICBgYmhfc3VibWl0YAoqICAgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2AKKiAgIGB3cml0ZV9kaXJ0eV9idWZmZXJgCiogICBgX19zeW5jX2RpcnR5X2J1ZmZlcmAKKiAgIFBvdGVudGlhbGx5LCBhbHNvIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCBhbmQgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiBhbmQgdmlzaWJpbGl0eSBvZiBgYmhfc3VibWl0YCwgYHdyaXRlX2RpcnR5X2J1ZmZlcmAsIGFuZCBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuIEluIGBmcy9idWZmZXIuY2A6IGBiaF9zdWJtaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIChgRVhQT1JUX1NZTUJPTChiaF9zdWJtaXQpYCksIHdoaWNoIGlzIGdvb2QuIGBfX2JoX3N1Ym1pdGAgaXMgc3RhdGljLCB3aGljaCBpcyBleHBlY3RlZC4gYHdyaXRlX2RpcnR5X2J1ZmZlcmAgYW5kIGBfX3N5bmNfZGlydHlfYnVmZmVyYCBhcmUgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gR29vZCwgdGhvc2UgYXJlIHZpYWJsZSB0YXJnZXRzLgoKRmluYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIG5lZWRlZCBpbiBgZnMvYnVmZmVyLmNgLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGNoZWNrIHRoZSBgZnMvTWFrZWZpbGVgIG9yIGBmcy9LY29uZmlnYCBmaWxlcy4gVGhhdCYjMzk7bGwgYmUgaW1wb3J0YW50IGZvciByZXByb2R1Y3Rpb24gYW5kIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWZmZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEwPW9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG4tLVxuZnMvTWFrZWZpbGUtMjAtXG5mcy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfQlVGRkVSX0hFQUQpXHQmIzQzOz0gYnVmZmVyLm8gbXBhZ2Uub1xuZnMvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BST0NfRlMpXHRcdCYjNDM7PSBwcm9jX25hbWVzcGFjZS5vXG4tLVxuZnMvaHBmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19IUEZTX0ZTKSAmIzQzOz0gaHBmcy5vXG5mcy9ocGZzL01ha2VmaWxlLTctXG5mcy9ocGZzL01ha2VmaWxlOjg6aHBmcy1vYmpzIDo9IGFsbG9jLm8gYW5vZGUubyBidWZmZXIubyBkZW50cnkubyBkaXIubyBkbm9kZS5vIGVhLm8gZmlsZS5vIFxcXG5mcy9ocGZzL01ha2VmaWxlLTktXHQgICAgIGlub2RlLm8gbWFwLm8gbmFtZS5vIG5hbWVpLm8gc3VwZXIub1xuLS1cbmZzL25ldGZzL01ha2VmaWxlPTM9bmV0ZnMteSA6PSBcXFxuLS1cbmZzL25ldGZzL01ha2VmaWxlLTE2LVx0cmVhZF9zaW5nbGUubyBcXFxuZnMvbmV0ZnMvTWFrZWZpbGU6MTc6XHRyb2xsaW5nX2J1ZmZlci5vIFxcXG5mcy9uZXRmcy9NYWtlZmlsZS0xOC1cdHdyaXRlX2NvbGxlY3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfQlVGRkVSX0hFQURgIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19CVUZGRVJfSEVBRGAgcG9wcGluZyB1cCBpbiBgZnMvTWFrZWZpbGVgIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb2YgYGJ1ZmZlci5vYCBhbmQgYG1wYWdlLm9gLiAgVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleHBlcnQgaW5zdGluY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29uZmlnIG9wdGlvbiAqbWVhbnMqLiBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGl0cyBkZWZpbml0aW9uLiAgV2hlcmUgaXMgYENPTkZJR19CVUZGRVJfSEVBRGAgYWN0dWFsbHkgKmRlZmluZWQqPyAgTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdGhlIEtjb25maWcgZmlsZXMuICBTaW5jZSB0aGlzIHJlbGF0ZXMgdG8gdGhlIGZpbGVzeXN0ZW0sIG15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBgZnMvS2NvbmZpZ2AuIElmIGl0JiMzOTtzIG5vdCB0aGVyZSwgSSB3aWxsIGV4cGFuZCBteSBzZWFyY2ggdG8gYGluaXQvS2NvbmZpZ2AsIG9yIHdoZXJldmVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBnZW5lcmFsbHkgZGVjbGFyZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGVzZSBrZXkgZmlsZXN5c3RlbSBjb21wb25lbnRzLiAgR290dGEgZm9sbG93IHRoZSBicmVhZGNydW1icyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJVRkZFUl9IRUFEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjI9Y29uZmlnIEZTX1NUQUNLXG4tLVxuZnMvS2NvbmZpZy0yNC1cbmZzL0tjb25maWc6MjU6Y29uZmlnIEJVRkZFUl9IRUFEXG5mcy9LY29uZmlnLTI2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBCVUZGRVJfSEVBRGAgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIGRlZmluaXRpb24gYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGl04oCZcyBhIGZpbGUgdGhhdCB0eXBpY2FsbHkgZGVhbHMgd2l0aCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBqdW1wIHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI1IHRvIHNlZSBpZiBJIGNhbiB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJVRkZFUl9IRUFEYC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGRldGFpbHMgYWJvdXQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gaW4gdGhhdCBhcmVhLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHQjIFN0YWNrYWJsZSBmaWxlc3lzdGVtc1xuICAyMjpcdGNvbmZpZyBGU19TVEFDS1xuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBCVUZGRVJfSEVBRFxuICAyNjpcdFx0Ym9vbFxuICAyNzpcdFxuICAyODpcdCMgb2xkIGJsb2NrZGV2X2RpcmVjdF9JTyBpbXBsZW1lbnRhdGlvbi4gIFVzZSBpb21hcCBmb3IgbmV3IGNvZGUgaW5zdGVhZFxuICAyOTpcdGNvbmZpZyBMRUdBQ1lfRElSRUNUX0lPXG4gIDMwOlx0XHRkZXBlbmRzIG9uIEJVRkZFUl9IRUFEXG4gIDMxOlx0XHRib29sXG4gIDMyOlx0XG4gIDMzOlx0aWYgQkxPQ0tcbiAgMzQ6XHRcbiAgMzU6XHRzb3VyY2UgXCYjMzQ7ZnMvZXh0Mi9LY29uZmlnXCYjMzQ7XG4gIDM2Olx0c291cmNlIFwmIzM0O2ZzL2V4dDQvS2NvbmZpZ1wmIzM0O1xuICAzNzpcdHNvdXJjZSBcJiMzNDtmcy9qYmQyL0tjb25maWdcJiMzNDtcbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgRlNfTUJDQUNIRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2NAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBvZiBgQlVGRkVSX0hFQURgKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBzZWVtcyB0byBiZSBhIHF1aWNrIGludGVybmFsIHF1ZXJ5LCBhIG1lbnRhbCBzZWFyY2gsIGlmIHlvdSB3aWxsOiAmIzM0O0xldCYjMzk7cyBzZWUgd2hvJiMzOTtzIHB1bGxpbmcgaW4gdGhpcyBgQlVGRkVSX0hFQURgIGRlZmluaXRpb24uJiMzNDsgVGhlIGdvYWwgaXMgcHJvYmFibHkgZGlhZ25vc3RpYyBvciBleHBsb3JhdG9yeSBpbiBuYXR1cmUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0cyB1c2FnZSBwYXR0ZXJucyBhcmUgZ29pbmcgdG8gYmUgYSBrZXkgaW5kaWNhdG9yIHRvIG90aGVyIGFyZWFzIG9mIGNvZGUuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBzaWZ0aW5nIHRocm91Z2ggdGhlIGxheWVycyBvZiB0aGUgY29kZWJhc2UsIGNvbnNpZGVyaW5nIHBvc3NpYmxlIHJlYXNvbnMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gQW0gSSB0cm91Ymxlc2hvb3RpbmcgYSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aGVyZSBhIGBCVUZGRVJfSEVBRGAgaXMgaW1wbGljYXRlZD8gUGVyaGFwcyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgYSBuZXcgc3Vic3lzdGVtIHRoYXQgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBhbmQgYEJVRkZFUl9IRUFEYCB1c2FnZSBpcyBhIGNsdWUgdG8gaXRzIGRlc2lnbj8gT3IsIGlzIHRoaXMgcGFydCBvZiBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCB3aGVyZSBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb24gYSBnaXZlbiBzdHJ1Y3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgYSBwcm9wb3NlZCBjaGFuZ2U/CgpJdOKAmXMgYWxtb3N0IGEgbXVzY2xlIG1lbW9yeSByZXNwb25zZSwgYSBzdGFydGluZyBwb2ludCBmb3IgYW55IGRlZXBlciBkaXZlIGludG8ga2VybmVsIGNvZGUuIFRoaXMgY291bGQgcXVpY2tseSBsZWFkIHRvIHVzaW5nIHRvb2xzIGxpa2UgYGdyZXBgLCBgY3Njb3BlYCwgb3IgZXZlbiB0aGUgbW9yZSBhZHZhbmNlZCBkZWJ1Z2dpbmcgdG9vbHMsIHRvIHRyYWNlIHRoZSBvcmlnaW5zIGFuZCBkb3duc3RyZWFtIHVzZXMgb2YgdGhpcyBzdHJ1Y3R1cmUuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlIG9yIGJ1ZyByZWxhdGVkIHRvIHRoaXMgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3BlY2lmaWMgc3RydWN0dXJlIGNhbiByZXZlYWwgYSBncmVhdCBhbW91bnQgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgQlVGRkVSX0hFQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnPTE1PWNvbmZpZyBCTEtfREVWX01EXG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE3LVx0c2VsZWN0IEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEIGlmIFNZU0ZTXG5kcml2ZXJzL21kL0tjb25maWc6MTg6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xOS1cdCMgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEIHJlcXVpcmVtZW50IHNob3VsZCBiZSByZW1vdmVkXG4tLVxuZnMvYWRmcy9LY29uZmlnPTI9Y29uZmlnIEFERlNfRlNcbi0tXG5mcy9hZGZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL2FkZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9hZGZzL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9hZmZzL0tjb25maWc9Mj1jb25maWcgQUZGU19GU1xuLS1cbmZzL2FmZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvYWZmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2FmZnMvS2NvbmZpZy02LVx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbi0tXG5mcy9iZWZzL0tjb25maWc9Mj1jb25maWcgQkVGU19GU1xuLS1cbmZzL2JlZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvYmVmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2JlZnMvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2Jmcy9LY29uZmlnPTI9Y29uZmlnIEJGU19GU1xuLS1cbmZzL2Jmcy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9iZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9iZnMvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4ZmF0L0tjb25maWc9Mz1jb25maWcgRVhGQVRfRlNcbmZzL2V4ZmF0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O2V4RkFUIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvZXhmYXQvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9leGZhdC9LY29uZmlnLTYtXHRzZWxlY3QgTkxTXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbmZzL2V4dDIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQgKERFUFJFQ0FURUQpXCYjMzQ7XG5mcy9leHQyL0tjb25maWc6NDpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnLTUtXHRzZWxlY3QgRlNfSU9NQVBcbi0tXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuZnMvZXh0NC9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2V4dDQvS2NvbmZpZy01LVx0c2VsZWN0IEpCRDJcbi0tXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xuLS1cbmZzL2YyZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvZjJmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2YyZnMvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2ZhdC9LY29uZmlnPTI9Y29uZmlnIEZBVF9GU1xuZnMvZmF0L0tjb25maWctMy1cdHRyaXN0YXRlXG5mcy9mYXQvS2NvbmZpZzo0Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9mYXQvS2NvbmZpZy01LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXG5mcy9nZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvZ2ZzMi9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2dmczIvS2NvbmZpZy01LVx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuLS1cbmZzL2hmcy9LY29uZmlnPTI9Y29uZmlnIEhGU19GU1xuLS1cbmZzL2hmcy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9oZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9oZnMvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2hmc3BsdXMvS2NvbmZpZz0yPWNvbmZpZyBIRlNQTFVTX0ZTXG4tLVxuZnMvaGZzcGx1cy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9oZnNwbHVzL0tjb25maWc6NTpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvaGZzcGx1cy9LY29uZmlnLTYtXHRzZWxlY3QgTkxTXG4tLVxuZnMvaHBmcy9LY29uZmlnPTI9Y29uZmlnIEhQRlNfRlNcbi0tXG5mcy9ocGZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL2hwZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9ocGZzL0tjb25maWctNi1cdHNlbGVjdCBGU19JT01BUFxuLS1cbmZzL2lzb2ZzL0tjb25maWc9Mj1jb25maWcgSVNPOTY2MF9GU1xuZnMvaXNvZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVNPIDk2NjAgQ0RST00gZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvaXNvZnMvS2NvbmZpZzo0Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9pc29mcy9LY29uZmlnLTUtXHRoZWxwXG4tLVxuZnMvamZzL0tjb25maWc9Mj1jb25maWcgSkZTX0ZTXG5mcy9qZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SkZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvamZzL0tjb25maWc6NDpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvamZzL0tjb25maWctNS1cdHNlbGVjdCBOTFNcbi0tXG5mcy9taW5peC9LY29uZmlnPTI9Y29uZmlnIE1JTklYX0ZTXG4tLVxuZnMvbWluaXgvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvbWluaXgvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9taW5peC9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvbmlsZnMyL0tjb25maWc9Mj1jb25maWcgTklMRlMyX0ZTXG5mcy9uaWxmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TklMRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL25pbGZzMi9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL25pbGZzMi9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDMzJcbi0tXG5mcy9udGZzMy9LY29uZmlnPTI9Y29uZmlnIE5URlMzX0ZTXG4tLVxuZnMvbnRmczMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiAhTlRGU19GUyB8fCBtXG5mcy9udGZzMy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL250ZnMzL0tjb25maWctNi1cdHNlbGVjdCBOTFNcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXG4tLVxuZnMvb2NmczIvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNcbmZzL29jZnMyL0tjb25maWc6NTpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvb2NmczIvS2NvbmZpZy02LVx0c2VsZWN0IEpCRDJcbi0tXG5mcy9vbWZzL0tjb25maWc9Mj1jb25maWcgT01GU19GU1xuLS1cbmZzL29tZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvb21mcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL29tZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQ19JVFVfVFxuLS1cbmZzL3FueDQvS2NvbmZpZz0yPWNvbmZpZyBRTlg0RlNfRlNcbi0tXG5mcy9xbng0L0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL3FueDQvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9xbng0L0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9xbng2L0tjb25maWc9Mj1jb25maWcgUU5YNkZTX0ZTXG4tLVxuZnMvcW54Ni9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLIFx1MDAyNlx1MDAyNiBDUkMzMlxuZnMvcW54Ni9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3FueDYvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL3JvbWZzL0tjb25maWc9NTc9Y29uZmlnIFJPTUZTX09OX0JMT0NLXG4tLVxuZnMvcm9tZnMvS2NvbmZpZy01OS1cdGRlZmF1bHQgeSBpZiBST01GU19CQUNLRURfQllfQkxPQ0sgfHwgUk9NRlNfQkFDS0VEX0JZX0JPVEhcbmZzL3JvbWZzL0tjb25maWc6NjA6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3JvbWZzL0tjb25maWctNjEtXG4tLVxuZnMvdWRmL0tjb25maWc9Mj1jb25maWcgVURGX0ZTXG5mcy91ZGYvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL3VkZi9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3VkZi9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDX0lUVV9UXG4tLVxuZnMvdWZzL0tjb25maWc9Mj1jb25maWcgVUZTX0ZTXG4tLVxuZnMvdWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL3Vmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3Vmcy9LY29uZmlnLTYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjgxCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCVUZGRVJfSEVBRCBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBCVUZGRVJfSEVBRGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBJdCYjMzk7cyBzZWxlY3RlZCBieSBhIGJ1bmNoIG9mIGZpbGUgc3lzdGVtcywgaW5jbHVkaW5nIGBFWFQ0X0ZTYCwgYEVYVDJfRlNgLCBgRkFUX0ZTYCwgYEdGUzJfRlNgLCBhbmQgZXZlbiB0aGluZ3MgbGlrZSBgQkxLX0RFVl9NRGAuICBUaGF0IG1lYW5zIGBCVUZGRVJfSEVBRGAgaXMgdGhlIGRpcmVjdCBjb25maWcgb3B0aW9uIHRoYXQgd2UgbmVlZCB0byBmb2N1cyBvbi4KCkxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCiogICBgV29ydGhGdXp6aW5nYD8gWXVwLCB0aGF0IGxvb2tzIGdvb2QuCiogICBgRW5hYmxlQ29uZmlnc2A/IE9rYXksIHdlJiMzOTt2ZSBnb3QgYFsmIzM0O0JVRkZFUl9IRUFEJiMzNDtdYCwgYW5kIHdoaWxlIGl0IG1lbnRpb25zIGBbJiMzNDtFWFQ0X0ZTJiMzNDssICYjMzQ7QkxPQ0smIzM0O11gLCAmIzM0O0JVRkZFUl9IRUFEJiMzNDsgaXMgdGhlIGV4YWN0IGNvbmZpZyB0aGF0IGFjdHVhbGx5IGNvbXBpbGVzIGBmcy9idWZmZXIuY2AsIHNvIHRoYXQmIzM5O3MgdGhlIG9uZS4KCk5vdywgZm9yIHRoZSByZWFsbHkgaW1wb3J0YW50IHBhcnQ6IHRoZSBzeW1ib2xzIHdlJiMzOTtyZSB0YXJnZXRpbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBsb29rIHJpZ2h0OgoKKiAgIGBiaF9zdWJtaXRgCiogICBgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvYAoqICAgYHdyaXRlX2RpcnR5X2J1ZmZlcmAKKiAgIGBfX3N5bmNfZGlydHlfYnVmZmVyYAoqICAgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgCiogICBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAKClllcCwgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGhlcmUuIFNvLCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlVGRkVSX0hFQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaF9zdWJtaXQmIzM0OywKICAgICYjMzQ7X19ibG9ja193cml0ZV9mdWxsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3dyaXRlX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtfX3N5bmNfZGlydHlfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVx1MDAzZWJfZm9saW9gIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgIGluIGBfX2JoX3N1Ym1pdCgpYC4gQnVmZmVyIGhlYWRzIGFsbG9jYXRlZCBmb3Igbm9uLXBhZ2VjYWNoZSBkYXRhIChzdWNoIGFzIEpCRDIgc2hhZG93L2Zyb3plbiBtZXRhZGF0YSBidWZmZXJzKSBkbyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvbGlvIGFuZCBwcmV2aW91c2x5IHRyaWdnZXJlZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBkdXJpbmcgc3VibWlzc2lvbi4gVGhpcyBpcyBjb3JlIGZpbGVzeXN0ZW0gYnVmZmVyIGNhY2hlIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ymhfc3VibWl0JiMzNDssCiAgICAmIzM0O19fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyYjMzQ7LAogICAgJiMzNDt3cml0ZV9kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGBiaC1cdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYCBpbiBgX19iaF9zdWJtaXQoKWAuIEJ1ZmZlciBoZWFkcyBhbGxvY2F0ZWQgZm9yIG5vbi1wYWdlY2FjaGUgZGF0YSAoc3VjaCBhcyBKQkQyIHNoYWRvdy9mcm96ZW4gbWV0YWRhdGEgYnVmZmVycykgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmb2xpbyBhbmQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZHVyaW5nIHN1Ym1pc3Npb24uIFRoaXMgaXMgY29yZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBfX2JoX3N1Ym1pdCgpYCBieSBjaGVja2luZyB0aGF0IGBiaC1cdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYC4gV2hlbiBhIGJ1ZmZlciBoZWFkIGlzIGJhY2tlZCBieSB2aXJ0dWFsIG1lbW9yeSAoYGJoLVx1MDAzZWJfZGF0YWApIHJhdGhlciB0aGFuIGEgZm9saW8sIGBiaC1cdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgdW5pbml0aWFsaXplZCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbmZvcm1hdGlvbiBsZWFrcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgc3RhbmRhcmQgY3Jhc2ggYnVncyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnIGJ1aWxkcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkODgyMjJiMzExZjRmZTc2NmYwMTcyY2EyNGI3ZWNlODBlOTRjM2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEyOjQ4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA0MjdkOGE4MTdjZDU2Li5mNDZmYTY0MTMwMzJkIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuYwpAQCAtMTEwNiw3ICYjNDM7MTEwNiw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAKIAliaW8gPSBiaW9fYWxsb2MoYmgtJmd0O2JfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7CiAKLQlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKSAmYW1wOyZhbXA7IG9wX2lzX3dyaXRlKG9wZikpCiYjNDM7CWlmIChiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgb3BfaXNfd3JpdGUob3BmKSkKIAkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGaWxlIFN5c3RlbSBCdWZmZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIGEgY2hhbmdlIGluIGBmcy9idWZmZXIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBfX2JoX3N1Ym1pdGAgZnVuY3Rpb24uIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBkaWZmIGZvY3VzZXMgb24gY29uZGl0aW9uYWwgbG9naWMgcmVsYXRpbmcgdG8gYGZvbGlvX3Rlc3RfZHJvcGJlaGluZGAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB3cml0ZXMgKCBgb3BfaXNfd3JpdGUob3BmKWApLiBUaGlzIHNlY3Rpb24gb2YgY29kZSBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkYXRhIGJ1ZmZlcnMgYW5kIEkvTyBvcGVyYXRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgY2FjaGluZyBzdHJhdGVnaWVzIGxpa2UgJiMzNDtkcm9wLWJlaGluZCYjMzQ7LgoKRXNzZW50aWFsbHksIHdoYXQmIzM5O3MgY2hhbmdlZCBpcyBhbiBhZGRlZCBjaGVjayBmb3IgYGJoLSZndDtiX2ZvbGlvYCBiZWZvcmUgd2UgYWNjZXNzIGl0IHdpdGggYGZvbGlvX3Rlc3RfZHJvcGJlaGluZGAuIFRoZSBvcmlnaW5hbCBjb2RlIGxvb2tlZCBsaWtlIGl0IHdhcyBkaXJlY3RseSBkZXJlZmVyZW5jaW5nIGBiaC0mZ3Q7Yl9mb2xpb2Agd2l0aG91dCBudWxsIGNoZWNraW5nIGl0IGZpcnN0LiBUaGlzIG1vZGlmaWNhdGlvbiBpcyBsaWtlbHkgYSBudWxsLXBvaW50ZXIgc2FmZXR5IGNoZWNrLiBXZSBvbmx5IHdhbnQgdG8gc2V0IHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcgaWYgdGhlIGJ1ZmZlciBoZWFkIGFjdHVhbGx5IGhhcyBhbiBhc3NvY2lhdGVkIGZvbGlvLgoKVGhpcyB0eXBlIG9mIGNoYW5nZSB1c3VhbGx5IGluZGljYXRlcyB0aGF0IHRoZXJlIGNvdWxkIGJlIGEgc3VidGxlIGJ1ZyBvciBlZGdlIGNhc2Ugd2hlcmUgYGJoLSZndDtiX2ZvbGlvYCBtaWdodCBiZSBgTlVMTGAgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBBIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoaXMgY3JpdGljYWwgcGF0aCBjb3VsZCBsZWFkIHRvIGEgY3Jhc2ggb3Igb3RoZXIgdW5wcmVkaWN0YWJsZSBiZWhhdmlvciBkdXJpbmcgSS9PIG9wZXJhdGlvbnMsIHdoaWNoIGlzIHdoeSB0aGlzIGNoZWNrIGlzIGFkZGVkLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHNjZW5hcmlvIHRoYXQgbmVjZXNzaXRhdGVkIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBiaC0mZ3Q7Yl9mb2xpb2AgKmNvdWxkKiBiZSBgTlVMTGAgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGJ1ZmZlciBtYW5hZ2VtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgYmlvX3NldF9mbGFnYCB3b3JrcyBhbmQgaWYgaXQgaGFzIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggYE5VTExgIG9yIG1pc3NpbmcgYGJfZm9saW9gLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZHJvcGJlaGluZGAgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmaWxlc3lzdGVtIGJlaGF2aW9yLiBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZXMgYW5kIGFueSByZWxhdGVkIGJ1ZyByZXBvcnRzIHRvIGdldCB0aGUgZnVsbCBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5NTpcdFx0QlVHX09OKCFidWZmZXJfbG9ja2VkKGJoKSk7XG4xMDk2Olx0XHRCVUdfT04oIWJ1ZmZlcl9tYXBwZWQoYmgpKTtcbjEwOTc6XHRcdEJVR19PTihidWZmZXJfZGVsYXkoYmgpKTtcbjEwOTg6XHRcdEJVR19PTihidWZmZXJfdW53cml0dGVuKGJoKSk7XG4xMDk5Olx0XG4xMTAwOlx0XHRzZXRfYnVmZmVyX3JlcShiaCk7XG4xMTAxOlx0XG4xMTAyOlx0XHRpZiAoYnVmZmVyX21ldGEoYmgpKVxuMTEwMzpcdFx0XHRvcGYgfD0gUkVRX01FVEE7XG4xMTA0Olx0XHRpZiAoYnVmZmVyX3ByaW8oYmgpKVxuMTEwNTpcdFx0XHRvcGYgfD0gUkVRX1BSSU87XG4xMTA2Olx0XG4xMTA3Olx0XHRiaW8gPSBiaW9fYWxsb2MoYmgtXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcbjExMDg6XHRcbjExMDk6XHRcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbykgXHUwMDI2XHUwMDI2XG4xMTEwOlx0XHQgICAgb3BfaXNfd3JpdGUob3BmKSlcbjExMTE6XHRcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuMTExMjpcdFxuMTExMzpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pKVxuMTExNDpcdFx0XHRidWZmZXJfc2V0X2NyeXB0b19jdHgoYmlvLCBiaCwgR0ZQX05PSU8pO1xuMTExNTpcdFxuMTExNjpcdFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gYmgtXHUwMDNlYl9ibG9ja25yICogKGJoLVx1MDAzZWJfc2l6ZSBcdTAwM2VcdTAwM2UgOSk7XG4xMTE3Olx0XHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdyaXRlX2hpbnQ7XG4xMTE4Olx0XG4xMTE5Olx0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbjExMjA6XHRcdFx0YmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBiaC1cdTAwM2ViX2ZvbGlvLCBiaC1cdTAwM2ViX3NpemUsXG4xMTIxOlx0XHRcdFx0XHQgICAgIGJoX29mZnNldChiaCkpO1xuMTEyMjpcdFx0ZWxzZVxuMTEyMzpcdFx0XHRiaW9fYWRkX3ZpcnRfbm9mYWlsKGJpbywgYmgtXHUwMDNlYl9kYXRhLCBiaC1cdTAwM2ViX3NpemUpO1xuMTEyNDpcdFxuMTEyNTpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGVuZF9iaW87XG4xMTI2Olx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGJoO1xuMTEyNzpcdFxuMTEyODpcdFx0LyogVGFrZSBjYXJlIG9mIGJoJiMzOTtzIHRoYXQgc3RyYWRkbGUgdGhlIGVuZCBvZiB0aGUgZGV2aWNlICovXG4xMTI5Olx0XHRndWFyZF9iaW9fZW9kKGJpbyk7XG4xMTMwOlx0XG4xMTMxOlx0XHRpZiAod2JjKSB7XG4xMTMyOlx0XHRcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XG4xMTMzOlx0XHRcdGlmIChiaC1cdTAwM2ViX2ZvbGlvKVxuMTEzNDpcdFx0XHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDMKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIE5VTEwgY2hlY2sgaW4gYF9fYmhfc3VibWl0KClgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGFkZGluZyBgYmgtJmd0O2JfZm9saW8gJmFtcDsmYW1wO2AgYmVmb3JlIHRoZSBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKWAgY2FsbC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBJIGtub3cgd2h5OiB0aGUgY29kZSByaWdodCBiZWxvdyBjaGVja3MgaWYgYGJoLSZndDtiX2ZvbGlvYCBleGlzdHMsIGFuZCBpZiBpdCBkb2VzbiYjMzk7dCwgaXQgdXNlcyBgYmgtJmd0O2JfZGF0YWAgZGlyZWN0bHkuIFNvLCBgYmgtJmd0O2JfZm9saW9gICpjYW4qIGJlIE5VTEwsIGVzcGVjaWFsbHkgd2hlbiB0aGUgYmxvY2sgaGVhZGVyIGlzIGJhY2tlZCBieSB2aXJ0dWFsIG1lbW9yeS4gVHJ5aW5nIHRvIHVzZSBpdCB3aGVuIGl0JiMzOTtzIE5VTEwgaXMgYSBjbGFzc2ljIHByb2JsZW0uCgpNeSBleHBlcnQgaW5zdGluY3QgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGNhc2UgZm9yIEtBU0FOLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGlyZWN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGlzIG1vcmUgcmlnb3JvdXNseSB0aG91Z2guIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3IgaXMgaXQgb3BlbmluZyB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgcGFkZGluZyBpc3N1ZXMuIFNvIGdpdmVuIHRoYXQgS0FTQU4gd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBhbmQgdGhlIHF1ZXN0aW9ucyBmb3IgdGhpcyBjaGVjaywgYW5kIHRoZSBjb25kaXRpb25zIG9uIEtNU0FOLiAmIzM0O1NldCBOZWVkc0tNU0FOPWZhbHNlIElGOiBwcmltYXJpbHkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykmIzM0Oy4gWXVwLCB0aGlzIGhpdHMgdGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB0YXJnZXQsIGFuZCBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkLiBUaGUgcGF0Y2ggaXNuJiMzOTt0IHRvdWNoaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKUGVyZmVjdC4gVGhlIHBhdGNoIHNlZW1zIHNvbGlkLCBhbmQgdGhlIGFwcHJvYWNoIGlzIGNvcnJlY3QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVx1MDAzZWJfZm9saW9gIGlzIG5vbi1OVUxMIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgLiBXaGVuIGEgYnVmZmVyIGhlYWQgaXMgYmFja2VkIGJ5IHZpcnR1YWwgbWVtb3J5IChgYmgtXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVx1MDAzZWJfZm9saW9gIGlzIE5VTEwuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19iaF9zdWJtaXQoKWAgYnkgY2hlY2tpbmcgdGhhdCBgYmgtXHUwMDNlYl9mb2xpb2AgaXMgbm9uLU5VTEwgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cdTAwM2ViX2RhdGFgKSByYXRoZXIgdGhhbiBhIGZvbGlvLCBgYmgtXHUwMDNlYl9mb2xpb2AgaXMgTlVMTC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgaW5mb3JtYXRpb24gbGVha3MuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHN0YW5kYXJkIGNyYXNoIGJ1Z3MgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0ODoxMy45NzA1MTY1NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU5NjIzNDQ1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlVGRkVSX0hFQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaF9zdWJtaXRcIixcbiAgICBcIl9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb1wiLFxuICAgIFwid3JpdGVfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVxcdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDg6MTMuOTcwNTIyMjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxNzM5MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Q4ODIyMmIzMTFmNGZlNzY2ZjAxNzJjYTI0YjdlY2U4MGU5NGMzZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDEyOjQ4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcXG5pbmRleCA0MjdkOGE4MTdjZDU2Li5mNDZmYTY0MTMwMzJkIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtMTEwNiw3ICsxMTA2LDggQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFxuIFxcdGJpbyA9IGJpb19hbGxvYyhiaC1cXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXFxuK1xcdGlmIChiaC1cXHUwMDNlYl9mb2xpbyBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvcF9pc193cml0ZShvcGYpKVxcbiBcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjE1LjQ2MzA1MjgyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU3NzMyMTY2NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJVRkZFUl9IRUFEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmhfc3VibWl0XCIsXG4gICAgXCJfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW9cIixcbiAgICBcIndyaXRlX2RpcnR5X2J1ZmZlclwiLFxuICAgIFwiX19zeW5jX2RpcnR5X2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgYmgtXFx1MDAzZWJfZm9saW9gIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pYCBpbiBgX19iaF9zdWJtaXQoKWAuIEJ1ZmZlciBoZWFkcyBhbGxvY2F0ZWQgZm9yIG5vbi1wYWdlY2FjaGUgZGF0YSAoc3VjaCBhcyBKQkQyIHNoYWRvdy9mcm96ZW4gbWV0YWRhdGEgYnVmZmVycykgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmb2xpbyBhbmQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZHVyaW5nIHN1Ym1pc3Npb24uIFRoaXMgaXMgY29yZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDg4MjIyYjMxMWY0ZmU3NjZmMDE3MmNhMjRiN2VjZTgwZTk0YzNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMjo0ODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDQyN2Q4YTgxN2NkNTYuLmY0NmZhNjQxMzAzMmQgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuKysrIGIvZnMvYnVmZmVyLmNcbkBAIC0xMTA2LDcgKzExMDYsOCBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuK1x0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICBvcF9pc193cml0ZShvcGYpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0ODoxNS40NjMwNTQ0MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTQ1NDEzOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnVmZmVyIEhlYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgaW4gYGZzL2J1ZmZlci5jYC4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBfX2JoX3N1Ym1pdGAgZnVuY3Rpb24uICBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgY29uZGl0aW9uYWwgY2hlY2sgcmVsYXRlZCB0byBgZm9saW9fdGVzdF9kcm9wYmVoaW5kYCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBhIGJpdCBzaW1wbGVyLCBub3cgaXQncyBiZWVuIHVwZGF0ZWQgdG8gaW5jbHVkZSBhIG51bGwgY2hlY2sgZm9yIHRoZSBgYmgtXHUwMDNlYl9mb2xpb2AgZmllbGQuIEludGVyZXN0aW5nLiBUaGV5J3ZlIGFkZGVkIGBiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNmAgdG8gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gIEknbGwgd2FudCB0byBxdWlja2x5IHVzZSBteSBgcmVhZC1maWxlYCB0b29sIGFuZCBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAxMTA2IGluIHRoYXQgZmlsZTsgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNoYW5nZSB0byBncmFzcCB0aGUgaW50ZW50LiAgSSdtIGd1ZXNzaW5nIHRoaXMgaXMgc29tZSBzb3J0IG9mIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgYmgtXHUwMDNlYl9mb2xpb2AgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbWF5YmUgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjI1LjQwODQ3MTA4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDkwOlxcdFxcdFxcdGVudW0gcndfaGludCB3cml0ZV9oaW50LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4xMDkxOlxcdFxcdFxcdGJpb19lbmRfaW9fdCBlbmRfYmlvKVxcbjEwOTI6XFx0e1xcbjEwOTM6XFx0XFx0c3RydWN0IGJpbyAqYmlvO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcXG4xMDk2OlxcdFxcdEJVR19PTighYnVmZmVyX21hcHBlZChiaCkpO1xcbjEwOTc6XFx0XFx0QlVHX09OKGJ1ZmZlcl9kZWxheShiaCkpO1xcbjEwOTg6XFx0XFx0QlVHX09OKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRpZiAoYnVmZmVyX21ldGEoYmgpKVxcbjExMDM6XFx0XFx0XFx0b3BmIHw9IFJFUV9NRVRBO1xcbjExMDQ6XFx0XFx0aWYgKGJ1ZmZlcl9wcmlvKGJoKSlcXG4xMTA1OlxcdFxcdFxcdG9wZiB8PSBSRVFfUFJJTztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0YmlvID0gYmlvX2FsbG9jKGJoLVxcdTAwM2ViX2JkZXYsIDEsIG9wZiwgR0ZQX05PSU8pO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8gXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjExMTA6XFx0XFx0ICAgIG9wX2lzX3dyaXRlKG9wZikpXFxuMTExMTpcXHRcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcXG4xMTE0OlxcdFxcdFxcdGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7XFxuMTExNTpcXHRcXG4xMTE2OlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBiaC1cXHUwMDNlYl9ibG9ja25yICogKGJoLVxcdTAwM2ViX3NpemUgXFx1MDAzZVxcdTAwM2UgOSk7XFxuMTExNzpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cml0ZV9oaW50O1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEyMDpcXHRcXHRcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVxcdTAwM2ViX2ZvbGlvLCBiaC1cXHUwMDNlYl9zaXplLFxcbjExMjE6XFx0XFx0XFx0XFx0XFx0ICAgICBiaF9vZmZzZXQoYmgpKTtcXG4xMTIyOlxcdFxcdGVsc2VcXG4xMTIzOlxcdFxcdFxcdGJpb19hZGRfdmlydF9ub2ZhaWwoYmlvLCBiaC1cXHUwMDNlYl9kYXRhLCBiaC1cXHUwMDNlYl9zaXplKTtcXG4xMTI0OlxcdFxcbjExMjU6XFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xcbjExMjY6XFx0XFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gYmg7XFxuMTEyNzpcXHRcXG4xMTI4OlxcdFxcdC8qIFRha2UgY2FyZSBvZiBiaCdzIHRoYXQgc3RyYWRkbGUgdGhlIGVuZCBvZiB0aGUgZGV2aWNlICovXFxuMTEyOTpcXHRcXHRndWFyZF9iaW9fZW9kKGJpbyk7XFxuMTEzMDpcXHRcXG4xMTMxOlxcdFxcdGlmICh3YmMpIHtcXG4xMTMyOlxcdFxcdFxcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XFxuMTEzMzpcXHRcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEzNDpcXHRcXHRcXHRcXHR3YmNfYWNjb3VudF9jZ3JvdXBfb3duZXIod2JjLCBiaC1cXHUwMDNlYl9mb2xpbywgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuMTEzNTpcXHRcXHR9XFxuMTEzNjpcXHRcXG4xMTM3OlxcdFxcdGJsa19jcnlwdG9fc3VibWl0X2JpbyhiaW8pO1xcbjExMzg6XFx0fVxcbjExMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjI1LjQwODYwOTEzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NDg4Mjk0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJ1ZmZlciBIZWFkIFN1Ym1pc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBfX2JoX3N1Ym1pdGAsIGFuZCBpdCdzIGNsZWFyIGl0IGhhbmRsZXMgYnVmZmVyIGhlYWQgc3VibWlzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTcGVjaWZpY2FsbHksIGlmIGBiaC1cdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLCB3aGljaCBJIGtub3cgaXQgY2FuIGJlIHdpdGggdmlydHVhbCBidWZmZXJzIG9yIHNpbWlsYXIgY29uZmlndXJhdGlvbnMgKEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGBiaW9fYWRkX3ZpcnRfbm9mYWlsYCBwYXRoIG9uIGxpbmUgMTEyMyksIHRoZW4gZGVyZWZlcmVuY2luZyBgYmgtXHUwMDNlYl9mb2xpb2Agd2l0aGluIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgIHdvdWxkIGxlYWQgdG8gYSBjcmFzaC5cblxuQWgsIGJ1dCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoYXQgYGJoLVx1MDAzZWJfZm9saW9gIGNhbiBiZSBOVUxMIGV2ZW4gKndpdGhvdXQqIGJlaW5nIGEgdmlydHVhbCBidWZmZXIhIFRoaXMgaGFwcGVucyB3aGVuIGEgYnVmZmVyIGhlYWQgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19idWZmZXJfaGVhZCgpYCAqd2l0aG91dCogYSBwYWdlIG9yIGZvbGlvIGF0dGFjaGVkLiBUaGluayBhYm91dCBzY2VuYXJpb3MgbGlrZSBgY3JlYXRlX2VtcHR5X2J1ZmZlcnNgIG9yIGRpcmVjdCBjYWxscyB0byBgYWxsb2NfYnVmZmVyX2hlYWQoKWAgZm9yIG1lbW9yeSBidWZmZXJzLCBtZXRhZGF0YSBoYW5kbGluZywgb3IgZXZlbiBibG9jayBkZXZpY2UgcmVhZC93cml0ZSBvcGVyYXRpb25zLiBUaGF0J3MgdGhlIGtleS5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGBfX2JoX3N1Ym1pdGAgYW5kIHdoYXQgZnVuY3Rpb25zIGFyZSB3cmFwcGluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgc2VlIGhvdyB0aGVzZSBOVUxMIGBiX2ZvbGlvYCBzaXR1YXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIChvciAqbm90KiBoYW5kbGVkLCB3aGljaCBpcyBsaWtlbHkgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0pLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHRzIHRoZXkgYXJlIGluIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBob3cgdG8gc29sdmUgdGhpcyBwb3RlbnRpYWwgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDg6MzEuODU3NDQxOTEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQ4OTQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19iaF9zdWJtaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnVmZmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnVmZmVyLmM9MTA3MD1zdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTA4OC1cXG5mcy9idWZmZXIuYzoxMDg5OnN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXFxuZnMvYnVmZmVyLmMtMTA5MC1cXHRcXHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuLS1cXG5mcy9idWZmZXIuYz0xMTQ5PXZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsIGJpb19lbmRfaW9fdCBlbmRfaW8pXFxuZnMvYnVmZmVyLmMtMTE1MC17XFxuZnMvYnVmZmVyLmM6MTE1MTpcXHRfX2JoX3N1Ym1pdChiaCwgb3BmLCBXUklURV9MSUZFX05PVF9TRVQsIE5VTEwsIGVuZF9pbyk7XFxuZnMvYnVmZmVyLmMtMTE1Mi19XFxuLS1cXG5mcy9idWZmZXIuYz0xNzI2PWludCBfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MjEtXFx0XFx0aWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHtcXG5mcy9idWZmZXIuYzoxODIyOlxcdFxcdFxcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9idWZmZXIuYy0xODIzLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4NzYtXFx0XFx0XFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcXG5mcy9idWZmZXIuYzoxODc3OlxcdFxcdFxcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9idWZmZXIuYy0xODc4LVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDg6MzMuMjcyMzQxMDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU5NjcwODY0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWZmZXIgSGVhZCBTdWJtaXNzaW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgYmhfc3VibWl0YCBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBtYWluIGZ1bmN0aW9uIGluIGBmcy9idWZmZXIuY2AgdGhhdCBraWNrcyBvZmYgdGhlIGJ1ZmZlciBoZWFkIHN1Ym1pc3Npb24gcHJvY2Vzcy4gSXQncyBub3QgZGVjbGFyZWQgc3RhdGljLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoYXQgcGFydGljdWxhciBmaWxlLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKmNhbGwgZ3JhcGgqKi4gSSBuZWVkIHRvIGRldGVybWluZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUga2VybmVsIGNvZGUgd2hlcmUgZWl0aGVyIGBiaF9zdWJtaXRgIGl0c2VsZiBvciBpdHMgYWxpYXMgYHN1Ym1pdF9iaGAgKGxldCdzIGFzc3VtZSB0aGV5J3JlIGVxdWl2YWxlbnQgZm9yIG5vdykgYXJlIGludm9rZWQuIFRoYXQgaW5mb3JtYXRpb24gd2lsbCBwYWludCBhIHBpY3R1cmUgb2YgKmhvdyogYnVmZmVyIGhlYWRzIGFyZSBzdWJtaXR0ZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGJsb2NrIEkvTyBzdWJzeXN0ZW1zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBhbGxvdyBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmbG93IGFuZCBkYXRhIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0ODo0OS4yMzk0Mjk0NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjAzMzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaF9zdWJtaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTE1Nzg9ZnVuY3Rpb24tdHJhY2UsIHdlIGdldCBhIG11Y2ggbGFyZ2VyIG91dHB1dDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTYzMC0gICA9XFx1MDAzZSBzdWJtaXRfYmlvXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE2MzE6ICAgPVxcdTAwM2UgYmhfc3VibWl0XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE2MzItICAgPVxcdTAwM2UgX19leHQzX2dldF9pbm9kZV9sb2NcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0xODcxPXRyYWNlcnMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTkxNS0gICA9XFx1MDAzZSBzdWJtaXRfYmlvXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE5MTY6ICAgPVxcdTAwM2UgYmhfc3VibWl0XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE5MTctICAgPVxcdTAwM2UgZXh0M19icmVhZFxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MTc9c3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MjQtXFx0XFx0c2V0X2J1ZmZlcl9tYXBwZWQoYmgpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NTI1OlxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMsIGVuZF9iaXRtYXBfd3JpdGUpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNTI2LVxcdFxcdGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlO1xcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01NTg9c3RhdGljIGludCByZWFkX2ZpbGVfcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAwLVxcdFxcdFxcdHNldF9idWZmZXJfbWFwcGVkKGJoKTtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjYwMTpcXHRcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBlbmRfYml0bWFwX3dyaXRlKTtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYwMi1cXHRcXHR9XFxuLS1cXG5mcy9idWZmZXIuYz0xMjM9c3RhdGljIHZvaWQgYnVmZmVyX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKm1zZylcXG4tLVxcbmZzL2J1ZmZlci5jLTEzNi0gKiBDYWxsIHRoaXMgaW4geW91ciBiaW9fZW5kX2lvIGhhbmRsZXIgdG8gcmV0cmlldmUgdGhlIGJ1ZmZlcl9oZWFkXFxuZnMvYnVmZmVyLmM6MTM3OiAqIHN1Ym1pdHRlZCBpbiBiaF9zdWJtaXQoKS4gIElmIHlvdSBkaWQgbm90IGNhbGwgYmhfc3VibWl0KCksIGRvIG5vdFxcbmZzL2J1ZmZlci5jLTEzOC0gKiBjYWxsIHRoaXMgZnVuY3Rpb247IGl0IHdpbGwgcmV0dXJuIGdhcmJhZ2UuXFxuLS1cXG5mcy9idWZmZXIuYz0xNTc9RVhQT1JUX1NZTUJPTChiaW9fZW5kaW9fYmgpO1xcbi0tXFxuZnMvYnVmZmVyLmMtMTYzLSAqXFxuZnMvYnVmZmVyLmM6MTY0OiAqIElmIGEgYnVmZmVyIGlzIHJlYWQgdGhyb3VnaCBhIG1lY2hhbmlzbSB0aGF0IGlzbid0IGJoX3N1Ym1pdCgpLCB5b3VcXG5mcy9idWZmZXIuYy0xNjUtICogY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmaW5pc2ggdGhlIHJlYWQuXFxuLS1cXG5mcy9idWZmZXIuYz0xNzc9RVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3JlYWRfc3luYyk7XFxuLS1cXG5mcy9idWZmZXIuYy0xODItICpcXG5mcy9idWZmZXIuYzoxODM6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSdyZSByZWFkaW5nIGludG8gdGhlIGJ1ZmZlcixcXG5mcy9idWZmZXIuYy0xODQtICogdW5sZXNzIHlvdSBuZWVkIHlvdXIgb3duIHNwZWNpYWwgSS9PIGVuZCBoYW5kbGVyLlxcbi0tXFxuZnMvYnVmZmVyLmM9MTkyPUVYUE9SVF9TWU1CT0woYmhfZW5kX3JlYWQpO1xcbi0tXFxuZnMvYnVmZmVyLmMtMTk3LSAqXFxuZnMvYnVmZmVyLmM6MTk4OiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UncmUgd3JpdGluZyBmcm9tIHRoZSBidWZmZXIsXFxuZnMvYnVmZmVyLmMtMTk5LSAqIHVubGVzcyB5b3UgbmVlZCB5b3VyIG93biBzcGVjaWFsIEkvTyBlbmQgaGFuZGxlci5cXG4tLVxcbmZzL2J1ZmZlci5jPTM2Mj1zdGF0aWMgdm9pZCBiaF9lbmRfYXN5bmNfcmVhZChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9idWZmZXIuYy0zOTItICpcXG5mcy9idWZmZXIuYzozOTM6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSdyZSBkb2luZyB0aGUgZXF1aXZhbGVudCBvZlxcbmZzL2J1ZmZlci5jLTM5NC0gKiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkuICBUaGF0IGlzLCB0aGUgZm9saW8gaXMgdW5sb2NrZWQsIGFuZCB3aWxsXFxuLS1cXG5mcy9idWZmZXIuYz0xMDcwPXN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9idWZmZXIuYy0xMDg4LVxcbmZzL2J1ZmZlci5jOjEwODk6c3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG5mcy9idWZmZXIuYy0xMDkwLVxcdFxcdGVudW0gcndfaGludCB3cml0ZV9oaW50LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4tLVxcbmZzL2J1ZmZlci5jLTExNDAtLyoqXFxuZnMvYnVmZmVyLmM6MTE0MTogKiBiaF9zdWJtaXQgLSBTdGFydCBJL08gYWdhaW5zdCBhIGJ1ZmZlciBoZWFkXFxuZnMvYnVmZmVyLmMtMTE0Mi0gKiBAYmg6IFRoZSBidWZmZXIgaGVhZCB0byBwZXJmb3JtIEkvTyBvbi5cXG4tLVxcbmZzL2J1ZmZlci5jLTExNDgtICovXFxuZnMvYnVmZmVyLmM6MTE0OTp2b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLCBiaW9fZW5kX2lvX3QgZW5kX2lvKVxcbmZzL2J1ZmZlci5jLTExNTAte1xcbmZzL2J1ZmZlci5jOjExNTE6XFx0X19iaF9zdWJtaXQoYmgsIG9wZiwgV1JJVEVfTElGRV9OT1RfU0VULCBOVUxMLCBlbmRfaW8pO1xcbmZzL2J1ZmZlci5jLTExNTItfVxcbmZzL2J1ZmZlci5jOjExNTM6RVhQT1JUX1NZTUJPTChiaF9zdWJtaXQpO1xcbmZzL2J1ZmZlci5jLTExNTQtXFxuZnMvYnVmZmVyLmM9MTE1NT1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2JyZWFkX3Nsb3coc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2J1ZmZlci5jLTExNjEtXFx0fSBlbHNlIHtcXG5mcy9idWZmZXIuYzoxMTYyOlxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcXG5mcy9idWZmZXIuYy0xMTYzLVxcdFxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTE2ODI9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fY3JlYXRlX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE3MTgtICogaGFzIGEgbG9ja2VkIGJ1ZmZlci4gICBUaGlzIG9ubHkgY2FuIGhhcHBlbiBpZiBzb21lb25lIGhhcyB3cml0dGVuXFxuZnMvYnVmZmVyLmM6MTcxOTogKiB0aGUgYnVmZmVyIGRpcmVjdGx5LCB3aXRoIGJoX3N1Ym1pdCgpLiAgQXQgdGhlIGFkZHJlc3Nfc3BhY2UgbGV2ZWxcXG5mcy9idWZmZXIuYy0xNzIwLSAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXFxuLS1cXG5mcy9idWZmZXIuYz0xNzI2PWludCBfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MjEtXFx0XFx0aWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHtcXG5mcy9idWZmZXIuYzoxODIyOlxcdFxcdFxcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9idWZmZXIuYy0xODIzLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MzYtXFx0XFx0ICogY2xlYW4uICBTb21lb25lIHdyb3RlIHRoZW0gYmFjayBieSBoYW5kIHdpdGhcXG5mcy9idWZmZXIuYzoxODM3OlxcdFxcdCAqIHdyaXRlX2RpcnR5X2J1ZmZlci9iaF9zdWJtaXQuICBBIHJhcmUgY2FzZS5cXG5mcy9idWZmZXIuYy0xODM4LVxcdFxcdCAqL1xcbi0tXFxuZnMvYnVmZmVyLmMtMTg3Ni1cXHRcXHRcXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xcbmZzL2J1ZmZlci5jOjE4Nzc6XFx0XFx0XFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxcbmZzL2J1ZmZlci5jLTE4NzgtXFx0XFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmM9MjI4Mj1pbnQgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdldF9ibG9ja190ICpnZXRfYmxvY2spXFxuLS1cXG5mcy9idWZmZXIuYy0yMzYzLVxcdFxcdGlmIChwcmV2KVxcbmZzL2J1ZmZlci5jOjIzNjQ6XFx0XFx0XFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjM2NS1cXHRcXHRwcmV2ID0gYmg7XFxuLS1cXG5mcy9idWZmZXIuYy0yMzc3LVxcdGlmIChwcmV2KVxcbmZzL2J1ZmZlci5jOjIzNzg6XFx0XFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjM3OS1cXHRlbHNlXFxuLS1cXG5mcy9idWZmZXIuYz0yNjg2PXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcXG4tLVxcbmZzL2J1ZmZlci5jLTI2OTItXFx0fVxcbmZzL2J1ZmZlci5jOjI2OTM6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcXG5mcy9idWZmZXIuYy0yNjk0LX1cXG4tLVxcbmZzL2J1ZmZlci5jPTI3MDI9aW50IF9fc3luY19kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxcbi0tXFxuZnMvYnVmZmVyLmMtMjcxNS1cXG5mcy9idWZmZXIuYzoyNzE2OlxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgb3BfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XFxuZnMvYnVmZmVyLmMtMjcxNy1cXHRcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuLS1cXG5mcy9idWZmZXIuYz0yOTQyPWludCBfX2JoX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXFxuLS1cXG5mcy9idWZmZXIuYy0yOTQ3LVxcbmZzL2J1ZmZlci5jOjI5NDg6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCB8IG9wX2ZsYWdzLCBiaF9lbmRfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjk0OS1cXHRpZiAod2FpdCkge1xcbi0tXFxuZnMvYnVmZmVyLmM9Mjk2OD12b2lkIF9fYmhfcmVhZF9iYXRjaChpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sXFxuLS1cXG5mcy9idWZmZXIuYy0yOTg5LVxcbmZzL2J1ZmZlci5jOjI5OTA6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCB8IG9wX2ZsYWdzLCBiaF9lbmRfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjk5MS1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NjY0PXN0YXRpYyB2b2lkIGV4dDRfZmNfc3VibWl0X2JoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgaXNfdGFpbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02NzQtXFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjY3NTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02NzYtXFx0RVhUNF9TQihzYiktXFx1MDAzZXNfZmNfYmggPSBOVUxMO1xcbi0tXFxuZnMvZXh0NC9tbXAuYz00Mj1zdGF0aWMgaW50IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbW1wLmMtNDgtXFx0bG9ja19idWZmZXIoYmgpO1xcbmZzL2V4dDQvbW1wLmM6NDk6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9NRVRBIHwgUkVRX1BSSU8sXFxuZnMvZXh0NC9tbXAuYy01MC1cXHRcXHRcXHRiaF9lbmRfd3JpdGUpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE4MC1cXHRcXHRlbmRfaW8gPSBiaF9lbmRfcmVhZDtcXG5mcy9leHQ0L3N1cGVyLmM6MTgxOlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgZW5kX2lvKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTgyLX1cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MzI1PXN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MzU2LVxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShzYmgpO1xcbmZzL2V4dDQvc3VwZXIuYzo2MzU3OlxcdGJoX3N1Ym1pdChzYmgsIFJFUV9PUF9XUklURSB8IFJFUV9TWU5DIHxcXG5mcy9leHQ0L3N1cGVyLmMtNjM1OC1cXHRcXHQgICh0ZXN0X29wdChzYiwgQkFSUklFUikgPyBSRVFfRlVBIDogMCksIGJoX2VuZF93cml0ZSk7XFxuLS1cXG5mcy9nZnMyL2JtYXAuYz0yOTc9c3RhdGljIHZvaWQgZ2ZzMl9tZXRhcGF0aF9yYShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIF9fYmU2NCAqc3RhcnQsIF9fYmU2NCAqZW5kKVxcbi0tXFxuZnMvZ2ZzMi9ibWFwLmMtMzA5LVxcdFxcdFxcdGlmICghYnVmZmVyX3VwdG9kYXRlKHJhYmgpKSB7XFxuZnMvZ2ZzMi9ibWFwLmM6MzEwOlxcdFxcdFxcdFxcdGJoX3N1Ym1pdChyYWJoLFxcbmZzL2dmczIvYm1hcC5jLTMxMS1cXHRcXHRcXHRcXHRcXHRSRVFfT1BfUkVBRCB8IFJFUV9SQUhFQUQgfCBSRVFfTUVUQSB8XFxuLS1cXG5mcy9nZnMyL2Rpci5jPTE0OTI9c3RhdGljIHZvaWQgZ2ZzMl9kaXJfcmVhZGFoZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGhzaXplLCB1MzIgaW5kZXgsXFxuLS1cXG5mcy9nZnMyL2Rpci5jLTE1MjAtXFx0XFx0XFx0fSBlbHNlIHtcXG5mcy9nZnMyL2Rpci5jOjE1MjE6XFx0XFx0XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCB8IFJFUV9SQUhFQUQgfFxcbmZzL2dmczIvZGlyLmMtMTUyMi1cXHRcXHRcXHRcXHRcXHRcXHRSRVFfTUVUQSB8IFJFUV9QUklPLFxcbi0tXFxuZnMvZ2ZzMi9tZXRhX2lvLmM9MzM9c3RhdGljIHZvaWQgZ2ZzMl9hc3BhY2Vfd3JpdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jLTc3LVxcdFxcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XFxuZnMvZ2ZzMi9tZXRhX2lvLmM6Nzg6XFx0XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9nZnMyL21ldGFfaW8uYy03OS1cXHRcXHRcXHRcXHRcXHRiaF9lbmRfYXN5bmNfd3JpdGUpO1xcbi0tXFxuZnMvZ2ZzMi9tZXRhX2lvLmM9MjAyPXN0YXRpYyB2b2lkIGdmczJfbWV0YV9yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jLTIyNC0gKiBTdWJtaXQgc2V2ZXJhbCBjb25zZWN1dGl2ZSBidWZmZXIgaGVhZCBJL08gcmVxdWVzdHMgYXMgYSBzaW5nbGUgYmlvIEkvT1xcbmZzL2dmczIvbWV0YV9pby5jOjIyNTogKiByZXF1ZXN0LiAgKFNlZSBiaF9zdWJtaXQuKVxcbmZzL2dmczIvbWV0YV9pby5jLTIyNi0gKi9cXG4tLVxcbmZzL2piZDIvY29tbWl0LmM9MTE0PXN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfY29tbWl0X3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTE1NC1cXG5mcy9qYmQyL2NvbW1pdC5jOjE1NTpcXHRiaF9zdWJtaXQoYmgsIHdyaXRlX2ZsYWdzLCBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYyk7XFxuZnMvamJkMi9jb21taXQuYy0xNTYtXFx0KmNiaCA9IGJoO1xcbi0tXFxuZnMvamJkMi9jb21taXQuYz0zNzY9dm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcXG4tLVxcbmZzL2piZDIvY29tbWl0LmMtNzUwLVxcdFxcdFxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbmZzL2piZDIvY29tbWl0LmM6NzUxOlxcdFxcdFxcdFxcdGJoX3N1Ym1pdChiaCxcXG5mcy9qYmQyL2NvbW1pdC5jLTc1Mi1cXHRcXHRcXHRcXHRcXHRSRVFfT1BfV1JJVEUgfCBKQkQyX0pPVVJOQUxfUkVRX0ZMQUdTLFxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmM9MTc4OD1zdGF0aWMgaW50IGpiZDJfd3JpdGVfc3VwZXJibG9jayhqb3VybmFsX3QgKmpvdXJuYWwsIGJsa19vcGZfdCB3cml0ZV9mbGFncylcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTE4MjYtXFx0XFx0c2ItXFx1MDAzZXNfY2hlY2tzdW0gPSBqYmQyX3N1cGVyYmxvY2tfY3N1bShzYik7XFxuZnMvamJkMi9qb3VybmFsLmM6MTgyNzpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbmZzL2piZDIvam91cm5hbC5jLTE4MjgtXFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbi0tXFxuZnMvbmlsZnMyL2J0bm9kZS5jPTg3PWludCBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jLCBfX3U2NCBibG9ja25yLFxcbi0tXFxuZnMvbmlsZnMyL2J0bm9kZS5jLTEzNi1cXHRiaC1cXHUwMDNlYl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovXFxuZnMvbmlsZnMyL2J0bm9kZS5jOjEzNzpcXHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xcbmZzL25pbGZzMi9idG5vZGUuYy0xMzgtXFx0YmgtXFx1MDAzZWJfYmxvY2tuciA9IGJsb2NrbnI7IC8qIHNldCBiYWNrIHRvIHRoZSBnaXZlbiBibG9jayBhZGRyZXNzICovXFxuLS1cXG5mcy9uaWxmczIvZ2Npbm9kZS5jPTU1PWludCBuaWxmc19nY2NhY2hlX3N1Ym1pdF9yZWFkX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxrb2ZmLFxcbi0tXFxuZnMvbmlsZnMyL2djaW5vZGUuYy04NS1cXHRiaC1cXHUwMDNlYl9ibG9ja25yID0gcGJuO1xcbmZzL25pbGZzMi9nY2lub2RlLmM6ODY6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xcbmZzL25pbGZzMi9nY2lub2RlLmMtODctXFx0aWYgKHZibilcXG4tLVxcbmZzL25pbGZzMi9tZHQuYz0xMTY9bmlsZnNfbWR0X3N1Ym1pdF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsa29mZiwgYmxrX29wZl90IG9wZixcXG4tLVxcbmZzL25pbGZzMi9tZHQuYy0xNTAtXFxuZnMvbmlsZnMyL21kdC5jOjE1MTpcXHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xcbmZzL25pbGZzMi9tZHQuYy0xNTItXFx0cmV0ID0gMDtcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9Mzg9aW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy02NC1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjY1OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFLCBiaF9lbmRfd3JpdGUpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjYtXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jPTg5PWludCBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxvY2ssXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTE0Ny1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjE0ODpcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0xNDktXFx0fVxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0xOTE9aW50IG9jZnMyX3JlYWRfYmxvY2tzKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLCB1NjQgYmxvY2ssIGludCBucixcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzI1LVxcdFxcdFxcdFxcdHNldF9idWZmZXJfbmVlZHNfdmFsaWRhdGUoYmgpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6MzI2OlxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTMyNy1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDI1PWludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQ0Ni1cXHRvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi1cXHUwMDNlc2IsIGJoLVxcdTAwM2ViX2RhdGEsIFxcdTAwMjZkaS1cXHUwMDNlaV9jaGVjayk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzo0NDc6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUsIGJoX2VuZF93cml0ZSk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9NDg9c3RydWN0IGFkZHJlc3Nfc3BhY2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtNTYtICogYSBmb2xpbyAodmlhIGEgZm9saW9fbWFwcGluZykgYW5kIGZvciB3cmFwcGluZyBiaW8gc3VibWlzc2lvblxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDo1NzogKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIChlLmcuIGJoX3N1Ym1pdCkuXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU4LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTIzMD1ib29sIGJpb19lbmRpb19iaChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCk7XFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTIzMS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjMyOi8qIENvbXBsZXRpb24gcm91dGluZXMgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYmhfc3VibWl0KCkgKi9cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjMzLXZvaWQgYmhfZW5kX3JlYWQoc3RydWN0IGJpbyAqYmlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yNjU9dm9pZCB3cml0ZV9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjY2OnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBibGtfb3BmX3QsIGJpb19lbmRfaW9fdCk7XFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTI2Ny12b2lkIHdyaXRlX2JvdW5kYXJ5X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5tbS92bXNjYW4uYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE0NDktXFx0XFx0ICogVGhpcyBoYXBwZW5zIGlmIHRoZSBidWZmZXJzIHdlcmUgd3JpdHRlbiBvdXQgZGlyZWN0bHksXFxubW0vdm1zY2FuLmM6MTQ1MDpcXHRcXHQgKiB3aXRoIGJoX3N1Ym1pdCgpLiBleHQzIHdpbGwgZG8gdGhpcywgYXMgd2VsbCBhc1xcbm1tL3Ztc2Nhbi5jLTE0NTEtXFx0XFx0ICogdGhlIGJsb2NrZGV2IG1hcHBpbmcuICBmaWxlbWFwX3JlbGVhc2VfZm9saW8oKSB3aWxsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjUwLjc5MTQ2NzUyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzOTU0ODk0Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMZWdhY3kgQnVmZmVyIEhlYWQgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGJ1ZmZlcl9oZWFkIGJ1c2luZXNzIGFnYWluLiBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSAqYW5jaWVudCogYnVmZmVyX2hlYWRzIOKAkyB0aGUgb25lcyBzdGlsbCBraWNraW5nIGFyb3VuZCB3aXRob3V0IHRoZSBtb3JlIG1vZGVybiBmb2xpbyBzdXBwb3J0IOKAkyBhcmUgYmVpbmcgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSBhbmQgd2hhdCB0aGV5IGFyZSB1c2VkIGZvci4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBsZWdhY3kgY29tcG9uZW50cyBjb250aW51ZSB0byBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQga2VybmVsIGFuZCB3aHkgdGhleSBoYXZlIG5vdCBiZWVuIHJlbW92ZWQuXG5cbk15IHBsYW4gaXMgc2ltcGxlOiBsZXQncyBmaXJlIHVwIGBncmVwYC4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGEgZmV3IGtleSBpbmRpY2F0b3JzLiBJJ2xsIHN0YXJ0IHdpdGggYGFsbG9jX2J1ZmZlcl9oZWFkYCDigJMgdGhhdCBzaG91bGQgZmxhZyBhbnkgZGlyZWN0IGFsbG9jYXRpb24gc2l0ZXMuIFRoZW4sIEknbGwgdXNlIGBiaC1cdTAwM2ViX2ZvbGlvYCB0byBzZWUgd2hlcmUgdGhlIHN5c3RlbSBpcyB3b3JraW5nIHdpdGggdGhlICphYnNlbmNlKiBvZiBmb2xpby1iYWNrZWQgYnVmZmVycy4gRmluYWxseSwgSSdsbCBwcm9iZSBmb3IgYGJfZGF0YWAuIFRoYXQgc2hvdWxkIHBpY2sgdXAgYSBsb3Qgb2YgdGhlIG9sZGVyIGNvZGUgdGhhdCByZWxpZXMgb24gdGhhdCBmaWVsZCBmb3IgYWNjZXNzaW5nIHRoZSBidWZmZXIncyBjb250ZW50cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBsZWdhY3kgc3lzdGVtIGlzIGJlaW5nIHVzZWQuIFRoaXMgY291bGQgYmUgYSByZWZhY3RvcmluZyBleGVyY2lzZSwgb3IgSSBjb3VsZCBqdXN0IGJlIGxvb2tpbmcgdG8gYmV0dGVyIHVuZGVyc3RhbmQgYSBzeXN0ZW0gdGhhdCBpcyBzdGlsbCBjcml0aWNhbCB0byBvcGVyYXRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDk6MDQuNzQ2MzY0Mzc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc3NTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiX2RhdGEuKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2FkZnMvc3VwZXIuYz0zMDI9c3RhdGljIGludCBhZGZzX3ZhbGlkYXRlX2JibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2FkZnMvc3VwZXIuYy0zMDctXFxuZnMvYWRmcy9zdXBlci5jOjMwODpcXHRiX2RhdGEgPSBiaC1cXHUwMDNlYl9kYXRhICsgKEFERlNfRElTQ1JFQ09SRCAlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuZnMvYWRmcy9zdXBlci5jLTMwOS1cXHRpZiAoYWRmc19jaGVja2JibGsoYl9kYXRhKSlcXG4tLVxcbmZzL2FmZnMvYWZmcy5oPTI4MT1hZmZzX2FkanVzdF9jaGVja3N1bShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgdmFsKVxcbi0tXFxuZnMvYWZmcy9hZmZzLmgtMjgzLVxcdHUzMiB0bXAgPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKWJoLVxcdTAwM2ViX2RhdGEpWzVdKTtcXG5mcy9hZmZzL2FmZnMuaDoyODQ6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVs1XSA9IGNwdV90b19iZTMyKHRtcCAtIHZhbCk7XFxuZnMvYWZmcy9hZmZzLmgtMjg1LX1cXG4tLVxcbmZzL2FmZnMvYWZmcy5oPTI4Nz1hZmZzX2FkanVzdF9iaXRtYXBjaGVja3N1bShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgdmFsKVxcbi0tXFxuZnMvYWZmcy9hZmZzLmgtMjg5LVxcdHUzMiB0bXAgPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKWJoLVxcdTAwM2ViX2RhdGEpWzBdKTtcXG5mcy9hZmZzL2FmZnMuaDoyOTA6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKHRtcCAtIHZhbCk7XFxuZnMvYWZmcy9hZmZzLmgtMjkxLX1cXG4tLVxcbmZzL2FmZnMvYml0bWFwLmM9Mzk9YWZmc19mcmVlX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBibG9jaylcXG4tLVxcbmZzL2FmZnMvYml0bWFwLmMtNzktXFx0dG1wID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKTtcXG5mcy9hZmZzL2JpdG1hcC5jOjgwOlxcdCooX19iZTMyICopYmgtXFx1MDAzZWJfZGF0YSA9IGNwdV90b19iZTMyKHRtcCAtIG1hc2spO1xcbmZzL2FmZnMvYml0bWFwLmMtODEtXFxuLS1cXG5mcy9hZmZzL2JpdG1hcC5jPTExNT1hZmZzX2FsbG9jX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBnb2FsKVxcbi0tXFxuZnMvYWZmcy9iaXRtYXAuYy0yMjMtXFx0dG1wID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKTtcXG5mcy9hZmZzL2JpdG1hcC5jOjIyNDpcXHQqKF9fYmUzMiAqKWJoLVxcdTAwM2ViX2RhdGEgPSBjcHVfdG9fYmUzMih0bXAgKyBtYXNrKTtcXG5mcy9hZmZzL2JpdG1hcC5jLTIyNS1cXG4tLVxcbmZzL2FmZnMvYml0bWFwLmM9MjQ0PWludCBhZmZzX2luaXRfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MpXFxuLS1cXG5mcy9hZmZzL2JpdG1hcC5jLTMyNi1cXHRcXHQvL2lmIChvbGQgIT0gbmV3KSB7XFxuZnMvYWZmcy9iaXRtYXAuYzozMjc6XFx0XFx0XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVtvZmZzZXRdID0gY3B1X3RvX2JlMzIobmV3KTtcXG5mcy9hZmZzL2JpdG1hcC5jLTMyOC1cXHRcXHRcXHQvKiBmaXggY2hlY2tzdW0gKi9cXG4tLVxcbmZzL2FmZnMvYml0bWFwLmMtMzMwLVxcdFxcdFxcdC8vb2xkID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKTtcXG5mcy9hZmZzL2JpdG1hcC5jOjMzMTpcXHRcXHRcXHQvLyooX19iZTMyICopYmgtXFx1MDAzZWJfZGF0YSA9IGNwdV90b19iZTMyKG9sZCAtIG5ldyk7XFxuZnMvYWZmcy9iaXRtYXAuYy0zMzItXFx0XFx0XFx0Ly9tYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLS1cXG5mcy9hZmZzL2JpdG1hcC5jLTMzNy1cXHR3aGlsZSAoKytvZmZzZXQgXFx1MDAzYyBzYi1cXHUwMDNlc19ibG9ja3NpemUgLyA0KVxcbmZzL2FmZnMvYml0bWFwLmM6MzM4OlxcdFxcdCgoX19iZTMyICopYmgtXFx1MDAzZWJfZGF0YSlbb2Zmc2V0XSA9IDA7XFxuZnMvYWZmcy9iaXRtYXAuYzozMzk6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVswXSA9IDA7XFxuZnMvYWZmcy9iaXRtYXAuYzozNDA6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKC1hZmZzX2NoZWNrc3VtX2Jsb2NrKHNiLCBiaCkpO1xcbmZzL2FmZnMvYml0bWFwLmMtMzQxLVxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTE0Njg9dm9pZCBmb2xpb19zZXRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE0NzYtXFx0XFx0ICovXFxuZnMvYnVmZmVyLmM6MTQ3NzpcXHRcXHRiaC1cXHUwMDNlYl9kYXRhID0gKGNoYXIgKikoMCArIG9mZnNldCk7XFxuZnMvYnVmZmVyLmMtMTQ3OC1cXHRlbHNlXFxuZnMvYnVmZmVyLmM6MTQ3OTpcXHRcXHRiaC1cXHUwMDNlYl9kYXRhID0gZm9saW9fYWRkcmVzcyhmb2xpbykgKyBvZmZzZXQ7XFxuZnMvYnVmZmVyLmMtMTQ4MC19XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTIyMz1zdGF0aWMgaW50IG1idF9ncnBfY3R4X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjI3LVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MjI4OlxcdGdycF9jdHgtXFx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBremFsbG9jKEVYVDRfQkxPQ0tfU0laRShzYiksIEdGUF9LRVJORUwpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MjI5OlxcdGlmIChncnBfY3R4LVxcdTAwM2ViaXRtYXBfYmguYl9kYXRhID09IE5VTEwpXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0yMzAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTIzNz1zdGF0aWMgdm9pZCBtYnRfZ3JwX2N0eF9yZWxlYXNlKHN0cnVjdCBtYnRfZ3JwX2N0eCAqZ3JwX2N0eClcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjM5LVxcdGtmcmVlKGdycF9jdHgtXFx1MDAzZWJpdG1hcF9iaC5iX2RhdGEpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MjQwOlxcdGdycF9jdHgtXFx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBOVUxMO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjQxLX1cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTQwODk9ZXh0NF9tYl9tYXJrX2NvbnRleHQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBzdGF0ZSxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTQxNDEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbmZzL2V4dDQvbWJhbGxvYy5jOjQxNDI6XFx0XFx0XFx0aWYgKG1iX3Rlc3RfYml0KGJsa29mZiArIGksIGJpdG1hcF9iaC1cXHUwMDNlYl9kYXRhKSA9PVxcbmZzL2V4dDQvbWJhbGxvYy5jLTQxNDMtXFx0XFx0XFx0XFx0XFx0c3RhdGUpXFxuLS1cXG5mcy9mMmZzL2RlYnVnLmM9MTI3PXN0YXRpYyB2b2lkIHVwZGF0ZV9nZW5lcmFsX3N0YXR1cyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9mMmZzL2RlYnVnLmMtMTc0LVxcdHNpLVxcdTAwM2Vucl93Yl9jcF9kYXRhID0gZ2V0X3BhZ2VzKHNiaSwgRjJGU19XQl9DUF9EQVRBKTtcXG5mcy9mMmZzL2RlYnVnLmM6MTc1OlxcdHNpLVxcdTAwM2Vucl93Yl9kYXRhID0gZ2V0X3BhZ2VzKHNiaSwgRjJGU19XQl9EQVRBKTtcXG5mcy9mMmZzL2RlYnVnLmMtMTc2LVxcdHNpLVxcdTAwM2Vucl9yZF9kYXRhID0gZ2V0X3BhZ2VzKHNiaSwgRjJGU19SRF9EQVRBKTtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTIyMTM9c3RhdGljIHNzaXplX3QgZnVzZV9pb21hcF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTIyMTYte1xcbmZzL2Z1c2UvZmlsZS5jOjIyMTc6XFx0c3RydWN0IGZ1c2VfZmlsbF93Yl9kYXRhICpkYXRhID0gd3BjLVxcdTAwM2V3Yl9jdHg7XFxuZnMvZnVzZS9maWxlLmMtMjIxOC1cXHRzdHJ1Y3QgZnVzZV93cml0ZXBhZ2VfYXJncyAqd3BhID0gZGF0YS1cXHUwMDNld3BhO1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjI3Mz1zdGF0aWMgaW50IGZ1c2VfaW9tYXBfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMjI3NS17XFxuZnMvZnVzZS9maWxlLmM6MjI3NjpcXHRzdHJ1Y3QgZnVzZV9maWxsX3diX2RhdGEgKmRhdGEgPSB3cGMtXFx1MDAzZXdiX2N0eDtcXG5mcy9mdXNlL2ZpbGUuYy0yMjc3LVxcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjI5Nj1zdGF0aWMgaW50IGZ1c2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTIzMDAtXFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTtcXG5mcy9mdXNlL2ZpbGUuYzoyMzAxOlxcdHN0cnVjdCBmdXNlX2ZpbGxfd2JfZGF0YSBkYXRhID0ge307XFxuZnMvZnVzZS9maWxlLmMtMjMwMi1cXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYz0yMzIwPXN0YXRpYyBpbnQgZnVzZV9sYXVuZGVyX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yMzIyLVxcdGludCBlcnIgPSAwO1xcbmZzL2Z1c2UvZmlsZS5jOjIzMjM6XFx0c3RydWN0IGZ1c2VfZmlsbF93Yl9kYXRhIGRhdGEgPSB7fTtcXG5mcy9mdXNlL2ZpbGUuYy0yMzI0LVxcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcXG4tLVxcbmZzL2dmczIveGF0dHIuYz04OD1zdGF0aWMgaW50IGVhX2ZvcmVhY2hfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9nZnMyL3hhdHRyLmMtMTAyLVxcdFxcdH1cXG5mcy9nZnMyL3hhdHRyLmM6MTAzOlxcdFxcdGlmICghKGJoLVxcdTAwM2ViX2RhdGEgXFx1MDAzYz0gKGNoYXIgKillYSBcXHUwMDI2XFx1MDAyNiAoY2hhciAqKUdGUzJfRUEyTkVYVChlYSkgXFx1MDAzYz1cXG5mcy9nZnMyL3hhdHRyLmMtMTA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgYmgtXFx1MDAzZWJfZGF0YSArIGJoLVxcdTAwM2ViX3NpemUpKSB7XFxuLS1cXG5mcy9ocGZzL2J1ZmZlci5jPTExND12b2lkICpocGZzX21hcF80c2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHVuc2lnbmVkIHNlY25vLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqcWJoLFxcbi0tXFxuZnMvaHBmcy9idWZmZXIuYy0xMzQtXFxuZnMvaHBmcy9idWZmZXIuYzoxMzU6XFx0aWYgKGxpa2VseShxYmgtXFx1MDAzZWJoWzFdLVxcdTAwM2ViX2RhdGEgPT0gcWJoLVxcdTAwM2ViaFswXS1cXHUwMDNlYl9kYXRhICsgMSAqIDUxMikgXFx1MDAyNlxcdTAwMjZcXG5mcy9ocGZzL2J1ZmZlci5jOjEzNjpcXHQgICAgbGlrZWx5KHFiaC1cXHUwMDNlYmhbMl0tXFx1MDAzZWJfZGF0YSA9PSBxYmgtXFx1MDAzZWJoWzBdLVxcdTAwM2ViX2RhdGEgKyAyICogNTEyKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2hwZnMvYnVmZmVyLmM6MTM3OlxcdCAgICBsaWtlbHkocWJoLVxcdTAwM2ViaFszXS1cXHUwMDNlYl9kYXRhID09IHFiaC1cXHUwMDNlYmhbMF0tXFx1MDAzZWJfZGF0YSArIDMgKiA1MTIpKSB7XFxuZnMvaHBmcy9idWZmZXIuYy0xMzgtXFx0XFx0cmV0dXJuIHFiaC1cXHUwMDNlZGF0YSA9IHFiaC1cXHUwMDNlYmhbMF0tXFx1MDAzZWJfZGF0YTtcXG4tLVxcbmZzL2hwZnMvYnVmZmVyLmM9MTY4PXZvaWQgKmhwZnNfZ2V0XzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sXFxuLS1cXG5mcy9ocGZzL2J1ZmZlci5jLTE4NC1cXG5mcy9ocGZzL2J1ZmZlci5jOjE4NTpcXHRpZiAobGlrZWx5KHFiaC1cXHUwMDNlYmhbMV0tXFx1MDAzZWJfZGF0YSA9PSBxYmgtXFx1MDAzZWJoWzBdLVxcdTAwM2ViX2RhdGEgKyAxICogNTEyKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2hwZnMvYnVmZmVyLmM6MTg2OlxcdCAgICBsaWtlbHkocWJoLVxcdTAwM2ViaFsyXS1cXHUwMDNlYl9kYXRhID09IHFiaC1cXHUwMDNlYmhbMF0tXFx1MDAzZWJfZGF0YSArIDIgKiA1MTIpIFxcdTAwMjZcXHUwMDI2XFxuZnMvaHBmcy9idWZmZXIuYzoxODc6XFx0ICAgIGxpa2VseShxYmgtXFx1MDAzZWJoWzNdLVxcdTAwM2ViX2RhdGEgPT0gcWJoLVxcdTAwM2ViaFswXS1cXHUwMDNlYl9kYXRhICsgMyAqIDUxMikpIHtcXG5mcy9ocGZzL2J1ZmZlci5jLTE4OC1cXHRcXHRyZXR1cm4gcWJoLVxcdTAwM2VkYXRhID0gcWJoLVxcdTAwM2ViaFswXS1cXHUwMDNlYl9kYXRhO1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmM9MzI0PWludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtMzY2LVxcdFxcdFxcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbmZzL2piZDIvam91cm5hbC5jOjM2NzpcXHRcXHRuZXdfYmgtXFx1MDAzZWJfZGF0YSA9IGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhO1xcbmZzL2piZDIvam91cm5hbC5jLTM2OC1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtNDExLVxcdFxcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbmZzL2piZDIvam91cm5hbC5jOjQxMjpcXHRcXHRuZXdfYmgtXFx1MDAzZWJfZGF0YSA9IGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhO1xcbmZzL2piZDIvam91cm5hbC5jLTQxMy1cXHR9XFxuLS1cXG5mcy9qYmQyL3JlY292ZXJ5LmM9MTk4PXN0YXRpYyBpbnQgY291bnRfdGFncyhqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9qYmQyL3JlY292ZXJ5LmMtMjA5LVxcbmZzL2piZDIvcmVjb3ZlcnkuYzoyMTA6XFx0d2hpbGUgKCh0YWdwIC0gYmgtXFx1MDAzZWJfZGF0YSArIHRhZ19ieXRlcykgXFx1MDAzYz0gc2l6ZSkge1xcbmZzL2piZDIvcmVjb3ZlcnkuYy0yMTEtXFx0XFx0bWVtY3B5KFxcdTAwMjZ0YWcsIHRhZ3AsIHNpemVvZih0YWcpKTtcXG4tLVxcbmZzL2piZDIvcmVjb3ZlcnkuYz00OTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgamJkMl9kb19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLFxcbi0tXFxuZnMvamJkMi9yZWNvdmVyeS5jLTUwOS1cXHR0YWdwID0gXFx1MDAyNmJoLVxcdTAwM2ViX2RhdGFbc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpXTtcXG5mcy9qYmQyL3JlY292ZXJ5LmM6NTEwOlxcdHdoaWxlICh0YWdwIC0gYmgtXFx1MDAzZWJfZGF0YSArIHRhZ19ieXRlcyBcXHUwMDNjPVxcbmZzL2piZDIvcmVjb3ZlcnkuYy01MTEtXFx0ICAgICAgIGpvdXJuYWwtXFx1MDAzZWpfYmxvY2tzaXplIC0gZGVzY3JfY3N1bV9zaXplKSB7XFxuLS1cXG5mcy9qYmQyL3JlY292ZXJ5LmMtNTYxLVxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEpCRDJfRkxBR19FU0NBUEUpIHtcXG5mcy9qYmQyL3JlY292ZXJ5LmM6NTYyOlxcdFxcdFxcdFxcdCooKF9fYmUzMiAqKW5iaC1cXHUwMDNlYl9kYXRhKSA9XFxuZnMvamJkMi9yZWNvdmVyeS5jLTU2My1cXHRcXHRcXHRcXHRjcHVfdG9fYmUzMihKQkQyX01BR0lDX05VTUJFUik7XFxuLS1cXG5mcy9qYmQyL3Jldm9rZS5jPTU3Mz1zdGF0aWMgdm9pZCB3cml0ZV9vbmVfcmV2b2tlX3JlY29yZCh0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcXG4tLVxcbmZzL2piZDIvcmV2b2tlLmMtNjI1LVxcdGlmIChqYmQyX2hhc19mZWF0dXJlXzY0Yml0KGpvdXJuYWwpKVxcbmZzL2piZDIvcmV2b2tlLmM6NjI2OlxcdFxcdCogKChfX2JlNjQgKikoXFx1MDAyNmRlc2NyaXB0b3ItXFx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxcbmZzL2piZDIvcmV2b2tlLmMtNjI3LVxcdFxcdFxcdGNwdV90b19iZTY0KHJlY29yZC1cXHUwMDNlYmxvY2tucik7XFxuZnMvamJkMi9yZXZva2UuYy02MjgtXFx0ZWxzZVxcbmZzL2piZDIvcmV2b2tlLmM6NjI5OlxcdFxcdCogKChfX2JlMzIgKikoXFx1MDAyNmRlc2NyaXB0b3ItXFx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxcbmZzL2piZDIvcmV2b2tlLmMtNjMwLVxcdFxcdFxcdGNwdV90b19iZTMyKHJlY29yZC1cXHUwMDNlYmxvY2tucik7XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTIyND1zdGF0aWMgaW50IG1pbml4X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTI4My1cXHRcXHRzLVxcdTAwM2VzX21heF9saW5rcyA9IE1JTklYMl9MSU5LX01BWDtcXG5mcy9taW5peC9pbm9kZS5jOjI4NDpcXHR9IGVsc2UgaWYgKCAqKF9fdTE2ICopKGJoLVxcdTAwM2ViX2RhdGEgKyAyNCkgPT0gTUlOSVgzX1NVUEVSX01BR0lDKSB7XFxuZnMvbWluaXgvaW5vZGUuYy0yODUtXFx0XFx0bTNzID0gKHN0cnVjdCBtaW5peDNfc3VwZXJfYmxvY2sgKikgYmgtXFx1MDAzZWJfZGF0YTtcXG4tLVxcbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmM9MTQ2MT1zdGF0aWMgdm9pZCBvMmhiX2RlYnVnX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jLTE0NzEtXFx0KCpkYiktXFx1MDAzZWRiX2xlbiA9IGxlbjtcXG5mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jOjE0NzI6XFx0KCpkYiktXFx1MDAzZWRiX2RhdGEgPSBkYXRhO1xcbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMtMTQ3My1cXG4tLVxcbmZzL3JvbWZzL3N0b3JhZ2UuYz0xNjM9c3RhdGljIGludCByb21mc19ibGtfc3RyY21wKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zLFxcbi0tXFxuZnMvcm9tZnMvc3RvcmFnZS5jLTE3Ny1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9yb21mcy9zdG9yYWdlLmM6MTc4OlxcdFxcdG1hdGNoZWQgPSAobWVtY21wKGJoLVxcdTAwM2ViX2RhdGEgKyBvZmZzZXQsIHN0ciwgc2VnbWVudCkgPT0gMCk7XFxuZnMvcm9tZnMvc3RvcmFnZS5jLTE3OS1cXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jPTg3Nz1zdGF0aWMgdm9pZCB0Y29uX3N1cGVyX2NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmFyZylcXG5mcy9zbWIvY2xpZW50L21pc2MuYy04Nzgte1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjg3OTpcXHRzdHJ1Y3Qgc3VwZXJfY2JfZGF0YSAqc2QgPSBhcmc7XFxuZnMvc21iL2NsaWVudC9taXNjLmMtODgwLVxcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7XFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MDEte1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkwMjpcXHRzdHJ1Y3Qgc3VwZXJfY2JfZGF0YSBzZCA9IHtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MDMtXFx0XFx0LmRhdGEgPSBkYXRhLFxcbi0tXFxuZnMvdWRmL3VkZmRlY2wuaD0xMTY9c3RhdGljIGlubGluZSB2b2lkIHVkZl91cGRhdGVkX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmgtMTIxLVxcdFdBUk5fT05fT05DRSgoKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKVxcbmZzL3VkZi91ZGZkZWNsLmg6MTIyOlxcdFxcdCAgICAgYmgtXFx1MDAzZWJfZGF0YSktXFx1MDAzZWludGVncml0eVR5cGUgIT1cXG5mcy91ZGYvdWRmZGVjbC5oLTEyMy1cXHRcXHQgICAgIGNwdV90b19sZTMyKExWSURfSU5URUdSSVRZX1RZUEVfT1BFTikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0OTowNC44MzQxNDQwNjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MzM4NzA5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBqYmQyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgamJkMiBqb3VybmFsaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2piZDIvam91cm5hbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgY3Jhc2ggaXMgaGFwcGVuaW5nLiBUaGUgdHJhY2Ugc2VlbXMgdG8gcG9pbnQgdG8gYSBwcm9ibGVtIGFyb3VuZCB0aGUgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBsaW5lOlxuXG5gYGBjXG5uZXdfYmgtXHUwMDNlYl9kYXRhID0gamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YTtcbmBgYFxuXG5pcyBwYXJ0IG9mIHRoZSBwcm9ibGVtLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgaXNzdWUgc3RlbXMgZnJvbSBob3cgYG5ld19iaGAgaXMgYmVpbmcgYWxsb2NhdGVkLiBJIHNlZSB0aGF0IGl0J3MgYmVpbmcgYWxsb2NhdGVkIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbzsgYG5ld19iaC1cdTAwM2ViX2ZvbGlvYCBpcyBnb2luZyB0byBiZSBOVUxMIGluIHRoaXMgc2l0dWF0aW9uLiBOb3csIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBpcyB0aGF0IGxhdGVyIHdoZW4gYGpiZDJgIHRyaWVzIHRvIHdyaXRlIHRoZSBtZXRhZGF0YSBidWZmZXIsIG1heWJlIHVzaW5nIGBiaF9zdWJtaXQobmV3X2JoLCAuLi4pYCBvciBgX19iaF9zdWJtaXRgLCBpdCdzIG9wZXJhdGluZyBvbiBhIGBuZXdfYmhgIHdpdGggYSBudWxsIGBiX2ZvbGlvYC4gVGhlIHRyYWNlIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCBhIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgIGNhbGwgaXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGZzL2piZDIvam91cm5hbC5jYCBhcm91bmQgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgIGFuZCB0cmFjZSBob3cgYG5ld19iaGAgaXMgYmVpbmcgdXNlZCB0byBjb25maXJtIHRoaXMgaHlwb3RoZXNpcyBhbmQgdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBzZXF1ZW5jZSBvZiBldmVudHMgbGVhZGluZyB1cCB0byB0aGF0IHByb2JsZW1hdGljIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZXdfYmhgIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCdzIHVzZWQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0OTozMC4yNjgwMTc3ODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2piZDIvam91cm5hbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHQgKiBhbHNvIHBhcnQgb2YgYSBzaGFyZWQgbWFwcGluZywgYW5kIGFub3RoZXIgdGhyZWFkIGhhc1xcbiAzNDE6XFx0XFx0ICogZGVjaWRlZCB0byBsYXVuY2ggYSB3cml0ZXBhZ2UoKSBhZ2FpbnN0IHRoaXMgYnVmZmVyLlxcbiAzNDI6XFx0XFx0ICovXFxuIDM0MzpcXHRcXHRKX0FTU0VSVF9CSChiaF9pbiwgYnVmZmVyX2piZGRpcnR5KGJoX2luKSk7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdG5ld19iaCA9IGFsbG9jX2J1ZmZlcl9oZWFkKEdGUF9OT0ZTfF9fR0ZQX05PRkFJTCk7XFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdC8qIGtlZXAgc3Vic2VxdWVudCBhc3NlcnRpb25zIHNhbmUgKi9cXG4gMzQ4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5ld19iaC1cXHUwMDNlYl9jb3VudCwgMSk7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdC8qXFxuIDM1MTpcXHRcXHQgKiBiX2Zyb3plbl9kYXRhIGlzIHNsYWIgbWVtb3J5LCBub3QgcGFnZSBjYWNoZSwgc28gd2hlbiB3ZSB1c2UgaXQgdGhlXFxuIDM1MjpcXHRcXHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcXG4gMzUzOlxcdFxcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxcbiAzNTQ6XFx0XFx0ICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC1cXHUwMDNlbWFwcGluZyB0b1xcbiAzNTU6XFx0XFx0ICogYW55dGhpbmcgdGhhdCBnb2VzIGxvb2tpbmcgZm9yIGFuIGFkZHJlc3Nfc3BhY2UuXFxuIDM1NjpcXHRcXHQgKi9cXG4gMzU3OlxcdFxcbiAzNTg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZqaF9pbi1cXHUwMDNlYl9zdGF0ZV9sb2NrKTtcXG4gMzU5OlxcdFxcdC8qXFxuIDM2MDpcXHRcXHQgKiBJZiBhIG5ldyB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBkb25lIGEgYnVmZmVyIGNvcHktb3V0LCB0aGVuXFxuIDM2MTpcXHRcXHQgKiB3ZSB1c2UgdGhhdCB2ZXJzaW9uIG9mIHRoZSBkYXRhIGZvciB0aGUgY29tbWl0LlxcbiAzNjI6XFx0XFx0ICovXFxuIDM2MzpcXHRcXHRpZiAoamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpIHtcXG4gMzY0OlxcdFxcdFxcdGRvX2VzY2FwZSA9IGpiZDJfZGF0YV9uZWVkc19lc2NhcGluZyhqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSk7XFxuIDM2NTpcXHRcXHRcXHRpZiAoZG9fZXNjYXBlKVxcbiAzNjY6XFx0XFx0XFx0XFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSk7XFxuIDM2NzpcXHRcXHRcXHRuZXdfYmgtXFx1MDAzZWJfZGF0YSA9IGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhO1xcbiAzNjg6XFx0XFx0fSBlbHNlIHtcXG4gMzY5OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBiaF9pbi1cXHUwMDNlYl9mb2xpbztcXG4gMzcwOlxcdFxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8oZm9saW8sIGJoX2luLVxcdTAwM2ViX2RhdGEpO1xcbiAzNzE6XFx0XFx0XFx0Y2hhciAqdG1wO1xcbiAzNzI6XFx0XFx0XFx0Y2hhciAqbWFwcGVkX2RhdGE7XFxuIDM3MzpcXHRcXG4gMzc0OlxcdFxcdFxcdG1hcHBlZF9kYXRhID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcXG4gMzc1OlxcdFxcdFxcdC8qXFxuIDM3NjpcXHRcXHRcXHQgKiBGaXJlIGRhdGEgZnJvemVuIHRyaWdnZXIgaWYgZGF0YSBhbHJlYWR5IHdhc24ndCBmcm96ZW4uIERvXFxuIDM3NzpcXHRcXHRcXHQgKiB0aGlzIGJlZm9yZSBjaGVja2luZyBmb3IgZXNjYXBpbmcsIGFzIHRoZSB0cmlnZ2VyIG1heSBtb2RpZnlcXG4gMzc4OlxcdFxcdFxcdCAqIHRoZSBtYWdpYyBvZmZzZXQuICBJZiBhIGNvcHktb3V0IGhhcHBlbnMgYWZ0ZXJ3YXJkcywgaXQgd2lsbFxcbiAzNzk6XFx0XFx0XFx0ICogaGF2ZSB0aGUgY29ycmVjdCBkYXRhIGluIHRoZSBidWZmZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjMwLjI2ODIzNTE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODc1MzMwNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb21tZW50IGluIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcblx0XHQvKlxuXHRcdCAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGVcblx0XHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcblx0XHQgKiBhbGxvY2F0aW9uIGFuZCBiX2RhdGEgcG9pbnRzIHN0cmFpZ2h0IGF0IHRoZSBjb3B5LiBQb2ludGluZyBpdCBhdFxuXHRcdCAqIHRoZSBzbGFiIGZvbGlvIGluc3RlYWQgd291bGQgaGFuZCBpdHMgb3ZlcmxvYWRlZCAtXHUwMDNlbWFwcGluZyB0b1xuXHRcdCAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLlxuXHRcdCAqL1xuYGBgXG5cblJpZ2h0LCBhbmQgaXQgc2VlbXMgdGhlIGlzc3VlIGlzIHRoYXQgd2hlbiBgYmhfc3VibWl0YCBpcyBjYWxsZWQgb24gYSBgbmV3X2JoYCwgYF9fYmhfc3VibWl0YCB0aGVuIGNoZWNrcyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYC4gVGhlIHByb2JsZW0gaXMgdGhhdCBgYmgtXHUwMDNlYl9mb2xpb2AgKmNhbiogYmUgTlVMTCBiZWNhdXNlIG9mIHRoYXQgc2xhYiBtZW1vcnkgc2l0dWF0aW9uIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudCwgd2hpY2ggbWVhbnMgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAgd291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIuIENsYXNzaWMhXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIFVzaW5nIG15IGNyaXRlcmlhOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuVGhpcyBjb2RlIGlzIGluIGBmcy9idWZmZXIuY2AsIHNwZWNpZmljYWxseSBgX19iaF9zdWJtaXRgLiBUaGF0J3MgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFdlIGNhbiBmdXp6IHRoaXMgd2l0aCBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnPigJRleHQ0LCBqYmQyIGpvdXJuYWxpbmcsIHdyaXRlYmFjaywgZGlyZWN0IEkvTywgYnVmZmVyZWQgSS9PLCBhbGwga2luZHMgb2YgdGhpbmdzLiBTbywgSSdtIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5OZXh0LCBsZXQncyBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG9yIHJlbGV2YW50IHN5bWJvbHMgaW4gYGZzL2J1ZmZlci5jYCBvciByZWxhdGVkIGNhbGxlcnMuIEZyb20gbXkgZXhwZXJpZW5jZSBhbmQgYSBxdWljayBnbGFuY2UsIHRoZSBmdW5jdGlvbnMgdG8gY2hlY2sgYXJlOlxuXG4qICAgYGJoX3N1Ym1pdGBcbiogICBgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvYFxuKiAgIGB3cml0ZV9kaXJ0eV9idWZmZXJgXG4qICAgYF9fc3luY19kaXJ0eV9idWZmZXJgXG4qICAgUG90ZW50aWFsbHksIGFsc28gYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gIGFuZCBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAuXG5cbkxldCdzIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiBhbmQgdmlzaWJpbGl0eSBvZiBgYmhfc3VibWl0YCwgYHdyaXRlX2RpcnR5X2J1ZmZlcmAsIGFuZCBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuIEluIGBmcy9idWZmZXIuY2A6IGBiaF9zdWJtaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIChgRVhQT1JUX1NZTUJPTChiaF9zdWJtaXQpYCksIHdoaWNoIGlzIGdvb2QuIGBfX2JoX3N1Ym1pdGAgaXMgc3RhdGljLCB3aGljaCBpcyBleHBlY3RlZC4gYHdyaXRlX2RpcnR5X2J1ZmZlcmAgYW5kIGBfX3N5bmNfZGlydHlfYnVmZmVyYCBhcmUgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gR29vZCwgdGhvc2UgYXJlIHZpYWJsZSB0YXJnZXRzLlxuXG5GaW5hbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgbmVlZGVkIGluIGBmcy9idWZmZXIuY2AsIHNvIEknbGwgYmUgc3VyZSB0byBjaGVjayB0aGUgYGZzL01ha2VmaWxlYCBvciBgZnMvS2NvbmZpZ2AgZmlsZXMuIFRoYXQnbGwgYmUgaW1wb3J0YW50IGZvciByZXByb2R1Y3Rpb24gYW5kIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjQwLjE0MzU2OTgxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDYyOTkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWZmZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0yMC1cXG5mcy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfQlVGRkVSX0hFQUQpXFx0Kz0gYnVmZmVyLm8gbXBhZ2Uub1xcbmZzL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdCs9IHByb2NfbmFtZXNwYWNlLm9cXG4tLVxcbmZzL2hwZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFBGU19GUykgKz0gaHBmcy5vXFxuZnMvaHBmcy9NYWtlZmlsZS03LVxcbmZzL2hwZnMvTWFrZWZpbGU6ODpocGZzLW9ianMgOj0gYWxsb2MubyBhbm9kZS5vIGJ1ZmZlci5vIGRlbnRyeS5vIGRpci5vIGRub2RlLm8gZWEubyBmaWxlLm8gXFxcXFxcbmZzL2hwZnMvTWFrZWZpbGUtOS1cXHQgICAgIGlub2RlLm8gbWFwLm8gbmFtZS5vIG5hbWVpLm8gc3VwZXIub1xcbi0tXFxuZnMvbmV0ZnMvTWFrZWZpbGU9Mz1uZXRmcy15IDo9IFxcXFxcXG4tLVxcbmZzL25ldGZzL01ha2VmaWxlLTE2LVxcdHJlYWRfc2luZ2xlLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlOjE3OlxcdHJvbGxpbmdfYnVmZmVyLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlLTE4LVxcdHdyaXRlX2NvbGxlY3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjQxLjYxNDIwMzc1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDA4MTQ3MDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX0JVRkZFUl9IRUFEYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHNlZWluZyBgQ09ORklHX0JVRkZFUl9IRUFEYCBwb3BwaW5nIHVwIGluIGBmcy9NYWtlZmlsZWAg4oCTIHNwZWNpZmljYWxseSwgaXQncyBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIGBidWZmZXIub2AgYW5kIGBtcGFnZS5vYC4gIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgZXhwZXJ0IGluc3RpbmN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbmZpZyBvcHRpb24gKm1lYW5zKi4gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBpdHMgZGVmaW5pdGlvbi4gIFdoZXJlIGlzIGBDT05GSUdfQlVGRkVSX0hFQURgIGFjdHVhbGx5ICpkZWZpbmVkKj8gIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRoZSBLY29uZmlnIGZpbGVzLiAgU2luY2UgdGhpcyByZWxhdGVzIHRvIHRoZSBmaWxlc3lzdGVtLCBteSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgYGZzL0tjb25maWdgLiBJZiBpdCdzIG5vdCB0aGVyZSwgSSB3aWxsIGV4cGFuZCBteSBzZWFyY2ggdG8gYGluaXQvS2NvbmZpZ2AsIG9yIHdoZXJldmVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBnZW5lcmFsbHkgZGVjbGFyZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBlbGVtZW50IGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZXNlIGtleSBmaWxlc3lzdGVtIGNvbXBvbmVudHMuICBHb3R0YSBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMwMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjU1LjY5NTY3NjYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA5NDY1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCVUZGRVJfSEVBRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTIyPWNvbmZpZyBGU19TVEFDS1xcbi0tXFxuZnMvS2NvbmZpZy0yNC1cXG5mcy9LY29uZmlnOjI1OmNvbmZpZyBCVUZGRVJfSEVBRFxcbmZzL0tjb25maWctMjYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0OTo1Ny4zMDUxNTU5NjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxNzIxNzM3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgQlVGRkVSX0hFQURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBkZWZpbml0aW9uIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzIGFyZSBsaWtlbHkgbG9jYXRlZCB3aXRoaW4gYGZzL0tjb25maWdgLiBUaGlzIG1ha2VzIHNlbnNlLCBhcyBpdOKAmXMgYSBmaWxlIHRoYXQgdHlwaWNhbGx5IGRlYWxzIHdpdGggZmlsZXN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gSSdsbCBqdW1wIHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI1IHRvIHNlZSBpZiBJIGNhbiB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJVRkZFUl9IRUFEYC4gSG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgZGV0YWlscyBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBpbiB0aGF0IGFyZWEuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDoyNS40NzczMzMwMzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdCMgU3RhY2thYmxlIGZpbGVzeXN0ZW1zXFxuICAyMjpcXHRjb25maWcgRlNfU1RBQ0tcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEJVRkZFUl9IRUFEXFxuICAyNjpcXHRcXHRib29sXFxuICAyNzpcXHRcXG4gIDI4OlxcdCMgb2xkIGJsb2NrZGV2X2RpcmVjdF9JTyBpbXBsZW1lbnRhdGlvbi4gIFVzZSBpb21hcCBmb3IgbmV3IGNvZGUgaW5zdGVhZFxcbiAgMjk6XFx0Y29uZmlnIExFR0FDWV9ESVJFQ1RfSU9cXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gQlVGRkVSX0hFQURcXG4gIDMxOlxcdFxcdGJvb2xcXG4gIDMyOlxcdFxcbiAgMzM6XFx0aWYgQkxPQ0tcXG4gIDM0OlxcdFxcbiAgMzU6XFx0c291cmNlIFxcXCJmcy9leHQyL0tjb25maWdcXFwiXFxuICAzNjpcXHRzb3VyY2UgXFxcImZzL2V4dDQvS2NvbmZpZ1xcXCJcXG4gIDM3OlxcdHNvdXJjZSBcXFwiZnMvamJkMi9LY29uZmlnXFxcIlxcbiAgMzg6XFx0XFxuICAzOTpcXHRjb25maWcgRlNfTUJDQUNIRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDoyNS40Nzc0MDcyNjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUxNDYzNTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBvZiBgQlVGRkVSX0hFQURgKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHNlZW1zIHRvIGJlIGEgcXVpY2sgaW50ZXJuYWwgcXVlcnksIGEgbWVudGFsIHNlYXJjaCwgaWYgeW91IHdpbGw6IFwiTGV0J3Mgc2VlIHdobydzIHB1bGxpbmcgaW4gdGhpcyBgQlVGRkVSX0hFQURgIGRlZmluaXRpb24uXCIgVGhlIGdvYWwgaXMgcHJvYmFibHkgZGlhZ25vc3RpYyBvciBleHBsb3JhdG9yeSBpbiBuYXR1cmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZSwgc28gaXRzIHVzYWdlIHBhdHRlcm5zIGFyZSBnb2luZyB0byBiZSBhIGtleSBpbmRpY2F0b3IgdG8gb3RoZXIgYXJlYXMgb2YgY29kZS5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHRoZSBsYXllcnMgb2YgdGhlIGNvZGViYXNlLCBjb25zaWRlcmluZyBwb3NzaWJsZSByZWFzb25zIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEFtIEkgdHJvdWJsZXNob290aW5nIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgd2hlcmUgYSBgQlVGRkVSX0hFQURgIGlzIGltcGxpY2F0ZWQ/IFBlcmhhcHMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgYSBuZXcgc3Vic3lzdGVtIHRoYXQgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBhbmQgYEJVRkZFUl9IRUFEYCB1c2FnZSBpcyBhIGNsdWUgdG8gaXRzIGRlc2lnbj8gT3IsIGlzIHRoaXMgcGFydCBvZiBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCB3aGVyZSBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb24gYSBnaXZlbiBzdHJ1Y3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgYSBwcm9wb3NlZCBjaGFuZ2U/XG5cbkl04oCZcyBhbG1vc3QgYSBtdXNjbGUgbWVtb3J5IHJlc3BvbnNlLCBhIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgY29kZS4gVGhpcyBjb3VsZCBxdWlja2x5IGxlYWQgdG8gdXNpbmcgdG9vbHMgbGlrZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBldmVuIHRoZSBtb3JlIGFkdmFuY2VkIGRlYnVnZ2luZyB0b29scywgdG8gdHJhY2UgdGhlIG9yaWdpbnMgYW5kIGRvd25zdHJlYW0gdXNlcyBvZiB0aGlzIHN0cnVjdHVyZS4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBvciBidWcgcmVsYXRlZCB0byB0aGlzIHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIHNwZWNpZmljIHN0cnVjdHVyZSBjYW4gcmV2ZWFsIGEgZ3JlYXQgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNjQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUwOjQwLjYyMzc2ODIxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4ODUwNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQlVGRkVSX0hFQURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnPTE1PWNvbmZpZyBCTEtfREVWX01EXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTctXFx0c2VsZWN0IEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEIGlmIFNZU0ZTXFxuZHJpdmVycy9tZC9LY29uZmlnOjE4OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xOS1cXHQjIEJMT0NLX0xFR0FDWV9BVVRPTE9BRCByZXF1aXJlbWVudCBzaG91bGQgYmUgcmVtb3ZlZFxcbi0tXFxuZnMvYWRmcy9LY29uZmlnPTI9Y29uZmlnIEFERlNfRlNcXG4tLVxcbmZzL2FkZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9hZGZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9hZGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9hZmZzL0tjb25maWc9Mj1jb25maWcgQUZGU19GU1xcbi0tXFxuZnMvYWZmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2FmZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2FmZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuLS1cXG5mcy9iZWZzL0tjb25maWc9Mj1jb25maWcgQkVGU19GU1xcbi0tXFxuZnMvYmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2JlZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2JlZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2Jmcy9LY29uZmlnPTI9Y29uZmlnIEJGU19GU1xcbi0tXFxuZnMvYmZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvYmZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9iZnMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4ZmF0L0tjb25maWc9Mz1jb25maWcgRVhGQVRfRlNcXG5mcy9leGZhdC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcImV4RkFUIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9leGZhdC9LY29uZmlnOjU6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvZXhmYXQvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuZnMvZXh0Mi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IChERVBSRUNBVEVEKVxcXCJcXG5mcy9leHQyL0tjb25maWc6NDpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9leHQyL0tjb25maWctNS1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbmZzL2V4dDQvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDQvS2NvbmZpZy01LVxcdHNlbGVjdCBKQkQyXFxuLS1cXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xcbi0tXFxuZnMvZjJmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2YyZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2YyZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2ZhdC9LY29uZmlnPTI9Y29uZmlnIEZBVF9GU1xcbmZzL2ZhdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5mcy9mYXQvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2ZhdC9LY29uZmlnLTUtXFx0c2VsZWN0IE5MU1xcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG5mcy9nZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL2dmczIvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2dmczIvS2NvbmZpZy01LVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL2hmcy9LY29uZmlnPTI9Y29uZmlnIEhGU19GU1xcbi0tXFxuZnMvaGZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvaGZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9oZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2hmc3BsdXMvS2NvbmZpZz0yPWNvbmZpZyBIRlNQTFVTX0ZTXFxuLS1cXG5mcy9oZnNwbHVzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvaGZzcGx1cy9LY29uZmlnOjU6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaGZzcGx1cy9LY29uZmlnLTYtXFx0c2VsZWN0IE5MU1xcbi0tXFxuZnMvaHBmcy9LY29uZmlnPTI9Y29uZmlnIEhQRlNfRlNcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9ocGZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWctNi1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL2lzb2ZzL0tjb25maWc9Mj1jb25maWcgSVNPOTY2MF9GU1xcbmZzL2lzb2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVNPIDk2NjAgQ0RST00gZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9pc29mcy9LY29uZmlnOjQ6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaXNvZnMvS2NvbmZpZy01LVxcdGhlbHBcXG4tLVxcbmZzL2pmcy9LY29uZmlnPTI9Y29uZmlnIEpGU19GU1xcbmZzL2pmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuZnMvamZzL0tjb25maWc6NDpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9qZnMvS2NvbmZpZy01LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL21pbml4L0tjb25maWc9Mj1jb25maWcgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvbWluaXgvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL21pbml4L0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcXG5mcy9uaWxmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOSUxGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9uaWxmczIvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL25pbGZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnPTI9Y29uZmlnIE5URlMzX0ZTXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiAhTlRGU19GUyB8fCBtXFxuZnMvbnRmczMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL250ZnMzL0tjb25maWctNi1cXHRzZWxlY3QgTkxTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvb2NmczIvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL29jZnMyL0tjb25maWctNi1cXHRzZWxlY3QgSkJEMlxcbi0tXFxuZnMvb21mcy9LY29uZmlnPTI9Y29uZmlnIE9NRlNfRlNcXG4tLVxcbmZzL29tZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9vbWZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9vbWZzL0tjb25maWctNi1cXHRzZWxlY3QgQ1JDX0lUVV9UXFxuLS1cXG5mcy9xbng0L0tjb25maWc9Mj1jb25maWcgUU5YNEZTX0ZTXFxuLS1cXG5mcy9xbng0L0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvcW54NC9LY29uZmlnOjU6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvcW54NC9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvcW54Ni9LY29uZmlnPTI9Y29uZmlnIFFOWDZGU19GU1xcbi0tXFxuZnMvcW54Ni9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DSyBcXHUwMDI2XFx1MDAyNiBDUkMzMlxcbmZzL3FueDYvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3FueDYvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL3JvbWZzL0tjb25maWc9NTc9Y29uZmlnIFJPTUZTX09OX0JMT0NLXFxuLS1cXG5mcy9yb21mcy9LY29uZmlnLTU5LVxcdGRlZmF1bHQgeSBpZiBST01GU19CQUNLRURfQllfQkxPQ0sgfHwgUk9NRlNfQkFDS0VEX0JZX0JPVEhcXG5mcy9yb21mcy9LY29uZmlnOjYwOlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3JvbWZzL0tjb25maWctNjEtXFxuLS1cXG5mcy91ZGYvS2NvbmZpZz0yPWNvbmZpZyBVREZfRlNcXG5mcy91ZGYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy91ZGYvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3VkZi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQ19JVFVfVFxcbi0tXFxuZnMvdWZzL0tjb25maWc9Mj1jb25maWcgVUZTX0ZTXFxuLS1cXG5mcy91ZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy91ZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3Vmcy9LY29uZmlnLTYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDo0My41MTIyODAxNDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTYwOTU2NjY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCVUZGRVJfSEVBRCBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYEJVRkZFUl9IRUFEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEl0J3Mgc2VsZWN0ZWQgYnkgYSBidW5jaCBvZiBmaWxlIHN5c3RlbXMsIGluY2x1ZGluZyBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYEZBVF9GU2AsIGBHRlMyX0ZTYCwgYW5kIGV2ZW4gdGhpbmdzIGxpa2UgYEJMS19ERVZfTURgLiAgVGhhdCBtZWFucyBgQlVGRkVSX0hFQURgIGlzIHRoZSBkaXJlY3QgY29uZmlnIG9wdGlvbiB0aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24uXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG4qICAgYFdvcnRoRnV6emluZ2A/IFl1cCwgdGhhdCBsb29rcyBnb29kLlxuKiAgIGBFbmFibGVDb25maWdzYD8gT2theSwgd2UndmUgZ290IGBbXCJCVUZGRVJfSEVBRFwiXWAsIGFuZCB3aGlsZSBpdCBtZW50aW9ucyBgW1wiRVhUNF9GU1wiLCBcIkJMT0NLXCJdYCwgXCJCVUZGRVJfSEVBRFwiIGlzIHRoZSBleGFjdCBjb25maWcgdGhhdCBhY3R1YWxseSBjb21waWxlcyBgZnMvYnVmZmVyLmNgLCBzbyB0aGF0J3MgdGhlIG9uZS5cblxuTm93LCBmb3IgdGhlIHJlYWxseSBpbXBvcnRhbnQgcGFydDogdGhlIHN5bWJvbHMgd2UncmUgdGFyZ2V0aW5nLiBUaGUgYEZvY3VzU3ltYm9sc2AgbG9vayByaWdodDpcblxuKiAgIGBiaF9zdWJtaXRgXG4qICAgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2BcbiogICBgd3JpdGVfZGlydHlfYnVmZmVyYFxuKiAgIGBfX3N5bmNfZGlydHlfYnVmZmVyYFxuKiAgIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYFxuKiAgIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYFxuXG5ZZXAsIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBoZXJlLiBTbywgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkIHdpdGggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyODEsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUwOjUzLjEyMTg0OTEwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzY3NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVUZGRVJfSEVBRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJoX3N1Ym1pdFwiLFxuICAgIFwiX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvXCIsXG4gICAgXCJ3cml0ZV9kaXJ0eV9idWZmZXJcIixcbiAgICBcIl9fc3luY19kaXJ0eV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVxcdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVUZGRVJfSEVBRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJoX3N1Ym1pdFwiLFxuICAgIFwiX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvXCIsXG4gICAgXCJ3cml0ZV9kaXJ0eV9idWZmZXJcIixcbiAgICBcIl9fc3luY19kaXJ0eV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVxcdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NTA6NTMuMTk1MjIyOTI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjczNzYyNzE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUwOjUzLjE5NTY1NTczNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2NzM3MTkwMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDg4MjIyYjMxMWY0ZmU3NjZmMDE3MmNhMjRiN2VjZTgwZTk0YzNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMjo0ODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDQyN2Q4YTgxN2NkNTYuLmY0NmZhNjQxMzAzMmQgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuKysrIGIvZnMvYnVmZmVyLmNcbkBAIC0xMTA2LDcgKzExMDYsOCBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuK1x0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICBvcF9pc193cml0ZShvcGYpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDo1My4xOTU2NTY2ODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzODQ2NDk4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmlsZSBTeXN0ZW0gQnVmZmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1ha2luZyBhIGNoYW5nZSBpbiBgZnMvYnVmZmVyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgX19iaF9zdWJtaXRgIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGlmZiBmb2N1c2VzIG9uIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGF0aW5nIHRvIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggd3JpdGVzICggYG9wX2lzX3dyaXRlKG9wZilgKS4gVGhpcyBzZWN0aW9uIG9mIGNvZGUgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZGF0YSBidWZmZXJzIGFuZCBJL08gb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGNhY2hpbmcgc3RyYXRlZ2llcyBsaWtlIFwiZHJvcC1iZWhpbmRcIi5cblxuRXNzZW50aWFsbHksIHdoYXQncyBjaGFuZ2VkIGlzIGFuIGFkZGVkIGNoZWNrIGZvciBgYmgtXHUwMDNlYl9mb2xpb2AgYmVmb3JlIHdlIGFjY2VzcyBpdCB3aXRoIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLiBUaGUgb3JpZ2luYWwgY29kZSBsb29rZWQgbGlrZSBpdCB3YXMgZGlyZWN0bHkgZGVyZWZlcmVuY2luZyBgYmgtXHUwMDNlYl9mb2xpb2Agd2l0aG91dCBudWxsIGNoZWNraW5nIGl0IGZpcnN0LiBUaGlzIG1vZGlmaWNhdGlvbiBpcyBsaWtlbHkgYSBudWxsLXBvaW50ZXIgc2FmZXR5IGNoZWNrLiBXZSBvbmx5IHdhbnQgdG8gc2V0IHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcgaWYgdGhlIGJ1ZmZlciBoZWFkIGFjdHVhbGx5IGhhcyBhbiBhc3NvY2lhdGVkIGZvbGlvLlxuXG5UaGlzIHR5cGUgb2YgY2hhbmdlIHVzdWFsbHkgaW5kaWNhdGVzIHRoYXQgdGhlcmUgY291bGQgYmUgYSBzdWJ0bGUgYnVnIG9yIGVkZ2UgY2FzZSB3aGVyZSBgYmgtXHUwMDNlYl9mb2xpb2AgbWlnaHQgYmUgYE5VTExgIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gQSBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGlzIGNyaXRpY2FsIHBhdGggY291bGQgbGVhZCB0byBhIGNyYXNoIG9yIG90aGVyIHVucHJlZGljdGFibGUgYmVoYXZpb3IgZHVyaW5nIEkvTyBvcGVyYXRpb25zLCB3aGljaCBpcyB3aHkgdGhpcyBjaGVjayBpcyBhZGRlZC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHNjZW5hcmlvIHRoYXQgbmVjZXNzaXRhdGVkIHRoaXMgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGJoLVx1MDAzZWJfZm9saW9gICpjb3VsZCogYmUgYE5VTExgIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbSdzIGJ1ZmZlciBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IGBiaW9fc2V0X2ZsYWdgIHdvcmtzIGFuZCBpZiBpdCBoYXMgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBgTlVMTGAgb3IgbWlzc2luZyBgYl9mb2xpb2AuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkcm9wYmVoaW5kYCBhZmZlY3RzIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gYmVoYXZpb3IuIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBnZXQgdGhlIGZ1bGwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MTo0My41ODAzMTA2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5NTpcXHRcXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcXG4xMDk2OlxcdFxcdEJVR19PTighYnVmZmVyX21hcHBlZChiaCkpO1xcbjEwOTc6XFx0XFx0QlVHX09OKGJ1ZmZlcl9kZWxheShiaCkpO1xcbjEwOTg6XFx0XFx0QlVHX09OKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRpZiAoYnVmZmVyX21ldGEoYmgpKVxcbjExMDM6XFx0XFx0XFx0b3BmIHw9IFJFUV9NRVRBO1xcbjExMDQ6XFx0XFx0aWYgKGJ1ZmZlcl9wcmlvKGJoKSlcXG4xMTA1OlxcdFxcdFxcdG9wZiB8PSBSRVFfUFJJTztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0YmlvID0gYmlvX2FsbG9jKGJoLVxcdTAwM2ViX2JkZXYsIDEsIG9wZiwgR0ZQX05PSU8pO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8gXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjExMTA6XFx0XFx0ICAgIG9wX2lzX3dyaXRlKG9wZikpXFxuMTExMTpcXHRcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcXG4xMTE0OlxcdFxcdFxcdGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7XFxuMTExNTpcXHRcXG4xMTE2OlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBiaC1cXHUwMDNlYl9ibG9ja25yICogKGJoLVxcdTAwM2ViX3NpemUgXFx1MDAzZVxcdTAwM2UgOSk7XFxuMTExNzpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cml0ZV9oaW50O1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEyMDpcXHRcXHRcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVxcdTAwM2ViX2ZvbGlvLCBiaC1cXHUwMDNlYl9zaXplLFxcbjExMjE6XFx0XFx0XFx0XFx0XFx0ICAgICBiaF9vZmZzZXQoYmgpKTtcXG4xMTIyOlxcdFxcdGVsc2VcXG4xMTIzOlxcdFxcdFxcdGJpb19hZGRfdmlydF9ub2ZhaWwoYmlvLCBiaC1cXHUwMDNlYl9kYXRhLCBiaC1cXHUwMDNlYl9zaXplKTtcXG4xMTI0OlxcdFxcbjExMjU6XFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xcbjExMjY6XFx0XFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gYmg7XFxuMTEyNzpcXHRcXG4xMTI4OlxcdFxcdC8qIFRha2UgY2FyZSBvZiBiaCdzIHRoYXQgc3RyYWRkbGUgdGhlIGVuZCBvZiB0aGUgZGV2aWNlICovXFxuMTEyOTpcXHRcXHRndWFyZF9iaW9fZW9kKGJpbyk7XFxuMTEzMDpcXHRcXG4xMTMxOlxcdFxcdGlmICh3YmMpIHtcXG4xMTMyOlxcdFxcdFxcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XFxuMTEzMzpcXHRcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEzNDpcXHRcXHRcXHRcXHR3YmNfYWNjb3VudF9jZ3JvdXBfb3duZXIod2JjLCBiaC1cXHUwMDNlYl9mb2xpbywgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUxOjQzLjU4MDQ5MDMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNTIzMzI0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIGNoZWNrIGluIGBfX2JoX3N1Ym1pdCgpYC4gSSBzZWUgdGhhdCBpdCdzIGFkZGluZyBgYmgtXHUwMDNlYl9mb2xpbyBcdTAwMjZcdTAwMjZgIGJlZm9yZSB0aGUgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAgY2FsbC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBJIGtub3cgd2h5OiB0aGUgY29kZSByaWdodCBiZWxvdyBjaGVja3MgaWYgYGJoLVx1MDAzZWJfZm9saW9gIGV4aXN0cywgYW5kIGlmIGl0IGRvZXNuJ3QsIGl0IHVzZXMgYGJoLVx1MDAzZWJfZGF0YWAgZGlyZWN0bHkuIFNvLCBgYmgtXHUwMDNlYl9mb2xpb2AgKmNhbiogYmUgTlVMTCwgZXNwZWNpYWxseSB3aGVuIHRoZSBibG9jayBoZWFkZXIgaXMgYmFja2VkIGJ5IHZpcnR1YWwgbWVtb3J5LiBUcnlpbmcgdG8gdXNlIGl0IHdoZW4gaXQncyBOVUxMIGlzIGEgY2xhc3NpYyBwcm9ibGVtLlxuXG5NeSBleHBlcnQgaW5zdGluY3QgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGNhc2UgZm9yIEtBU0FOLiBXZSdyZSBkZWFsaW5nIHdpdGggYSBkaXJlY3QgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBLQVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIExldCdzIHRoaW5rIHRocm91Z2ggdGhpcyBtb3JlIHJpZ29yb3VzbHkgdGhvdWdoLiBJdCdzIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3IgaXMgaXQgb3BlbmluZyB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgcGFkZGluZyBpc3N1ZXMuIFNvIGdpdmVuIHRoYXQgS0FTQU4gd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZ28gYmFjayBhbmQgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBxdWVzdGlvbnMgZm9yIHRoaXMgY2hlY2ssIGFuZCB0aGUgY29uZGl0aW9ucyBvbiBLTVNBTi4gXCJTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjogcHJpbWFyaWx5IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpXCIuIFl1cCwgdGhpcyBoaXRzIHRoZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdGFyZ2V0LCBhbmQgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZC4gVGhlIHBhdGNoIGlzbid0IHRvdWNoaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5QZXJmZWN0LiBUaGUgcGF0Y2ggc2VlbXMgc29saWQsIGFuZCB0aGUgYXBwcm9hY2ggaXMgY29ycmVjdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDMsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NTE6NDkuOTMyODI2NjkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow827lr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 12:19:29 +0000 UTC FinishedAt: 2026-09-02 12:51:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BUFFER_HEAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BUFFER_HEAD" ], "series_id": "aa294ce3-4a5b-4769-85ed-7329eec1d8b4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bh_submit", "__block_write_full_folio", "write_dirty_buffer", "__sync_dirty_buffer", "jbd2_journal_write_metadata_buffer", "jbd2_journal_commit_transaction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ymhfc3VibWl0JiMzNDssCiAgICAmIzM0O19fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyYjMzQ7LAogICAgJiMzNDt3cml0ZV9kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVx1MDAzZWJfZm9saW9gIGlzIG5vbi1OVUxMIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgLiBXaGVuIGEgYnVmZmVyIGhlYWQgaXMgYmFja2VkIGJ5IHZpcnR1YWwgbWVtb3J5IChgYmgtXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVx1MDAzZWJfZm9saW9gIGlzIE5VTEwuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGBiaC1cdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYCBpbiBgX19iaF9zdWJtaXQoKWAuIEJ1ZmZlciBoZWFkcyBhbGxvY2F0ZWQgZm9yIG5vbi1wYWdlY2FjaGUgZGF0YSAoc3VjaCBhcyBKQkQyIHNoYWRvdy9mcm96ZW4gbWV0YWRhdGEgYnVmZmVycykgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmb2xpbyBhbmQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZHVyaW5nIHN1Ym1pc3Npb24uIFRoaXMgaXMgY29yZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2Q4ODIyMmIzMTFmNGZlNzY2ZjAxNzJjYTI0YjdlY2U4MGU5NGMzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTI6NDg6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuY1xuaW5kZXggNDI3ZDhhODE3Y2Q1Ni4uZjQ2ZmE2NDEzMDMyZCAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuY1xuQEAgLTExMDYsNyAmIzQzOzExMDYsOCBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuJiM0MztcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG9wX2lzX3dyaXRlKG9wZikpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVUZGRVJfSEVBRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JoX3N1Ym1pdCYjMzQ7LAogICAgJiMzNDtfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8mIzM0OywKICAgICYjMzQ7d3JpdGVfZGlydHlfYnVmZmVyJiMzNDssCiAgICAmIzM0O19fc3luY19kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgYmgtXHUwMDNlYl9mb2xpb2AgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkODgyMjJiMzExZjRmZTc2NmYwMTcyY2EyNGI3ZWNlODBlOTRjM2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEyOjQ4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA0MjdkOGE4MTdjZDU2Li5mNDZmYTY0MTMwMzJkIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuYwpAQCAtMTEwNiw3ICYjNDM7MTEwNiw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAKIAliaW8gPSBiaW9fYWxsb2MoYmgtJmd0O2JfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7CiAKLQlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKSAmYW1wOyZhbXA7IG9wX2lzX3dyaXRlKG9wZikpCiYjNDM7CWlmIChiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgb3BfaXNfd3JpdGUob3BmKSkKIAkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVmZmVyIEhlYWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgaW4gYGZzL2J1ZmZlci5jYC4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBfX2JoX3N1Ym1pdGAgZnVuY3Rpb24uICBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgY29uZGl0aW9uYWwgY2hlY2sgcmVsYXRlZCB0byBgZm9saW9fdGVzdF9kcm9wYmVoaW5kYCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBhIGJpdCBzaW1wbGVyLCBub3cgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUgYSBudWxsIGNoZWNrIGZvciB0aGUgYGJoLSZndDtiX2ZvbGlvYCBmaWVsZC4gSW50ZXJlc3RpbmcuIFRoZXkmIzM5O3ZlIGFkZGVkIGBiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7YCB0byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50LiAgSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IHVzZSBteSBgcmVhZC1maWxlYCB0b29sIGFuZCBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAxMTA2IGluIHRoYXQgZmlsZTsgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBjaGFuZ2UgdG8gZ3Jhc3AgdGhlIGludGVudC4gIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpcyBzb21lIHNvcnQgb2Ygc2FmZXR5IGNoZWNrLCBwcmV2ZW50aW5nIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGBiaC0mZ3Q7Yl9mb2xpb2AgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbWF5YmUgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5MDpcdFx0XHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4xMDkxOlx0XHRcdGJpb19lbmRfaW9fdCBlbmRfYmlvKVxuMTA5MjpcdHtcbjEwOTM6XHRcdHN0cnVjdCBiaW8gKmJpbztcbjEwOTQ6XHRcbjEwOTU6XHRcdEJVR19PTighYnVmZmVyX2xvY2tlZChiaCkpO1xuMTA5NjpcdFx0QlVHX09OKCFidWZmZXJfbWFwcGVkKGJoKSk7XG4xMDk3Olx0XHRCVUdfT04oYnVmZmVyX2RlbGF5KGJoKSk7XG4xMDk4Olx0XHRCVUdfT04oYnVmZmVyX3Vud3JpdHRlbihiaCkpO1xuMTA5OTpcdFxuMTEwMDpcdFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xuMTEwMTpcdFxuMTEwMjpcdFx0aWYgKGJ1ZmZlcl9tZXRhKGJoKSlcbjExMDM6XHRcdFx0b3BmIHw9IFJFUV9NRVRBO1xuMTEwNDpcdFx0aWYgKGJ1ZmZlcl9wcmlvKGJoKSlcbjExMDU6XHRcdFx0b3BmIHw9IFJFUV9QUklPO1xuMTEwNjpcdFxuMTEwNzpcdFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4xMTA4Olx0XG4xMTA5Olx0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbyBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNlxuMTExMDpcdFx0ICAgIG9wX2lzX3dyaXRlKG9wZikpXG4xMTExOlx0XHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbjExMTI6XHRcbjExMTM6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcbjExMTQ6XHRcdFx0YnVmZmVyX3NldF9jcnlwdG9fY3R4KGJpbywgYmgsIEdGUF9OT0lPKTtcbjExMTU6XHRcbjExMTY6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJoLVx1MDAzZWJfYmxvY2tuciAqIChiaC1cdTAwM2ViX3NpemUgXHUwMDNlXHUwMDNlIDkpO1xuMTExNzpcdFx0YmlvLVx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cml0ZV9oaW50O1xuMTExODpcdFxuMTExOTpcdFx0aWYgKGJoLVx1MDAzZWJfZm9saW8pXG4xMTIwOlx0XHRcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtXHUwMDNlYl9mb2xpbywgYmgtXHUwMDNlYl9zaXplLFxuMTEyMTpcdFx0XHRcdFx0ICAgICBiaF9vZmZzZXQoYmgpKTtcbjExMjI6XHRcdGVsc2VcbjExMjM6XHRcdFx0YmlvX2FkZF92aXJ0X25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZGF0YSwgYmgtXHUwMDNlYl9zaXplKTtcbjExMjQ6XHRcbjExMjU6XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xuMTEyNjpcdFx0YmlvLVx1MDAzZWJpX3ByaXZhdGUgPSBiaDtcbjExMjc6XHRcbjExMjg6XHRcdC8qIFRha2UgY2FyZSBvZiBiaCYjMzk7cyB0aGF0IHN0cmFkZGxlIHRoZSBlbmQgb2YgdGhlIGRldmljZSAqL1xuMTEyOTpcdFx0Z3VhcmRfYmlvX2VvZChiaW8pO1xuMTEzMDpcdFxuMTEzMTpcdFx0aWYgKHdiYykge1xuMTEzMjpcdFx0XHR3YmNfaW5pdF9iaW8od2JjLCBiaW8pO1xuMTEzMzpcdFx0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbjExMzQ6XHRcdFx0XHR3YmNfYWNjb3VudF9jZ3JvdXBfb3duZXIod2JjLCBiaC1cdTAwM2ViX2ZvbGlvLCBiaC1cdTAwM2ViX3NpemUpO1xuMTEzNTpcdFx0fVxuMTEzNjpcdFxuMTEzNzpcdFx0YmxrX2NyeXB0b19zdWJtaXRfYmlvKGJpbyk7XG4xMTM4Olx0fVxuMTEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJ1ZmZlciBIZWFkIFN1Ym1pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBfX2JoX3N1Ym1pdGAsIGFuZCBpdCYjMzk7cyBjbGVhciBpdCBoYW5kbGVzIGJ1ZmZlciBoZWFkIHN1Ym1pc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgcG90ZW50aWFsIGZvciBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4gU3BlY2lmaWNhbGx5LCBpZiBgYmgtJmd0O2JfZm9saW9gIGlzIE5VTEwsIHdoaWNoIEkga25vdyBpdCBjYW4gYmUgd2l0aCB2aXJ0dWFsIGJ1ZmZlcnMgb3Igc2ltaWxhciBjb25maWd1cmF0aW9ucyAoSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgYGJpb19hZGRfdmlydF9ub2ZhaWxgIHBhdGggb24gbGluZSAxMTIzKSwgdGhlbiBkZXJlZmVyZW5jaW5nIGBiaC0mZ3Q7Yl9mb2xpb2Agd2l0aGluIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtJmd0O2JfZm9saW8pYCB3b3VsZCBsZWFkIHRvIGEgY3Jhc2guCgpBaCwgYnV0IGhvbGQgb24uIEkgcmVtZW1iZXIgdGhhdCBgYmgtJmd0O2JfZm9saW9gIGNhbiBiZSBOVUxMIGV2ZW4gKndpdGhvdXQqIGJlaW5nIGEgdmlydHVhbCBidWZmZXIhIFRoaXMgaGFwcGVucyB3aGVuIGEgYnVmZmVyIGhlYWQgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19idWZmZXJfaGVhZCgpYCAqd2l0aG91dCogYSBwYWdlIG9yIGZvbGlvIGF0dGFjaGVkLiBUaGluayBhYm91dCBzY2VuYXJpb3MgbGlrZSBgY3JlYXRlX2VtcHR5X2J1ZmZlcnNgIG9yIGRpcmVjdCBjYWxscyB0byBgYWxsb2NfYnVmZmVyX2hlYWQoKWAgZm9yIG1lbW9yeSBidWZmZXJzLCBtZXRhZGF0YSBoYW5kbGluZywgb3IgZXZlbiBibG9jayBkZXZpY2UgcmVhZC93cml0ZSBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgY2FsbGluZyBgX19iaF9zdWJtaXRgIGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgd3JhcHBpbmcgaXQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgYW5kIHNlZSBob3cgdGhlc2UgTlVMTCBgYl9mb2xpb2Agc2l0dWF0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCAob3IgKm5vdCogaGFuZGxlZCwgd2hpY2ggaXMgbGlrZWx5IHRoZSByb290IG9mIHRoZSBwcm9ibGVtKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250ZXh0cyB0aGV5IGFyZSBpbiB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29kZSBhbmQgaG93IHRvIHNvbHZlIHRoaXMgcG90ZW50aWFsIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JoX3N1Ym1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTEwNzA9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9idWZmZXIuYy0xMDg4LVxuZnMvYnVmZmVyLmM6MTA4OTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuZnMvYnVmZmVyLmMtMTA5MC1cdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2J1ZmZlci5jPTExNDk9dm9pZCBiaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwgYmlvX2VuZF9pb190IGVuZF9pbylcbmZzL2J1ZmZlci5jLTExNTAte1xuZnMvYnVmZmVyLmM6MTE1MTpcdF9fYmhfc3VibWl0KGJoLCBvcGYsIFdSSVRFX0xJRkVfTk9UX1NFVCwgTlVMTCwgZW5kX2lvKTtcbmZzL2J1ZmZlci5jLTExNTItfVxuLS1cbmZzL2J1ZmZlci5jPTE3MjY9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2J1ZmZlci5jLTE4MjEtXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9idWZmZXIuYzoxODIyOlx0XHRcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcbmZzL2J1ZmZlci5jLTE4MjMtXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxuLS1cbmZzL2J1ZmZlci5jLTE4NzYtXHRcdFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbmZzL2J1ZmZlci5jOjE4Nzc6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTg3OC1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWZmZXIgSGVhZCBTdWJtaXNzaW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYGJoX3N1Ym1pdGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbiBpbiBgZnMvYnVmZmVyLmNgIHRoYXQga2lja3Mgb2ZmIHRoZSBidWZmZXIgaGVhZCBzdWJtaXNzaW9uIHByb2Nlc3MuIEl0JiMzOTtzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoYXQgcGFydGljdWxhciBmaWxlLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKmNhbGwgZ3JhcGgqKi4gSSBuZWVkIHRvIGRldGVybWluZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUga2VybmVsIGNvZGUgd2hlcmUgZWl0aGVyIGBiaF9zdWJtaXRgIGl0c2VsZiBvciBpdHMgYWxpYXMgYHN1Ym1pdF9iaGAgKGxldCYjMzk7cyBhc3N1bWUgdGhleSYjMzk7cmUgZXF1aXZhbGVudCBmb3Igbm93KSBhcmUgaW52b2tlZC4gVGhhdCBpbmZvcm1hdGlvbiB3aWxsIHBhaW50IGEgcGljdHVyZSBvZiAqaG93KiBidWZmZXIgaGVhZHMgYXJlIHN1Ym1pdHRlZCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBmaWxlIHN5c3RlbSBhbmQgYmxvY2sgSS9PIHN1YnN5c3RlbXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIGFsbG93IGEgbW9yZSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cgYW5kIGRhdGEgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaF9zdWJtaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTE1Nzg9ZnVuY3Rpb24tdHJhY2UsIHdlIGdldCBhIG11Y2ggbGFyZ2VyIG91dHB1dDo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE2MzAtICAgPVx1MDAzZSBzdWJtaXRfYmlvXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTYzMTogICA9XHUwMDNlIGJoX3N1Ym1pdFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE2MzItICAgPVx1MDAzZSBfX2V4dDNfZ2V0X2lub2RlX2xvY1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0xODcxPXRyYWNlcnMuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE5MTUtICAgPVx1MDAzZSBzdWJtaXRfYmlvXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTkxNjogICA9XHUwMDNlIGJoX3N1Ym1pdFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE5MTctICAgPVx1MDAzZSBleHQzX2JyZWFkXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MTc9c3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNTI0LVx0XHRzZXRfYnVmZmVyX21hcHBlZChiaCk7XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjUyNTpcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQywgZW5kX2JpdG1hcF93cml0ZSk7XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUyNi1cdFx0YmggPSBiaC1cdTAwM2ViX3RoaXNfcGFnZTtcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTU1OD1zdGF0aWMgaW50IHJlYWRfZmlsZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAwLVx0XHRcdHNldF9idWZmZXJfbWFwcGVkKGJoKTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjAxOlx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGVuZF9iaXRtYXBfd3JpdGUpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MDItXHRcdH1cbi0tXG5mcy9idWZmZXIuYz0xMjM9c3RhdGljIHZvaWQgYnVmZmVyX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKm1zZylcbi0tXG5mcy9idWZmZXIuYy0xMzYtICogQ2FsbCB0aGlzIGluIHlvdXIgYmlvX2VuZF9pbyBoYW5kbGVyIHRvIHJldHJpZXZlIHRoZSBidWZmZXJfaGVhZFxuZnMvYnVmZmVyLmM6MTM3OiAqIHN1Ym1pdHRlZCBpbiBiaF9zdWJtaXQoKS4gIElmIHlvdSBkaWQgbm90IGNhbGwgYmhfc3VibWl0KCksIGRvIG5vdFxuZnMvYnVmZmVyLmMtMTM4LSAqIGNhbGwgdGhpcyBmdW5jdGlvbjsgaXQgd2lsbCByZXR1cm4gZ2FyYmFnZS5cbi0tXG5mcy9idWZmZXIuYz0xNTc9RVhQT1JUX1NZTUJPTChiaW9fZW5kaW9fYmgpO1xuLS1cbmZzL2J1ZmZlci5jLTE2My0gKlxuZnMvYnVmZmVyLmM6MTY0OiAqIElmIGEgYnVmZmVyIGlzIHJlYWQgdGhyb3VnaCBhIG1lY2hhbmlzbSB0aGF0IGlzbiYjMzk7dCBiaF9zdWJtaXQoKSwgeW91XG5mcy9idWZmZXIuYy0xNjUtICogY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmaW5pc2ggdGhlIHJlYWQuXG4tLVxuZnMvYnVmZmVyLmM9MTc3PUVYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl9yZWFkX3N5bmMpO1xuLS1cbmZzL2J1ZmZlci5jLTE4Mi0gKlxuZnMvYnVmZmVyLmM6MTgzOiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UmIzM5O3JlIHJlYWRpbmcgaW50byB0aGUgYnVmZmVyLFxuZnMvYnVmZmVyLmMtMTg0LSAqIHVubGVzcyB5b3UgbmVlZCB5b3VyIG93biBzcGVjaWFsIEkvTyBlbmQgaGFuZGxlci5cbi0tXG5mcy9idWZmZXIuYz0xOTI9RVhQT1JUX1NZTUJPTChiaF9lbmRfcmVhZCk7XG4tLVxuZnMvYnVmZmVyLmMtMTk3LSAqXG5mcy9idWZmZXIuYzoxOTg6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSYjMzk7cmUgd3JpdGluZyBmcm9tIHRoZSBidWZmZXIsXG5mcy9idWZmZXIuYy0xOTktICogdW5sZXNzIHlvdSBuZWVkIHlvdXIgb3duIHNwZWNpYWwgSS9PIGVuZCBoYW5kbGVyLlxuLS1cbmZzL2J1ZmZlci5jPTM2Mj1zdGF0aWMgdm9pZCBiaF9lbmRfYXN5bmNfcmVhZChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvYnVmZmVyLmMtMzkyLSAqXG5mcy9idWZmZXIuYzozOTM6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSYjMzk7cmUgZG9pbmcgdGhlIGVxdWl2YWxlbnQgb2ZcbmZzL2J1ZmZlci5jLTM5NC0gKiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkuICBUaGF0IGlzLCB0aGUgZm9saW8gaXMgdW5sb2NrZWQsIGFuZCB3aWxsXG4tLVxuZnMvYnVmZmVyLmM9MTA3MD1zdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2J1ZmZlci5jLTEwODgtXG5mcy9idWZmZXIuYzoxMDg5OnN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG5mcy9idWZmZXIuYy0xMDkwLVx0XHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4tLVxuZnMvYnVmZmVyLmMtMTE0MC0vKipcbmZzL2J1ZmZlci5jOjExNDE6ICogYmhfc3VibWl0IC0gU3RhcnQgSS9PIGFnYWluc3QgYSBidWZmZXIgaGVhZFxuZnMvYnVmZmVyLmMtMTE0Mi0gKiBAYmg6IFRoZSBidWZmZXIgaGVhZCB0byBwZXJmb3JtIEkvTyBvbi5cbi0tXG5mcy9idWZmZXIuYy0xMTQ4LSAqL1xuZnMvYnVmZmVyLmM6MTE0OTp2b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLCBiaW9fZW5kX2lvX3QgZW5kX2lvKVxuZnMvYnVmZmVyLmMtMTE1MC17XG5mcy9idWZmZXIuYzoxMTUxOlx0X19iaF9zdWJtaXQoYmgsIG9wZiwgV1JJVEVfTElGRV9OT1RfU0VULCBOVUxMLCBlbmRfaW8pO1xuZnMvYnVmZmVyLmMtMTE1Mi19XG5mcy9idWZmZXIuYzoxMTUzOkVYUE9SVF9TWU1CT0woYmhfc3VibWl0KTtcbmZzL2J1ZmZlci5jLTExNTQtXG5mcy9idWZmZXIuYz0xMTU1PXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fYnJlYWRfc2xvdyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2J1ZmZlci5jLTExNjEtXHR9IGVsc2Uge1xuZnMvYnVmZmVyLmM6MTE2MjpcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xuZnMvYnVmZmVyLmMtMTE2My1cdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL2J1ZmZlci5jPTE2ODI9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fY3JlYXRlX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9idWZmZXIuYy0xNzE4LSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuZnMvYnVmZmVyLmM6MTcxOTogKiB0aGUgYnVmZmVyIGRpcmVjdGx5LCB3aXRoIGJoX3N1Ym1pdCgpLiAgQXQgdGhlIGFkZHJlc3Nfc3BhY2UgbGV2ZWxcbmZzL2J1ZmZlci5jLTE3MjAtICogdGhlIGZvbGlvIHdyaXRlYmFjayBmbGFnIHByZXZlbnRzIHRoaXMgY29udGVudGlvbiBmcm9tIG9jY3VycmluZy5cbi0tXG5mcy9idWZmZXIuYz0xNzI2PWludCBfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9idWZmZXIuYy0xODIxLVx0XHRpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkge1xuZnMvYnVmZmVyLmM6MTgyMjpcdFx0XHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXG5mcy9idWZmZXIuYy0xODIzLVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcbi0tXG5mcy9idWZmZXIuYy0xODM2LVx0XHQgKiBjbGVhbi4gIFNvbWVvbmUgd3JvdGUgdGhlbSBiYWNrIGJ5IGhhbmQgd2l0aFxuZnMvYnVmZmVyLmM6MTgzNzpcdFx0ICogd3JpdGVfZGlydHlfYnVmZmVyL2JoX3N1Ym1pdC4gIEEgcmFyZSBjYXNlLlxuZnMvYnVmZmVyLmMtMTgzOC1cdFx0ICovXG4tLVxuZnMvYnVmZmVyLmMtMTg3Ni1cdFx0XHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xuZnMvYnVmZmVyLmM6MTg3NzpcdFx0XHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXG5mcy9idWZmZXIuYy0xODc4LVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcbi0tXG5mcy9idWZmZXIuYz0yMjgyPWludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaylcbi0tXG5mcy9idWZmZXIuYy0yMzYzLVx0XHRpZiAocHJldilcbmZzL2J1ZmZlci5jOjIzNjQ6XHRcdFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XG5mcy9idWZmZXIuYy0yMzY1LVx0XHRwcmV2ID0gYmg7XG4tLVxuZnMvYnVmZmVyLmMtMjM3Ny1cdGlmIChwcmV2KVxuZnMvYnVmZmVyLmM6MjM3ODpcdFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XG5mcy9idWZmZXIuYy0yMzc5LVx0ZWxzZVxuLS1cbmZzL2J1ZmZlci5jPTI2ODY9dm9pZCB3cml0ZV9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxuLS1cbmZzL2J1ZmZlci5jLTI2OTItXHR9XG5mcy9idWZmZXIuYzoyNjkzOlx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcbmZzL2J1ZmZlci5jLTI2OTQtfVxuLS1cbmZzL2J1ZmZlci5jPTI3MDI9aW50IF9fc3luY19kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxuLS1cbmZzL2J1ZmZlci5jLTI3MTUtXG5mcy9idWZmZXIuYzoyNzE2Olx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xuZnMvYnVmZmVyLmMtMjcxNy1cdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL2J1ZmZlci5jPTI5NDI9aW50IF9fYmhfcmVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsIGJvb2wgd2FpdClcbi0tXG5mcy9idWZmZXIuYy0yOTQ3LVxuZnMvYnVmZmVyLmM6Mjk0ODpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgYmhfZW5kX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjk0OS1cdGlmICh3YWl0KSB7XG4tLVxuZnMvYnVmZmVyLmM9Mjk2OD12b2lkIF9fYmhfcmVhZF9iYXRjaChpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sXG4tLVxuZnMvYnVmZmVyLmMtMjk4OS1cbmZzL2J1ZmZlci5jOjI5OTA6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgYmhfZW5kX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjk5MS1cdH1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NjY0PXN0YXRpYyB2b2lkIGV4dDRfZmNfc3VibWl0X2JoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgaXNfdGFpbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjc0LVx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6Njc1Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncywgYmhfZW5kX3dyaXRlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02NzYtXHRFWFQ0X1NCKHNiKS1cdTAwM2VzX2ZjX2JoID0gTlVMTDtcbi0tXG5mcy9leHQ0L21tcC5jPTQyPXN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbW1wLmMtNDgtXHRsb2NrX2J1ZmZlcihiaCk7XG5mcy9leHQ0L21tcC5jOjQ5Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9NRVRBIHwgUkVRX1BSSU8sXG5mcy9leHQ0L21tcC5jLTUwLVx0XHRcdGJoX2VuZF93cml0ZSk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xODAtXHRcdGVuZF9pbyA9IGJoX2VuZF9yZWFkO1xuZnMvZXh0NC9zdXBlci5jOjE4MTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgZW5kX2lvKTtcbmZzL2V4dDQvc3VwZXIuYy0xODItfVxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MzI1PXN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjM1Ni1cdGNsZWFyX2J1ZmZlcl9kaXJ0eShzYmgpO1xuZnMvZXh0NC9zdXBlci5jOjYzNTc6XHRiaF9zdWJtaXQoc2JoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8XG5mcy9leHQ0L3N1cGVyLmMtNjM1OC1cdFx0ICAodGVzdF9vcHQoc2IsIEJBUlJJRVIpID8gUkVRX0ZVQSA6IDApLCBiaF9lbmRfd3JpdGUpO1xuLS1cbmZzL2dmczIvYm1hcC5jPTI5Nz1zdGF0aWMgdm9pZCBnZnMyX21ldGFwYXRoX3JhKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgX19iZTY0ICpzdGFydCwgX19iZTY0ICplbmQpXG4tLVxuZnMvZ2ZzMi9ibWFwLmMtMzA5LVx0XHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKHJhYmgpKSB7XG5mcy9nZnMyL2JtYXAuYzozMTA6XHRcdFx0XHRiaF9zdWJtaXQocmFiaCxcbmZzL2dmczIvYm1hcC5jLTMxMS1cdFx0XHRcdFx0UkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHwgUkVRX01FVEEgfFxuLS1cbmZzL2dmczIvZGlyLmM9MTQ5Mj1zdGF0aWMgdm9pZCBnZnMyX2Rpcl9yZWFkYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaHNpemUsIHUzMiBpbmRleCxcbi0tXG5mcy9nZnMyL2Rpci5jLTE1MjAtXHRcdFx0fSBlbHNlIHtcbmZzL2dmczIvZGlyLmM6MTUyMTpcdFx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHxcbmZzL2dmczIvZGlyLmMtMTUyMi1cdFx0XHRcdFx0XHRSRVFfTUVUQSB8IFJFUV9QUklPLFxuLS1cbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzctXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9nZnMyL21ldGFfaW8uYzo3ODpcdFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzktXHRcdFx0XHRcdGJoX2VuZF9hc3luY193cml0ZSk7XG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmM9MjAyPXN0YXRpYyB2b2lkIGdmczJfbWV0YV9yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9nZnMyL21ldGFfaW8uYy0yMjQtICogU3VibWl0IHNldmVyYWwgY29uc2VjdXRpdmUgYnVmZmVyIGhlYWQgSS9PIHJlcXVlc3RzIGFzIGEgc2luZ2xlIGJpbyBJL09cbmZzL2dmczIvbWV0YV9pby5jOjIyNTogKiByZXF1ZXN0LiAgKFNlZSBiaF9zdWJtaXQuKVxuZnMvZ2ZzMi9tZXRhX2lvLmMtMjI2LSAqL1xuLS1cbmZzL2piZDIvY29tbWl0LmM9MTE0PXN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfY29tbWl0X3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9jb21taXQuYy0xNTQtXG5mcy9qYmQyL2NvbW1pdC5jOjE1NTpcdGJoX3N1Ym1pdChiaCwgd3JpdGVfZmxhZ3MsIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKTtcbmZzL2piZDIvY29tbWl0LmMtMTU2LVx0KmNiaCA9IGJoO1xuLS1cbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvamJkMi9jb21taXQuYy03NTAtXHRcdFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbmZzL2piZDIvY29tbWl0LmM6NzUxOlx0XHRcdFx0Ymhfc3VibWl0KGJoLFxuZnMvamJkMi9jb21taXQuYy03NTItXHRcdFx0XHRcdFJFUV9PUF9XUklURSB8IEpCRDJfSk9VUk5BTF9SRVFfRkxBR1MsXG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MTc4OD1zdGF0aWMgaW50IGpiZDJfd3JpdGVfc3VwZXJibG9jayhqb3VybmFsX3QgKmpvdXJuYWwsIGJsa19vcGZfdCB3cml0ZV9mbGFncylcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0xODI2LVx0XHRzYi1cdTAwM2VzX2NoZWNrc3VtID0gamJkMl9zdXBlcmJsb2NrX2NzdW0oc2IpO1xuZnMvamJkMi9qb3VybmFsLmM6MTgyNzpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XG5mcy9qYmQyL2pvdXJuYWwuYy0xODI4LVx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL25pbGZzMi9idG5vZGUuYz04Nz1pbnQgbmlsZnNfYnRub2RlX3N1Ym1pdF9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywgX191NjQgYmxvY2tucixcbi0tXG5mcy9uaWxmczIvYnRub2RlLmMtMTM2LVx0YmgtXHUwMDNlYl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovXG5mcy9uaWxmczIvYnRub2RlLmM6MTM3Olx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcbmZzL25pbGZzMi9idG5vZGUuYy0xMzgtXHRiaC1cdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yOyAvKiBzZXQgYmFjayB0byB0aGUgZ2l2ZW4gYmxvY2sgYWRkcmVzcyAqL1xuLS1cbmZzL25pbGZzMi9nY2lub2RlLmM9NTU9aW50IG5pbGZzX2djY2FjaGVfc3VibWl0X3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibGtvZmYsXG4tLVxuZnMvbmlsZnMyL2djaW5vZGUuYy04NS1cdGJoLVx1MDAzZWJfYmxvY2tuciA9IHBibjtcbmZzL25pbGZzMi9nY2lub2RlLmM6ODY6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XG5mcy9uaWxmczIvZ2Npbm9kZS5jLTg3LVx0aWYgKHZibilcbi0tXG5mcy9uaWxmczIvbWR0LmM9MTE2PW5pbGZzX21kdF9zdWJtaXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibGtvZmYsIGJsa19vcGZfdCBvcGYsXG4tLVxuZnMvbmlsZnMyL21kdC5jLTE1MC1cbmZzL25pbGZzMi9tZHQuYzoxNTE6XHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xuZnMvbmlsZnMyL21kdC5jLTE1Mi1cdHJldCA9IDA7XG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zOD1pbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy02NC1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NjU6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSwgYmhfZW5kX3dyaXRlKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjYtXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz04OT1pbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLFxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ3LVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzoxNDg6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ5LVx0fVxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9MTkxPWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0zMjUtXHRcdFx0XHRzZXRfYnVmZmVyX25lZWRzX3ZhbGlkYXRlKGJoKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6MzI2Olx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzI3LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDI1PWludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDYtXHRvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi1cdTAwM2VzYiwgYmgtXHUwMDNlYl9kYXRhLCBcdTAwMjZkaS1cdTAwM2VpX2NoZWNrKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NDQ3Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUsIGJoX2VuZF93cml0ZSk7XG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQ0OC1cbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9NDg9c3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU2LSAqIGEgZm9saW8gKHZpYSBhIGZvbGlvX21hcHBpbmcpIGFuZCBmb3Igd3JhcHBpbmcgYmlvIHN1Ym1pc3Npb25cbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDo1NzogKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIChlLmcuIGJoX3N1Ym1pdCkuXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtNTgtICovXG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTIzMD1ib29sIGJpb19lbmRpb19iaChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjMxLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjIzMjovKiBDb21wbGV0aW9uIHJvdXRpbmVzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGJoX3N1Ym1pdCgpICovXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjMzLXZvaWQgYmhfZW5kX3JlYWQoc3RydWN0IGJpbyAqYmlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9MjY1PXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjY2OnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBibGtfb3BmX3QsIGJpb19lbmRfaW9fdCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjY3LXZvaWQgd3JpdGVfYm91bmRhcnlfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5tbS92bXNjYW4uYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNDQ5LVx0XHQgKiBUaGlzIGhhcHBlbnMgaWYgdGhlIGJ1ZmZlcnMgd2VyZSB3cml0dGVuIG91dCBkaXJlY3RseSxcbm1tL3Ztc2Nhbi5jOjE0NTA6XHRcdCAqIHdpdGggYmhfc3VibWl0KCkuIGV4dDMgd2lsbCBkbyB0aGlzLCBhcyB3ZWxsIGFzXG5tbS92bXNjYW4uYy0xNDUxLVx0XHQgKiB0aGUgYmxvY2tkZXYgbWFwcGluZy4gIGZpbGVtYXBfcmVsZWFzZV9mb2xpbygpIHdpbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIExlZ2FjeSBCdWZmZXIgSGVhZCBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGJ1ZmZlcl9oZWFkIGJ1c2luZXNzIGFnYWluLiBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSAqYW5jaWVudCogYnVmZmVyX2hlYWRzIOKAkyB0aGUgb25lcyBzdGlsbCBraWNraW5nIGFyb3VuZCB3aXRob3V0IHRoZSBtb3JlIG1vZGVybiBmb2xpbyBzdXBwb3J0IOKAkyBhcmUgYmVpbmcgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSBhbmQgd2hhdCB0aGV5IGFyZSB1c2VkIGZvci4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBsZWdhY3kgY29tcG9uZW50cyBjb250aW51ZSB0byBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQga2VybmVsIGFuZCB3aHkgdGhleSBoYXZlIG5vdCBiZWVuIHJlbW92ZWQuCgpNeSBwbGFuIGlzIHNpbXBsZTogbGV0JiMzOTtzIGZpcmUgdXAgYGdyZXBgLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGEgZmV3IGtleSBpbmRpY2F0b3JzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBhbGxvY19idWZmZXJfaGVhZGAg4oCTIHRoYXQgc2hvdWxkIGZsYWcgYW55IGRpcmVjdCBhbGxvY2F0aW9uIHNpdGVzLiBUaGVuLCBJJiMzOTtsbCB1c2UgYGJoLSZndDtiX2ZvbGlvYCB0byBzZWUgd2hlcmUgdGhlIHN5c3RlbSBpcyB3b3JraW5nIHdpdGggdGhlICphYnNlbmNlKiBvZiBmb2xpby1iYWNrZWQgYnVmZmVycy4gRmluYWxseSwgSSYjMzk7bGwgcHJvYmUgZm9yIGBiX2RhdGFgLiBUaGF0IHNob3VsZCBwaWNrIHVwIGEgbG90IG9mIHRoZSBvbGRlciBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoYXQgZmllbGQgZm9yIGFjY2Vzc2luZyB0aGUgYnVmZmVyJiMzOTtzIGNvbnRlbnRzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGxlZ2FjeSBzeXN0ZW0gaXMgYmVpbmcgdXNlZC4gVGhpcyBjb3VsZCBiZSBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCBvciBJIGNvdWxkIGp1c3QgYmUgbG9va2luZyB0byBiZXR0ZXIgdW5kZXJzdGFuZCBhIHN5c3RlbSB0aGF0IGlzIHN0aWxsIGNyaXRpY2FsIHRvIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiX2RhdGEuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWRmcy9zdXBlci5jPTMwMj1zdGF0aWMgaW50IGFkZnNfdmFsaWRhdGVfYmJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2FkZnMvc3VwZXIuYy0zMDctXG5mcy9hZGZzL3N1cGVyLmM6MzA4Olx0Yl9kYXRhID0gYmgtXHUwMDNlYl9kYXRhICYjNDM7IChBREZTX0RJU0NSRUNPUkQgJSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG5mcy9hZGZzL3N1cGVyLmMtMzA5LVx0aWYgKGFkZnNfY2hlY2tiYmxrKGJfZGF0YSkpXG4tLVxuZnMvYWZmcy9hZmZzLmg9MjgxPWFmZnNfYWRqdXN0X2NoZWNrc3VtKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiB2YWwpXG4tLVxuZnMvYWZmcy9hZmZzLmgtMjgzLVx0dTMyIHRtcCA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVs1XSk7XG5mcy9hZmZzL2FmZnMuaDoyODQ6XHQoKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSlbNV0gPSBjcHVfdG9fYmUzMih0bXAgLSB2YWwpO1xuZnMvYWZmcy9hZmZzLmgtMjg1LX1cbi0tXG5mcy9hZmZzL2FmZnMuaD0yODc9YWZmc19hZGp1c3RfYml0bWFwY2hlY2tzdW0oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgdTMyIHZhbClcbi0tXG5mcy9hZmZzL2FmZnMuaC0yODktXHR1MzIgdG1wID0gYmUzMl90b19jcHUoKChfX2JlMzIgKiliaC1cdTAwM2ViX2RhdGEpWzBdKTtcbmZzL2FmZnMvYWZmcy5oOjI5MDpcdCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKHRtcCAtIHZhbCk7XG5mcy9hZmZzL2FmZnMuaC0yOTEtfVxuLS1cbmZzL2FmZnMvYml0bWFwLmM9Mzk9YWZmc19mcmVlX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBibG9jaylcbi0tXG5mcy9hZmZzL2JpdG1hcC5jLTc5LVx0dG1wID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cdTAwM2ViX2RhdGEpO1xuZnMvYWZmcy9iaXRtYXAuYzo4MDpcdCooX19iZTMyICopYmgtXHUwMDNlYl9kYXRhID0gY3B1X3RvX2JlMzIodG1wIC0gbWFzayk7XG5mcy9hZmZzL2JpdG1hcC5jLTgxLVxuLS1cbmZzL2FmZnMvYml0bWFwLmM9MTE1PWFmZnNfYWxsb2NfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGdvYWwpXG4tLVxuZnMvYWZmcy9iaXRtYXAuYy0yMjMtXHR0bXAgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSk7XG5mcy9hZmZzL2JpdG1hcC5jOjIyNDpcdCooX19iZTMyICopYmgtXHUwMDNlYl9kYXRhID0gY3B1X3RvX2JlMzIodG1wICYjNDM7IG1hc2spO1xuZnMvYWZmcy9iaXRtYXAuYy0yMjUtXG4tLVxuZnMvYWZmcy9iaXRtYXAuYz0yNDQ9aW50IGFmZnNfaW5pdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncylcbi0tXG5mcy9hZmZzL2JpdG1hcC5jLTMyNi1cdFx0Ly9pZiAob2xkICE9IG5ldykge1xuZnMvYWZmcy9iaXRtYXAuYzozMjc6XHRcdFx0KChfX2JlMzIgKiliaC1cdTAwM2ViX2RhdGEpW29mZnNldF0gPSBjcHVfdG9fYmUzMihuZXcpO1xuZnMvYWZmcy9iaXRtYXAuYy0zMjgtXHRcdFx0LyogZml4IGNoZWNrc3VtICovXG4tLVxuZnMvYWZmcy9iaXRtYXAuYy0zMzAtXHRcdFx0Ly9vbGQgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSk7XG5mcy9hZmZzL2JpdG1hcC5jOjMzMTpcdFx0XHQvLyooX19iZTMyICopYmgtXHUwMDNlYl9kYXRhID0gY3B1X3RvX2JlMzIob2xkIC0gbmV3KTtcbmZzL2FmZnMvYml0bWFwLmMtMzMyLVx0XHRcdC8vbWFya19idWZmZXJfZGlydHkoYmgpO1xuLS1cbmZzL2FmZnMvYml0bWFwLmMtMzM3LVx0d2hpbGUgKCYjNDM7JiM0MztvZmZzZXQgXHUwMDNjIHNiLVx1MDAzZXNfYmxvY2tzaXplIC8gNClcbmZzL2FmZnMvYml0bWFwLmM6MzM4Olx0XHQoKF9fYmUzMiAqKWJoLVx1MDAzZWJfZGF0YSlbb2Zmc2V0XSA9IDA7XG5mcy9hZmZzL2JpdG1hcC5jOjMzOTpcdCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVswXSA9IDA7XG5mcy9hZmZzL2JpdG1hcC5jOjM0MDpcdCgoX19iZTMyICopYmgtXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKC1hZmZzX2NoZWNrc3VtX2Jsb2NrKHNiLCBiaCkpO1xuZnMvYWZmcy9iaXRtYXAuYy0zNDEtXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tLVxuZnMvYnVmZmVyLmM9MTQ2OD12b2lkIGZvbGlvX3NldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2J1ZmZlci5jLTE0NzYtXHRcdCAqL1xuZnMvYnVmZmVyLmM6MTQ3NzpcdFx0YmgtXHUwMDNlYl9kYXRhID0gKGNoYXIgKikoMCAmIzQzOyBvZmZzZXQpO1xuZnMvYnVmZmVyLmMtMTQ3OC1cdGVsc2VcbmZzL2J1ZmZlci5jOjE0Nzk6XHRcdGJoLVx1MDAzZWJfZGF0YSA9IGZvbGlvX2FkZHJlc3MoZm9saW8pICYjNDM7IG9mZnNldDtcbmZzL2J1ZmZlci5jLTE0ODAtfVxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9MjIzPXN0YXRpYyBpbnQgbWJ0X2dycF9jdHhfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjI3LVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoyMjg6XHRncnBfY3R4LVx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBremFsbG9jKEVYVDRfQkxPQ0tfU0laRShzYiksIEdGUF9LRVJORUwpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoyMjk6XHRpZiAoZ3JwX2N0eC1cdTAwM2ViaXRtYXBfYmguYl9kYXRhID09IE5VTEwpXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTIzMC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz0yMzc9c3RhdGljIHZvaWQgbWJ0X2dycF9jdHhfcmVsZWFzZShzdHJ1Y3QgbWJ0X2dycF9jdHggKmdycF9jdHgpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0yMzktXHRrZnJlZShncnBfY3R4LVx1MDAzZWJpdG1hcF9iaC5iX2RhdGEpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoyNDA6XHRncnBfY3R4LVx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBOVUxMO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0yNDEtfVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQwODk9ZXh0NF9tYl9tYXJrX2NvbnRleHQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBzdGF0ZSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00MTQxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuZnMvZXh0NC9tYmFsbG9jLmM6NDE0MjpcdFx0XHRpZiAobWJfdGVzdF9iaXQoYmxrb2ZmICYjNDM7IGksIGJpdG1hcF9iaC1cdTAwM2ViX2RhdGEpID09XG5mcy9leHQ0L21iYWxsb2MuYy00MTQzLVx0XHRcdFx0XHRzdGF0ZSlcbi0tXG5mcy9mMmZzL2RlYnVnLmM9MTI3PXN0YXRpYyB2b2lkIHVwZGF0ZV9nZW5lcmFsX3N0YXR1cyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpXG4tLVxuZnMvZjJmcy9kZWJ1Zy5jLTE3NC1cdHNpLVx1MDAzZW5yX3diX2NwX2RhdGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX1dCX0NQX0RBVEEpO1xuZnMvZjJmcy9kZWJ1Zy5jOjE3NTpcdHNpLVx1MDAzZW5yX3diX2RhdGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX1dCX0RBVEEpO1xuZnMvZjJmcy9kZWJ1Zy5jLTE3Ni1cdHNpLVx1MDAzZW5yX3JkX2RhdGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX1JEX0RBVEEpO1xuLS1cbmZzL2Z1c2UvZmlsZS5jPTIyMTM9c3RhdGljIHNzaXplX3QgZnVzZV9pb21hcF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yMjE2LXtcbmZzL2Z1c2UvZmlsZS5jOjIyMTc6XHRzdHJ1Y3QgZnVzZV9maWxsX3diX2RhdGEgKmRhdGEgPSB3cGMtXHUwMDNld2JfY3R4O1xuZnMvZnVzZS9maWxlLmMtMjIxOC1cdHN0cnVjdCBmdXNlX3dyaXRlcGFnZV9hcmdzICp3cGEgPSBkYXRhLVx1MDAzZXdwYTtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0yMjczPXN0YXRpYyBpbnQgZnVzZV9pb21hcF93cml0ZWJhY2tfc3VibWl0KHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvZnVzZS9maWxlLmMtMjI3NS17XG5mcy9mdXNlL2ZpbGUuYzoyMjc2Olx0c3RydWN0IGZ1c2VfZmlsbF93Yl9kYXRhICpkYXRhID0gd3BjLVx1MDAzZXdiX2N0eDtcbmZzL2Z1c2UvZmlsZS5jLTIyNzctXG4tLVxuZnMvZnVzZS9maWxlLmM9MjI5Nj1zdGF0aWMgaW50IGZ1c2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yMzAwLVx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTtcbmZzL2Z1c2UvZmlsZS5jOjIzMDE6XHRzdHJ1Y3QgZnVzZV9maWxsX3diX2RhdGEgZGF0YSA9IHt9O1xuZnMvZnVzZS9maWxlLmMtMjMwMi1cdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0yMzIwPXN0YXRpYyBpbnQgZnVzZV9sYXVuZGVyX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZnVzZS9maWxlLmMtMjMyMi1cdGludCBlcnIgPSAwO1xuZnMvZnVzZS9maWxlLmM6MjMyMzpcdHN0cnVjdCBmdXNlX2ZpbGxfd2JfZGF0YSBkYXRhID0ge307XG5mcy9mdXNlL2ZpbGUuYy0yMzI0LVx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuLS1cbmZzL2dmczIveGF0dHIuYz04OD1zdGF0aWMgaW50IGVhX2ZvcmVhY2hfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZ2ZzMi94YXR0ci5jLTEwMi1cdFx0fVxuZnMvZ2ZzMi94YXR0ci5jOjEwMzpcdFx0aWYgKCEoYmgtXHUwMDNlYl9kYXRhIFx1MDAzYz0gKGNoYXIgKillYSBcdTAwMjZcdTAwMjYgKGNoYXIgKilHRlMyX0VBMk5FWFQoZWEpIFx1MDAzYz1cbmZzL2dmczIveGF0dHIuYy0xMDQtXHRcdFx0XHRcdFx0ICBiaC1cdTAwM2ViX2RhdGEgJiM0MzsgYmgtXHUwMDNlYl9zaXplKSkge1xuLS1cbmZzL2hwZnMvYnVmZmVyLmM9MTE0PXZvaWQgKmhwZnNfbWFwXzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICpxYmgsXG4tLVxuZnMvaHBmcy9idWZmZXIuYy0xMzQtXG5mcy9ocGZzL2J1ZmZlci5jOjEzNTpcdGlmIChsaWtlbHkocWJoLVx1MDAzZWJoWzFdLVx1MDAzZWJfZGF0YSA9PSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhICYjNDM7IDEgKiA1MTIpIFx1MDAyNlx1MDAyNlxuZnMvaHBmcy9idWZmZXIuYzoxMzY6XHQgICAgbGlrZWx5KHFiaC1cdTAwM2ViaFsyXS1cdTAwM2ViX2RhdGEgPT0gcWJoLVx1MDAzZWJoWzBdLVx1MDAzZWJfZGF0YSAmIzQzOyAyICogNTEyKSBcdTAwMjZcdTAwMjZcbmZzL2hwZnMvYnVmZmVyLmM6MTM3Olx0ICAgIGxpa2VseShxYmgtXHUwMDNlYmhbM10tXHUwMDNlYl9kYXRhID09IHFiaC1cdTAwM2ViaFswXS1cdTAwM2ViX2RhdGEgJiM0MzsgMyAqIDUxMikpIHtcbmZzL2hwZnMvYnVmZmVyLmMtMTM4LVx0XHRyZXR1cm4gcWJoLVx1MDAzZWRhdGEgPSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhO1xuLS1cbmZzL2hwZnMvYnVmZmVyLmM9MTY4PXZvaWQgKmhwZnNfZ2V0XzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sXG4tLVxuZnMvaHBmcy9idWZmZXIuYy0xODQtXG5mcy9ocGZzL2J1ZmZlci5jOjE4NTpcdGlmIChsaWtlbHkocWJoLVx1MDAzZWJoWzFdLVx1MDAzZWJfZGF0YSA9PSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhICYjNDM7IDEgKiA1MTIpIFx1MDAyNlx1MDAyNlxuZnMvaHBmcy9idWZmZXIuYzoxODY6XHQgICAgbGlrZWx5KHFiaC1cdTAwM2ViaFsyXS1cdTAwM2ViX2RhdGEgPT0gcWJoLVx1MDAzZWJoWzBdLVx1MDAzZWJfZGF0YSAmIzQzOyAyICogNTEyKSBcdTAwMjZcdTAwMjZcbmZzL2hwZnMvYnVmZmVyLmM6MTg3Olx0ICAgIGxpa2VseShxYmgtXHUwMDNlYmhbM10tXHUwMDNlYl9kYXRhID09IHFiaC1cdTAwM2ViaFswXS1cdTAwM2ViX2RhdGEgJiM0MzsgMyAqIDUxMikpIHtcbmZzL2hwZnMvYnVmZmVyLmMtMTg4LVx0XHRyZXR1cm4gcWJoLVx1MDAzZWRhdGEgPSBxYmgtXHUwMDNlYmhbMF0tXHUwMDNlYl9kYXRhO1xuLS1cbmZzL2piZDIvam91cm5hbC5jPTMyND1pbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0zNjYtXHRcdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbmZzL2piZDIvam91cm5hbC5jOjM2NzpcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG5mcy9qYmQyL2pvdXJuYWwuYy0zNjgtXHR9IGVsc2Uge1xuLS1cbmZzL2piZDIvam91cm5hbC5jLTQxMS1cdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbmZzL2piZDIvam91cm5hbC5jOjQxMjpcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG5mcy9qYmQyL2pvdXJuYWwuYy00MTMtXHR9XG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jPTE5OD1zdGF0aWMgaW50IGNvdW50X3RhZ3Moam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2piZDIvcmVjb3ZlcnkuYy0yMDktXG5mcy9qYmQyL3JlY292ZXJ5LmM6MjEwOlx0d2hpbGUgKCh0YWdwIC0gYmgtXHUwMDNlYl9kYXRhICYjNDM7IHRhZ19ieXRlcykgXHUwMDNjPSBzaXplKSB7XG5mcy9qYmQyL3JlY292ZXJ5LmMtMjExLVx0XHRtZW1jcHkoXHUwMDI2dGFnLCB0YWdwLCBzaXplb2YodGFnKSk7XG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jPTQ5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBqYmQyX2RvX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jLTUwOS1cdHRhZ3AgPSBcdTAwMjZiaC1cdTAwM2ViX2RhdGFbc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpXTtcbmZzL2piZDIvcmVjb3ZlcnkuYzo1MTA6XHR3aGlsZSAodGFncCAtIGJoLVx1MDAzZWJfZGF0YSAmIzQzOyB0YWdfYnl0ZXMgXHUwMDNjPVxuZnMvamJkMi9yZWNvdmVyeS5jLTUxMS1cdCAgICAgICBqb3VybmFsLVx1MDAzZWpfYmxvY2tzaXplIC0gZGVzY3JfY3N1bV9zaXplKSB7XG4tLVxuZnMvamJkMi9yZWNvdmVyeS5jLTU2MS1cdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEpCRDJfRkxBR19FU0NBUEUpIHtcbmZzL2piZDIvcmVjb3ZlcnkuYzo1NjI6XHRcdFx0XHQqKChfX2JlMzIgKiluYmgtXHUwMDNlYl9kYXRhKSA9XG5mcy9qYmQyL3JlY292ZXJ5LmMtNTYzLVx0XHRcdFx0Y3B1X3RvX2JlMzIoSkJEMl9NQUdJQ19OVU1CRVIpO1xuLS1cbmZzL2piZDIvcmV2b2tlLmM9NTczPXN0YXRpYyB2b2lkIHdyaXRlX29uZV9yZXZva2VfcmVjb3JkKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuLS1cbmZzL2piZDIvcmV2b2tlLmMtNjI1LVx0aWYgKGpiZDJfaGFzX2ZlYXR1cmVfNjRiaXQoam91cm5hbCkpXG5mcy9qYmQyL3Jldm9rZS5jOjYyNjpcdFx0KiAoKF9fYmU2NCAqKShcdTAwMjZkZXNjcmlwdG9yLVx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxuZnMvamJkMi9yZXZva2UuYy02MjctXHRcdFx0Y3B1X3RvX2JlNjQocmVjb3JkLVx1MDAzZWJsb2NrbnIpO1xuZnMvamJkMi9yZXZva2UuYy02MjgtXHRlbHNlXG5mcy9qYmQyL3Jldm9rZS5jOjYyOTpcdFx0KiAoKF9fYmUzMiAqKShcdTAwMjZkZXNjcmlwdG9yLVx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxuZnMvamJkMi9yZXZva2UuYy02MzAtXHRcdFx0Y3B1X3RvX2JlMzIocmVjb3JkLVx1MDAzZWJsb2NrbnIpO1xuLS1cbmZzL21pbml4L2lub2RlLmM9MjI0PXN0YXRpYyBpbnQgbWluaXhfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9taW5peC9pbm9kZS5jLTI4My1cdFx0cy1cdTAwM2VzX21heF9saW5rcyA9IE1JTklYMl9MSU5LX01BWDtcbmZzL21pbml4L2lub2RlLmM6Mjg0Olx0fSBlbHNlIGlmICggKihfX3UxNiAqKShiaC1cdTAwM2ViX2RhdGEgJiM0MzsgMjQpID09IE1JTklYM19TVVBFUl9NQUdJQykge1xuZnMvbWluaXgvaW5vZGUuYy0yODUtXHRcdG0zcyA9IChzdHJ1Y3QgbWluaXgzX3N1cGVyX2Jsb2NrICopIGJoLVx1MDAzZWJfZGF0YTtcbi0tXG5mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jPTE0NjE9c3RhdGljIHZvaWQgbzJoYl9kZWJ1Z19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqZGlyLFxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMtMTQ3MS1cdCgqZGIpLVx1MDAzZWRiX2xlbiA9IGxlbjtcbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmM6MTQ3MjpcdCgqZGIpLVx1MDAzZWRiX2RhdGEgPSBkYXRhO1xuZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYy0xNDczLVxuLS1cbmZzL3JvbWZzL3N0b3JhZ2UuYz0xNjM9c3RhdGljIGludCByb21mc19ibGtfc3RyY21wKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zLFxuLS1cbmZzL3JvbWZzL3N0b3JhZ2UuYy0xNzctXHRcdFx0cmV0dXJuIC1FSU87XG5mcy9yb21mcy9zdG9yYWdlLmM6MTc4Olx0XHRtYXRjaGVkID0gKG1lbWNtcChiaC1cdTAwM2ViX2RhdGEgJiM0Mzsgb2Zmc2V0LCBzdHIsIHNlZ21lbnQpID09IDApO1xuZnMvcm9tZnMvc3RvcmFnZS5jLTE3OS1cbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz04Nzc9c3RhdGljIHZvaWQgdGNvbl9zdXBlcl9jYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICphcmcpXG5mcy9zbWIvY2xpZW50L21pc2MuYy04Nzgte1xuZnMvc21iL2NsaWVudC9taXNjLmM6ODc5Olx0c3RydWN0IHN1cGVyX2NiX2RhdGEgKnNkID0gYXJnO1xuZnMvc21iL2NsaWVudC9taXNjLmMtODgwLVx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjtcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTAxLXtcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkwMjpcdHN0cnVjdCBzdXBlcl9jYl9kYXRhIHNkID0ge1xuZnMvc21iL2NsaWVudC9taXNjLmMtOTAzLVx0XHQuZGF0YSA9IGRhdGEsXG4tLVxuZnMvdWRmL3VkZmRlY2wuaD0xMTY9c3RhdGljIGlubGluZSB2b2lkIHVkZl91cGRhdGVkX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy91ZGYvdWRmZGVjbC5oLTEyMS1cdFdBUk5fT05fT05DRSgoKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKVxuZnMvdWRmL3VkZmRlY2wuaDoxMjI6XHRcdCAgICAgYmgtXHUwMDNlYl9kYXRhKS1cdTAwM2VpbnRlZ3JpdHlUeXBlICE9XG5mcy91ZGYvdWRmZGVjbC5oLTEyMy1cdFx0ICAgICBjcHVfdG9fbGUzMihMVklEX0lOVEVHUklUWV9UWVBFX09QRU4pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBqYmQyKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBqYmQyIGpvdXJuYWxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvamJkMi9qb3VybmFsLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBjcmFzaCBpcyBoYXBwZW5pbmcuIFRoZSB0cmFjZSBzZWVtcyB0byBwb2ludCB0byBhIHByb2JsZW0gYXJvdW5kIHRoZSBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIGxpbmU6CgpgYGBjCm5ld19iaC0mZ3Q7Yl9kYXRhID0gamhfaW4tJmd0O2JfZnJvemVuX2RhdGE7CmBgYAoKaXMgcGFydCBvZiB0aGUgcHJvYmxlbS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBpc3N1ZSBzdGVtcyBmcm9tIGhvdyBgbmV3X2JoYCBpcyBiZWluZyBhbGxvY2F0ZWQuIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVpbmcgYWxsb2NhdGVkIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbzsgYG5ld19iaC0mZ3Q7Yl9mb2xpb2AgaXMgZ29pbmcgdG8gYmUgTlVMTCBpbiB0aGlzIHNpdHVhdGlvbi4gTm93LCB0aGUgcG90ZW50aWFsIHByb2JsZW0gaXMgdGhhdCBsYXRlciB3aGVuIGBqYmQyYCB0cmllcyB0byB3cml0ZSB0aGUgbWV0YWRhdGEgYnVmZmVyLCBtYXliZSB1c2luZyBgYmhfc3VibWl0KG5ld19iaCwgLi4uKWAgb3IgYF9fYmhfc3VibWl0YCwgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIGEgYG5ld19iaGAgd2l0aCBhIG51bGwgYGJfZm9saW9gLiBUaGUgdHJhY2Ugc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IGEgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbylgIGNhbGwgaXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gCgpUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmcy9qYmQyL2pvdXJuYWwuY2AgYXJvdW5kIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYCBhbmQgdHJhY2UgaG93IGBuZXdfYmhgIGlzIGJlaW5nIHVzZWQgdG8gY29uZmlybSB0aGlzIGh5cG90aGVzaXMgYW5kIHVuZGVyc3RhbmQgdGhlIHByZWNpc2Ugc2VxdWVuY2Ugb2YgZXZlbnRzIGxlYWRpbmcgdXAgdG8gdGhhdCBwcm9ibGVtYXRpYyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kYCBjYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbmV3X2JoYCBpcyBjcmVhdGVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2piZDIvam91cm5hbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHRcdCAqIGFsc28gcGFydCBvZiBhIHNoYXJlZCBtYXBwaW5nLCBhbmQgYW5vdGhlciB0aHJlYWQgaGFzXG4gMzQxOlx0XHQgKiBkZWNpZGVkIHRvIGxhdW5jaCBhIHdyaXRlcGFnZSgpIGFnYWluc3QgdGhpcyBidWZmZXIuXG4gMzQyOlx0XHQgKi9cbiAzNDM6XHRcdEpfQVNTRVJUX0JIKGJoX2luLCBidWZmZXJfamJkZGlydHkoYmhfaW4pKTtcbiAzNDQ6XHRcbiAzNDU6XHRcdG5ld19iaCA9IGFsbG9jX2J1ZmZlcl9oZWFkKEdGUF9OT0ZTfF9fR0ZQX05PRkFJTCk7XG4gMzQ2Olx0XG4gMzQ3Olx0XHQvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovXG4gMzQ4Olx0XHRhdG9taWNfc2V0KFx1MDAyNm5ld19iaC1cdTAwM2ViX2NvdW50LCAxKTtcbiAzNDk6XHRcbiAzNTA6XHRcdC8qXG4gMzUxOlx0XHQgKiBiX2Zyb3plbl9kYXRhIGlzIHNsYWIgbWVtb3J5LCBub3QgcGFnZSBjYWNoZSwgc28gd2hlbiB3ZSB1c2UgaXQgdGhlXG4gMzUyOlx0XHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcbiAzNTM6XHRcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxuIDM1NDpcdFx0ICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC1cdTAwM2VtYXBwaW5nIHRvXG4gMzU1Olx0XHQgKiBhbnl0aGluZyB0aGF0IGdvZXMgbG9va2luZyBmb3IgYW4gYWRkcmVzc19zcGFjZS5cbiAzNTY6XHRcdCAqL1xuIDM1NzpcdFxuIDM1ODpcdFx0c3Bpbl9sb2NrKFx1MDAyNmpoX2luLVx1MDAzZWJfc3RhdGVfbG9jayk7XG4gMzU5Olx0XHQvKlxuIDM2MDpcdFx0ICogSWYgYSBuZXcgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgZG9uZSBhIGJ1ZmZlciBjb3B5LW91dCwgdGhlblxuIDM2MTpcdFx0ICogd2UgdXNlIHRoYXQgdmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhlIGNvbW1pdC5cbiAzNjI6XHRcdCAqL1xuIDM2MzpcdFx0aWYgKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpIHtcbiAzNjQ6XHRcdFx0ZG9fZXNjYXBlID0gamJkMl9kYXRhX25lZWRzX2VzY2FwaW5nKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuIDM2NTpcdFx0XHRpZiAoZG9fZXNjYXBlKVxuIDM2NjpcdFx0XHRcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gMzY3Olx0XHRcdG5ld19iaC1cdTAwM2ViX2RhdGEgPSBqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhO1xuIDM2ODpcdFx0fSBlbHNlIHtcbiAzNjk6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJoX2luLVx1MDAzZWJfZm9saW87XG4gMzcwOlx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8oZm9saW8sIGJoX2luLVx1MDAzZWJfZGF0YSk7XG4gMzcxOlx0XHRcdGNoYXIgKnRtcDtcbiAzNzI6XHRcdFx0Y2hhciAqbWFwcGVkX2RhdGE7XG4gMzczOlx0XG4gMzc0Olx0XHRcdG1hcHBlZF9kYXRhID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcbiAzNzU6XHRcdFx0LypcbiAzNzY6XHRcdFx0ICogRmlyZSBkYXRhIGZyb3plbiB0cmlnZ2VyIGlmIGRhdGEgYWxyZWFkeSB3YXNuJiMzOTt0IGZyb3plbi4gRG9cbiAzNzc6XHRcdFx0ICogdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yIGVzY2FwaW5nLCBhcyB0aGUgdHJpZ2dlciBtYXkgbW9kaWZ5XG4gMzc4Olx0XHRcdCAqIHRoZSBtYWdpYyBvZmZzZXQuICBJZiBhIGNvcHktb3V0IGhhcHBlbnMgYWZ0ZXJ3YXJkcywgaXQgd2lsbFxuIDM3OTpcdFx0XHQgKiBoYXZlIHRoZSBjb3JyZWN0IGRhdGEgaW4gdGhlIGJ1ZmZlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29tbWVudCBpbiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5OgoKYGBgYwoJCS8qCgkJICogYl9mcm96ZW5fZGF0YSBpcyBzbGFiIG1lbW9yeSwgbm90IHBhZ2UgY2FjaGUsIHNvIHdoZW4gd2UgdXNlIGl0IHRoZQoJCSAqIHNoYWRvdyBidWZmZXIgZ2V0cyBubyBmb2xpbyBhdCBhbGw6IGJfZm9saW8gc3RheXMgTlVMTCBmcm9tIHRoZQoJCSAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuIFBvaW50aW5nIGl0IGF0CgkJICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC0mZ3Q7bWFwcGluZyB0bwoJCSAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLgoJCSAqLwpgYGAKClJpZ2h0LCBhbmQgaXQgc2VlbXMgdGhlIGlzc3VlIGlzIHRoYXQgd2hlbiBgYmhfc3VibWl0YCBpcyBjYWxsZWQgb24gYSBgbmV3X2JoYCwgYF9fYmhfc3VibWl0YCB0aGVuIGNoZWNrcyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYGJoLSZndDtiX2ZvbGlvYCAqY2FuKiBiZSBOVUxMIGJlY2F1c2Ugb2YgdGhhdCBzbGFiIG1lbW9yeSBzaXR1YXRpb24gbWVudGlvbmVkIGluIHRoZSBjb21tZW50LCB3aGljaCBtZWFucyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKWAgd291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIuIENsYXNzaWMhCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4gVXNpbmcgbXkgY3JpdGVyaWE6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKVGhpcyBjb2RlIGlzIGluIGBmcy9idWZmZXIuY2AsIHNwZWNpZmljYWxseSBgX19iaF9zdWJtaXRgLiBUaGF0JiMzOTtzIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gYnVmZmVyIGNhY2hlIGxvZ2ljLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBXZSBjYW4gZnV6eiB0aGlzIHdpdGggc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25z4oCUZXh0NCwgamJkMiBqb3VybmFsaW5nLCB3cml0ZWJhY2ssIGRpcmVjdCBJL08sIGJ1ZmZlcmVkIEkvTywgYWxsIGtpbmRzIG9mIHRoaW5ncy4gU28sIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOZXh0LCBsZXQmIzM5O3MgaWRlbnRpZnkgcmVsZXZhbnQgc3ltYm9scyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvciByZWxldmFudCBzeW1ib2xzIGluIGBmcy9idWZmZXIuY2Agb3IgcmVsYXRlZCBjYWxsZXJzLiBGcm9tIG15IGV4cGVyaWVuY2UgYW5kIGEgcXVpY2sgZ2xhbmNlLCB0aGUgZnVuY3Rpb25zIHRvIGNoZWNrIGFyZToKCiogICBgYmhfc3VibWl0YAoqICAgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2AKKiAgIGB3cml0ZV9kaXJ0eV9idWZmZXJgCiogICBgX19zeW5jX2RpcnR5X2J1ZmZlcmAKKiAgIFBvdGVudGlhbGx5LCBhbHNvIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCBhbmQgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiBhbmQgdmlzaWJpbGl0eSBvZiBgYmhfc3VibWl0YCwgYHdyaXRlX2RpcnR5X2J1ZmZlcmAsIGFuZCBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuIEluIGBmcy9idWZmZXIuY2A6IGBiaF9zdWJtaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIChgRVhQT1JUX1NZTUJPTChiaF9zdWJtaXQpYCksIHdoaWNoIGlzIGdvb2QuIGBfX2JoX3N1Ym1pdGAgaXMgc3RhdGljLCB3aGljaCBpcyBleHBlY3RlZC4gYHdyaXRlX2RpcnR5X2J1ZmZlcmAgYW5kIGBfX3N5bmNfZGlydHlfYnVmZmVyYCBhcmUgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gR29vZCwgdGhvc2UgYXJlIHZpYWJsZSB0YXJnZXRzLgoKRmluYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIG5lZWRlZCBpbiBgZnMvYnVmZmVyLmNgLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGNoZWNrIHRoZSBgZnMvTWFrZWZpbGVgIG9yIGBmcy9LY29uZmlnYCBmaWxlcy4gVGhhdCYjMzk7bGwgYmUgaW1wb3J0YW50IGZvciByZXByb2R1Y3Rpb24gYW5kIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWZmZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEwPW9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG4tLVxuZnMvTWFrZWZpbGUtMjAtXG5mcy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfQlVGRkVSX0hFQUQpXHQmIzQzOz0gYnVmZmVyLm8gbXBhZ2Uub1xuZnMvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BST0NfRlMpXHRcdCYjNDM7PSBwcm9jX25hbWVzcGFjZS5vXG4tLVxuZnMvaHBmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19IUEZTX0ZTKSAmIzQzOz0gaHBmcy5vXG5mcy9ocGZzL01ha2VmaWxlLTctXG5mcy9ocGZzL01ha2VmaWxlOjg6aHBmcy1vYmpzIDo9IGFsbG9jLm8gYW5vZGUubyBidWZmZXIubyBkZW50cnkubyBkaXIubyBkbm9kZS5vIGVhLm8gZmlsZS5vIFxcXG5mcy9ocGZzL01ha2VmaWxlLTktXHQgICAgIGlub2RlLm8gbWFwLm8gbmFtZS5vIG5hbWVpLm8gc3VwZXIub1xuLS1cbmZzL25ldGZzL01ha2VmaWxlPTM9bmV0ZnMteSA6PSBcXFxuLS1cbmZzL25ldGZzL01ha2VmaWxlLTE2LVx0cmVhZF9zaW5nbGUubyBcXFxuZnMvbmV0ZnMvTWFrZWZpbGU6MTc6XHRyb2xsaW5nX2J1ZmZlci5vIFxcXG5mcy9uZXRmcy9NYWtlZmlsZS0xOC1cdHdyaXRlX2NvbGxlY3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfQlVGRkVSX0hFQURgIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19CVUZGRVJfSEVBRGAgcG9wcGluZyB1cCBpbiBgZnMvTWFrZWZpbGVgIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb2YgYGJ1ZmZlci5vYCBhbmQgYG1wYWdlLm9gLiAgVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleHBlcnQgaW5zdGluY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29uZmlnIG9wdGlvbiAqbWVhbnMqLiBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGl0cyBkZWZpbml0aW9uLiAgV2hlcmUgaXMgYENPTkZJR19CVUZGRVJfSEVBRGAgYWN0dWFsbHkgKmRlZmluZWQqPyAgTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdGhlIEtjb25maWcgZmlsZXMuICBTaW5jZSB0aGlzIHJlbGF0ZXMgdG8gdGhlIGZpbGVzeXN0ZW0sIG15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBgZnMvS2NvbmZpZ2AuIElmIGl0JiMzOTtzIG5vdCB0aGVyZSwgSSB3aWxsIGV4cGFuZCBteSBzZWFyY2ggdG8gYGluaXQvS2NvbmZpZ2AsIG9yIHdoZXJldmVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBnZW5lcmFsbHkgZGVjbGFyZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGVzZSBrZXkgZmlsZXN5c3RlbSBjb21wb25lbnRzLiAgR290dGEgZm9sbG93IHRoZSBicmVhZGNydW1icyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJVRkZFUl9IRUFEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjI9Y29uZmlnIEZTX1NUQUNLXG4tLVxuZnMvS2NvbmZpZy0yNC1cbmZzL0tjb25maWc6MjU6Y29uZmlnIEJVRkZFUl9IRUFEXG5mcy9LY29uZmlnLTI2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBCVUZGRVJfSEVBRGAgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIGRlZmluaXRpb24gYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGl04oCZcyBhIGZpbGUgdGhhdCB0eXBpY2FsbHkgZGVhbHMgd2l0aCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBqdW1wIHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI1IHRvIHNlZSBpZiBJIGNhbiB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJVRkZFUl9IRUFEYC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGRldGFpbHMgYWJvdXQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gaW4gdGhhdCBhcmVhLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHQjIFN0YWNrYWJsZSBmaWxlc3lzdGVtc1xuICAyMjpcdGNvbmZpZyBGU19TVEFDS1xuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBCVUZGRVJfSEVBRFxuICAyNjpcdFx0Ym9vbFxuICAyNzpcdFxuICAyODpcdCMgb2xkIGJsb2NrZGV2X2RpcmVjdF9JTyBpbXBsZW1lbnRhdGlvbi4gIFVzZSBpb21hcCBmb3IgbmV3IGNvZGUgaW5zdGVhZFxuICAyOTpcdGNvbmZpZyBMRUdBQ1lfRElSRUNUX0lPXG4gIDMwOlx0XHRkZXBlbmRzIG9uIEJVRkZFUl9IRUFEXG4gIDMxOlx0XHRib29sXG4gIDMyOlx0XG4gIDMzOlx0aWYgQkxPQ0tcbiAgMzQ6XHRcbiAgMzU6XHRzb3VyY2UgXCYjMzQ7ZnMvZXh0Mi9LY29uZmlnXCYjMzQ7XG4gIDM2Olx0c291cmNlIFwmIzM0O2ZzL2V4dDQvS2NvbmZpZ1wmIzM0O1xuICAzNzpcdHNvdXJjZSBcJiMzNDtmcy9qYmQyL0tjb25maWdcJiMzNDtcbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgRlNfTUJDQUNIRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2NAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBvZiBgQlVGRkVSX0hFQURgKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBzZWVtcyB0byBiZSBhIHF1aWNrIGludGVybmFsIHF1ZXJ5LCBhIG1lbnRhbCBzZWFyY2gsIGlmIHlvdSB3aWxsOiAmIzM0O0xldCYjMzk7cyBzZWUgd2hvJiMzOTtzIHB1bGxpbmcgaW4gdGhpcyBgQlVGRkVSX0hFQURgIGRlZmluaXRpb24uJiMzNDsgVGhlIGdvYWwgaXMgcHJvYmFibHkgZGlhZ25vc3RpYyBvciBleHBsb3JhdG9yeSBpbiBuYXR1cmUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0cyB1c2FnZSBwYXR0ZXJucyBhcmUgZ29pbmcgdG8gYmUgYSBrZXkgaW5kaWNhdG9yIHRvIG90aGVyIGFyZWFzIG9mIGNvZGUuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBzaWZ0aW5nIHRocm91Z2ggdGhlIGxheWVycyBvZiB0aGUgY29kZWJhc2UsIGNvbnNpZGVyaW5nIHBvc3NpYmxlIHJlYXNvbnMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gQW0gSSB0cm91Ymxlc2hvb3RpbmcgYSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aGVyZSBhIGBCVUZGRVJfSEVBRGAgaXMgaW1wbGljYXRlZD8gUGVyaGFwcyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgYSBuZXcgc3Vic3lzdGVtIHRoYXQgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBhbmQgYEJVRkZFUl9IRUFEYCB1c2FnZSBpcyBhIGNsdWUgdG8gaXRzIGRlc2lnbj8gT3IsIGlzIHRoaXMgcGFydCBvZiBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCB3aGVyZSBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb24gYSBnaXZlbiBzdHJ1Y3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgYSBwcm9wb3NlZCBjaGFuZ2U/CgpJdOKAmXMgYWxtb3N0IGEgbXVzY2xlIG1lbW9yeSByZXNwb25zZSwgYSBzdGFydGluZyBwb2ludCBmb3IgYW55IGRlZXBlciBkaXZlIGludG8ga2VybmVsIGNvZGUuIFRoaXMgY291bGQgcXVpY2tseSBsZWFkIHRvIHVzaW5nIHRvb2xzIGxpa2UgYGdyZXBgLCBgY3Njb3BlYCwgb3IgZXZlbiB0aGUgbW9yZSBhZHZhbmNlZCBkZWJ1Z2dpbmcgdG9vbHMsIHRvIHRyYWNlIHRoZSBvcmlnaW5zIGFuZCBkb3duc3RyZWFtIHVzZXMgb2YgdGhpcyBzdHJ1Y3R1cmUuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlIG9yIGJ1ZyByZWxhdGVkIHRvIHRoaXMgc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3BlY2lmaWMgc3RydWN0dXJlIGNhbiByZXZlYWwgYSBncmVhdCBhbW91bnQgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgQlVGRkVSX0hFQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnPTE1PWNvbmZpZyBCTEtfREVWX01EXG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE3LVx0c2VsZWN0IEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEIGlmIFNZU0ZTXG5kcml2ZXJzL21kL0tjb25maWc6MTg6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xOS1cdCMgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEIHJlcXVpcmVtZW50IHNob3VsZCBiZSByZW1vdmVkXG4tLVxuZnMvYWRmcy9LY29uZmlnPTI9Y29uZmlnIEFERlNfRlNcbi0tXG5mcy9hZGZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL2FkZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9hZGZzL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9hZmZzL0tjb25maWc9Mj1jb25maWcgQUZGU19GU1xuLS1cbmZzL2FmZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvYWZmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2FmZnMvS2NvbmZpZy02LVx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbi0tXG5mcy9iZWZzL0tjb25maWc9Mj1jb25maWcgQkVGU19GU1xuLS1cbmZzL2JlZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvYmVmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2JlZnMvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2Jmcy9LY29uZmlnPTI9Y29uZmlnIEJGU19GU1xuLS1cbmZzL2Jmcy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9iZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9iZnMvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4ZmF0L0tjb25maWc9Mz1jb25maWcgRVhGQVRfRlNcbmZzL2V4ZmF0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O2V4RkFUIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvZXhmYXQvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9leGZhdC9LY29uZmlnLTYtXHRzZWxlY3QgTkxTXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbmZzL2V4dDIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQgKERFUFJFQ0FURUQpXCYjMzQ7XG5mcy9leHQyL0tjb25maWc6NDpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnLTUtXHRzZWxlY3QgRlNfSU9NQVBcbi0tXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuZnMvZXh0NC9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2V4dDQvS2NvbmZpZy01LVx0c2VsZWN0IEpCRDJcbi0tXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xuLS1cbmZzL2YyZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvZjJmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2YyZnMvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2ZhdC9LY29uZmlnPTI9Y29uZmlnIEZBVF9GU1xuZnMvZmF0L0tjb25maWctMy1cdHRyaXN0YXRlXG5mcy9mYXQvS2NvbmZpZzo0Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9mYXQvS2NvbmZpZy01LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXG5mcy9nZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvZ2ZzMi9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2dmczIvS2NvbmZpZy01LVx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuLS1cbmZzL2hmcy9LY29uZmlnPTI9Y29uZmlnIEhGU19GU1xuLS1cbmZzL2hmcy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9oZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9oZnMvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuLS1cbmZzL2hmc3BsdXMvS2NvbmZpZz0yPWNvbmZpZyBIRlNQTFVTX0ZTXG4tLVxuZnMvaGZzcGx1cy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9oZnNwbHVzL0tjb25maWc6NTpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvaGZzcGx1cy9LY29uZmlnLTYtXHRzZWxlY3QgTkxTXG4tLVxuZnMvaHBmcy9LY29uZmlnPTI9Y29uZmlnIEhQRlNfRlNcbi0tXG5mcy9ocGZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL2hwZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9ocGZzL0tjb25maWctNi1cdHNlbGVjdCBGU19JT01BUFxuLS1cbmZzL2lzb2ZzL0tjb25maWc9Mj1jb25maWcgSVNPOTY2MF9GU1xuZnMvaXNvZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVNPIDk2NjAgQ0RST00gZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvaXNvZnMvS2NvbmZpZzo0Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9pc29mcy9LY29uZmlnLTUtXHRoZWxwXG4tLVxuZnMvamZzL0tjb25maWc9Mj1jb25maWcgSkZTX0ZTXG5mcy9qZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SkZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvamZzL0tjb25maWc6NDpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvamZzL0tjb25maWctNS1cdHNlbGVjdCBOTFNcbi0tXG5mcy9taW5peC9LY29uZmlnPTI9Y29uZmlnIE1JTklYX0ZTXG4tLVxuZnMvbWluaXgvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvbWluaXgvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9taW5peC9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvbmlsZnMyL0tjb25maWc9Mj1jb25maWcgTklMRlMyX0ZTXG5mcy9uaWxmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TklMRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL25pbGZzMi9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL25pbGZzMi9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDMzJcbi0tXG5mcy9udGZzMy9LY29uZmlnPTI9Y29uZmlnIE5URlMzX0ZTXG4tLVxuZnMvbnRmczMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiAhTlRGU19GUyB8fCBtXG5mcy9udGZzMy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL250ZnMzL0tjb25maWctNi1cdHNlbGVjdCBOTFNcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXG4tLVxuZnMvb2NmczIvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNcbmZzL29jZnMyL0tjb25maWc6NTpcdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvb2NmczIvS2NvbmZpZy02LVx0c2VsZWN0IEpCRDJcbi0tXG5mcy9vbWZzL0tjb25maWc9Mj1jb25maWcgT01GU19GU1xuLS1cbmZzL29tZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvb21mcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL29tZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQ19JVFVfVFxuLS1cbmZzL3FueDQvS2NvbmZpZz0yPWNvbmZpZyBRTlg0RlNfRlNcbi0tXG5mcy9xbng0L0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL3FueDQvS2NvbmZpZzo1Olx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9xbng0L0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9xbng2L0tjb25maWc9Mj1jb25maWcgUU5YNkZTX0ZTXG4tLVxuZnMvcW54Ni9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMT0NLIFx1MDAyNlx1MDAyNiBDUkMzMlxuZnMvcW54Ni9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3FueDYvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL3JvbWZzL0tjb25maWc9NTc9Y29uZmlnIFJPTUZTX09OX0JMT0NLXG4tLVxuZnMvcm9tZnMvS2NvbmZpZy01OS1cdGRlZmF1bHQgeSBpZiBST01GU19CQUNLRURfQllfQkxPQ0sgfHwgUk9NRlNfQkFDS0VEX0JZX0JPVEhcbmZzL3JvbWZzL0tjb25maWc6NjA6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3JvbWZzL0tjb25maWctNjEtXG4tLVxuZnMvdWRmL0tjb25maWc9Mj1jb25maWcgVURGX0ZTXG5mcy91ZGYvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL3VkZi9LY29uZmlnOjQ6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3VkZi9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDX0lUVV9UXG4tLVxuZnMvdWZzL0tjb25maWc9Mj1jb25maWcgVUZTX0ZTXG4tLVxuZnMvdWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxPQ0tcbmZzL3Vmcy9LY29uZmlnOjU6XHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL3Vmcy9LY29uZmlnLTYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjgxCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCVUZGRVJfSEVBRCBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBCVUZGRVJfSEVBRGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBJdCYjMzk7cyBzZWxlY3RlZCBieSBhIGJ1bmNoIG9mIGZpbGUgc3lzdGVtcywgaW5jbHVkaW5nIGBFWFQ0X0ZTYCwgYEVYVDJfRlNgLCBgRkFUX0ZTYCwgYEdGUzJfRlNgLCBhbmQgZXZlbiB0aGluZ3MgbGlrZSBgQkxLX0RFVl9NRGAuICBUaGF0IG1lYW5zIGBCVUZGRVJfSEVBRGAgaXMgdGhlIGRpcmVjdCBjb25maWcgb3B0aW9uIHRoYXQgd2UgbmVlZCB0byBmb2N1cyBvbi4KCkxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCiogICBgV29ydGhGdXp6aW5nYD8gWXVwLCB0aGF0IGxvb2tzIGdvb2QuCiogICBgRW5hYmxlQ29uZmlnc2A/IE9rYXksIHdlJiMzOTt2ZSBnb3QgYFsmIzM0O0JVRkZFUl9IRUFEJiMzNDtdYCwgYW5kIHdoaWxlIGl0IG1lbnRpb25zIGBbJiMzNDtFWFQ0X0ZTJiMzNDssICYjMzQ7QkxPQ0smIzM0O11gLCAmIzM0O0JVRkZFUl9IRUFEJiMzNDsgaXMgdGhlIGV4YWN0IGNvbmZpZyB0aGF0IGFjdHVhbGx5IGNvbXBpbGVzIGBmcy9idWZmZXIuY2AsIHNvIHRoYXQmIzM5O3MgdGhlIG9uZS4KCk5vdywgZm9yIHRoZSByZWFsbHkgaW1wb3J0YW50IHBhcnQ6IHRoZSBzeW1ib2xzIHdlJiMzOTtyZSB0YXJnZXRpbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBsb29rIHJpZ2h0OgoKKiAgIGBiaF9zdWJtaXRgCiogICBgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvYAoqICAgYHdyaXRlX2RpcnR5X2J1ZmZlcmAKKiAgIGBfX3N5bmNfZGlydHlfYnVmZmVyYAoqICAgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgCiogICBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAKClllcCwgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGhlcmUuIFNvLCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlVGRkVSX0hFQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaF9zdWJtaXQmIzM0OywKICAgICYjMzQ7X19ibG9ja193cml0ZV9mdWxsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3dyaXRlX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtfX3N5bmNfZGlydHlfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVx1MDAzZWJfZm9saW9gIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgIGluIGBfX2JoX3N1Ym1pdCgpYC4gQnVmZmVyIGhlYWRzIGFsbG9jYXRlZCBmb3Igbm9uLXBhZ2VjYWNoZSBkYXRhIChzdWNoIGFzIEpCRDIgc2hhZG93L2Zyb3plbiBtZXRhZGF0YSBidWZmZXJzKSBkbyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvbGlvIGFuZCBwcmV2aW91c2x5IHRyaWdnZXJlZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBkdXJpbmcgc3VibWlzc2lvbi4gVGhpcyBpcyBjb3JlIGZpbGVzeXN0ZW0gYnVmZmVyIGNhY2hlIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ymhfc3VibWl0JiMzNDssCiAgICAmIzM0O19fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyYjMzQ7LAogICAgJiMzNDt3cml0ZV9kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGBiaC1cdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYCBpbiBgX19iaF9zdWJtaXQoKWAuIEJ1ZmZlciBoZWFkcyBhbGxvY2F0ZWQgZm9yIG5vbi1wYWdlY2FjaGUgZGF0YSAoc3VjaCBhcyBKQkQyIHNoYWRvdy9mcm96ZW4gbWV0YWRhdGEgYnVmZmVycykgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmb2xpbyBhbmQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZHVyaW5nIHN1Ym1pc3Npb24uIFRoaXMgaXMgY29yZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBfX2JoX3N1Ym1pdCgpYCBieSBjaGVja2luZyB0aGF0IGBiaC1cdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYC4gV2hlbiBhIGJ1ZmZlciBoZWFkIGlzIGJhY2tlZCBieSB2aXJ0dWFsIG1lbW9yeSAoYGJoLVx1MDAzZWJfZGF0YWApIHJhdGhlciB0aGFuIGEgZm9saW8sIGBiaC1cdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgdW5pbml0aWFsaXplZCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbmZvcm1hdGlvbiBsZWFrcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgc3RhbmRhcmQgY3Jhc2ggYnVncyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnIGJ1aWxkcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkODgyMjJiMzExZjRmZTc2NmYwMTcyY2EyNGI3ZWNlODBlOTRjM2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEyOjQ4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA0MjdkOGE4MTdjZDU2Li5mNDZmYTY0MTMwMzJkIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuYwpAQCAtMTEwNiw3ICYjNDM7MTEwNiw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAKIAliaW8gPSBiaW9fYWxsb2MoYmgtJmd0O2JfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7CiAKLQlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKSAmYW1wOyZhbXA7IG9wX2lzX3dyaXRlKG9wZikpCiYjNDM7CWlmIChiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgb3BfaXNfd3JpdGUob3BmKSkKIAkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGaWxlIFN5c3RlbSBCdWZmZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIGEgY2hhbmdlIGluIGBmcy9idWZmZXIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBfX2JoX3N1Ym1pdGAgZnVuY3Rpb24uIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBkaWZmIGZvY3VzZXMgb24gY29uZGl0aW9uYWwgbG9naWMgcmVsYXRpbmcgdG8gYGZvbGlvX3Rlc3RfZHJvcGJlaGluZGAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB3cml0ZXMgKCBgb3BfaXNfd3JpdGUob3BmKWApLiBUaGlzIHNlY3Rpb24gb2YgY29kZSBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkYXRhIGJ1ZmZlcnMgYW5kIEkvTyBvcGVyYXRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgY2FjaGluZyBzdHJhdGVnaWVzIGxpa2UgJiMzNDtkcm9wLWJlaGluZCYjMzQ7LgoKRXNzZW50aWFsbHksIHdoYXQmIzM5O3MgY2hhbmdlZCBpcyBhbiBhZGRlZCBjaGVjayBmb3IgYGJoLSZndDtiX2ZvbGlvYCBiZWZvcmUgd2UgYWNjZXNzIGl0IHdpdGggYGZvbGlvX3Rlc3RfZHJvcGJlaGluZGAuIFRoZSBvcmlnaW5hbCBjb2RlIGxvb2tlZCBsaWtlIGl0IHdhcyBkaXJlY3RseSBkZXJlZmVyZW5jaW5nIGBiaC0mZ3Q7Yl9mb2xpb2Agd2l0aG91dCBudWxsIGNoZWNraW5nIGl0IGZpcnN0LiBUaGlzIG1vZGlmaWNhdGlvbiBpcyBsaWtlbHkgYSBudWxsLXBvaW50ZXIgc2FmZXR5IGNoZWNrLiBXZSBvbmx5IHdhbnQgdG8gc2V0IHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcgaWYgdGhlIGJ1ZmZlciBoZWFkIGFjdHVhbGx5IGhhcyBhbiBhc3NvY2lhdGVkIGZvbGlvLgoKVGhpcyB0eXBlIG9mIGNoYW5nZSB1c3VhbGx5IGluZGljYXRlcyB0aGF0IHRoZXJlIGNvdWxkIGJlIGEgc3VidGxlIGJ1ZyBvciBlZGdlIGNhc2Ugd2hlcmUgYGJoLSZndDtiX2ZvbGlvYCBtaWdodCBiZSBgTlVMTGAgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBBIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoaXMgY3JpdGljYWwgcGF0aCBjb3VsZCBsZWFkIHRvIGEgY3Jhc2ggb3Igb3RoZXIgdW5wcmVkaWN0YWJsZSBiZWhhdmlvciBkdXJpbmcgSS9PIG9wZXJhdGlvbnMsIHdoaWNoIGlzIHdoeSB0aGlzIGNoZWNrIGlzIGFkZGVkLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHNjZW5hcmlvIHRoYXQgbmVjZXNzaXRhdGVkIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBiaC0mZ3Q7Yl9mb2xpb2AgKmNvdWxkKiBiZSBgTlVMTGAgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGJ1ZmZlciBtYW5hZ2VtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgYmlvX3NldF9mbGFnYCB3b3JrcyBhbmQgaWYgaXQgaGFzIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggYE5VTExgIG9yIG1pc3NpbmcgYGJfZm9saW9gLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZHJvcGJlaGluZGAgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmaWxlc3lzdGVtIGJlaGF2aW9yLiBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZXMgYW5kIGFueSByZWxhdGVkIGJ1ZyByZXBvcnRzIHRvIGdldCB0aGUgZnVsbCBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5NTpcdFx0QlVHX09OKCFidWZmZXJfbG9ja2VkKGJoKSk7XG4xMDk2Olx0XHRCVUdfT04oIWJ1ZmZlcl9tYXBwZWQoYmgpKTtcbjEwOTc6XHRcdEJVR19PTihidWZmZXJfZGVsYXkoYmgpKTtcbjEwOTg6XHRcdEJVR19PTihidWZmZXJfdW53cml0dGVuKGJoKSk7XG4xMDk5Olx0XG4xMTAwOlx0XHRzZXRfYnVmZmVyX3JlcShiaCk7XG4xMTAxOlx0XG4xMTAyOlx0XHRpZiAoYnVmZmVyX21ldGEoYmgpKVxuMTEwMzpcdFx0XHRvcGYgfD0gUkVRX01FVEE7XG4xMTA0Olx0XHRpZiAoYnVmZmVyX3ByaW8oYmgpKVxuMTEwNTpcdFx0XHRvcGYgfD0gUkVRX1BSSU87XG4xMTA2Olx0XG4xMTA3Olx0XHRiaW8gPSBiaW9fYWxsb2MoYmgtXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcbjExMDg6XHRcbjExMDk6XHRcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbykgXHUwMDI2XHUwMDI2XG4xMTEwOlx0XHQgICAgb3BfaXNfd3JpdGUob3BmKSlcbjExMTE6XHRcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuMTExMjpcdFxuMTExMzpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pKVxuMTExNDpcdFx0XHRidWZmZXJfc2V0X2NyeXB0b19jdHgoYmlvLCBiaCwgR0ZQX05PSU8pO1xuMTExNTpcdFxuMTExNjpcdFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gYmgtXHUwMDNlYl9ibG9ja25yICogKGJoLVx1MDAzZWJfc2l6ZSBcdTAwM2VcdTAwM2UgOSk7XG4xMTE3Olx0XHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdyaXRlX2hpbnQ7XG4xMTE4Olx0XG4xMTE5Olx0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbjExMjA6XHRcdFx0YmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBiaC1cdTAwM2ViX2ZvbGlvLCBiaC1cdTAwM2ViX3NpemUsXG4xMTIxOlx0XHRcdFx0XHQgICAgIGJoX29mZnNldChiaCkpO1xuMTEyMjpcdFx0ZWxzZVxuMTEyMzpcdFx0XHRiaW9fYWRkX3ZpcnRfbm9mYWlsKGJpbywgYmgtXHUwMDNlYl9kYXRhLCBiaC1cdTAwM2ViX3NpemUpO1xuMTEyNDpcdFxuMTEyNTpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGVuZF9iaW87XG4xMTI2Olx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGJoO1xuMTEyNzpcdFxuMTEyODpcdFx0LyogVGFrZSBjYXJlIG9mIGJoJiMzOTtzIHRoYXQgc3RyYWRkbGUgdGhlIGVuZCBvZiB0aGUgZGV2aWNlICovXG4xMTI5Olx0XHRndWFyZF9iaW9fZW9kKGJpbyk7XG4xMTMwOlx0XG4xMTMxOlx0XHRpZiAod2JjKSB7XG4xMTMyOlx0XHRcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XG4xMTMzOlx0XHRcdGlmIChiaC1cdTAwM2ViX2ZvbGlvKVxuMTEzNDpcdFx0XHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDMKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIE5VTEwgY2hlY2sgaW4gYF9fYmhfc3VibWl0KClgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGFkZGluZyBgYmgtJmd0O2JfZm9saW8gJmFtcDsmYW1wO2AgYmVmb3JlIHRoZSBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLSZndDtiX2ZvbGlvKWAgY2FsbC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBJIGtub3cgd2h5OiB0aGUgY29kZSByaWdodCBiZWxvdyBjaGVja3MgaWYgYGJoLSZndDtiX2ZvbGlvYCBleGlzdHMsIGFuZCBpZiBpdCBkb2VzbiYjMzk7dCwgaXQgdXNlcyBgYmgtJmd0O2JfZGF0YWAgZGlyZWN0bHkuIFNvLCBgYmgtJmd0O2JfZm9saW9gICpjYW4qIGJlIE5VTEwsIGVzcGVjaWFsbHkgd2hlbiB0aGUgYmxvY2sgaGVhZGVyIGlzIGJhY2tlZCBieSB2aXJ0dWFsIG1lbW9yeS4gVHJ5aW5nIHRvIHVzZSBpdCB3aGVuIGl0JiMzOTtzIE5VTEwgaXMgYSBjbGFzc2ljIHByb2JsZW0uCgpNeSBleHBlcnQgaW5zdGluY3QgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGNhc2UgZm9yIEtBU0FOLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGlyZWN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGlzIG1vcmUgcmlnb3JvdXNseSB0aG91Z2guIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3IgaXMgaXQgb3BlbmluZyB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgcGFkZGluZyBpc3N1ZXMuIFNvIGdpdmVuIHRoYXQgS0FTQU4gd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBhbmQgdGhlIHF1ZXN0aW9ucyBmb3IgdGhpcyBjaGVjaywgYW5kIHRoZSBjb25kaXRpb25zIG9uIEtNU0FOLiAmIzM0O1NldCBOZWVkc0tNU0FOPWZhbHNlIElGOiBwcmltYXJpbHkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykmIzM0Oy4gWXVwLCB0aGlzIGhpdHMgdGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB0YXJnZXQsIGFuZCBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkLiBUaGUgcGF0Y2ggaXNuJiMzOTt0IHRvdWNoaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKUGVyZmVjdC4gVGhlIHBhdGNoIHNlZW1zIHNvbGlkLCBhbmQgdGhlIGFwcHJvYWNoIGlzIGNvcnJlY3QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVx1MDAzZWJfZm9saW9gIGlzIG5vbi1OVUxMIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgLiBXaGVuIGEgYnVmZmVyIGhlYWQgaXMgYmFja2VkIGJ5IHZpcnR1YWwgbWVtb3J5IChgYmgtXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVx1MDAzZWJfZm9saW9gIGlzIE5VTEwuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19iaF9zdWJtaXQoKWAgYnkgY2hlY2tpbmcgdGhhdCBgYmgtXHUwMDNlYl9mb2xpb2AgaXMgbm9uLU5VTEwgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cdTAwM2ViX2RhdGFgKSByYXRoZXIgdGhhbiBhIGZvbGlvLCBgYmgtXHUwMDNlYl9mb2xpb2AgaXMgTlVMTC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgaW5mb3JtYXRpb24gbGVha3MuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHN0YW5kYXJkIGNyYXNoIGJ1Z3MgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0ODoxMy45NzA1MTY1NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU5NjIzNDQ1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlVGRkVSX0hFQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaF9zdWJtaXRcIixcbiAgICBcIl9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb1wiLFxuICAgIFwid3JpdGVfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVxcdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDg6MTMuOTcwNTIyMjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxNzM5MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Q4ODIyMmIzMTFmNGZlNzY2ZjAxNzJjYTI0YjdlY2U4MGU5NGMzZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDEyOjQ4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcXG5pbmRleCA0MjdkOGE4MTdjZDU2Li5mNDZmYTY0MTMwMzJkIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtMTEwNiw3ICsxMTA2LDggQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFxuIFxcdGJpbyA9IGJpb19hbGxvYyhiaC1cXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXFxuK1xcdGlmIChiaC1cXHUwMDNlYl9mb2xpbyBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvcF9pc193cml0ZShvcGYpKVxcbiBcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjE1LjQ2MzA1MjgyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU3NzMyMTY2NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJVRkZFUl9IRUFEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmhfc3VibWl0XCIsXG4gICAgXCJfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW9cIixcbiAgICBcIndyaXRlX2RpcnR5X2J1ZmZlclwiLFxuICAgIFwiX19zeW5jX2RpcnR5X2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgYmgtXFx1MDAzZWJfZm9saW9gIGJlZm9yZSBjYWxsaW5nIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pYCBpbiBgX19iaF9zdWJtaXQoKWAuIEJ1ZmZlciBoZWFkcyBhbGxvY2F0ZWQgZm9yIG5vbi1wYWdlY2FjaGUgZGF0YSAoc3VjaCBhcyBKQkQyIHNoYWRvdy9mcm96ZW4gbWV0YWRhdGEgYnVmZmVycykgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmb2xpbyBhbmQgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZHVyaW5nIHN1Ym1pc3Npb24uIFRoaXMgaXMgY29yZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDg4MjIyYjMxMWY0ZmU3NjZmMDE3MmNhMjRiN2VjZTgwZTk0YzNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMjo0ODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDQyN2Q4YTgxN2NkNTYuLmY0NmZhNjQxMzAzMmQgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuKysrIGIvZnMvYnVmZmVyLmNcbkBAIC0xMTA2LDcgKzExMDYsOCBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuK1x0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICBvcF9pc193cml0ZShvcGYpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0ODoxNS40NjMwNTQ0MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTQ1NDEzOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnVmZmVyIEhlYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgaW4gYGZzL2J1ZmZlci5jYC4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBfX2JoX3N1Ym1pdGAgZnVuY3Rpb24uICBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgY29uZGl0aW9uYWwgY2hlY2sgcmVsYXRlZCB0byBgZm9saW9fdGVzdF9kcm9wYmVoaW5kYCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBhIGJpdCBzaW1wbGVyLCBub3cgaXQncyBiZWVuIHVwZGF0ZWQgdG8gaW5jbHVkZSBhIG51bGwgY2hlY2sgZm9yIHRoZSBgYmgtXHUwMDNlYl9mb2xpb2AgZmllbGQuIEludGVyZXN0aW5nLiBUaGV5J3ZlIGFkZGVkIGBiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNmAgdG8gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gIEknbGwgd2FudCB0byBxdWlja2x5IHVzZSBteSBgcmVhZC1maWxlYCB0b29sIGFuZCBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAxMTA2IGluIHRoYXQgZmlsZTsgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNoYW5nZSB0byBncmFzcCB0aGUgaW50ZW50LiAgSSdtIGd1ZXNzaW5nIHRoaXMgaXMgc29tZSBzb3J0IG9mIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgYmgtXHUwMDNlYl9mb2xpb2AgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbWF5YmUgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjI1LjQwODQ3MTA4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDkwOlxcdFxcdFxcdGVudW0gcndfaGludCB3cml0ZV9oaW50LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4xMDkxOlxcdFxcdFxcdGJpb19lbmRfaW9fdCBlbmRfYmlvKVxcbjEwOTI6XFx0e1xcbjEwOTM6XFx0XFx0c3RydWN0IGJpbyAqYmlvO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcXG4xMDk2OlxcdFxcdEJVR19PTighYnVmZmVyX21hcHBlZChiaCkpO1xcbjEwOTc6XFx0XFx0QlVHX09OKGJ1ZmZlcl9kZWxheShiaCkpO1xcbjEwOTg6XFx0XFx0QlVHX09OKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRpZiAoYnVmZmVyX21ldGEoYmgpKVxcbjExMDM6XFx0XFx0XFx0b3BmIHw9IFJFUV9NRVRBO1xcbjExMDQ6XFx0XFx0aWYgKGJ1ZmZlcl9wcmlvKGJoKSlcXG4xMTA1OlxcdFxcdFxcdG9wZiB8PSBSRVFfUFJJTztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0YmlvID0gYmlvX2FsbG9jKGJoLVxcdTAwM2ViX2JkZXYsIDEsIG9wZiwgR0ZQX05PSU8pO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8gXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjExMTA6XFx0XFx0ICAgIG9wX2lzX3dyaXRlKG9wZikpXFxuMTExMTpcXHRcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcXG4xMTE0OlxcdFxcdFxcdGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7XFxuMTExNTpcXHRcXG4xMTE2OlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBiaC1cXHUwMDNlYl9ibG9ja25yICogKGJoLVxcdTAwM2ViX3NpemUgXFx1MDAzZVxcdTAwM2UgOSk7XFxuMTExNzpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cml0ZV9oaW50O1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEyMDpcXHRcXHRcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVxcdTAwM2ViX2ZvbGlvLCBiaC1cXHUwMDNlYl9zaXplLFxcbjExMjE6XFx0XFx0XFx0XFx0XFx0ICAgICBiaF9vZmZzZXQoYmgpKTtcXG4xMTIyOlxcdFxcdGVsc2VcXG4xMTIzOlxcdFxcdFxcdGJpb19hZGRfdmlydF9ub2ZhaWwoYmlvLCBiaC1cXHUwMDNlYl9kYXRhLCBiaC1cXHUwMDNlYl9zaXplKTtcXG4xMTI0OlxcdFxcbjExMjU6XFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xcbjExMjY6XFx0XFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gYmg7XFxuMTEyNzpcXHRcXG4xMTI4OlxcdFxcdC8qIFRha2UgY2FyZSBvZiBiaCdzIHRoYXQgc3RyYWRkbGUgdGhlIGVuZCBvZiB0aGUgZGV2aWNlICovXFxuMTEyOTpcXHRcXHRndWFyZF9iaW9fZW9kKGJpbyk7XFxuMTEzMDpcXHRcXG4xMTMxOlxcdFxcdGlmICh3YmMpIHtcXG4xMTMyOlxcdFxcdFxcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XFxuMTEzMzpcXHRcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEzNDpcXHRcXHRcXHRcXHR3YmNfYWNjb3VudF9jZ3JvdXBfb3duZXIod2JjLCBiaC1cXHUwMDNlYl9mb2xpbywgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuMTEzNTpcXHRcXHR9XFxuMTEzNjpcXHRcXG4xMTM3OlxcdFxcdGJsa19jcnlwdG9fc3VibWl0X2JpbyhiaW8pO1xcbjExMzg6XFx0fVxcbjExMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjI1LjQwODYwOTEzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NDg4Mjk0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJ1ZmZlciBIZWFkIFN1Ym1pc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBfX2JoX3N1Ym1pdGAsIGFuZCBpdCdzIGNsZWFyIGl0IGhhbmRsZXMgYnVmZmVyIGhlYWQgc3VibWlzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTcGVjaWZpY2FsbHksIGlmIGBiaC1cdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLCB3aGljaCBJIGtub3cgaXQgY2FuIGJlIHdpdGggdmlydHVhbCBidWZmZXJzIG9yIHNpbWlsYXIgY29uZmlndXJhdGlvbnMgKEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGBiaW9fYWRkX3ZpcnRfbm9mYWlsYCBwYXRoIG9uIGxpbmUgMTEyMyksIHRoZW4gZGVyZWZlcmVuY2luZyBgYmgtXHUwMDNlYl9mb2xpb2Agd2l0aGluIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgIHdvdWxkIGxlYWQgdG8gYSBjcmFzaC5cblxuQWgsIGJ1dCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoYXQgYGJoLVx1MDAzZWJfZm9saW9gIGNhbiBiZSBOVUxMIGV2ZW4gKndpdGhvdXQqIGJlaW5nIGEgdmlydHVhbCBidWZmZXIhIFRoaXMgaGFwcGVucyB3aGVuIGEgYnVmZmVyIGhlYWQgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19idWZmZXJfaGVhZCgpYCAqd2l0aG91dCogYSBwYWdlIG9yIGZvbGlvIGF0dGFjaGVkLiBUaGluayBhYm91dCBzY2VuYXJpb3MgbGlrZSBgY3JlYXRlX2VtcHR5X2J1ZmZlcnNgIG9yIGRpcmVjdCBjYWxscyB0byBgYWxsb2NfYnVmZmVyX2hlYWQoKWAgZm9yIG1lbW9yeSBidWZmZXJzLCBtZXRhZGF0YSBoYW5kbGluZywgb3IgZXZlbiBibG9jayBkZXZpY2UgcmVhZC93cml0ZSBvcGVyYXRpb25zLiBUaGF0J3MgdGhlIGtleS5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGBfX2JoX3N1Ym1pdGAgYW5kIHdoYXQgZnVuY3Rpb25zIGFyZSB3cmFwcGluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgc2VlIGhvdyB0aGVzZSBOVUxMIGBiX2ZvbGlvYCBzaXR1YXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIChvciAqbm90KiBoYW5kbGVkLCB3aGljaCBpcyBsaWtlbHkgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0pLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHRzIHRoZXkgYXJlIGluIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBob3cgdG8gc29sdmUgdGhpcyBwb3RlbnRpYWwgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDg6MzEuODU3NDQxOTEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQ4OTQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19iaF9zdWJtaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnVmZmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnVmZmVyLmM9MTA3MD1zdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTA4OC1cXG5mcy9idWZmZXIuYzoxMDg5OnN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXFxuZnMvYnVmZmVyLmMtMTA5MC1cXHRcXHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuLS1cXG5mcy9idWZmZXIuYz0xMTQ5PXZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsIGJpb19lbmRfaW9fdCBlbmRfaW8pXFxuZnMvYnVmZmVyLmMtMTE1MC17XFxuZnMvYnVmZmVyLmM6MTE1MTpcXHRfX2JoX3N1Ym1pdChiaCwgb3BmLCBXUklURV9MSUZFX05PVF9TRVQsIE5VTEwsIGVuZF9pbyk7XFxuZnMvYnVmZmVyLmMtMTE1Mi19XFxuLS1cXG5mcy9idWZmZXIuYz0xNzI2PWludCBfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MjEtXFx0XFx0aWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHtcXG5mcy9idWZmZXIuYzoxODIyOlxcdFxcdFxcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9idWZmZXIuYy0xODIzLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4NzYtXFx0XFx0XFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcXG5mcy9idWZmZXIuYzoxODc3OlxcdFxcdFxcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9idWZmZXIuYy0xODc4LVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDg6MzMuMjcyMzQxMDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU5NjcwODY0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWZmZXIgSGVhZCBTdWJtaXNzaW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgYmhfc3VibWl0YCBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBtYWluIGZ1bmN0aW9uIGluIGBmcy9idWZmZXIuY2AgdGhhdCBraWNrcyBvZmYgdGhlIGJ1ZmZlciBoZWFkIHN1Ym1pc3Npb24gcHJvY2Vzcy4gSXQncyBub3QgZGVjbGFyZWQgc3RhdGljLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoYXQgcGFydGljdWxhciBmaWxlLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKmNhbGwgZ3JhcGgqKi4gSSBuZWVkIHRvIGRldGVybWluZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUga2VybmVsIGNvZGUgd2hlcmUgZWl0aGVyIGBiaF9zdWJtaXRgIGl0c2VsZiBvciBpdHMgYWxpYXMgYHN1Ym1pdF9iaGAgKGxldCdzIGFzc3VtZSB0aGV5J3JlIGVxdWl2YWxlbnQgZm9yIG5vdykgYXJlIGludm9rZWQuIFRoYXQgaW5mb3JtYXRpb24gd2lsbCBwYWludCBhIHBpY3R1cmUgb2YgKmhvdyogYnVmZmVyIGhlYWRzIGFyZSBzdWJtaXR0ZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGJsb2NrIEkvTyBzdWJzeXN0ZW1zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBhbGxvdyBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmbG93IGFuZCBkYXRhIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0ODo0OS4yMzk0Mjk0NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjAzMzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaF9zdWJtaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTE1Nzg9ZnVuY3Rpb24tdHJhY2UsIHdlIGdldCBhIG11Y2ggbGFyZ2VyIG91dHB1dDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTYzMC0gICA9XFx1MDAzZSBzdWJtaXRfYmlvXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE2MzE6ICAgPVxcdTAwM2UgYmhfc3VibWl0XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE2MzItICAgPVxcdTAwM2UgX19leHQzX2dldF9pbm9kZV9sb2NcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0xODcxPXRyYWNlcnMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTkxNS0gICA9XFx1MDAzZSBzdWJtaXRfYmlvXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE5MTY6ICAgPVxcdTAwM2UgYmhfc3VibWl0XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE5MTctICAgPVxcdTAwM2UgZXh0M19icmVhZFxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MTc9c3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MjQtXFx0XFx0c2V0X2J1ZmZlcl9tYXBwZWQoYmgpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NTI1OlxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMsIGVuZF9iaXRtYXBfd3JpdGUpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNTI2LVxcdFxcdGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlO1xcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01NTg9c3RhdGljIGludCByZWFkX2ZpbGVfcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAwLVxcdFxcdFxcdHNldF9idWZmZXJfbWFwcGVkKGJoKTtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjYwMTpcXHRcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBlbmRfYml0bWFwX3dyaXRlKTtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYwMi1cXHRcXHR9XFxuLS1cXG5mcy9idWZmZXIuYz0xMjM9c3RhdGljIHZvaWQgYnVmZmVyX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKm1zZylcXG4tLVxcbmZzL2J1ZmZlci5jLTEzNi0gKiBDYWxsIHRoaXMgaW4geW91ciBiaW9fZW5kX2lvIGhhbmRsZXIgdG8gcmV0cmlldmUgdGhlIGJ1ZmZlcl9oZWFkXFxuZnMvYnVmZmVyLmM6MTM3OiAqIHN1Ym1pdHRlZCBpbiBiaF9zdWJtaXQoKS4gIElmIHlvdSBkaWQgbm90IGNhbGwgYmhfc3VibWl0KCksIGRvIG5vdFxcbmZzL2J1ZmZlci5jLTEzOC0gKiBjYWxsIHRoaXMgZnVuY3Rpb247IGl0IHdpbGwgcmV0dXJuIGdhcmJhZ2UuXFxuLS1cXG5mcy9idWZmZXIuYz0xNTc9RVhQT1JUX1NZTUJPTChiaW9fZW5kaW9fYmgpO1xcbi0tXFxuZnMvYnVmZmVyLmMtMTYzLSAqXFxuZnMvYnVmZmVyLmM6MTY0OiAqIElmIGEgYnVmZmVyIGlzIHJlYWQgdGhyb3VnaCBhIG1lY2hhbmlzbSB0aGF0IGlzbid0IGJoX3N1Ym1pdCgpLCB5b3VcXG5mcy9idWZmZXIuYy0xNjUtICogY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmaW5pc2ggdGhlIHJlYWQuXFxuLS1cXG5mcy9idWZmZXIuYz0xNzc9RVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3JlYWRfc3luYyk7XFxuLS1cXG5mcy9idWZmZXIuYy0xODItICpcXG5mcy9idWZmZXIuYzoxODM6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSdyZSByZWFkaW5nIGludG8gdGhlIGJ1ZmZlcixcXG5mcy9idWZmZXIuYy0xODQtICogdW5sZXNzIHlvdSBuZWVkIHlvdXIgb3duIHNwZWNpYWwgSS9PIGVuZCBoYW5kbGVyLlxcbi0tXFxuZnMvYnVmZmVyLmM9MTkyPUVYUE9SVF9TWU1CT0woYmhfZW5kX3JlYWQpO1xcbi0tXFxuZnMvYnVmZmVyLmMtMTk3LSAqXFxuZnMvYnVmZmVyLmM6MTk4OiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UncmUgd3JpdGluZyBmcm9tIHRoZSBidWZmZXIsXFxuZnMvYnVmZmVyLmMtMTk5LSAqIHVubGVzcyB5b3UgbmVlZCB5b3VyIG93biBzcGVjaWFsIEkvTyBlbmQgaGFuZGxlci5cXG4tLVxcbmZzL2J1ZmZlci5jPTM2Mj1zdGF0aWMgdm9pZCBiaF9lbmRfYXN5bmNfcmVhZChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9idWZmZXIuYy0zOTItICpcXG5mcy9idWZmZXIuYzozOTM6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSdyZSBkb2luZyB0aGUgZXF1aXZhbGVudCBvZlxcbmZzL2J1ZmZlci5jLTM5NC0gKiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkuICBUaGF0IGlzLCB0aGUgZm9saW8gaXMgdW5sb2NrZWQsIGFuZCB3aWxsXFxuLS1cXG5mcy9idWZmZXIuYz0xMDcwPXN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9idWZmZXIuYy0xMDg4LVxcbmZzL2J1ZmZlci5jOjEwODk6c3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG5mcy9idWZmZXIuYy0xMDkwLVxcdFxcdGVudW0gcndfaGludCB3cml0ZV9oaW50LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4tLVxcbmZzL2J1ZmZlci5jLTExNDAtLyoqXFxuZnMvYnVmZmVyLmM6MTE0MTogKiBiaF9zdWJtaXQgLSBTdGFydCBJL08gYWdhaW5zdCBhIGJ1ZmZlciBoZWFkXFxuZnMvYnVmZmVyLmMtMTE0Mi0gKiBAYmg6IFRoZSBidWZmZXIgaGVhZCB0byBwZXJmb3JtIEkvTyBvbi5cXG4tLVxcbmZzL2J1ZmZlci5jLTExNDgtICovXFxuZnMvYnVmZmVyLmM6MTE0OTp2b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLCBiaW9fZW5kX2lvX3QgZW5kX2lvKVxcbmZzL2J1ZmZlci5jLTExNTAte1xcbmZzL2J1ZmZlci5jOjExNTE6XFx0X19iaF9zdWJtaXQoYmgsIG9wZiwgV1JJVEVfTElGRV9OT1RfU0VULCBOVUxMLCBlbmRfaW8pO1xcbmZzL2J1ZmZlci5jLTExNTItfVxcbmZzL2J1ZmZlci5jOjExNTM6RVhQT1JUX1NZTUJPTChiaF9zdWJtaXQpO1xcbmZzL2J1ZmZlci5jLTExNTQtXFxuZnMvYnVmZmVyLmM9MTE1NT1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2JyZWFkX3Nsb3coc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2J1ZmZlci5jLTExNjEtXFx0fSBlbHNlIHtcXG5mcy9idWZmZXIuYzoxMTYyOlxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcXG5mcy9idWZmZXIuYy0xMTYzLVxcdFxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTE2ODI9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fY3JlYXRlX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE3MTgtICogaGFzIGEgbG9ja2VkIGJ1ZmZlci4gICBUaGlzIG9ubHkgY2FuIGhhcHBlbiBpZiBzb21lb25lIGhhcyB3cml0dGVuXFxuZnMvYnVmZmVyLmM6MTcxOTogKiB0aGUgYnVmZmVyIGRpcmVjdGx5LCB3aXRoIGJoX3N1Ym1pdCgpLiAgQXQgdGhlIGFkZHJlc3Nfc3BhY2UgbGV2ZWxcXG5mcy9idWZmZXIuYy0xNzIwLSAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXFxuLS1cXG5mcy9idWZmZXIuYz0xNzI2PWludCBfX2Jsb2NrX3dyaXRlX2Z1bGxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MjEtXFx0XFx0aWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHtcXG5mcy9idWZmZXIuYzoxODIyOlxcdFxcdFxcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9idWZmZXIuYy0xODIzLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQsIHdiYyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MzYtXFx0XFx0ICogY2xlYW4uICBTb21lb25lIHdyb3RlIHRoZW0gYmFjayBieSBoYW5kIHdpdGhcXG5mcy9idWZmZXIuYzoxODM3OlxcdFxcdCAqIHdyaXRlX2RpcnR5X2J1ZmZlci9iaF9zdWJtaXQuICBBIHJhcmUgY2FzZS5cXG5mcy9idWZmZXIuYy0xODM4LVxcdFxcdCAqL1xcbi0tXFxuZnMvYnVmZmVyLmMtMTg3Ni1cXHRcXHRcXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xcbmZzL2J1ZmZlci5jOjE4Nzc6XFx0XFx0XFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxcbmZzL2J1ZmZlci5jLTE4NzgtXFx0XFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmM9MjI4Mj1pbnQgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdldF9ibG9ja190ICpnZXRfYmxvY2spXFxuLS1cXG5mcy9idWZmZXIuYy0yMzYzLVxcdFxcdGlmIChwcmV2KVxcbmZzL2J1ZmZlci5jOjIzNjQ6XFx0XFx0XFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjM2NS1cXHRcXHRwcmV2ID0gYmg7XFxuLS1cXG5mcy9idWZmZXIuYy0yMzc3LVxcdGlmIChwcmV2KVxcbmZzL2J1ZmZlci5jOjIzNzg6XFx0XFx0Ymhfc3VibWl0KHByZXYsIFJFUV9PUF9SRUFELCBiaF9lbmRfYXN5bmNfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjM3OS1cXHRlbHNlXFxuLS1cXG5mcy9idWZmZXIuYz0yNjg2PXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcXG4tLVxcbmZzL2J1ZmZlci5jLTI2OTItXFx0fVxcbmZzL2J1ZmZlci5jOjI2OTM6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcXG5mcy9idWZmZXIuYy0yNjk0LX1cXG4tLVxcbmZzL2J1ZmZlci5jPTI3MDI9aW50IF9fc3luY19kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxcbi0tXFxuZnMvYnVmZmVyLmMtMjcxNS1cXG5mcy9idWZmZXIuYzoyNzE2OlxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgb3BfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XFxuZnMvYnVmZmVyLmMtMjcxNy1cXHRcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuLS1cXG5mcy9idWZmZXIuYz0yOTQyPWludCBfX2JoX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXFxuLS1cXG5mcy9idWZmZXIuYy0yOTQ3LVxcbmZzL2J1ZmZlci5jOjI5NDg6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCB8IG9wX2ZsYWdzLCBiaF9lbmRfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjk0OS1cXHRpZiAod2FpdCkge1xcbi0tXFxuZnMvYnVmZmVyLmM9Mjk2OD12b2lkIF9fYmhfcmVhZF9iYXRjaChpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sXFxuLS1cXG5mcy9idWZmZXIuYy0yOTg5LVxcbmZzL2J1ZmZlci5jOjI5OTA6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCB8IG9wX2ZsYWdzLCBiaF9lbmRfcmVhZCk7XFxuZnMvYnVmZmVyLmMtMjk5MS1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NjY0PXN0YXRpYyB2b2lkIGV4dDRfZmNfc3VibWl0X2JoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgaXNfdGFpbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02NzQtXFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjY3NTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02NzYtXFx0RVhUNF9TQihzYiktXFx1MDAzZXNfZmNfYmggPSBOVUxMO1xcbi0tXFxuZnMvZXh0NC9tbXAuYz00Mj1zdGF0aWMgaW50IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbW1wLmMtNDgtXFx0bG9ja19idWZmZXIoYmgpO1xcbmZzL2V4dDQvbW1wLmM6NDk6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9NRVRBIHwgUkVRX1BSSU8sXFxuZnMvZXh0NC9tbXAuYy01MC1cXHRcXHRcXHRiaF9lbmRfd3JpdGUpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE4MC1cXHRcXHRlbmRfaW8gPSBiaF9lbmRfcmVhZDtcXG5mcy9leHQ0L3N1cGVyLmM6MTgxOlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgZW5kX2lvKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTgyLX1cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MzI1PXN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MzU2LVxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShzYmgpO1xcbmZzL2V4dDQvc3VwZXIuYzo2MzU3OlxcdGJoX3N1Ym1pdChzYmgsIFJFUV9PUF9XUklURSB8IFJFUV9TWU5DIHxcXG5mcy9leHQ0L3N1cGVyLmMtNjM1OC1cXHRcXHQgICh0ZXN0X29wdChzYiwgQkFSUklFUikgPyBSRVFfRlVBIDogMCksIGJoX2VuZF93cml0ZSk7XFxuLS1cXG5mcy9nZnMyL2JtYXAuYz0yOTc9c3RhdGljIHZvaWQgZ2ZzMl9tZXRhcGF0aF9yYShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIF9fYmU2NCAqc3RhcnQsIF9fYmU2NCAqZW5kKVxcbi0tXFxuZnMvZ2ZzMi9ibWFwLmMtMzA5LVxcdFxcdFxcdGlmICghYnVmZmVyX3VwdG9kYXRlKHJhYmgpKSB7XFxuZnMvZ2ZzMi9ibWFwLmM6MzEwOlxcdFxcdFxcdFxcdGJoX3N1Ym1pdChyYWJoLFxcbmZzL2dmczIvYm1hcC5jLTMxMS1cXHRcXHRcXHRcXHRcXHRSRVFfT1BfUkVBRCB8IFJFUV9SQUhFQUQgfCBSRVFfTUVUQSB8XFxuLS1cXG5mcy9nZnMyL2Rpci5jPTE0OTI9c3RhdGljIHZvaWQgZ2ZzMl9kaXJfcmVhZGFoZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGhzaXplLCB1MzIgaW5kZXgsXFxuLS1cXG5mcy9nZnMyL2Rpci5jLTE1MjAtXFx0XFx0XFx0fSBlbHNlIHtcXG5mcy9nZnMyL2Rpci5jOjE1MjE6XFx0XFx0XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCB8IFJFUV9SQUhFQUQgfFxcbmZzL2dmczIvZGlyLmMtMTUyMi1cXHRcXHRcXHRcXHRcXHRcXHRSRVFfTUVUQSB8IFJFUV9QUklPLFxcbi0tXFxuZnMvZ2ZzMi9tZXRhX2lvLmM9MzM9c3RhdGljIHZvaWQgZ2ZzMl9hc3BhY2Vfd3JpdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jLTc3LVxcdFxcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XFxuZnMvZ2ZzMi9tZXRhX2lvLmM6Nzg6XFx0XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcXG5mcy9nZnMyL21ldGFfaW8uYy03OS1cXHRcXHRcXHRcXHRcXHRiaF9lbmRfYXN5bmNfd3JpdGUpO1xcbi0tXFxuZnMvZ2ZzMi9tZXRhX2lvLmM9MjAyPXN0YXRpYyB2b2lkIGdmczJfbWV0YV9yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jLTIyNC0gKiBTdWJtaXQgc2V2ZXJhbCBjb25zZWN1dGl2ZSBidWZmZXIgaGVhZCBJL08gcmVxdWVzdHMgYXMgYSBzaW5nbGUgYmlvIEkvT1xcbmZzL2dmczIvbWV0YV9pby5jOjIyNTogKiByZXF1ZXN0LiAgKFNlZSBiaF9zdWJtaXQuKVxcbmZzL2dmczIvbWV0YV9pby5jLTIyNi0gKi9cXG4tLVxcbmZzL2piZDIvY29tbWl0LmM9MTE0PXN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfY29tbWl0X3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTE1NC1cXG5mcy9qYmQyL2NvbW1pdC5jOjE1NTpcXHRiaF9zdWJtaXQoYmgsIHdyaXRlX2ZsYWdzLCBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYyk7XFxuZnMvamJkMi9jb21taXQuYy0xNTYtXFx0KmNiaCA9IGJoO1xcbi0tXFxuZnMvamJkMi9jb21taXQuYz0zNzY9dm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcXG4tLVxcbmZzL2piZDIvY29tbWl0LmMtNzUwLVxcdFxcdFxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbmZzL2piZDIvY29tbWl0LmM6NzUxOlxcdFxcdFxcdFxcdGJoX3N1Ym1pdChiaCxcXG5mcy9qYmQyL2NvbW1pdC5jLTc1Mi1cXHRcXHRcXHRcXHRcXHRSRVFfT1BfV1JJVEUgfCBKQkQyX0pPVVJOQUxfUkVRX0ZMQUdTLFxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmM9MTc4OD1zdGF0aWMgaW50IGpiZDJfd3JpdGVfc3VwZXJibG9jayhqb3VybmFsX3QgKmpvdXJuYWwsIGJsa19vcGZfdCB3cml0ZV9mbGFncylcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTE4MjYtXFx0XFx0c2ItXFx1MDAzZXNfY2hlY2tzdW0gPSBqYmQyX3N1cGVyYmxvY2tfY3N1bShzYik7XFxuZnMvamJkMi9qb3VybmFsLmM6MTgyNzpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbmZzL2piZDIvam91cm5hbC5jLTE4MjgtXFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbi0tXFxuZnMvbmlsZnMyL2J0bm9kZS5jPTg3PWludCBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jLCBfX3U2NCBibG9ja25yLFxcbi0tXFxuZnMvbmlsZnMyL2J0bm9kZS5jLTEzNi1cXHRiaC1cXHUwMDNlYl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovXFxuZnMvbmlsZnMyL2J0bm9kZS5jOjEzNzpcXHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xcbmZzL25pbGZzMi9idG5vZGUuYy0xMzgtXFx0YmgtXFx1MDAzZWJfYmxvY2tuciA9IGJsb2NrbnI7IC8qIHNldCBiYWNrIHRvIHRoZSBnaXZlbiBibG9jayBhZGRyZXNzICovXFxuLS1cXG5mcy9uaWxmczIvZ2Npbm9kZS5jPTU1PWludCBuaWxmc19nY2NhY2hlX3N1Ym1pdF9yZWFkX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxrb2ZmLFxcbi0tXFxuZnMvbmlsZnMyL2djaW5vZGUuYy04NS1cXHRiaC1cXHUwMDNlYl9ibG9ja25yID0gcGJuO1xcbmZzL25pbGZzMi9nY2lub2RlLmM6ODY6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xcbmZzL25pbGZzMi9nY2lub2RlLmMtODctXFx0aWYgKHZibilcXG4tLVxcbmZzL25pbGZzMi9tZHQuYz0xMTY9bmlsZnNfbWR0X3N1Ym1pdF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsa29mZiwgYmxrX29wZl90IG9wZixcXG4tLVxcbmZzL25pbGZzMi9tZHQuYy0xNTAtXFxuZnMvbmlsZnMyL21kdC5jOjE1MTpcXHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xcbmZzL25pbGZzMi9tZHQuYy0xNTItXFx0cmV0ID0gMDtcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9Mzg9aW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy02NC1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjY1OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFLCBiaF9lbmRfd3JpdGUpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjYtXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jPTg5PWludCBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxvY2ssXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTE0Ny1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjE0ODpcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0xNDktXFx0fVxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0xOTE9aW50IG9jZnMyX3JlYWRfYmxvY2tzKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLCB1NjQgYmxvY2ssIGludCBucixcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzI1LVxcdFxcdFxcdFxcdHNldF9idWZmZXJfbmVlZHNfdmFsaWRhdGUoYmgpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6MzI2OlxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTMyNy1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDI1PWludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQ0Ni1cXHRvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi1cXHUwMDNlc2IsIGJoLVxcdTAwM2ViX2RhdGEsIFxcdTAwMjZkaS1cXHUwMDNlaV9jaGVjayk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzo0NDc6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUsIGJoX2VuZF93cml0ZSk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9NDg9c3RydWN0IGFkZHJlc3Nfc3BhY2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtNTYtICogYSBmb2xpbyAodmlhIGEgZm9saW9fbWFwcGluZykgYW5kIGZvciB3cmFwcGluZyBiaW8gc3VibWlzc2lvblxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDo1NzogKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIChlLmcuIGJoX3N1Ym1pdCkuXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU4LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTIzMD1ib29sIGJpb19lbmRpb19iaChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCk7XFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTIzMS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjMyOi8qIENvbXBsZXRpb24gcm91dGluZXMgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYmhfc3VibWl0KCkgKi9cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjMzLXZvaWQgYmhfZW5kX3JlYWQoc3RydWN0IGJpbyAqYmlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yNjU9dm9pZCB3cml0ZV9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjY2OnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBibGtfb3BmX3QsIGJpb19lbmRfaW9fdCk7XFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTI2Ny12b2lkIHdyaXRlX2JvdW5kYXJ5X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5tbS92bXNjYW4uYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE0NDktXFx0XFx0ICogVGhpcyBoYXBwZW5zIGlmIHRoZSBidWZmZXJzIHdlcmUgd3JpdHRlbiBvdXQgZGlyZWN0bHksXFxubW0vdm1zY2FuLmM6MTQ1MDpcXHRcXHQgKiB3aXRoIGJoX3N1Ym1pdCgpLiBleHQzIHdpbGwgZG8gdGhpcywgYXMgd2VsbCBhc1xcbm1tL3Ztc2Nhbi5jLTE0NTEtXFx0XFx0ICogdGhlIGJsb2NrZGV2IG1hcHBpbmcuICBmaWxlbWFwX3JlbGVhc2VfZm9saW8oKSB3aWxsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ4OjUwLjc5MTQ2NzUyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzOTU0ODk0Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMZWdhY3kgQnVmZmVyIEhlYWQgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGJ1ZmZlcl9oZWFkIGJ1c2luZXNzIGFnYWluLiBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSAqYW5jaWVudCogYnVmZmVyX2hlYWRzIOKAkyB0aGUgb25lcyBzdGlsbCBraWNraW5nIGFyb3VuZCB3aXRob3V0IHRoZSBtb3JlIG1vZGVybiBmb2xpbyBzdXBwb3J0IOKAkyBhcmUgYmVpbmcgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSBhbmQgd2hhdCB0aGV5IGFyZSB1c2VkIGZvci4gVGhlIGFpbSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBsZWdhY3kgY29tcG9uZW50cyBjb250aW51ZSB0byBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQga2VybmVsIGFuZCB3aHkgdGhleSBoYXZlIG5vdCBiZWVuIHJlbW92ZWQuXG5cbk15IHBsYW4gaXMgc2ltcGxlOiBsZXQncyBmaXJlIHVwIGBncmVwYC4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGEgZmV3IGtleSBpbmRpY2F0b3JzLiBJJ2xsIHN0YXJ0IHdpdGggYGFsbG9jX2J1ZmZlcl9oZWFkYCDigJMgdGhhdCBzaG91bGQgZmxhZyBhbnkgZGlyZWN0IGFsbG9jYXRpb24gc2l0ZXMuIFRoZW4sIEknbGwgdXNlIGBiaC1cdTAwM2ViX2ZvbGlvYCB0byBzZWUgd2hlcmUgdGhlIHN5c3RlbSBpcyB3b3JraW5nIHdpdGggdGhlICphYnNlbmNlKiBvZiBmb2xpby1iYWNrZWQgYnVmZmVycy4gRmluYWxseSwgSSdsbCBwcm9iZSBmb3IgYGJfZGF0YWAuIFRoYXQgc2hvdWxkIHBpY2sgdXAgYSBsb3Qgb2YgdGhlIG9sZGVyIGNvZGUgdGhhdCByZWxpZXMgb24gdGhhdCBmaWVsZCBmb3IgYWNjZXNzaW5nIHRoZSBidWZmZXIncyBjb250ZW50cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBsZWdhY3kgc3lzdGVtIGlzIGJlaW5nIHVzZWQuIFRoaXMgY291bGQgYmUgYSByZWZhY3RvcmluZyBleGVyY2lzZSwgb3IgSSBjb3VsZCBqdXN0IGJlIGxvb2tpbmcgdG8gYmV0dGVyIHVuZGVyc3RhbmQgYSBzeXN0ZW0gdGhhdCBpcyBzdGlsbCBjcml0aWNhbCB0byBvcGVyYXRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NDk6MDQuNzQ2MzY0Mzc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc3NTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiX2RhdGEuKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2FkZnMvc3VwZXIuYz0zMDI9c3RhdGljIGludCBhZGZzX3ZhbGlkYXRlX2JibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2FkZnMvc3VwZXIuYy0zMDctXFxuZnMvYWRmcy9zdXBlci5jOjMwODpcXHRiX2RhdGEgPSBiaC1cXHUwMDNlYl9kYXRhICsgKEFERlNfRElTQ1JFQ09SRCAlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuZnMvYWRmcy9zdXBlci5jLTMwOS1cXHRpZiAoYWRmc19jaGVja2JibGsoYl9kYXRhKSlcXG4tLVxcbmZzL2FmZnMvYWZmcy5oPTI4MT1hZmZzX2FkanVzdF9jaGVja3N1bShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgdmFsKVxcbi0tXFxuZnMvYWZmcy9hZmZzLmgtMjgzLVxcdHUzMiB0bXAgPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKWJoLVxcdTAwM2ViX2RhdGEpWzVdKTtcXG5mcy9hZmZzL2FmZnMuaDoyODQ6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVs1XSA9IGNwdV90b19iZTMyKHRtcCAtIHZhbCk7XFxuZnMvYWZmcy9hZmZzLmgtMjg1LX1cXG4tLVxcbmZzL2FmZnMvYWZmcy5oPTI4Nz1hZmZzX2FkanVzdF9iaXRtYXBjaGVja3N1bShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgdmFsKVxcbi0tXFxuZnMvYWZmcy9hZmZzLmgtMjg5LVxcdHUzMiB0bXAgPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKWJoLVxcdTAwM2ViX2RhdGEpWzBdKTtcXG5mcy9hZmZzL2FmZnMuaDoyOTA6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKHRtcCAtIHZhbCk7XFxuZnMvYWZmcy9hZmZzLmgtMjkxLX1cXG4tLVxcbmZzL2FmZnMvYml0bWFwLmM9Mzk9YWZmc19mcmVlX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBibG9jaylcXG4tLVxcbmZzL2FmZnMvYml0bWFwLmMtNzktXFx0dG1wID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKTtcXG5mcy9hZmZzL2JpdG1hcC5jOjgwOlxcdCooX19iZTMyICopYmgtXFx1MDAzZWJfZGF0YSA9IGNwdV90b19iZTMyKHRtcCAtIG1hc2spO1xcbmZzL2FmZnMvYml0bWFwLmMtODEtXFxuLS1cXG5mcy9hZmZzL2JpdG1hcC5jPTExNT1hZmZzX2FsbG9jX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBnb2FsKVxcbi0tXFxuZnMvYWZmcy9iaXRtYXAuYy0yMjMtXFx0dG1wID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKTtcXG5mcy9hZmZzL2JpdG1hcC5jOjIyNDpcXHQqKF9fYmUzMiAqKWJoLVxcdTAwM2ViX2RhdGEgPSBjcHVfdG9fYmUzMih0bXAgKyBtYXNrKTtcXG5mcy9hZmZzL2JpdG1hcC5jLTIyNS1cXG4tLVxcbmZzL2FmZnMvYml0bWFwLmM9MjQ0PWludCBhZmZzX2luaXRfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MpXFxuLS1cXG5mcy9hZmZzL2JpdG1hcC5jLTMyNi1cXHRcXHQvL2lmIChvbGQgIT0gbmV3KSB7XFxuZnMvYWZmcy9iaXRtYXAuYzozMjc6XFx0XFx0XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVtvZmZzZXRdID0gY3B1X3RvX2JlMzIobmV3KTtcXG5mcy9hZmZzL2JpdG1hcC5jLTMyOC1cXHRcXHRcXHQvKiBmaXggY2hlY2tzdW0gKi9cXG4tLVxcbmZzL2FmZnMvYml0bWFwLmMtMzMwLVxcdFxcdFxcdC8vb2xkID0gYmUzMl90b19jcHUoKihfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKTtcXG5mcy9hZmZzL2JpdG1hcC5jOjMzMTpcXHRcXHRcXHQvLyooX19iZTMyICopYmgtXFx1MDAzZWJfZGF0YSA9IGNwdV90b19iZTMyKG9sZCAtIG5ldyk7XFxuZnMvYWZmcy9iaXRtYXAuYy0zMzItXFx0XFx0XFx0Ly9tYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLS1cXG5mcy9hZmZzL2JpdG1hcC5jLTMzNy1cXHR3aGlsZSAoKytvZmZzZXQgXFx1MDAzYyBzYi1cXHUwMDNlc19ibG9ja3NpemUgLyA0KVxcbmZzL2FmZnMvYml0bWFwLmM6MzM4OlxcdFxcdCgoX19iZTMyICopYmgtXFx1MDAzZWJfZGF0YSlbb2Zmc2V0XSA9IDA7XFxuZnMvYWZmcy9iaXRtYXAuYzozMzk6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVswXSA9IDA7XFxuZnMvYWZmcy9iaXRtYXAuYzozNDA6XFx0KChfX2JlMzIgKiliaC1cXHUwMDNlYl9kYXRhKVswXSA9IGNwdV90b19iZTMyKC1hZmZzX2NoZWNrc3VtX2Jsb2NrKHNiLCBiaCkpO1xcbmZzL2FmZnMvYml0bWFwLmMtMzQxLVxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTE0Njg9dm9pZCBmb2xpb19zZXRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2J1ZmZlci5jLTE0NzYtXFx0XFx0ICovXFxuZnMvYnVmZmVyLmM6MTQ3NzpcXHRcXHRiaC1cXHUwMDNlYl9kYXRhID0gKGNoYXIgKikoMCArIG9mZnNldCk7XFxuZnMvYnVmZmVyLmMtMTQ3OC1cXHRlbHNlXFxuZnMvYnVmZmVyLmM6MTQ3OTpcXHRcXHRiaC1cXHUwMDNlYl9kYXRhID0gZm9saW9fYWRkcmVzcyhmb2xpbykgKyBvZmZzZXQ7XFxuZnMvYnVmZmVyLmMtMTQ4MC19XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTIyMz1zdGF0aWMgaW50IG1idF9ncnBfY3R4X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjI3LVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MjI4OlxcdGdycF9jdHgtXFx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBremFsbG9jKEVYVDRfQkxPQ0tfU0laRShzYiksIEdGUF9LRVJORUwpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MjI5OlxcdGlmIChncnBfY3R4LVxcdTAwM2ViaXRtYXBfYmguYl9kYXRhID09IE5VTEwpXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0yMzAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTIzNz1zdGF0aWMgdm9pZCBtYnRfZ3JwX2N0eF9yZWxlYXNlKHN0cnVjdCBtYnRfZ3JwX2N0eCAqZ3JwX2N0eClcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjM5LVxcdGtmcmVlKGdycF9jdHgtXFx1MDAzZWJpdG1hcF9iaC5iX2RhdGEpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MjQwOlxcdGdycF9jdHgtXFx1MDAzZWJpdG1hcF9iaC5iX2RhdGEgPSBOVUxMO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMjQxLX1cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTQwODk9ZXh0NF9tYl9tYXJrX2NvbnRleHQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBzdGF0ZSxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTQxNDEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbmZzL2V4dDQvbWJhbGxvYy5jOjQxNDI6XFx0XFx0XFx0aWYgKG1iX3Rlc3RfYml0KGJsa29mZiArIGksIGJpdG1hcF9iaC1cXHUwMDNlYl9kYXRhKSA9PVxcbmZzL2V4dDQvbWJhbGxvYy5jLTQxNDMtXFx0XFx0XFx0XFx0XFx0c3RhdGUpXFxuLS1cXG5mcy9mMmZzL2RlYnVnLmM9MTI3PXN0YXRpYyB2b2lkIHVwZGF0ZV9nZW5lcmFsX3N0YXR1cyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9mMmZzL2RlYnVnLmMtMTc0LVxcdHNpLVxcdTAwM2Vucl93Yl9jcF9kYXRhID0gZ2V0X3BhZ2VzKHNiaSwgRjJGU19XQl9DUF9EQVRBKTtcXG5mcy9mMmZzL2RlYnVnLmM6MTc1OlxcdHNpLVxcdTAwM2Vucl93Yl9kYXRhID0gZ2V0X3BhZ2VzKHNiaSwgRjJGU19XQl9EQVRBKTtcXG5mcy9mMmZzL2RlYnVnLmMtMTc2LVxcdHNpLVxcdTAwM2Vucl9yZF9kYXRhID0gZ2V0X3BhZ2VzKHNiaSwgRjJGU19SRF9EQVRBKTtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTIyMTM9c3RhdGljIHNzaXplX3QgZnVzZV9pb21hcF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTIyMTYte1xcbmZzL2Z1c2UvZmlsZS5jOjIyMTc6XFx0c3RydWN0IGZ1c2VfZmlsbF93Yl9kYXRhICpkYXRhID0gd3BjLVxcdTAwM2V3Yl9jdHg7XFxuZnMvZnVzZS9maWxlLmMtMjIxOC1cXHRzdHJ1Y3QgZnVzZV93cml0ZXBhZ2VfYXJncyAqd3BhID0gZGF0YS1cXHUwMDNld3BhO1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjI3Mz1zdGF0aWMgaW50IGZ1c2VfaW9tYXBfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMjI3NS17XFxuZnMvZnVzZS9maWxlLmM6MjI3NjpcXHRzdHJ1Y3QgZnVzZV9maWxsX3diX2RhdGEgKmRhdGEgPSB3cGMtXFx1MDAzZXdiX2N0eDtcXG5mcy9mdXNlL2ZpbGUuYy0yMjc3LVxcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjI5Nj1zdGF0aWMgaW50IGZ1c2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTIzMDAtXFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTtcXG5mcy9mdXNlL2ZpbGUuYzoyMzAxOlxcdHN0cnVjdCBmdXNlX2ZpbGxfd2JfZGF0YSBkYXRhID0ge307XFxuZnMvZnVzZS9maWxlLmMtMjMwMi1cXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYz0yMzIwPXN0YXRpYyBpbnQgZnVzZV9sYXVuZGVyX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yMzIyLVxcdGludCBlcnIgPSAwO1xcbmZzL2Z1c2UvZmlsZS5jOjIzMjM6XFx0c3RydWN0IGZ1c2VfZmlsbF93Yl9kYXRhIGRhdGEgPSB7fTtcXG5mcy9mdXNlL2ZpbGUuYy0yMzI0LVxcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcXG4tLVxcbmZzL2dmczIveGF0dHIuYz04OD1zdGF0aWMgaW50IGVhX2ZvcmVhY2hfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9nZnMyL3hhdHRyLmMtMTAyLVxcdFxcdH1cXG5mcy9nZnMyL3hhdHRyLmM6MTAzOlxcdFxcdGlmICghKGJoLVxcdTAwM2ViX2RhdGEgXFx1MDAzYz0gKGNoYXIgKillYSBcXHUwMDI2XFx1MDAyNiAoY2hhciAqKUdGUzJfRUEyTkVYVChlYSkgXFx1MDAzYz1cXG5mcy9nZnMyL3hhdHRyLmMtMTA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgYmgtXFx1MDAzZWJfZGF0YSArIGJoLVxcdTAwM2ViX3NpemUpKSB7XFxuLS1cXG5mcy9ocGZzL2J1ZmZlci5jPTExND12b2lkICpocGZzX21hcF80c2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHVuc2lnbmVkIHNlY25vLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqcWJoLFxcbi0tXFxuZnMvaHBmcy9idWZmZXIuYy0xMzQtXFxuZnMvaHBmcy9idWZmZXIuYzoxMzU6XFx0aWYgKGxpa2VseShxYmgtXFx1MDAzZWJoWzFdLVxcdTAwM2ViX2RhdGEgPT0gcWJoLVxcdTAwM2ViaFswXS1cXHUwMDNlYl9kYXRhICsgMSAqIDUxMikgXFx1MDAyNlxcdTAwMjZcXG5mcy9ocGZzL2J1ZmZlci5jOjEzNjpcXHQgICAgbGlrZWx5KHFiaC1cXHUwMDNlYmhbMl0tXFx1MDAzZWJfZGF0YSA9PSBxYmgtXFx1MDAzZWJoWzBdLVxcdTAwM2ViX2RhdGEgKyAyICogNTEyKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2hwZnMvYnVmZmVyLmM6MTM3OlxcdCAgICBsaWtlbHkocWJoLVxcdTAwM2ViaFszXS1cXHUwMDNlYl9kYXRhID09IHFiaC1cXHUwMDNlYmhbMF0tXFx1MDAzZWJfZGF0YSArIDMgKiA1MTIpKSB7XFxuZnMvaHBmcy9idWZmZXIuYy0xMzgtXFx0XFx0cmV0dXJuIHFiaC1cXHUwMDNlZGF0YSA9IHFiaC1cXHUwMDNlYmhbMF0tXFx1MDAzZWJfZGF0YTtcXG4tLVxcbmZzL2hwZnMvYnVmZmVyLmM9MTY4PXZvaWQgKmhwZnNfZ2V0XzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgc2Vjbm8sXFxuLS1cXG5mcy9ocGZzL2J1ZmZlci5jLTE4NC1cXG5mcy9ocGZzL2J1ZmZlci5jOjE4NTpcXHRpZiAobGlrZWx5KHFiaC1cXHUwMDNlYmhbMV0tXFx1MDAzZWJfZGF0YSA9PSBxYmgtXFx1MDAzZWJoWzBdLVxcdTAwM2ViX2RhdGEgKyAxICogNTEyKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2hwZnMvYnVmZmVyLmM6MTg2OlxcdCAgICBsaWtlbHkocWJoLVxcdTAwM2ViaFsyXS1cXHUwMDNlYl9kYXRhID09IHFiaC1cXHUwMDNlYmhbMF0tXFx1MDAzZWJfZGF0YSArIDIgKiA1MTIpIFxcdTAwMjZcXHUwMDI2XFxuZnMvaHBmcy9idWZmZXIuYzoxODc6XFx0ICAgIGxpa2VseShxYmgtXFx1MDAzZWJoWzNdLVxcdTAwM2ViX2RhdGEgPT0gcWJoLVxcdTAwM2ViaFswXS1cXHUwMDNlYl9kYXRhICsgMyAqIDUxMikpIHtcXG5mcy9ocGZzL2J1ZmZlci5jLTE4OC1cXHRcXHRyZXR1cm4gcWJoLVxcdTAwM2VkYXRhID0gcWJoLVxcdTAwM2ViaFswXS1cXHUwMDNlYl9kYXRhO1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmM9MzI0PWludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtMzY2LVxcdFxcdFxcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbmZzL2piZDIvam91cm5hbC5jOjM2NzpcXHRcXHRuZXdfYmgtXFx1MDAzZWJfZGF0YSA9IGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhO1xcbmZzL2piZDIvam91cm5hbC5jLTM2OC1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtNDExLVxcdFxcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbmZzL2piZDIvam91cm5hbC5jOjQxMjpcXHRcXHRuZXdfYmgtXFx1MDAzZWJfZGF0YSA9IGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhO1xcbmZzL2piZDIvam91cm5hbC5jLTQxMy1cXHR9XFxuLS1cXG5mcy9qYmQyL3JlY292ZXJ5LmM9MTk4PXN0YXRpYyBpbnQgY291bnRfdGFncyhqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9qYmQyL3JlY292ZXJ5LmMtMjA5LVxcbmZzL2piZDIvcmVjb3ZlcnkuYzoyMTA6XFx0d2hpbGUgKCh0YWdwIC0gYmgtXFx1MDAzZWJfZGF0YSArIHRhZ19ieXRlcykgXFx1MDAzYz0gc2l6ZSkge1xcbmZzL2piZDIvcmVjb3ZlcnkuYy0yMTEtXFx0XFx0bWVtY3B5KFxcdTAwMjZ0YWcsIHRhZ3AsIHNpemVvZih0YWcpKTtcXG4tLVxcbmZzL2piZDIvcmVjb3ZlcnkuYz00OTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgamJkMl9kb19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLFxcbi0tXFxuZnMvamJkMi9yZWNvdmVyeS5jLTUwOS1cXHR0YWdwID0gXFx1MDAyNmJoLVxcdTAwM2ViX2RhdGFbc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpXTtcXG5mcy9qYmQyL3JlY292ZXJ5LmM6NTEwOlxcdHdoaWxlICh0YWdwIC0gYmgtXFx1MDAzZWJfZGF0YSArIHRhZ19ieXRlcyBcXHUwMDNjPVxcbmZzL2piZDIvcmVjb3ZlcnkuYy01MTEtXFx0ICAgICAgIGpvdXJuYWwtXFx1MDAzZWpfYmxvY2tzaXplIC0gZGVzY3JfY3N1bV9zaXplKSB7XFxuLS1cXG5mcy9qYmQyL3JlY292ZXJ5LmMtNTYxLVxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEpCRDJfRkxBR19FU0NBUEUpIHtcXG5mcy9qYmQyL3JlY292ZXJ5LmM6NTYyOlxcdFxcdFxcdFxcdCooKF9fYmUzMiAqKW5iaC1cXHUwMDNlYl9kYXRhKSA9XFxuZnMvamJkMi9yZWNvdmVyeS5jLTU2My1cXHRcXHRcXHRcXHRjcHVfdG9fYmUzMihKQkQyX01BR0lDX05VTUJFUik7XFxuLS1cXG5mcy9qYmQyL3Jldm9rZS5jPTU3Mz1zdGF0aWMgdm9pZCB3cml0ZV9vbmVfcmV2b2tlX3JlY29yZCh0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcXG4tLVxcbmZzL2piZDIvcmV2b2tlLmMtNjI1LVxcdGlmIChqYmQyX2hhc19mZWF0dXJlXzY0Yml0KGpvdXJuYWwpKVxcbmZzL2piZDIvcmV2b2tlLmM6NjI2OlxcdFxcdCogKChfX2JlNjQgKikoXFx1MDAyNmRlc2NyaXB0b3ItXFx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxcbmZzL2piZDIvcmV2b2tlLmMtNjI3LVxcdFxcdFxcdGNwdV90b19iZTY0KHJlY29yZC1cXHUwMDNlYmxvY2tucik7XFxuZnMvamJkMi9yZXZva2UuYy02MjgtXFx0ZWxzZVxcbmZzL2piZDIvcmV2b2tlLmM6NjI5OlxcdFxcdCogKChfX2JlMzIgKikoXFx1MDAyNmRlc2NyaXB0b3ItXFx1MDAzZWJfZGF0YVtvZmZzZXRdKSkgPVxcbmZzL2piZDIvcmV2b2tlLmMtNjMwLVxcdFxcdFxcdGNwdV90b19iZTMyKHJlY29yZC1cXHUwMDNlYmxvY2tucik7XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTIyND1zdGF0aWMgaW50IG1pbml4X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTI4My1cXHRcXHRzLVxcdTAwM2VzX21heF9saW5rcyA9IE1JTklYMl9MSU5LX01BWDtcXG5mcy9taW5peC9pbm9kZS5jOjI4NDpcXHR9IGVsc2UgaWYgKCAqKF9fdTE2ICopKGJoLVxcdTAwM2ViX2RhdGEgKyAyNCkgPT0gTUlOSVgzX1NVUEVSX01BR0lDKSB7XFxuZnMvbWluaXgvaW5vZGUuYy0yODUtXFx0XFx0bTNzID0gKHN0cnVjdCBtaW5peDNfc3VwZXJfYmxvY2sgKikgYmgtXFx1MDAzZWJfZGF0YTtcXG4tLVxcbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmM9MTQ2MT1zdGF0aWMgdm9pZCBvMmhiX2RlYnVnX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jLTE0NzEtXFx0KCpkYiktXFx1MDAzZWRiX2xlbiA9IGxlbjtcXG5mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jOjE0NzI6XFx0KCpkYiktXFx1MDAzZWRiX2RhdGEgPSBkYXRhO1xcbmZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMtMTQ3My1cXG4tLVxcbmZzL3JvbWZzL3N0b3JhZ2UuYz0xNjM9c3RhdGljIGludCByb21mc19ibGtfc3RyY21wKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgcG9zLFxcbi0tXFxuZnMvcm9tZnMvc3RvcmFnZS5jLTE3Ny1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9yb21mcy9zdG9yYWdlLmM6MTc4OlxcdFxcdG1hdGNoZWQgPSAobWVtY21wKGJoLVxcdTAwM2ViX2RhdGEgKyBvZmZzZXQsIHN0ciwgc2VnbWVudCkgPT0gMCk7XFxuZnMvcm9tZnMvc3RvcmFnZS5jLTE3OS1cXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jPTg3Nz1zdGF0aWMgdm9pZCB0Y29uX3N1cGVyX2NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmFyZylcXG5mcy9zbWIvY2xpZW50L21pc2MuYy04Nzgte1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjg3OTpcXHRzdHJ1Y3Qgc3VwZXJfY2JfZGF0YSAqc2QgPSBhcmc7XFxuZnMvc21iL2NsaWVudC9taXNjLmMtODgwLVxcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7XFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MDEte1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkwMjpcXHRzdHJ1Y3Qgc3VwZXJfY2JfZGF0YSBzZCA9IHtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MDMtXFx0XFx0LmRhdGEgPSBkYXRhLFxcbi0tXFxuZnMvdWRmL3VkZmRlY2wuaD0xMTY9c3RhdGljIGlubGluZSB2b2lkIHVkZl91cGRhdGVkX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmgtMTIxLVxcdFdBUk5fT05fT05DRSgoKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKVxcbmZzL3VkZi91ZGZkZWNsLmg6MTIyOlxcdFxcdCAgICAgYmgtXFx1MDAzZWJfZGF0YSktXFx1MDAzZWludGVncml0eVR5cGUgIT1cXG5mcy91ZGYvdWRmZGVjbC5oLTEyMy1cXHRcXHQgICAgIGNwdV90b19sZTMyKExWSURfSU5URUdSSVRZX1RZUEVfT1BFTikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0OTowNC44MzQxNDQwNjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MzM4NzA5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBqYmQyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgamJkMiBqb3VybmFsaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2piZDIvam91cm5hbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgY3Jhc2ggaXMgaGFwcGVuaW5nLiBUaGUgdHJhY2Ugc2VlbXMgdG8gcG9pbnQgdG8gYSBwcm9ibGVtIGFyb3VuZCB0aGUgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBsaW5lOlxuXG5gYGBjXG5uZXdfYmgtXHUwMDNlYl9kYXRhID0gamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YTtcbmBgYFxuXG5pcyBwYXJ0IG9mIHRoZSBwcm9ibGVtLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgaXNzdWUgc3RlbXMgZnJvbSBob3cgYG5ld19iaGAgaXMgYmVpbmcgYWxsb2NhdGVkLiBJIHNlZSB0aGF0IGl0J3MgYmVpbmcgYWxsb2NhdGVkIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbzsgYG5ld19iaC1cdTAwM2ViX2ZvbGlvYCBpcyBnb2luZyB0byBiZSBOVUxMIGluIHRoaXMgc2l0dWF0aW9uLiBOb3csIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBpcyB0aGF0IGxhdGVyIHdoZW4gYGpiZDJgIHRyaWVzIHRvIHdyaXRlIHRoZSBtZXRhZGF0YSBidWZmZXIsIG1heWJlIHVzaW5nIGBiaF9zdWJtaXQobmV3X2JoLCAuLi4pYCBvciBgX19iaF9zdWJtaXRgLCBpdCdzIG9wZXJhdGluZyBvbiBhIGBuZXdfYmhgIHdpdGggYSBudWxsIGBiX2ZvbGlvYC4gVGhlIHRyYWNlIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCBhIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbylgIGNhbGwgaXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGZzL2piZDIvam91cm5hbC5jYCBhcm91bmQgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgIGFuZCB0cmFjZSBob3cgYG5ld19iaGAgaXMgYmVpbmcgdXNlZCB0byBjb25maXJtIHRoaXMgaHlwb3RoZXNpcyBhbmQgdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBzZXF1ZW5jZSBvZiBldmVudHMgbGVhZGluZyB1cCB0byB0aGF0IHByb2JsZW1hdGljIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZXdfYmhgIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCdzIHVzZWQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0OTozMC4yNjgwMTc3ODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2piZDIvam91cm5hbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHQgKiBhbHNvIHBhcnQgb2YgYSBzaGFyZWQgbWFwcGluZywgYW5kIGFub3RoZXIgdGhyZWFkIGhhc1xcbiAzNDE6XFx0XFx0ICogZGVjaWRlZCB0byBsYXVuY2ggYSB3cml0ZXBhZ2UoKSBhZ2FpbnN0IHRoaXMgYnVmZmVyLlxcbiAzNDI6XFx0XFx0ICovXFxuIDM0MzpcXHRcXHRKX0FTU0VSVF9CSChiaF9pbiwgYnVmZmVyX2piZGRpcnR5KGJoX2luKSk7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdG5ld19iaCA9IGFsbG9jX2J1ZmZlcl9oZWFkKEdGUF9OT0ZTfF9fR0ZQX05PRkFJTCk7XFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdC8qIGtlZXAgc3Vic2VxdWVudCBhc3NlcnRpb25zIHNhbmUgKi9cXG4gMzQ4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5ld19iaC1cXHUwMDNlYl9jb3VudCwgMSk7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdC8qXFxuIDM1MTpcXHRcXHQgKiBiX2Zyb3plbl9kYXRhIGlzIHNsYWIgbWVtb3J5LCBub3QgcGFnZSBjYWNoZSwgc28gd2hlbiB3ZSB1c2UgaXQgdGhlXFxuIDM1MjpcXHRcXHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcXG4gMzUzOlxcdFxcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxcbiAzNTQ6XFx0XFx0ICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC1cXHUwMDNlbWFwcGluZyB0b1xcbiAzNTU6XFx0XFx0ICogYW55dGhpbmcgdGhhdCBnb2VzIGxvb2tpbmcgZm9yIGFuIGFkZHJlc3Nfc3BhY2UuXFxuIDM1NjpcXHRcXHQgKi9cXG4gMzU3OlxcdFxcbiAzNTg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZqaF9pbi1cXHUwMDNlYl9zdGF0ZV9sb2NrKTtcXG4gMzU5OlxcdFxcdC8qXFxuIDM2MDpcXHRcXHQgKiBJZiBhIG5ldyB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBkb25lIGEgYnVmZmVyIGNvcHktb3V0LCB0aGVuXFxuIDM2MTpcXHRcXHQgKiB3ZSB1c2UgdGhhdCB2ZXJzaW9uIG9mIHRoZSBkYXRhIGZvciB0aGUgY29tbWl0LlxcbiAzNjI6XFx0XFx0ICovXFxuIDM2MzpcXHRcXHRpZiAoamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpIHtcXG4gMzY0OlxcdFxcdFxcdGRvX2VzY2FwZSA9IGpiZDJfZGF0YV9uZWVkc19lc2NhcGluZyhqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSk7XFxuIDM2NTpcXHRcXHRcXHRpZiAoZG9fZXNjYXBlKVxcbiAzNjY6XFx0XFx0XFx0XFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSk7XFxuIDM2NzpcXHRcXHRcXHRuZXdfYmgtXFx1MDAzZWJfZGF0YSA9IGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhO1xcbiAzNjg6XFx0XFx0fSBlbHNlIHtcXG4gMzY5OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBiaF9pbi1cXHUwMDNlYl9mb2xpbztcXG4gMzcwOlxcdFxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8oZm9saW8sIGJoX2luLVxcdTAwM2ViX2RhdGEpO1xcbiAzNzE6XFx0XFx0XFx0Y2hhciAqdG1wO1xcbiAzNzI6XFx0XFx0XFx0Y2hhciAqbWFwcGVkX2RhdGE7XFxuIDM3MzpcXHRcXG4gMzc0OlxcdFxcdFxcdG1hcHBlZF9kYXRhID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcXG4gMzc1OlxcdFxcdFxcdC8qXFxuIDM3NjpcXHRcXHRcXHQgKiBGaXJlIGRhdGEgZnJvemVuIHRyaWdnZXIgaWYgZGF0YSBhbHJlYWR5IHdhc24ndCBmcm96ZW4uIERvXFxuIDM3NzpcXHRcXHRcXHQgKiB0aGlzIGJlZm9yZSBjaGVja2luZyBmb3IgZXNjYXBpbmcsIGFzIHRoZSB0cmlnZ2VyIG1heSBtb2RpZnlcXG4gMzc4OlxcdFxcdFxcdCAqIHRoZSBtYWdpYyBvZmZzZXQuICBJZiBhIGNvcHktb3V0IGhhcHBlbnMgYWZ0ZXJ3YXJkcywgaXQgd2lsbFxcbiAzNzk6XFx0XFx0XFx0ICogaGF2ZSB0aGUgY29ycmVjdCBkYXRhIGluIHRoZSBidWZmZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjMwLjI2ODIzNTE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODc1MzMwNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb21tZW50IGluIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcblx0XHQvKlxuXHRcdCAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGVcblx0XHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcblx0XHQgKiBhbGxvY2F0aW9uIGFuZCBiX2RhdGEgcG9pbnRzIHN0cmFpZ2h0IGF0IHRoZSBjb3B5LiBQb2ludGluZyBpdCBhdFxuXHRcdCAqIHRoZSBzbGFiIGZvbGlvIGluc3RlYWQgd291bGQgaGFuZCBpdHMgb3ZlcmxvYWRlZCAtXHUwMDNlbWFwcGluZyB0b1xuXHRcdCAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLlxuXHRcdCAqL1xuYGBgXG5cblJpZ2h0LCBhbmQgaXQgc2VlbXMgdGhlIGlzc3VlIGlzIHRoYXQgd2hlbiBgYmhfc3VibWl0YCBpcyBjYWxsZWQgb24gYSBgbmV3X2JoYCwgYF9fYmhfc3VibWl0YCB0aGVuIGNoZWNrcyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pYC4gVGhlIHByb2JsZW0gaXMgdGhhdCBgYmgtXHUwMDNlYl9mb2xpb2AgKmNhbiogYmUgTlVMTCBiZWNhdXNlIG9mIHRoYXQgc2xhYiBtZW1vcnkgc2l0dWF0aW9uIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudCwgd2hpY2ggbWVhbnMgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAgd291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIuIENsYXNzaWMhXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIFVzaW5nIG15IGNyaXRlcmlhOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuVGhpcyBjb2RlIGlzIGluIGBmcy9idWZmZXIuY2AsIHNwZWNpZmljYWxseSBgX19iaF9zdWJtaXRgLiBUaGF0J3MgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFdlIGNhbiBmdXp6IHRoaXMgd2l0aCBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnPigJRleHQ0LCBqYmQyIGpvdXJuYWxpbmcsIHdyaXRlYmFjaywgZGlyZWN0IEkvTywgYnVmZmVyZWQgSS9PLCBhbGwga2luZHMgb2YgdGhpbmdzLiBTbywgSSdtIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5OZXh0LCBsZXQncyBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG9yIHJlbGV2YW50IHN5bWJvbHMgaW4gYGZzL2J1ZmZlci5jYCBvciByZWxhdGVkIGNhbGxlcnMuIEZyb20gbXkgZXhwZXJpZW5jZSBhbmQgYSBxdWljayBnbGFuY2UsIHRoZSBmdW5jdGlvbnMgdG8gY2hlY2sgYXJlOlxuXG4qICAgYGJoX3N1Ym1pdGBcbiogICBgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvYFxuKiAgIGB3cml0ZV9kaXJ0eV9idWZmZXJgXG4qICAgYF9fc3luY19kaXJ0eV9idWZmZXJgXG4qICAgUG90ZW50aWFsbHksIGFsc28gYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gIGFuZCBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAuXG5cbkxldCdzIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiBhbmQgdmlzaWJpbGl0eSBvZiBgYmhfc3VibWl0YCwgYHdyaXRlX2RpcnR5X2J1ZmZlcmAsIGFuZCBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuIEluIGBmcy9idWZmZXIuY2A6IGBiaF9zdWJtaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIChgRVhQT1JUX1NZTUJPTChiaF9zdWJtaXQpYCksIHdoaWNoIGlzIGdvb2QuIGBfX2JoX3N1Ym1pdGAgaXMgc3RhdGljLCB3aGljaCBpcyBleHBlY3RlZC4gYHdyaXRlX2RpcnR5X2J1ZmZlcmAgYW5kIGBfX3N5bmNfZGlydHlfYnVmZmVyYCBhcmUgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gR29vZCwgdGhvc2UgYXJlIHZpYWJsZSB0YXJnZXRzLlxuXG5GaW5hbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgbmVlZGVkIGluIGBmcy9idWZmZXIuY2AsIHNvIEknbGwgYmUgc3VyZSB0byBjaGVjayB0aGUgYGZzL01ha2VmaWxlYCBvciBgZnMvS2NvbmZpZ2AgZmlsZXMuIFRoYXQnbGwgYmUgaW1wb3J0YW50IGZvciByZXByb2R1Y3Rpb24gYW5kIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjQwLjE0MzU2OTgxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDYyOTkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWZmZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0yMC1cXG5mcy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfQlVGRkVSX0hFQUQpXFx0Kz0gYnVmZmVyLm8gbXBhZ2Uub1xcbmZzL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdCs9IHByb2NfbmFtZXNwYWNlLm9cXG4tLVxcbmZzL2hwZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFBGU19GUykgKz0gaHBmcy5vXFxuZnMvaHBmcy9NYWtlZmlsZS03LVxcbmZzL2hwZnMvTWFrZWZpbGU6ODpocGZzLW9ianMgOj0gYWxsb2MubyBhbm9kZS5vIGJ1ZmZlci5vIGRlbnRyeS5vIGRpci5vIGRub2RlLm8gZWEubyBmaWxlLm8gXFxcXFxcbmZzL2hwZnMvTWFrZWZpbGUtOS1cXHQgICAgIGlub2RlLm8gbWFwLm8gbmFtZS5vIG5hbWVpLm8gc3VwZXIub1xcbi0tXFxuZnMvbmV0ZnMvTWFrZWZpbGU9Mz1uZXRmcy15IDo9IFxcXFxcXG4tLVxcbmZzL25ldGZzL01ha2VmaWxlLTE2LVxcdHJlYWRfc2luZ2xlLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlOjE3OlxcdHJvbGxpbmdfYnVmZmVyLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlLTE4LVxcdHdyaXRlX2NvbGxlY3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjQxLjYxNDIwMzc1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDA4MTQ3MDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX0JVRkZFUl9IRUFEYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHNlZWluZyBgQ09ORklHX0JVRkZFUl9IRUFEYCBwb3BwaW5nIHVwIGluIGBmcy9NYWtlZmlsZWAg4oCTIHNwZWNpZmljYWxseSwgaXQncyBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIGBidWZmZXIub2AgYW5kIGBtcGFnZS5vYC4gIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgZXhwZXJ0IGluc3RpbmN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbmZpZyBvcHRpb24gKm1lYW5zKi4gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBpdHMgZGVmaW5pdGlvbi4gIFdoZXJlIGlzIGBDT05GSUdfQlVGRkVSX0hFQURgIGFjdHVhbGx5ICpkZWZpbmVkKj8gIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRoZSBLY29uZmlnIGZpbGVzLiAgU2luY2UgdGhpcyByZWxhdGVzIHRvIHRoZSBmaWxlc3lzdGVtLCBteSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgYGZzL0tjb25maWdgLiBJZiBpdCdzIG5vdCB0aGVyZSwgSSB3aWxsIGV4cGFuZCBteSBzZWFyY2ggdG8gYGluaXQvS2NvbmZpZ2AsIG9yIHdoZXJldmVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBnZW5lcmFsbHkgZGVjbGFyZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBlbGVtZW50IGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZXNlIGtleSBmaWxlc3lzdGVtIGNvbXBvbmVudHMuICBHb3R0YSBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMwMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjQ5OjU1LjY5NTY3NjYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA5NDY1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCVUZGRVJfSEVBRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTIyPWNvbmZpZyBGU19TVEFDS1xcbi0tXFxuZnMvS2NvbmZpZy0yNC1cXG5mcy9LY29uZmlnOjI1OmNvbmZpZyBCVUZGRVJfSEVBRFxcbmZzL0tjb25maWctMjYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo0OTo1Ny4zMDUxNTU5NjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxNzIxNzM3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgQlVGRkVSX0hFQURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBkZWZpbml0aW9uIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzIGFyZSBsaWtlbHkgbG9jYXRlZCB3aXRoaW4gYGZzL0tjb25maWdgLiBUaGlzIG1ha2VzIHNlbnNlLCBhcyBpdOKAmXMgYSBmaWxlIHRoYXQgdHlwaWNhbGx5IGRlYWxzIHdpdGggZmlsZXN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gSSdsbCBqdW1wIHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI1IHRvIHNlZSBpZiBJIGNhbiB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJVRkZFUl9IRUFEYC4gSG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgZGV0YWlscyBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBpbiB0aGF0IGFyZWEuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDoyNS40NzczMzMwMzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdCMgU3RhY2thYmxlIGZpbGVzeXN0ZW1zXFxuICAyMjpcXHRjb25maWcgRlNfU1RBQ0tcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEJVRkZFUl9IRUFEXFxuICAyNjpcXHRcXHRib29sXFxuICAyNzpcXHRcXG4gIDI4OlxcdCMgb2xkIGJsb2NrZGV2X2RpcmVjdF9JTyBpbXBsZW1lbnRhdGlvbi4gIFVzZSBpb21hcCBmb3IgbmV3IGNvZGUgaW5zdGVhZFxcbiAgMjk6XFx0Y29uZmlnIExFR0FDWV9ESVJFQ1RfSU9cXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gQlVGRkVSX0hFQURcXG4gIDMxOlxcdFxcdGJvb2xcXG4gIDMyOlxcdFxcbiAgMzM6XFx0aWYgQkxPQ0tcXG4gIDM0OlxcdFxcbiAgMzU6XFx0c291cmNlIFxcXCJmcy9leHQyL0tjb25maWdcXFwiXFxuICAzNjpcXHRzb3VyY2UgXFxcImZzL2V4dDQvS2NvbmZpZ1xcXCJcXG4gIDM3OlxcdHNvdXJjZSBcXFwiZnMvamJkMi9LY29uZmlnXFxcIlxcbiAgMzg6XFx0XFxuICAzOTpcXHRjb25maWcgRlNfTUJDQUNIRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDoyNS40Nzc0MDcyNjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUxNDYzNTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBvZiBgQlVGRkVSX0hFQURgKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHNlZW1zIHRvIGJlIGEgcXVpY2sgaW50ZXJuYWwgcXVlcnksIGEgbWVudGFsIHNlYXJjaCwgaWYgeW91IHdpbGw6IFwiTGV0J3Mgc2VlIHdobydzIHB1bGxpbmcgaW4gdGhpcyBgQlVGRkVSX0hFQURgIGRlZmluaXRpb24uXCIgVGhlIGdvYWwgaXMgcHJvYmFibHkgZGlhZ25vc3RpYyBvciBleHBsb3JhdG9yeSBpbiBuYXR1cmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZSwgc28gaXRzIHVzYWdlIHBhdHRlcm5zIGFyZSBnb2luZyB0byBiZSBhIGtleSBpbmRpY2F0b3IgdG8gb3RoZXIgYXJlYXMgb2YgY29kZS5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHRoZSBsYXllcnMgb2YgdGhlIGNvZGViYXNlLCBjb25zaWRlcmluZyBwb3NzaWJsZSByZWFzb25zIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEFtIEkgdHJvdWJsZXNob290aW5nIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgd2hlcmUgYSBgQlVGRkVSX0hFQURgIGlzIGltcGxpY2F0ZWQ/IFBlcmhhcHMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgYSBuZXcgc3Vic3lzdGVtIHRoYXQgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBhbmQgYEJVRkZFUl9IRUFEYCB1c2FnZSBpcyBhIGNsdWUgdG8gaXRzIGRlc2lnbj8gT3IsIGlzIHRoaXMgcGFydCBvZiBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCB3aGVyZSBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb24gYSBnaXZlbiBzdHJ1Y3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgYSBwcm9wb3NlZCBjaGFuZ2U/XG5cbkl04oCZcyBhbG1vc3QgYSBtdXNjbGUgbWVtb3J5IHJlc3BvbnNlLCBhIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgY29kZS4gVGhpcyBjb3VsZCBxdWlja2x5IGxlYWQgdG8gdXNpbmcgdG9vbHMgbGlrZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBldmVuIHRoZSBtb3JlIGFkdmFuY2VkIGRlYnVnZ2luZyB0b29scywgdG8gdHJhY2UgdGhlIG9yaWdpbnMgYW5kIGRvd25zdHJlYW0gdXNlcyBvZiB0aGlzIHN0cnVjdHVyZS4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBvciBidWcgcmVsYXRlZCB0byB0aGlzIHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIHNwZWNpZmljIHN0cnVjdHVyZSBjYW4gcmV2ZWFsIGEgZ3JlYXQgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNjQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUwOjQwLjYyMzc2ODIxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4ODUwNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQlVGRkVSX0hFQURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnPTE1PWNvbmZpZyBCTEtfREVWX01EXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTctXFx0c2VsZWN0IEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEIGlmIFNZU0ZTXFxuZHJpdmVycy9tZC9LY29uZmlnOjE4OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xOS1cXHQjIEJMT0NLX0xFR0FDWV9BVVRPTE9BRCByZXF1aXJlbWVudCBzaG91bGQgYmUgcmVtb3ZlZFxcbi0tXFxuZnMvYWRmcy9LY29uZmlnPTI9Y29uZmlnIEFERlNfRlNcXG4tLVxcbmZzL2FkZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9hZGZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9hZGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9hZmZzL0tjb25maWc9Mj1jb25maWcgQUZGU19GU1xcbi0tXFxuZnMvYWZmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2FmZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2FmZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuLS1cXG5mcy9iZWZzL0tjb25maWc9Mj1jb25maWcgQkVGU19GU1xcbi0tXFxuZnMvYmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2JlZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2JlZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2Jmcy9LY29uZmlnPTI9Y29uZmlnIEJGU19GU1xcbi0tXFxuZnMvYmZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvYmZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9iZnMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4ZmF0L0tjb25maWc9Mz1jb25maWcgRVhGQVRfRlNcXG5mcy9leGZhdC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcImV4RkFUIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9leGZhdC9LY29uZmlnOjU6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvZXhmYXQvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuZnMvZXh0Mi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IChERVBSRUNBVEVEKVxcXCJcXG5mcy9leHQyL0tjb25maWc6NDpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9leHQyL0tjb25maWctNS1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbmZzL2V4dDQvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDQvS2NvbmZpZy01LVxcdHNlbGVjdCBKQkQyXFxuLS1cXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xcbi0tXFxuZnMvZjJmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2YyZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2YyZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2ZhdC9LY29uZmlnPTI9Y29uZmlnIEZBVF9GU1xcbmZzL2ZhdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5mcy9mYXQvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2ZhdC9LY29uZmlnLTUtXFx0c2VsZWN0IE5MU1xcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG5mcy9nZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL2dmczIvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2dmczIvS2NvbmZpZy01LVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL2hmcy9LY29uZmlnPTI9Y29uZmlnIEhGU19GU1xcbi0tXFxuZnMvaGZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvaGZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9oZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL2hmc3BsdXMvS2NvbmZpZz0yPWNvbmZpZyBIRlNQTFVTX0ZTXFxuLS1cXG5mcy9oZnNwbHVzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvaGZzcGx1cy9LY29uZmlnOjU6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaGZzcGx1cy9LY29uZmlnLTYtXFx0c2VsZWN0IE5MU1xcbi0tXFxuZnMvaHBmcy9LY29uZmlnPTI9Y29uZmlnIEhQRlNfRlNcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9ocGZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWctNi1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL2lzb2ZzL0tjb25maWc9Mj1jb25maWcgSVNPOTY2MF9GU1xcbmZzL2lzb2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVNPIDk2NjAgQ0RST00gZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9pc29mcy9LY29uZmlnOjQ6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaXNvZnMvS2NvbmZpZy01LVxcdGhlbHBcXG4tLVxcbmZzL2pmcy9LY29uZmlnPTI9Y29uZmlnIEpGU19GU1xcbmZzL2pmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuZnMvamZzL0tjb25maWc6NDpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9qZnMvS2NvbmZpZy01LVxcdHNlbGVjdCBOTFNcXG4tLVxcbmZzL21pbml4L0tjb25maWc9Mj1jb25maWcgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvbWluaXgvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL21pbml4L0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcXG5mcy9uaWxmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOSUxGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9uaWxmczIvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL25pbGZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnPTI9Y29uZmlnIE5URlMzX0ZTXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiAhTlRGU19GUyB8fCBtXFxuZnMvbnRmczMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL250ZnMzL0tjb25maWctNi1cXHRzZWxlY3QgTkxTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvb2NmczIvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL29jZnMyL0tjb25maWctNi1cXHRzZWxlY3QgSkJEMlxcbi0tXFxuZnMvb21mcy9LY29uZmlnPTI9Y29uZmlnIE9NRlNfRlNcXG4tLVxcbmZzL29tZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy9vbWZzL0tjb25maWc6NTpcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9vbWZzL0tjb25maWctNi1cXHRzZWxlY3QgQ1JDX0lUVV9UXFxuLS1cXG5mcy9xbng0L0tjb25maWc9Mj1jb25maWcgUU5YNEZTX0ZTXFxuLS1cXG5mcy9xbng0L0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMT0NLXFxuZnMvcW54NC9LY29uZmlnOjU6XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvcW54NC9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvcW54Ni9LY29uZmlnPTI9Y29uZmlnIFFOWDZGU19GU1xcbi0tXFxuZnMvcW54Ni9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTE9DSyBcXHUwMDI2XFx1MDAyNiBDUkMzMlxcbmZzL3FueDYvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3FueDYvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL3JvbWZzL0tjb25maWc9NTc9Y29uZmlnIFJPTUZTX09OX0JMT0NLXFxuLS1cXG5mcy9yb21mcy9LY29uZmlnLTU5LVxcdGRlZmF1bHQgeSBpZiBST01GU19CQUNLRURfQllfQkxPQ0sgfHwgUk9NRlNfQkFDS0VEX0JZX0JPVEhcXG5mcy9yb21mcy9LY29uZmlnOjYwOlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3JvbWZzL0tjb25maWctNjEtXFxuLS1cXG5mcy91ZGYvS2NvbmZpZz0yPWNvbmZpZyBVREZfRlNcXG5mcy91ZGYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy91ZGYvS2NvbmZpZzo0OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3VkZi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQ19JVFVfVFxcbi0tXFxuZnMvdWZzL0tjb25maWc9Mj1jb25maWcgVUZTX0ZTXFxuLS1cXG5mcy91ZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxPQ0tcXG5mcy91ZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL3Vmcy9LY29uZmlnLTYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDo0My41MTIyODAxNDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTYwOTU2NjY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCVUZGRVJfSEVBRCBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYEJVRkZFUl9IRUFEYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEl0J3Mgc2VsZWN0ZWQgYnkgYSBidW5jaCBvZiBmaWxlIHN5c3RlbXMsIGluY2x1ZGluZyBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYEZBVF9GU2AsIGBHRlMyX0ZTYCwgYW5kIGV2ZW4gdGhpbmdzIGxpa2UgYEJMS19ERVZfTURgLiAgVGhhdCBtZWFucyBgQlVGRkVSX0hFQURgIGlzIHRoZSBkaXJlY3QgY29uZmlnIG9wdGlvbiB0aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24uXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG4qICAgYFdvcnRoRnV6emluZ2A/IFl1cCwgdGhhdCBsb29rcyBnb29kLlxuKiAgIGBFbmFibGVDb25maWdzYD8gT2theSwgd2UndmUgZ290IGBbXCJCVUZGRVJfSEVBRFwiXWAsIGFuZCB3aGlsZSBpdCBtZW50aW9ucyBgW1wiRVhUNF9GU1wiLCBcIkJMT0NLXCJdYCwgXCJCVUZGRVJfSEVBRFwiIGlzIHRoZSBleGFjdCBjb25maWcgdGhhdCBhY3R1YWxseSBjb21waWxlcyBgZnMvYnVmZmVyLmNgLCBzbyB0aGF0J3MgdGhlIG9uZS5cblxuTm93LCBmb3IgdGhlIHJlYWxseSBpbXBvcnRhbnQgcGFydDogdGhlIHN5bWJvbHMgd2UncmUgdGFyZ2V0aW5nLiBUaGUgYEZvY3VzU3ltYm9sc2AgbG9vayByaWdodDpcblxuKiAgIGBiaF9zdWJtaXRgXG4qICAgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2BcbiogICBgd3JpdGVfZGlydHlfYnVmZmVyYFxuKiAgIGBfX3N5bmNfZGlydHlfYnVmZmVyYFxuKiAgIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYFxuKiAgIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYFxuXG5ZZXAsIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBoZXJlLiBTbywgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkIHdpdGggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyODEsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUwOjUzLjEyMTg0OTEwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzY3NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVUZGRVJfSEVBRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJoX3N1Ym1pdFwiLFxuICAgIFwiX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvXCIsXG4gICAgXCJ3cml0ZV9kaXJ0eV9idWZmZXJcIixcbiAgICBcIl9fc3luY19kaXJ0eV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVxcdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVUZGRVJfSEVBRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJoX3N1Ym1pdFwiLFxuICAgIFwiX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvXCIsXG4gICAgXCJ3cml0ZV9kaXJ0eV9idWZmZXJcIixcbiAgICBcIl9fc3luY19kaXJ0eV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYGJoLVxcdTAwM2ViX2ZvbGlvYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAgaW4gYF9fYmhfc3VibWl0KClgLiBCdWZmZXIgaGVhZHMgYWxsb2NhdGVkIGZvciBub24tcGFnZWNhY2hlIGRhdGEgKHN1Y2ggYXMgSkJEMiBzaGFkb3cvZnJvemVuIG1ldGFkYXRhIGJ1ZmZlcnMpIGRvIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9saW8gYW5kIHByZXZpb3VzbHkgdHJpZ2dlcmVkIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGR1cmluZyBzdWJtaXNzaW9uLiBUaGlzIGlzIGNvcmUgZmlsZXN5c3RlbSBidWZmZXIgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NTA6NTMuMTk1MjIyOTI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjczNzYyNzE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUwOjUzLjE5NTY1NTczNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2NzM3MTkwMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDg4MjIyYjMxMWY0ZmU3NjZmMDE3MmNhMjRiN2VjZTgwZTk0YzNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMjo0ODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDQyN2Q4YTgxN2NkNTYuLmY0NmZhNjQxMzAzMmQgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuKysrIGIvZnMvYnVmZmVyLmNcbkBAIC0xMTA2LDcgKzExMDYsOCBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuK1x0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICBvcF9pc193cml0ZShvcGYpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MDo1My4xOTU2NTY2ODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzODQ2NDk4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmlsZSBTeXN0ZW0gQnVmZmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1ha2luZyBhIGNoYW5nZSBpbiBgZnMvYnVmZmVyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgX19iaF9zdWJtaXRgIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGlmZiBmb2N1c2VzIG9uIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGF0aW5nIHRvIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggd3JpdGVzICggYG9wX2lzX3dyaXRlKG9wZilgKS4gVGhpcyBzZWN0aW9uIG9mIGNvZGUgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZGF0YSBidWZmZXJzIGFuZCBJL08gb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGNhY2hpbmcgc3RyYXRlZ2llcyBsaWtlIFwiZHJvcC1iZWhpbmRcIi5cblxuRXNzZW50aWFsbHksIHdoYXQncyBjaGFuZ2VkIGlzIGFuIGFkZGVkIGNoZWNrIGZvciBgYmgtXHUwMDNlYl9mb2xpb2AgYmVmb3JlIHdlIGFjY2VzcyBpdCB3aXRoIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLiBUaGUgb3JpZ2luYWwgY29kZSBsb29rZWQgbGlrZSBpdCB3YXMgZGlyZWN0bHkgZGVyZWZlcmVuY2luZyBgYmgtXHUwMDNlYl9mb2xpb2Agd2l0aG91dCBudWxsIGNoZWNraW5nIGl0IGZpcnN0LiBUaGlzIG1vZGlmaWNhdGlvbiBpcyBsaWtlbHkgYSBudWxsLXBvaW50ZXIgc2FmZXR5IGNoZWNrLiBXZSBvbmx5IHdhbnQgdG8gc2V0IHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcgaWYgdGhlIGJ1ZmZlciBoZWFkIGFjdHVhbGx5IGhhcyBhbiBhc3NvY2lhdGVkIGZvbGlvLlxuXG5UaGlzIHR5cGUgb2YgY2hhbmdlIHVzdWFsbHkgaW5kaWNhdGVzIHRoYXQgdGhlcmUgY291bGQgYmUgYSBzdWJ0bGUgYnVnIG9yIGVkZ2UgY2FzZSB3aGVyZSBgYmgtXHUwMDNlYl9mb2xpb2AgbWlnaHQgYmUgYE5VTExgIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gQSBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGlzIGNyaXRpY2FsIHBhdGggY291bGQgbGVhZCB0byBhIGNyYXNoIG9yIG90aGVyIHVucHJlZGljdGFibGUgYmVoYXZpb3IgZHVyaW5nIEkvTyBvcGVyYXRpb25zLCB3aGljaCBpcyB3aHkgdGhpcyBjaGVjayBpcyBhZGRlZC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHNjZW5hcmlvIHRoYXQgbmVjZXNzaXRhdGVkIHRoaXMgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGJoLVx1MDAzZWJfZm9saW9gICpjb3VsZCogYmUgYE5VTExgIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbSdzIGJ1ZmZlciBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IGBiaW9fc2V0X2ZsYWdgIHdvcmtzIGFuZCBpZiBpdCBoYXMgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBgTlVMTGAgb3IgbWlzc2luZyBgYl9mb2xpb2AuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkcm9wYmVoaW5kYCBhZmZlY3RzIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gYmVoYXZpb3IuIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBnZXQgdGhlIGZ1bGwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMjo1MTo0My41ODAzMTA2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5NTpcXHRcXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcXG4xMDk2OlxcdFxcdEJVR19PTighYnVmZmVyX21hcHBlZChiaCkpO1xcbjEwOTc6XFx0XFx0QlVHX09OKGJ1ZmZlcl9kZWxheShiaCkpO1xcbjEwOTg6XFx0XFx0QlVHX09OKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRpZiAoYnVmZmVyX21ldGEoYmgpKVxcbjExMDM6XFx0XFx0XFx0b3BmIHw9IFJFUV9NRVRBO1xcbjExMDQ6XFx0XFx0aWYgKGJ1ZmZlcl9wcmlvKGJoKSlcXG4xMTA1OlxcdFxcdFxcdG9wZiB8PSBSRVFfUFJJTztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0YmlvID0gYmlvX2FsbG9jKGJoLVxcdTAwM2ViX2JkZXYsIDEsIG9wZiwgR0ZQX05PSU8pO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8gXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjExMTA6XFx0XFx0ICAgIG9wX2lzX3dyaXRlKG9wZikpXFxuMTExMTpcXHRcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcXG4xMTE0OlxcdFxcdFxcdGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7XFxuMTExNTpcXHRcXG4xMTE2OlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBiaC1cXHUwMDNlYl9ibG9ja25yICogKGJoLVxcdTAwM2ViX3NpemUgXFx1MDAzZVxcdTAwM2UgOSk7XFxuMTExNzpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cml0ZV9oaW50O1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEyMDpcXHRcXHRcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVxcdTAwM2ViX2ZvbGlvLCBiaC1cXHUwMDNlYl9zaXplLFxcbjExMjE6XFx0XFx0XFx0XFx0XFx0ICAgICBiaF9vZmZzZXQoYmgpKTtcXG4xMTIyOlxcdFxcdGVsc2VcXG4xMTIzOlxcdFxcdFxcdGJpb19hZGRfdmlydF9ub2ZhaWwoYmlvLCBiaC1cXHUwMDNlYl9kYXRhLCBiaC1cXHUwMDNlYl9zaXplKTtcXG4xMTI0OlxcdFxcbjExMjU6XFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xcbjExMjY6XFx0XFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gYmg7XFxuMTEyNzpcXHRcXG4xMTI4OlxcdFxcdC8qIFRha2UgY2FyZSBvZiBiaCdzIHRoYXQgc3RyYWRkbGUgdGhlIGVuZCBvZiB0aGUgZGV2aWNlICovXFxuMTEyOTpcXHRcXHRndWFyZF9iaW9fZW9kKGJpbyk7XFxuMTEzMDpcXHRcXG4xMTMxOlxcdFxcdGlmICh3YmMpIHtcXG4xMTMyOlxcdFxcdFxcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XFxuMTEzMzpcXHRcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuMTEzNDpcXHRcXHRcXHRcXHR3YmNfYWNjb3VudF9jZ3JvdXBfb3duZXIod2JjLCBiaC1cXHUwMDNlYl9mb2xpbywgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEyOjUxOjQzLjU4MDQ5MDMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNTIzMzI0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIGNoZWNrIGluIGBfX2JoX3N1Ym1pdCgpYC4gSSBzZWUgdGhhdCBpdCdzIGFkZGluZyBgYmgtXHUwMDNlYl9mb2xpbyBcdTAwMjZcdTAwMjZgIGJlZm9yZSB0aGUgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKWAgY2FsbC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBJIGtub3cgd2h5OiB0aGUgY29kZSByaWdodCBiZWxvdyBjaGVja3MgaWYgYGJoLVx1MDAzZWJfZm9saW9gIGV4aXN0cywgYW5kIGlmIGl0IGRvZXNuJ3QsIGl0IHVzZXMgYGJoLVx1MDAzZWJfZGF0YWAgZGlyZWN0bHkuIFNvLCBgYmgtXHUwMDNlYl9mb2xpb2AgKmNhbiogYmUgTlVMTCwgZXNwZWNpYWxseSB3aGVuIHRoZSBibG9jayBoZWFkZXIgaXMgYmFja2VkIGJ5IHZpcnR1YWwgbWVtb3J5LiBUcnlpbmcgdG8gdXNlIGl0IHdoZW4gaXQncyBOVUxMIGlzIGEgY2xhc3NpYyBwcm9ibGVtLlxuXG5NeSBleHBlcnQgaW5zdGluY3QgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGNhc2UgZm9yIEtBU0FOLiBXZSdyZSBkZWFsaW5nIHdpdGggYSBkaXJlY3QgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBLQVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIExldCdzIHRoaW5rIHRocm91Z2ggdGhpcyBtb3JlIHJpZ29yb3VzbHkgdGhvdWdoLiBJdCdzIG5vdCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3IgaXMgaXQgb3BlbmluZyB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgcGFkZGluZyBpc3N1ZXMuIFNvIGdpdmVuIHRoYXQgS0FTQU4gd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZ28gYmFjayBhbmQgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBxdWVzdGlvbnMgZm9yIHRoaXMgY2hlY2ssIGFuZCB0aGUgY29uZGl0aW9ucyBvbiBLTVNBTi4gXCJTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjogcHJpbWFyaWx5IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpXCIuIFl1cCwgdGhpcyBoaXRzIHRoZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdGFyZ2V0LCBhbmQgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZC4gVGhlIHBhdGNoIGlzbid0IHRvdWNoaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5QZXJmZWN0LiBUaGUgcGF0Y2ggc2VlbXMgc29saWQsIGFuZCB0aGUgYXBwcm9hY2ggaXMgY29ycmVjdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDMsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTI6NTE6NDkuOTMyODI2NjkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYmhfc3VibWl0KClgIGJ5IGNoZWNraW5nIHRoYXQgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVxcdTAwM2ViX2ZvbGlvKWAuIFdoZW4gYSBidWZmZXIgaGVhZCBpcyBiYWNrZWQgYnkgdmlydHVhbCBtZW1vcnkgKGBiaC1cXHUwMDNlYl9kYXRhYCkgcmF0aGVyIHRoYW4gYSBmb2xpbywgYGJoLVxcdTAwM2ViX2ZvbGlvYCBpcyBOVUxMLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB1bmluaXRpYWxpemVkIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBzdGFuZGFyZCBjcmFzaCBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow827lr[1] Phase: Succeeded StartedAt: 2026-09-02 12:52:01 +0000 UTC FinishedAt: 2026-09-02 12:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 12:52:01 +0000 UTC FinishedAt: 2026-09-02 12:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2] Phase: Succeeded StartedAt: 2026-09-02 12:52:01 +0000 UTC FinishedAt: 2026-09-02 16:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 12:52:01 +0000 UTC FinishedAt: 2026-09-02 16:34:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 12:52:01 +0000 UTC FinishedAt: 2026-09-02 12:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 12:52:01 +0000 UTC FinishedAt: 2026-09-02 12:52:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow827lr/series-workflow827lr-convert-artifact-2417779484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 12:52:11 +0000 UTC FinishedAt: 2026-09-02 13:09:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 12:52:11 +0000 UTC FinishedAt: 2026-09-02 13:09:21 +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:*e28fb2df-bbd7-4b8f-bb88-19a018578afe,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-workflow827lr/series-workflow827lr-convert-artifact-2417779484/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": "59c95464-88a7-4a18-81d2-1192804628c8", "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-workflow827lr/series-workflow827lr-build-action-247925066/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 12:52:11 +0000 UTC FinishedAt: 2026-09-02 13:09:11 +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:*e28fb2df-bbd7-4b8f-bb88-19a018578afe,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-workflow827lr/series-workflow827lr-convert-artifact-2417779484/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": "59c95464-88a7-4a18-81d2-1192804628c8", "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-workflow827lr/series-workflow827lr-build-action-247925066/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 13:09:21 +0000 UTC FinishedAt: 2026-09-02 13:09:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 13:09:21 +0000 UTC FinishedAt: 2026-09-02 13:09:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 13:09:21 +0000 UTC FinishedAt: 2026-09-02 13:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 13:09:21 +0000 UTC FinishedAt: 2026-09-02 13:09:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow827lr/series-workflow827lr-convert-artifact-3951138907/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 13:09:31 +0000 UTC FinishedAt: 2026-09-02 13:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 13:09:31 +0000 UTC FinishedAt: 2026-09-02 13:11:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*59c95464-88a7-4a18-81d2-1192804628c8,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-workflow827lr/series-workflow827lr-build-action-247925066/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-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 13:11:40 +0000 UTC FinishedAt: 2026-09-02 13:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 13:11:40 +0000 UTC FinishedAt: 2026-09-02 13:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 13:11:40 +0000 UTC FinishedAt: 2026-09-02 13:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 13:11:40 +0000 UTC FinishedAt: 2026-09-02 13:28:17 +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:*e28fb2df-bbd7-4b8f-bb88-19a018578afe,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-workflow827lr/series-workflow827lr-convert-artifact-3951138907/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": "7214e7ee-0d9a-4b2a-a424-4468ed879c95", "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-workflow827lr/series-workflow827lr-build-action-3988078335/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 13:11:40 +0000 UTC FinishedAt: 2026-09-02 13:28:07 +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:*e28fb2df-bbd7-4b8f-bb88-19a018578afe,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-workflow827lr/series-workflow827lr-convert-artifact-3951138907/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": "7214e7ee-0d9a-4b2a-a424-4468ed879c95", "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-workflow827lr/series-workflow827lr-build-action-3988078335/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 13:28:17 +0000 UTC FinishedAt: 2026-09-02 13:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 13:28:17 +0000 UTC FinishedAt: 2026-09-02 13:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 13:28:17 +0000 UTC FinishedAt: 2026-09-02 13:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 13:28:17 +0000 UTC FinishedAt: 2026-09-02 13:30:01 +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:*7214e7ee-0d9a-4b2a-a424-4468ed879c95,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-workflow827lr/series-workflow827lr-build-action-3988078335/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-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 13:30:10 +0000 UTC FinishedAt: 2026-09-02 16:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 13:30:10 +0000 UTC FinishedAt: 2026-09-02 16:34:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"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:*59c95464-88a7-4a18-81d2-1192804628c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7214e7ee-0d9a-4b2a-a424-4468ed879c95,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-workflow827lr/series-workflow827lr-build-action-247925066/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-workflow827lr/series-workflow827lr-build-action-3988078335/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 13:30:10 +0000 UTC FinishedAt: 2026-09-02 13:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 13:30:10 +0000 UTC FinishedAt: 2026-09-02 13:30:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"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-workflow827lr/series-workflow827lr-convert-artifact-1462666068/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 13:30:10 +0000 UTC FinishedAt: 2026-09-02 13:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 13:30:10 +0000 UTC FinishedAt: 2026-09-02 13:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 13:30:11 +0000 UTC FinishedAt: 2026-09-02 13:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 13:30:21 +0000 UTC FinishedAt: 2026-09-02 16:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow827lr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bh_submit","__block_write_full_folio","write_dirty_buffer","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["BUFFER_HEAD"],"series_id":"aa294ce3-4a5b-4769-85ed-7329eec1d8b4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 13:30:21 +0000 UTC FinishedAt: 2026-09-02 16:34:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*59c95464-88a7-4a18-81d2-1192804628c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7214e7ee-0d9a-4b2a-a424-4468ed879c95,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-workflow827lr/series-workflow827lr-build-action-247925066/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-workflow827lr/series-workflow827lr-build-action-3988078335/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-workflow827lr/series-workflow827lr-convert-artifact-1462666068/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,}