Name: series-workflownwskv Phase: Succeeded StartedAt: 2026-09-08 07:26:31 +0000 UTC FinishedAt: 2026-09-08 09:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[0] Phase: Succeeded StartedAt: 2026-09-08 07:26:31 +0000 UTC FinishedAt: 2026-09-08 08:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 07:26:31 +0000 UTC FinishedAt: 2026-09-08 08:11:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_SYNC_TTY", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_SYNC_TTY", "TTY" ], "series_id": "fdabecea-19e5-4b37-a560-b31356624bda" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_sync_txmunge", "ppp_sync_send" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX3N5bmNfdHhtdW5nZSYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyBoZWFkcm9vbSBleHBhbnNpb24gYW5kIGNvcHktb24td3JpdGUgaGFuZGxpbmcgaW4gYHBwcF9zeW5jX3R4bXVuZ2UoKWAgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgcmVhbGxvY2F0aW9uIChgZGV2X2FsbG9jX3NrYigpYCwgYHNrYl9yZXNlcnZlKClgLCBgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgpYCkgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLlxuXG5Gb2xsb3dpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgYm90aCBuZXdseSBwdXNoZWQgYnl0ZXMgdmlhIGBza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztgIGFuZCBgc2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7YC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGJyYW5jaGluZyBkb2VzIG5vdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBleGhhdXN0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBza2IgYnVmZmVyIGhhbmRsaW5nIGFyZSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2M2QwYzJjNThkODBhN2JjOTZjY2UxYTllYzM3ZTA3MzgwOTZhODA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxMDowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtNDU1LDE3ICYjNDM7NDU1LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHQvKiBwcmVwZW5kIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgaWYgbmVjZXNzYXJ5ICovXG4gXHRpZiAoKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgMikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpucGt0ID0gZGV2X2FsbG9jX3NrYihza2ItXHUwMDNlbGVuICYjNDM7IDIpO1xuLVx0XHRcdGlmIChucGt0ID09IE5VTEwpIHtcbi1cdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrYl9yZXNlcnZlKG5wa3QsMik7XG4tXHRcdFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsXG4tXHRcdFx0XHQgICAgICBza2JfcHV0KG5wa3QsIHNrYi1cdTAwM2VsZW4pLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHNrYiA9IG5wa3Q7XG4mIzQzO1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdHNrYl9wdXNoKHNrYiwyKTtcbiBcdFx0c2tiLVx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2M2QwYzJjNThkODBhN2JjOTZjY2UxYTllYzM3ZTA3MzgwOTZhODA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODoxMDowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMKaW5kZXggZjg3ZDQzZmFlZWFiNS4uZWJkNjJhN2FiNTRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMKQEAgLTQ1NSwxNyAmIzQzOzQ1NSw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJLyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqLwogCWlmICgoYXAtJmd0O2ZsYWdzICZhbXA7IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHsKLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgMikgewotCQkJc3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi0mZ3Q7bGVuICYjNDM7IDIpOwotCQkJaWYgKG5wa3QgPT0gTlVMTCkgewotCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJc2tiX3Jlc2VydmUobnBrdCwyKTsKLQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLAotCQkJCSAgICAgIHNrYl9wdXQobnBrdCwgc2tiLSZndDtsZW4pLCBza2ItJmd0O2xlbik7Ci0JCQljb25zdW1lX3NrYihza2IpOwotCQkJc2tiID0gbnBrdDsKJiM0MzsJCWlmIChza2JfY293X2hlYWQoc2tiLCAyKSkgewomIzQzOwkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCXJldHVybiBOVUxMOwogCQl9CiAJCXNrYl9wdXNoKHNrYiwyKTsKIAkJc2tiLSZndDtkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIHJlcXVlc3QgaXMgYWJvdXQgZGVmZW5zaXZlIGNvZGUgZXZhbHVhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBrZXJuZWwgZnV6emluZy4gVGhhdCBtZWFucyBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG5vdCBqdXN0IHN0YW5kYXJkIFFBIG9yIHJvdXRpbmUgdHJpYWdlLiBFeGNlbGxlbnQuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCBhbmQgaXMgZm9jdXNlZCBvbiB0aGUgYHBwcF9zeW5jX3R4bXVuZ2VgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGF0IHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgbWFudWFsIGBkZXZfYWxsb2Nfc2tiYCwgY29weSwgYW5kIGZyZWUgc2VxdWVuY2Ugd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIGBza2JfY293X2hlYWRgIGlzIGEgQ29weS1Pbi1Xcml0ZSBvcGVyYXRpb24sIHdoaWNoIGdlbmVyYWxseSBhaW1zIGF0IG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLiBUaGUgY3J1Y2lhbCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYXJlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGVudGlyZSBmaWxlLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLCB1c2luZyBlaXRoZXIgYSByZWFkLWZpbGUgdG9vbCBvciBncmVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9zeW5jX3R4bXVuZ2VgIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBQUFAgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSB0aW1pbmcgaXNzdWVzLCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgKHVubGlrZWx5LCBidXQgSSBhbHdheXMgY2hlY2spLCBvciBhbnkgdW5pbnRlbmRlZCBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIHRoZSBDT1cgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwbGFjZXMgd2hlcmUgdGhlIGFzc3VtcHRpb24gb2Ygb3duZXJzaGlwIG9yIGRhdGEgaW50ZWdyaXR5IG1pZ2h0IGJlIGFsdGVyZWQuIEJhc2VkIG9uIHRoaXMsIEkmIzM5O2xsIHRoZW4gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBydW4gdGhpcyB0aHJvdWdoIFN5emthbGxlciBvciBzdWdnZXN0IHRoYXQgYW5vdGhlciBzZWN1cml0eSBhdWRpdCBpcyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ0MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NDI6XHRcdH1cbiA0NDM6XHRcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gNDQ0Olx0XHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiA0NDU6XHRcbiA0NDY6XHRcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcbiA0NDc6XHRcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXG4gNDQ4Olx0XHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cbiA0NDk6XHRcdCAqL1xuIDQ1MDpcdFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFx1MDAyNlx1MDAyNiAxIFx1MDAzYz0gZGF0YVsyXSBcdTAwMjZcdTAwMjYgZGF0YVsyXSBcdTAwM2M9IDc7XG4gNDUxOlx0XG4gNDUyOlx0XHQvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBvcHRpb24gZW5hYmxlZCAqL1xuIDQ1MzpcdFx0aWYgKGRhdGFbMF0gPT0gMCBcdTAwMjZcdTAwMjYgKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiAhaXNsY3ApXG4gNDU0Olx0XHRcdHNrYl9wdWxsKHNrYiwxKTtcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiA0NTc6XHRcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbiA0NTg6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKSB7XG4gNDU5Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDYwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDYxOlx0XHRcdH1cbiA0NjI6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MzpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjQ6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDY1Olx0XHR9XG4gNDY2Olx0XG4gNDY3Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2ODpcdFxuIDQ2OTpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDcwOlx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDcxOlx0XG4gNDcyOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MzpcdH1cbiA0NzQ6XHRcbiA0NzU6XHQvKlxuIDQ3NjpcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXG4gNDc3Olx0ICovXG4gNDc4Olx0XG4gNDc5Olx0LypcbiA0ODA6XHQgKiBTZW5kIGEgcGFja2V0IHRvIHRoZSBwZWVyIG92ZXIgYW4gc3luYyB0dHkgbGluZS5cbiA0ODE6XHQgKiBSZXR1cm5zIDEgaWZmIHRoZSBwYWNrZXQgd2FzIGFjY2VwdGVkLlxuIDQ4MjpcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXG4gNDgzOlx0ICogYXQgc29tZSBsYXRlciB0aW1lLlxuIDQ4NDpcdCAqL1xuIDQ4NTpcdHN0YXRpYyBpbnRcbiA0ODY6XHRwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0ODc6XHR7XG4gNDg4Olx0XHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4gNDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBQUCBTeW5jVFRZIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIEtjb25maWcgZm9yIGBwcHBfc3luY3R0eS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBTeW5jVFRZIGRyaXZlciBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgUFBQIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMsIHN5bWJvbHMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBndWFyZHJhaWxzLCB0aGUgKmlmKiBzdGF0ZW1lbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhpcyBkcml2ZXIgaXMgZXZlbiBjb25zaWRlcmVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFBQUCBvcHRpb25zLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgcGVyaGFwcyByZWxhdGVkIHRvIHNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24gb3Igc3BlY2lmaWMgVUFSVCBjb250cm9sbGVycz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBvdGhlciBQUFAgZHJpdmVycywgYW5kIGhvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhpcyBkcml2ZXIgZWZmZWN0cyB0aG9zZS4gV2hhdCBhYm91dCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBvZiB0aGUgU3luY1RUWSBkcml2ZXI/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVmYXVsdCB2YWx1ZXMgb3Igc3VidGxlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBzcGVjaWZpYyBzY2VuYXJpb3M/IFRoaXMgcmV2aWV3IHdpbGwgaGVscCBpZGVudGlmeSB3aGV0aGVyIHRoaXMgbW9kdWxlIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgYW5kIGZsYWcgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgzPWNvbmZpZyBQUFBfQVNZTkNcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk3LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19QUFBfTVBQRSkgJiM0Mzs9IHBwcF9tcHBlLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUFBQX1NZTkNfVFRZKSAmIzQzOz0gcHBwX3N5bmN0dHkub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUFBPWCkgJiM0Mzs9IHBwcG94Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFBQUCBLY29uZmlnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBpbiBvbiBsaW5lIDE5NiAoZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBvZiBjb3Vyc2UpLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIFBQUCBpcyBkZWZpbmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgZGVwZW5kZW5jeSwgYSBkZWZhdWx0IHZhbHVlLCBvciBhIHByb21wdCBzdHJpbmcgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uIGluIHRoZSBjb250ZXh0IG9mIGEgY3VycmVudCBidWlsZCBpc3N1ZS4gS25vd2luZyB0aGUgY29udGV4dCwgSSBleHBlY3QgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhbmQgc3RhcnQgYW5hbHl6aW5nLiBJIGFudGljaXBhdGUgaXQgd2lsbCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB1bmRlcnN0YW5kLCBidXQgSSBuZWVkIHRvIHN0YXJ0IHNvbWV3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXG4gMTgxOlx0aWYgVFRZXG4gMTgyOlx0XG4gMTgzOlx0Y29uZmlnIFBQUF9BU1lOQ1xuIDE4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuIDE4NTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzdGFuZGFyZFxuIDE4ODpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzdWNoIGFzIENPTTEgb3IgQ09NMiBvbiBhIFBDLiAgSWYgeW91IHVzZVxuIDE4OTpcdFx0ICBhIG1vZGVtIChub3QgYSBzeW5jaHJvbm91cyBvciBJU0ROIG1vZGVtKSB0byBjb250YWN0IHlvdXIgSVNQLCB5b3VcbiAxOTA6XHRcdCAgbmVlZCB0aGlzIG9wdGlvbi5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAxOTM6XHRcbiAxOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxOTU6XHRcbiAxOTY6XHRjb25maWcgUFBQX1NZTkNfVFRZXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcbiAyMDA6XHRcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxuIDIwMTpcdFx0ICBsaW5lcyBsaWtlIFQxL0UxLlxuIDIwMjpcdFxuIDIwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDIwNDpcdFxuIDIwNTpcdGVuZGlmICMgVFRZXG4gMjA2Olx0XG4gMjA3Olx0ZW5kaWYgIyBQUFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQUFAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLCBhbmQgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBzaG91bGQgYmUgc3BlbGxlZCBvdXQgdGhlcmUgdXNpbmcgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSB0b3Agb2YgdGhhdCBmaWxlIGltbWVkaWF0ZWx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIGFsbG93IG1lIHRvIGRldGVybWluZSB3aGVyZSBteSBuZXh0IHF1ZXN0aW9ucyBzaG91bGQgYmUgcG9zZWQuIEkmIzM5O20gaG9waW5nIEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIFBQUF9CU0RDT01QXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoIG9mIGBwcHBfc3luY3R0eWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9zeW5jdHR5YCBpcyBhY3R1YWxseSAqdXNlZCogYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdCYjMzk7cyByZWFjaGVkIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGNvcmUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgdGhpcyBtb2R1bGUgY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBwc2V1ZG8tdGVybWluYWwgKHB0eSkgb3IgdGVybWluYWwgKHR0eSkgZGV2aWNlIGluIFFFTVUgdmlhIHRoZSBgVElPQ1NFVERgIGlvY3RsIHN5c3RlbSBjYWxsLCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyB0aGUgYE5fU1lOQ19QUFBgIGxpbmUgZGlzY2lwbGluZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSB2ZWN0b3IuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHBwcF9zeW5jdHR5LmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgbGluZSBkaXNjaXBsaW5lIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGlzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBhdHRhY2htZW50IHBvc3NpYmlsaXRpZXMgYW5kIGFueSBwb3RlbnRpYWwgY29uc3RyYWludHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfcmVnaXN0ZXJfbGRpc2N8Tl9TWU5DX1BQUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MzA5PXBwcF9hc3luY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMxMi1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMTM6XHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXHUwMDI2cHBwX2xkaXNjKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMTQtXHRpZiAoZXJyICE9IDApXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9Mjg2PXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBwcHBfc3luY19sZGlzYyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4Ny1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI4ODpcdC5udW1cdD0gTl9TWU5DX1BQUCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4OS1cdC5uYW1lXHQ9IFwmIzM0O3BwcHN5bmNcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MzAwPXBwcF9zeW5jX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDMtXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzozMDQ6XHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzA1LVx0aWYgKGVyciAhPSAwKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTY1ND1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NjU1Ok1PRFVMRV9BTElBU19MRElTQyhOX1NZTkNfUFBQKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBQIFN5bmMgTGluZSBEaXNjaXBsaW5lKioKCk9rYXksIHNvIGBOX1NZTkNfUFBQYC4uLiB0aGF0JiMzOTtzIGEgbGluZSBkaXNjaXBsaW5lLCByaWdodD8gQW5kIHN5emthbGxlciwgY2xldmVyIHRoaW5nIHRoYXQgaXQgaXMsIGNhbiBqdXN0IHNsYXAgaXQgb250byAqYW55KiBwdHkgb3IgdHR5IHVzaW5nIGBpb2N0bGAgYW5kIGBUSU9DU0VURGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aGlzIGlzbiYjMzk7dCBzb21lIG5pY2hlLCBkZWVwbHkgYnVyaWVkIGZ1bmN0aW9uYWxpdHk7IGl0JiMzOTtzIHBvdGVudGlhbGx5IHZlcnkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBwYXRoLiBXaGVuIHBhY2tldHMgZ28gb3V0IG92ZXIgYSBQUFAgY2hhbm5lbCB0aGF0JiMzOTtzIGJlZW4gY29uZmlndXJlZCB3aXRoIGBOX1NZTkNfUFBQYCwgSSBrbm93IGBwcHBfc3luY19zZW5kYCBnZXRzIHRyaWdnZXJlZCwgYW5kIHRoYXQgaW4gdHVybiBjYWxscyBgcHBwX3N5bmNfdHhtdW5nZWAuIFNvLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiBlbHNlIGBwcHBfc3luY190eG11bmdlYCBpcyBjYWxsZWQuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2UgaXRzIHVzZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgb3RoZXIgYXJlYXMgb2YgaW50ZXJlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwPXN0cnVjdCBzeW5jcHBwIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjgzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtODQtc3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NDMxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZipcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQzMjpwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQzMy17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NDg2PXBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQ5My1cdFx0cmV0dXJuIDA7XHQvKiBhbHJlYWR5IGZ1bGwgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQ5NDpcdHNrYiA9IHBwcF9zeW5jX3R4bXVuZ2UoYXAsIHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00OTUtXHRpZiAoc2tiICE9IE5VTEwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBwcHBfc3luY190eG11bmdlYCAqaXMqIHJlYWNoYWJsZSDigJMgaXQmIzM5O3MgdXNlZCB3aGVuIHNlbmRpbmcgcGFja2V0cyBvdmVyIGEgYE5fU1lOQ19QUFBgIHR0eSBsaW5lIGRpc2NpcGxpbmUuIFdlIGNhbiBnZXQgdGhpcyBzZXR1cCB2aWEgYHB0bXhgLCBgcHRzYCwgb3IgYHR0eWAsIGFuZCB0aGVuIHJlZ2lzdGVyIGl0IGFzIGEgUFBQIGNoYW5uZWwgdXNpbmcgYFBQUElPQ0FUVENIQU5gLCBgUFBQSU9DQVRUQUNIYCwgb3IgYFRJT0NTRVREYCwgdHJhbnNtaXR0aW5nIHBhY2tldHMgdXNpbmcgZWl0aGVyIHN0YW5kYXJkIG5ldHdvcmsgbWV0aG9kcywgdGhlIFBQUCB1bml0IHNvY2tldCBvciBnZW5lcmljIFBQUCBpb2N0bHMuIFRoZSBjcml0aWNhbCBjYWxsIGlzIGBwcHBfc3luY19zZW5kYCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwcHBfc3luY190eG11bmdlYC4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBob3cgaGVhZHJvb20gaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgaWYgd2UgbmVlZGVkIG1vcmUgaGVhZHJvb20gKGFuZCB0aGUgYFNDX0NPTVBfQUNgIGZsYWcgd2FzbiYjMzk7dCBzZXQgb3IgaWYgaXQmIzM5O3MgTENQKSwgaXQgd291bGQgYWxsb2NhdGUgYSBuZXcgYHNrX2J1ZmZgIChgbnBrdGApLCBjb3B5IHRoZSBkYXRhLCBhbmQgZnJlZSB0aGUgb3JpZ2luYWwgKGBza2JgKS4gVGhlIGNydWNpYWwgZGlmZmVyZW5jZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gVGhpcyBhaW1zIHRvIGVuc3VyZSB0aGUgYHNrYmAgaGFzIGF0IGxlYXN0IDIgYnl0ZXMgb2YgaGVhZHJvb20sIG1ha2luZyBpdCB3cml0YWJsZSDigJMgcG90ZW50aWFsbHkgY2xvbmluZyB0aGUgYHNrYmAgaWYgbmVjZXNzYXJ5LgoKQnV0IHRoaXMgcmFpc2VzIHF1ZXN0aW9ucyEgVGhlIGNvZGUgY2hlY2tzIHRoZSByZXR1cm4gb2YgYHNrYl9jb3dfaGVhZGAuIEEgKmZhaWx1cmUqIGZyb20gYHNrYl9jb3dfaGVhZGAgaXMgaW5kaWNhdGVkIGJ5IGEgbm9uLXplcm8gcmV0dXJuLCB3aGljaCBpcyBjb25jZXJuaW5nLiBEb2VzIGl0IGZyZWUgdGhlIGBza2JgIGluIGNhc2Ugb2YgZmFpbHVyZT8gVGhlIGNvZGUgKmltbWVkaWF0ZWx5KiBga2ZyZWVfc2tiKHNrYilgIHVwb24gZmFpbHVyZS4gQnV0IGlmIHRoZSBjbG9uZSBmYWlscywgaXQgaXMgYSBjb3B5LW9uLXdyaXRlIHNvIHRoZSAqY2FsbGVyKiBzdGlsbCBob2xkcyBhIHZhbGlkIHJlZmVyZW5jZS4gV2hhdCBoYXBwZW5zIHdpdGggdGhpcyBgc2tiYCBpbiB0aGlzIGNhc2U/IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGxvb2tzIGNvcnJlY3QgZ2l2ZW4gaXQgaGFzIHRoZSBlcXVpdmFsZW50IGVmZmVjdCBvZiB0aGUgcHJpb3IgaW1wbGVtZW50YXRpb24sIHdoZXJlIGEgbmV3IGBza2JgIHdvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCB0aGUgb2xkIHNrYiBmcmVlZCwgYnV0IHdpdGhvdXQgZG91YmxlIGZyZWVzLgoKV2UgbmVlZCB0byByZWFsbHkgZGl2ZSBpbnRvIHRoZSBgc2tiX2Nvd19oZWFkYCBtYWNybyBpdHNlbGYgdG8gYmUgY2VydGFpbi4gV2Uga25vdyB0aGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyBlaXRoZXIgYHBza2JfZXhwYW5kX2hlYWRgIG9yIGBza2JfY293X2hlYWRgLCBidXQgbGV0IG1lIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBlbnRpcmVseSBzdXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9jb3dfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0zOTI2PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMS0vKipcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzkzMjogKlx0c2tiX2Nvd19oZWFkIC0gc2tiX2NvdyBidXQgb25seSBtYWtpbmcgdGhlIGhlYWQgd3JpdGFibGVcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMy0gKlx0QHNrYjogYnVmZmVyIHRvIGNvd1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk0MC0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mzk0MTpzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBza2J1ZmYuaCBmb3IgYSBTcGVjaWZpYyBJc3N1ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCB0YXJnZXQgbGluZXMgMzkyNS0zOTUwLiBTb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZSwgYW5kIGJhc2VkIG9uIHRoZSBzeW1wdG9tcyBJJiMzOTt2ZSBiZWVuIHNlZWluZywgSSBzdXNwZWN0IHRoZSBpc3N1ZSBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcsIG9yIG5vdCBoYW5kbGluZywgc29tZXRoaW5nIHdpdGhpbiB0aGF0IGNodW5rIG9mIHRoZSBza2Igc3RydWN0dXJlIG1hbmFnZW1lbnQuIEkga25vdyB0aGF0IGFyZWEgY292ZXJzIHNvbWUgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSwgbGlrZWx5IHRvdWNoaW5nIG9uIGZyYWdtZW50IGhhbmRsaW5nLCBvciBtYXliZSBzb21lIG9mIHRoZSBhbmNpbGxhcnkgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRob3NlIGxpbmVzIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgZGV2aWF0ZXMgZnJvbSBlc3RhYmxpc2hlZCBiZXN0IHByYWN0aWNlcywgb3IgdGhhdCBtaWdodCBub3QgYmUgY29ycmVjdGx5IGNvbnNpZGVyaW5nIHJlY2VudCBjaGFuZ2VzIHRvIG91ciBoYXJkd2FyZS4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhhdCByYW5nZS4gSWYgbm90aGluZyBwb3BzIGltbWVkaWF0ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbHMgdG8gc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTI1Olx0ICovXG4zOTI2Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4zOTI3Olx0e1xuMzkyODpcdFx0cmV0dXJuIF9fc2tiX2Nvdyhza2IsIGhlYWRyb29tLCBza2JfY2xvbmVkKHNrYikpO1xuMzkyOTpcdH1cbjM5MzA6XHRcbjM5MzE6XHQvKipcbjM5MzI6XHQgKlx0c2tiX2Nvd19oZWFkIC0gc2tiX2NvdyBidXQgb25seSBtYWtpbmcgdGhlIGhlYWQgd3JpdGFibGVcbjM5MzM6XHQgKlx0QHNrYjogYnVmZmVyIHRvIGNvd1xuMzkzNDpcdCAqXHRAaGVhZHJvb206IG5lZWRlZCBoZWFkcm9vbVxuMzkzNTpcdCAqXG4zOTM2Olx0ICpcdFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHNrYl9jb3cgZXhjZXB0IHRoYXQgd2UgcmVwbGFjZSB0aGVcbjM5Mzc6XHQgKlx0c2tiX2Nsb25lZCBjaGVjayBieSBza2JfaGVhZGVyX2Nsb25lZC4gIEl0IHNob3VsZCBiZSB1c2VkIHdoZW5cbjM5Mzg6XHQgKlx0eW91IG9ubHkgbmVlZCB0byBwdXNoIG9uIHNvbWUgaGVhZGVyIGFuZCBkbyBub3QgbmVlZCB0byBtb2RpZnlcbjM5Mzk6XHQgKlx0dGhlIGRhdGEuXG4zOTQwOlx0ICovXG4zOTQxOlx0c3RhdGljIGlubGluZSBpbnQgc2tiX2Nvd19oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbjM5NDI6XHR7XG4zOTQzOlx0XHRyZXR1cm4gX19za2JfY293KHNrYiwgaGVhZHJvb20sIHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpO1xuMzk0NDpcdH1cbjM5NDU6XHRcbjM5NDY6XHQvKipcbjM5NDc6XHQgKlx0c2tiX3BhZHRvXHQtIHBhZCBhbiBza2J1ZmYgdXAgdG8gYSBtaW5pbWFsIHNpemVcbjM5NDg6XHQgKlx0QHNrYjogYnVmZmVyIHRvIHBhZFxuMzk0OTpcdCAqXHRAbGVuOiBtaW5pbWFsIGxlbmd0aFxuMzk1MDpcdCAqXG4zOTUxOlx0ICpcdFBhZHMgdXAgYSBidWZmZXIgdG8gZW5zdXJlIHRoZSB0cmFpbGluZyBieXRlcyBleGlzdCBhbmQgYXJlXG4zOTUyOlx0ICpcdGJsYW5rZWQuIElmIHRoZSBidWZmZXIgYWxyZWFkeSBjb250YWlucyBzdWZmaWNpZW50IGRhdGEgaXRcbjM5NTM6XHQgKlx0aXMgdW50b3VjaGVkLiBPdGhlcndpc2UgaXQgaXMgZXh0ZW5kZWQuIFJldHVybnMgemVybyBvblxuMzk1NDpcdCAqXHRzdWNjZXNzLiBUaGUgc2tiIGlzIGZyZWVkIG9uIGVycm9yLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBwcHBfc3luY3R0eS5jKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBgcHBwX3N5bmN0dHkuY2AuIE15IGluaXRpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gYmFzZWQgb24gdGhlIGVzdGFibGlzaGVkIG1ldGhvZG9sb2d5LgoKRmlyc3QsIGxldCYjMzk7cyBjb25maXJtIHJlYWNoYWJpbGl0eS4gVGhlIHRleHQgY2xlYXJseSBzdGF0ZXMgdGhhdCBgcHBwX3N5bmN0dHlgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIG9yIHNvZnR3YXJlIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSB0aGUgVFRZIGxpbmUgZGlzY2lwbGluZSBgTl9TWU5DX1BQUGAgb24gcHNldWRvLXRlcm1pbmFscyBhbmQgdmlydHVhbCBUVFlzLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSAqcmVhY2hhYmxlKiBjb2RlLiBHb29kLgoKTm93LCByZWZlcnJpbmcgdG8gU2VjdGlvbiAzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uJiMzNDsgQ2hlY2suIEl0JiMzOTtzIGFjY2Vzc2libGUsIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgaXQuIFNlY3Rpb24gMyBhbHNvIG1lbnRpb25zIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywgd2hpY2ggdGhpcyBzZWVtcyB0byBmYWxsIGludG8gd2l0aCB0aGUgVFRZIGludGVyZmFjZSwgc28gdGhhdCYjMzk7cyBhbm90aGVyIHBvc2l0aXZlIGluZGljYXRvci4KCkFuZCB0aGVuLCBsb29raW5nIGF0IFNlY3Rpb24gMSwgaXQgcmVtaW5kcyBtZSBub3QgdG8gYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yIHJlZmFjdG9yaW5nLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCByZW1pbmRlciwgYmVjYXVzZSB0aG9zZSBjaGFuZ2VzIGNhbiBpbnRyb2R1Y2UgYnVncyBvciBzdWJ0bGUgc2hpZnRzLiBTaW5jZSAqcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSogaXMgYmVpbmcgbW9kaWZpZWQsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIE5vIHF1ZXN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZnV6emluZyBmb2N1cy4gSSBrbm93IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgcHBwX3N5bmNfdHhtdW5nZWAuIFNvLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzIGFuZCBlbnRyeSBwb2ludHMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBmb3Igb3RoZXIgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb25zIHdpdGhpbiBgcHBwX3N5bmN0dHkuY2AgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTXkgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCBmb3IgZnVuY3Rpb25zIHdpdGhpbiBgcHBwX3N5bmN0dHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBjb250ZXh0IGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWjAtOV9dJiM0MzsuKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwPXN0cnVjdCBzeW5jcHBwIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjgzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODQ6c3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo4NTpzdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTg2LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODc6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODg6c3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo4OTpzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjkwOnN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTEtXHRcdFx0ICAgaW50IGNvdW50KTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0xMDE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjEwMjpwcHBfcHJpbnRfYnVmZmVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBfX3U4ICpidWYsIGludCBjb3VudClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwMy17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTE4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjExOTpwcHBfc3luY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTE2OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTcwOnBwcF9zeW5jX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xNzEte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTE5MD1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTkxOnBwcF9zeW5jX3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHU4ICpidWYsIHNpemVfdCBjb3VudCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE5Mi1cdCAgICAgIHZvaWQgKipjb29raWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTIwMT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjAyOnBwcF9zeW5jX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjAzLVx0ICAgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yMDg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjA5OnBwcF9zeW5jdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjEwLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yNTY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI1NzpwcHBfc3luY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpjZmxhZ3MsXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yNTgtXHRcdCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjczPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyNzQ6cHBwX3N5bmNfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yNzUte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI5OT1zdGF0aWMgaW50IF9faW5pdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzAwOnBwcF9zeW5jX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwMS17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MzE0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMxNTpwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzE2LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MDUtICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MDY6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MDcte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MzI6cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MzMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQ4NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0ODY6cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00ODcte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwNz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo1MDg6cHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01MDkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTU1OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NTYwOnBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01NjEte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTU4Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NTg3OnBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01ODgte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTY0NT1zdGF0aWMgdm9pZCBfX2V4aXRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY0NjpwcHBfc3luY19jbGVhbnVwKHZvaWQpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy02NDcte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MTptb2R1bGVfaW5pdChwcHBfc3luY19pbml0KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1Mjptb2R1bGVfZXhpdChwcHBfc3luY19jbGVhbnVwKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MzpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UFBQIHN5bmNocm9ub3VzIFRUWSBjaGFubmVsIG1vZHVsZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo2NTQ6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1NTpNT0RVTEVfQUxJQVNfTERJU0MoTl9TWU5DX1BQUCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQ0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgUFBQIFN5bmNocm9ub3VzIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgcHBwX3N5bmNfdHhtdW5nZWAgaXMgaW52b2tlZCBkaXJlY3RseSBmcm9tIGBwcHBfc3luY19zZW5kYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhlIGRvdHMuIEkgcmVjYWxsIHRoYXQgYHBwcF9zeW5jX3NlbmRgIGlzLCBpbiBlc3NlbmNlLCB0aGUgYC5zdGFydF94bWl0YCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRyYW5zbWlzc2lvbiBhY3R1YWxseSBiZWdpbnMsIHRoZSBjaGFubmVsIG9wZXJhdGlvbnMmIzM5OyBgLnN0YXJ0X3htaXRgIGhvb2sgZm9yIHRoaXMgc3BlY2lmaWMgUFBQIGNoYW5uZWwuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHN0cnVjdHVyZSB1c2FnZSBvZiBgcHBwX3N5bmNfc2VuZGAgd2l0aGluIGBwcHBfc3luY3R0eS5jYC4gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggd2hhdCBJIGV4cGVjdCBhbmQgdGhhdCBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGltcG9ydGFudCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfY2hhbm5lbF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDUtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDctXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTkwPXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkyLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTM6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05NC1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA2LVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYzo2MDc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA4LVx0LnN0YXJ0X3htaXQgPSBwcHRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBQIFN5bmMgVFRZIE1vZHVsZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBwcHBfc3luY19zZW5kYCBhcHBlYXJzIHRvIGJlIGEgd3JhcHBlciBvciBhbiBhbGlhcyBmb3IgYHN5bmNfb3BzLnN0YXJ0X3htaXRgLiBUaGUga2V5IGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IG1vcmUgY2xvc2VseSBpcyBgcHBwX3N5bmNfdHhtdW5nZWAgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcsIGFuZCBgcHBwX3N5bmNfc2VuZGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiBjYWxsaW5nIGl0LiBJIGFsc28gc2hvdWxkIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93IHNlZW1zIHRvIGJlIG1hbmFnZWQgdGhyb3VnaCBgcHBwX3N5bmNfb3BlbmAsIGBwcHBfc3luY3R0eV9pb2N0bGAsIGFuZCBgcHBwX3N5bmNfaW9jdGxgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHN5bmMgdHR5IGNoYW5uZWwgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19QUFBfU1lOQ19UVFlgIGlzIGNsZWFybHkgZGVwZW5kZW50IG9uIGBDT05GSUdfUFBQYCBhbmQgYENPTkZJR19UVFlgIC0gbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IHNjYW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRob3JvdWdobHkgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UuKmRyaXZlcnMvbmV0L3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgTmV0d29yayBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgaXQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMgYXJvdW5kIGxpbmUgNTI4LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3Igb3B0aW9uIHJlc2lkZXMuIFRpbWUgdG8gc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBoaWRpbmcgdGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcJiMzNDtcbiA1MjE6XHRcbiA1MjI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCYjMzQ7XG4gNTIzOlx0XG4gNTI0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXCYjMzQ7XG4gNTI1Olx0XG4gNTI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1wmIzM0O1xuIDUyNzpcdFxuIDUyODpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuIDUyOTpcdFxuIDUzMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcJiMzNDtcbiA1MzE6XHRcbiA1MzI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCYjMzQ7XG4gNTMzOlx0XG4gNTM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCYjMzQ7XG4gNTM1Olx0XG4gNTM2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcJiMzNDtcbiA1Mzc6XHRcbiA1Mzg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2FuL0tjb25maWdcJiMzNDtcbiA1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjAKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQUFAgU3luY2hyb25vdXMgVFRZIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyByZWxldmFudCB0byB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBkcml2ZXIgKGBDT05GSUdfUFBQYCwgYENPTkZJR19QUFBfU1lOQ19UVFlgLCBhbmQgYENPTkZJR19UVFlgKSBhcmUgZW5hYmxlZC4gVGhlIGBDT05GSUdfVFRZYCBvcHRpb24gaXMsIG9mIGNvdXJzZSwgc3RhbmRhcmQgb24gYW4geDg2IGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBpbiB0ZXJtcyBvZiBlbmFibGluZyBjb25maWd1cmF0aW9ucywgd2UgaGF2ZSBgWyYjMzQ7UFBQJiMzNDssICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssICYjMzQ7VFRZJiMzNDtdYC4KCk5leHQsIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9sczogYFsmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywgJiMzNDtwcHBfc3luY19zZW5kJiMzNDssICYjMzQ7cHBwX3N5bmNfb3BlbiYjMzQ7LCAmIzM0O3BwcF9zeW5jdHR5X2lvY3RsJiMzNDtdYC4gQWN0dWFsbHksIGFmdGVyIGEgcXVpY2sgcmV2aWV3LCBgcHBwX3N5bmNfdHhtdW5nZWAgYW5kIGBwcHBfc3luY19zZW5kYCBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIHZ1bG5lcmFiaWxpdHkuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIHllcy4gYHBwcF9zeW5jdHR5LmNgIGlzIGEgcmVhY2hhYmxlIG5ldHdvcmsvVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGltcGxpZXMgaXQgaW50ZXJhY3RzIHdpdGggbmV0d29yayBpbnB1dC4gQ3JpdGljYWxseSwgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhlYWRlciBleHBhbnNpb24gYW5kIGhlYWRyb29tIGxvZ2ljIHVzaW5nIGBza2JfY293X2hlYWQoc2tiLCAyKWAuIFRoaXMgYXJlYSBpcyBhIHByaW1lIHRhcmdldCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzLgoKV2l0aCBhbGwgdGhhdCB2ZXJpZmllZCwgSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIG1vdmUgb24gYW5kIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc2tiIGhlYWRyb29tIGhhbmRsaW5nIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSBieSByZXBsYWNpbmcgbWFudWFsIHNrYiBhbGxvY2F0aW9uL2NvcHlpbmcgd2l0aCBza2JfY293X2hlYWQoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgaW9jdGxzIChOX1NZTkNfUFBQKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgY29weS1vbi13cml0ZSBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZSgpYCBieSByZXBsYWNpbmcgbWFudWFsIHNrYiByZWFsbG9jYXRpb24gKGBkZXZfYWxsb2Nfc2tiKClgLCBgc2tiX3Jlc2VydmUoKWAsIGBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKClgKSB3aXRoIGBza2JfY293X2hlYWQoc2tiLCAyKWAuXG5cbkZvbGxvd2luZyBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyBib3RoIG5ld2x5IHB1c2hlZCBieXRlcyB2aWEgYHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO2AgYW5kIGBza2ItXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIGV4aGF1c3Rpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHNrYiBidWZmZXIgaGFuZGxpbmcgYXJlIG1lbW9yeSBzYWZldHkgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDg6MTA6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCmluZGV4IGY4N2Q0M2ZhZWVhYjUuLmViZDYyYTdhYjU0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCkBAIC00NTUsMTcgJiM0Mzs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCS8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKGFwLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IDIpIHsKLQkJCXN0cnVjdCBza19idWZmICpucGt0ID0gZGV2X2FsbG9jX3NrYihza2ItJmd0O2xlbiAmIzQzOyAyKTsKLQkJCWlmIChucGt0ID09IE5VTEwpIHsKLQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXNrYl9yZXNlcnZlKG5wa3QsMik7Ci0JCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwKLQkJCQkgICAgICBza2JfcHV0KG5wa3QsIHNrYi0mZ3Q7bGVuKSwgc2tiLSZndDtsZW4pOwotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXNrYiA9IG5wa3Q7CiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlza2JfcHVzaChza2IsMik7CiAJCXNrYi0mZ3Q7ZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBTeW5jaHJvbm91cyBUVFkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIGFuZCB0aGVpciBjb250ZXh0LiBUaGUgcGF0Y2ggdGFyZ2V0cyBgcHBwX3N5bmN0dHkuY2AsIHNwZWNpZmljYWxseSB0aGUgYHBwcF9zeW5jX3R4bXVuZ2VgIGZ1bmN0aW9uLiBCZWZvcmUgSSBzdGFydCBmb3JtaW5nIGFueSBvcGluaW9uLCBJIG5lZWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHByb3BlciBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4KClNvLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgcmVhZCB0aGUgY29kZSBhcm91bmQgbGluZSA0NTUgb2YgYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYC4gS25vd2luZyBob3cgdGhhdCBwYXJ0aWN1bGFyIGFyZWEgb2YgdGhlIGNvZGUgZnVuY3Rpb25zIGlzIGtleSBiZWZvcmUgYXNzZXNzaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcbiA0MzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG4gNDMyOlx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gNDMzOlx0e1xuIDQzNDpcdFx0aW50IHByb3RvO1xuIDQzNTpcdFx0dW5zaWduZWQgY2hhciAqZGF0YTtcbiA0MzY6XHRcdGludCBpc2xjcDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdC8qIEVuc3VyZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBwcm90b2NvbCBmaWVsZCBhbmQgTENQIGNvZGUgKi9cbiA0Mzk6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKSB7XG4gNDQwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ0MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NDI6XHRcdH1cbiA0NDM6XHRcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gNDQ0Olx0XHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiA0NDU6XHRcbiA0NDY6XHRcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcbiA0NDc6XHRcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXG4gNDQ4Olx0XHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cbiA0NDk6XHRcdCAqL1xuIDQ1MDpcdFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFx1MDAyNlx1MDAyNiAxIFx1MDAzYz0gZGF0YVsyXSBcdTAwMjZcdTAwMjYgZGF0YVsyXSBcdTAwM2M9IDc7XG4gNDUxOlx0XG4gNDUyOlx0XHQvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBvcHRpb24gZW5hYmxlZCAqL1xuIDQ1MzpcdFx0aWYgKGRhdGFbMF0gPT0gMCBcdTAwMjZcdTAwMjYgKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiAhaXNsY3ApXG4gNDU0Olx0XHRcdHNrYl9wdWxsKHNrYiwxKTtcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiA0NTc6XHRcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbiA0NTg6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKSB7XG4gNDU5Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDYwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDYxOlx0XHRcdH1cbiA0NjI6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MzpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjQ6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDY1Olx0XHR9XG4gNDY2Olx0XG4gNDY3Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2ODpcdFxuIDQ2OTpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDcwOlx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDcxOlx0XG4gNDcyOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MzpcdH1cbiA0NzQ6XHRcbiA0NzU6XHQvKlxuIDQ3NjpcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXG4gNDc3Olx0ICovXG4gNDc4Olx0XG4gNDc5Olx0LypcbiA0ODA6XHQgKiBTZW5kIGEgcGFja2V0IHRvIHRoZSBwZWVyIG92ZXIgYW4gc3luYyB0dHkgbGluZS5cbiA0ODE6XHQgKiBSZXR1cm5zIDEgaWZmIHRoZSBwYWNrZXQgd2FzIGFjY2VwdGVkLlxuIDQ4MjpcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXG4gNDgzOlx0ICogYXQgc29tZSBsYXRlciB0aW1lLlxuIDQ4NDpcdCAqL1xuIDQ4NTpcdHN0YXRpYyBpbnRcbiA0ODY6XHRwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0ODc6XHR7XG4gNDg4Olx0XHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4gNDg5Olx0XG4gNDkwOlx0XHRwcHBfc3luY19wdXNoKGFwKTtcbiA0OTE6XHRcbiA0OTI6XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFhNSVRfRlVMTCwgXHUwMDI2YXAtXHUwMDNleG1pdF9mbGFncykpXG4gNDkzOlx0XHRcdHJldHVybiAwO1x0LyogYWxyZWFkeSBmdWxsICovXG4gNDk0Olx0XHRza2IgPSBwcHBfc3luY190eG11bmdlKGFwLCBza2IpO1xuIDQ5NTpcdFx0aWYgKHNrYiAhPSBOVUxMKVxuIDQ5NjpcdFx0XHRhcC1cdTAwM2V0cGt0ID0gc2tiO1xuIDQ5NzpcdFx0ZWxzZVxuIDQ5ODpcdFx0XHRjbGVhcl9iaXQoWE1JVF9GVUxMLCBcdTAwMjZhcC1cdTAwM2V4bWl0X2ZsYWdzKTtcbiA0OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MQoJCQkJCQkJb3V0cHV0OiAyMzIKCQkJCQkJCXRob3VnaHRzOiA4MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTS0IgSGVhZGVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBJIHNlZSB3ZSYjMzk7dmUgcmVwbGFjZWQgYSBjaHVuayBvZiBsb2dpYyBpbnZvbHZpbmcgYGRldl9hbGxvY19za2JgLCBgc2tiX3Jlc2VydmVgLCBhbmQgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFgIHdpdGggYSBjYWxsIHRvIGBza2JfY293X2hlYWQoc2tiLCAyKWAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBpdCYjMzk7cyBhYm91dCBlZmZpY2llbnQgaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgZW5zdXJpbmcgd2UgaGF2ZSBhIHdyaXRhYmxlIGJ1ZmZlci4gVGhlIHByaW1hcnkgbW90aXZhdGlvbiBpcyBwcmV0dHkgY2xlYXI6IGltcHJvdmUgZWZmaWNpZW5jeSBhbmQgc2FmZXR5IHdoZW4gcHJlcGVuZGluZyBkYXRhIHRvIHRoZSBgc2tiYC4gVGhlIG9sZCBjb2RlIHdhcyBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSB0aGUgYHNrYmAmIzM5O3MgaGVhZHJvb20gd2FzIGluc3VmZmljaWVudC4gSXQgcmUtYWxsb2NhdGVkIGEgbmV3IGBza2JgLCBjb3BpZWQgdGhlIG9yaWdpbmFsIGRhdGEsIGFuZCB0aGVuIGRpc2NhcmRlZCB0aGUgb2xkIG9uZSwgYmVmb3JlIHByZXBlbmRpbmcgdGhlIDItYnl0ZSBQUFAgaGVhZGVyLiBUaGUgbmV3IGNvZGUgbGV2ZXJhZ2VzIGBza2JfY293X2hlYWRgLCB3aGljaCBoYW5kbGVzIGFsbG9jYXRpb24sIGNsb25pbmcgKGlmIHNoYXJlZCksIGxpbmVhcml6YXRpb24gKGlmIG5lZWRlZCkgQU5EIG1ha2VzIHN1cmUgd2UgaGF2ZSBhIHdyaXRhYmxlIGhlYWRyb29tIG9mIDIgYnl0ZXMgb3IgbW9yZSwgcmVkdWNpbmcgdGhlIGNoYW5jZXMgb2YgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHByZXBlbmRpbmcgZGF0YS4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIGEgc3RhbmRhcmQgaGVscGVyIGZvciB0aGVzZSBzaXR1YXRpb25zLCB3aGljaCB3ZXJlIGEgYml0IG1hbnVhbGx5IGhhbmRsZWQgYmVmb3JlLgoKTm93LCBhIGtleSBjb25jZXJuIGluIHRoZXNlIGNoYW5nZXMgaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIGl0OgoKKiAgIERvZXMgdGhpcyBjcmVhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gYHNrYl9jb3dfaGVhZChza2IsIDIpYCBlaXRoZXIgdXNlcyBleGlzdGluZyBtZW1vcnkgb3IgcmVhbGxvY2F0ZXMgdGhlIGhlYWRlciB3aGlsZSBjb3B5aW5nIHRoZSBkYXRhLCBzbyBleGlzdGluZyBkYXRhIHdpbGwgYmUgY29waWVkLgoqICAgRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgdGhlIHByZXBlbmRlZCBkYXRhLiBgc2tiX3B1c2goc2tiLCAyKWAgY3JlYXRlcyBzcGFjZSwgYW5kIHRoZW4gdGhlIGZvbGxvd2luZyBsaW5lcyBgc2tiLSZndDtkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TOyBza2ItJmd0O2RhdGFbMV0gPSBQUFBfVUk7YCBleHBsaWNpdGx5IHNldCB0aGUgbmV3IGhlYWRlciBieXRlcy4KKiAgIERvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIHRoZSBuZXR3b3JrPyBOb3BlLiBUaG9zZSBieXRlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gbm8gaXNzdWVzIGhlcmUuCiogICBBbnkgc3RydWN0IGZpZWxkcyBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IE5vLiBXZSBvbmx5IG1vZGlmeSBhbmQgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZSBgc2tiLSZndDtkYXRhYC4KKiAgIEFueSBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXM/IE5vLCBhbGwgaW5pdGlhbCB2YWx1ZXMgYXJlIGFzc2lnbmVkIGR1cmluZyB0aGUgb3BlcmF0aW9uLgoqICAgQXJlIHRoZXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlZ2FyZGluZyBidWZmZXIgc2hhcmluZyBvciBoZWFkcm9vbSBpc3N1ZXMgaGVyZSB0aGF0IEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgd291bGQgY2F0Y2g/IFllcywgYW5kIHRoYXQgaXMgdmVyeSBpbXBvcnRhbnQuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdGhlc2Uga2luZHMgb2YgYnVmZmVyIG1hbmlwdWxhdGlvbnMuCgpCYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhlIGNoYW5nZSBzZWVtcyBzYWZlLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSByZWFzb25pbmcgaGVyZSBpcyBhIGRpcmVjdCBjb21wYXJpc29uIGJldHdlZW4gS01TQU4gYW5kIEtBU0FOLCB3aGljaCwgYmFzZWQgb24gdGhlIGNoZWNrLCBjb25maXJtcyB3ZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBiZWNhdXNlIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kIG9mIG1lbW9yeSBlcnJvcnMgcHJlc2VudC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBjb3B5LW9uLXdyaXRlIGhhbmRsaW5nIGluIGBwcHBfc3luY190eG11bmdlKClgIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiAoYGRldl9hbGxvY19za2IoKWAsIGBza2JfcmVzZXJ2ZSgpYCwgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoKWApIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC5cblxuRm9sbG93aW5nIGBza2JfY293X2hlYWQoc2tiLCAyKWAsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVzIGJvdGggbmV3bHkgcHVzaGVkIGJ5dGVzIHZpYSBgc2tiLVx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7YCBhbmQgYHNrYi1cdTAwM2VkYXRhWzFdID0gUFBQX1VJO2AuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLCBicmFuY2hpbmcgZG9lcyBub3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3IgdGhlIG5ldHdvcmsuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gZXhoYXVzdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igc2tiIGJ1ZmZlciBoYW5kbGluZyBhcmUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgY29weS1vbi13cml0ZSBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZSgpYCBieSByZXBsYWNpbmcgbWFudWFsIHNrYiByZWFsbG9jYXRpb24gKGBkZXZfYWxsb2Nfc2tiKClgLCBgc2tiX3Jlc2VydmUoKWAsIGBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKClgKSB3aXRoIGBza2JfY293X2hlYWQoc2tiLCAyKWAuXG5cbkZvbGxvd2luZyBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyBib3RoIG5ld2x5IHB1c2hlZCBieXRlcyB2aWEgYHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO2AgYW5kIGBza2ItXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIGV4aGF1c3Rpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHNrYiBidWZmZXIgaGFuZGxpbmcgYXJlIG1lbW9yeSBzYWZldHkgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDowNi45MjY3MDI2NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODEzNTU0ODAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBoZWFkcm9vbSBleHBhbnNpb24gYW5kIGNvcHktb24td3JpdGUgaGFuZGxpbmcgaW4gYHBwcF9zeW5jX3R4bXVuZ2UoKWAgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgcmVhbGxvY2F0aW9uIChgZGV2X2FsbG9jX3NrYigpYCwgYHNrYl9yZXNlcnZlKClgLCBgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgpYCkgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLlxcblxcbkZvbGxvd2luZyBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyBib3RoIG5ld2x5IHB1c2hlZCBieXRlcyB2aWEgYHNrYi1cXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztgIGFuZCBgc2tiLVxcdTAwM2VkYXRhWzFdID0gUFBQX1VJO2AuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLCBicmFuY2hpbmcgZG9lcyBub3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3IgdGhlIG5ldHdvcmsuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBleGhhdXN0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBza2IgYnVmZmVyIGhhbmRsaW5nIGFyZSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc2tiIGhlYWRyb29tIGhhbmRsaW5nIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSBieSByZXBsYWNpbmcgbWFudWFsIHNrYiBhbGxvY2F0aW9uL2NvcHlpbmcgd2l0aCBza2JfY293X2hlYWQoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgaW9jdGxzIChOX1NZTkNfUFBQKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MDYuOTI2NzA3MzI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2NDY4MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA4OjEwOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5AQCAtNDU1LDE3ICs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cXG4gXFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuLVxcdFxcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNjIDIpIHtcXG4tXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi1cXHUwMDNlbGVuICsgMik7XFxuLVxcdFxcdFxcdGlmIChucGt0ID09IE5VTEwpIHtcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNrYl9yZXNlcnZlKG5wa3QsMik7XFxuLVxcdFxcdFxcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgICBza2JfcHV0KG5wa3QsIHNrYi1cXHUwMDNlbGVuKSwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBucGt0O1xcbitcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNrYl9wdXNoKHNrYiwyKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDowOC4zNTM4MjYyNDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU0NTY5Mzk1MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfc3luY190eG11bmdlXCIsXG4gICAgXCJwcHBfc3luY19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDg6MTA6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtNDU1LDE3ICs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiBcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbi1cdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyKSB7XG4tXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gKyAyKTtcbi1cdFx0XHRpZiAobnBrdCA9PSBOVUxMKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRza2JfcmVzZXJ2ZShucGt0LDIpO1xuLVx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLFxuLVx0XHRcdFx0ICAgICAgc2tiX3B1dChucGt0LCBza2ItXHUwMDNlbGVuKSwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0XHRza2IgPSBucGt0O1xuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFx0XHRza2JfcHVzaChza2IsMik7XG4gXHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MDguMzUzODI3ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODA4MzAwOTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIGEgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcmVxdWVzdCBpcyBhYm91dCBkZWZlbnNpdmUgY29kZSBldmFsdWF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIGtlcm5lbCBmdXp6aW5nLiBUaGF0IG1lYW5zIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBub3QganVzdCBzdGFuZGFyZCBRQSBvciByb3V0aW5lIHRyaWFnZS4gRXhjZWxsZW50LlxuXG5Ob3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgaXQncyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIGFuZCBpcyBmb2N1c2VkIG9uIHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgdGhleSd2ZSByZXBsYWNlZCBhIG1hbnVhbCBgZGV2X2FsbG9jX3NrYmAsIGNvcHksIGFuZCBmcmVlIHNlcXVlbmNlIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIGBza2JfY293X2hlYWRgIGlzIGEgQ29weS1Pbi1Xcml0ZSBvcGVyYXRpb24sIHdoaWNoIGdlbmVyYWxseSBhaW1zIGF0IG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLiBUaGUgY3J1Y2lhbCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZW50aXJlIGZpbGUsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIHVzaW5nIGVpdGhlciBhIHJlYWQtZmlsZSB0b29sIG9yIGdyZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcHBwX3N5bmNfdHhtdW5nZWAgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFBQUCBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlcikuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgc3VidGxlIHRpbWluZyBpc3N1ZXMsIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyAodW5saWtlbHksIGJ1dCBJIGFsd2F5cyBjaGVjayksIG9yIGFueSB1bmludGVuZGVkIGRhdGEgY29ycnVwdGlvbiBkdWUgdG8gdGhlIENPVyBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcGxhY2VzIHdoZXJlIHRoZSBhc3N1bXB0aW9uIG9mIG93bmVyc2hpcCBvciBkYXRhIGludGVncml0eSBtaWdodCBiZSBhbHRlcmVkLiBCYXNlZCBvbiB0aGlzLCBJJ2xsIHRoZW4gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBydW4gdGhpcyB0aHJvdWdoIFN5emthbGxlciBvciBzdWdnZXN0IHRoYXQgYW5vdGhlciBzZWN1cml0eSBhdWRpdCBpcyBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDoyNi40MzY4Mzk1MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ0MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcdGRhdGEgID0gc2tiLVxcdTAwM2VkYXRhO1xcbiA0NDQ6XFx0XFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcXG4gNDQ3OlxcdFxcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXFxuIDQ0ODpcXHRcXHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cXG4gNDQ5OlxcdFxcdCAqL1xcbiA0NTA6XFx0XFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IDEgXFx1MDAzYz0gZGF0YVsyXSBcXHUwMDI2XFx1MDAyNiBkYXRhWzJdIFxcdTAwM2M9IDc7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXFxuIDQ1MzpcXHRcXHRpZiAoZGF0YVswXSA9PSAwIFxcdTAwMjZcXHUwMDI2IChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpIFxcdTAwMjZcXHUwMDI2ICFpc2xjcClcXG4gNDU0OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwxKTtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiA0NTc6XFx0XFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuIDQ1ODpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcXG4gNDU5OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0NjA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ2MTpcXHRcXHRcXHR9XFxuIDQ2MjpcXHRcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIDQ2MzpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XFxuIDQ2NDpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdGFwLVxcdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0xPR19PVVRQS1QpXFxuIDQ3MDpcXHRcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDczOlxcdH1cXG4gNDc0OlxcdFxcbiA0NzU6XFx0LypcXG4gNDc2OlxcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXFxuIDQ3NzpcXHQgKi9cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0LypcXG4gNDgwOlxcdCAqIFNlbmQgYSBwYWNrZXQgdG8gdGhlIHBlZXIgb3ZlciBhbiBzeW5jIHR0eSBsaW5lLlxcbiA0ODE6XFx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cXG4gNDgyOlxcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXFxuIDQ4MzpcXHQgKiBhdCBzb21lIGxhdGVyIHRpbWUuXFxuIDQ4NDpcXHQgKi9cXG4gNDg1OlxcdHN0YXRpYyBpbnRcXG4gNDg2OlxcdHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0ODc6XFx0e1xcbiA0ODg6XFx0XFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4gNDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDoyNi40MzY5MjE1MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY4OTg3OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQUFAgU3luY1RUWSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgS2NvbmZpZyBmb3IgYHBwcF9zeW5jdHR5LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFN5bmNUVFkgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBQUFAgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLCBzeW1ib2xzLCBhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBndWFyZHJhaWxzLCB0aGUgKmlmKiBzdGF0ZW1lbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhpcyBkcml2ZXIgaXMgZXZlbiBjb25zaWRlcmVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFBQUCBvcHRpb25zLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgcGVyaGFwcyByZWxhdGVkIHRvIHNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24gb3Igc3BlY2lmaWMgVUFSVCBjb250cm9sbGVycz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBvdGhlciBQUFAgZHJpdmVycywgYW5kIGhvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhpcyBkcml2ZXIgZWZmZWN0cyB0aG9zZS4gV2hhdCBhYm91dCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBvZiB0aGUgU3luY1RUWSBkcml2ZXI/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVmYXVsdCB2YWx1ZXMgb3Igc3VidGxlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBzcGVjaWZpYyBzY2VuYXJpb3M/IFRoaXMgcmV2aWV3IHdpbGwgaGVscCBpZGVudGlmeSB3aGV0aGVyIHRoaXMgbW9kdWxlIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgYW5kIGZsYWcgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM4NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MjguNjA1OTEyMzE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzcwODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBQUF9TWU5DX1RUWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgzPWNvbmZpZyBQUFBfQVNZTkNcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19QUFBfTVBQRSkgKz0gcHBwX21wcGUub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUFBQX1NZTkNfVFRZKSArPSBwcHBfc3luY3R0eS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUFBPWCkgKz0gcHBwb3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDoyOC42NTgyOTAxOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzg1MjA1ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgUFBQIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBpbiBvbiBsaW5lIDE5NiAoZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBvZiBjb3Vyc2UpLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIFBQUCBpcyBkZWZpbmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBkZXBlbmRlbmN5LCBhIGRlZmF1bHQgdmFsdWUsIG9yIGEgcHJvbXB0IHN0cmluZyB0aGF0IG5lZWRzIGNsYXJpZmljYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgYSBjdXJyZW50IGJ1aWxkIGlzc3VlLiBLbm93aW5nIHRoZSBjb250ZXh0LCBJIGV4cGVjdCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCBzdGFydCBhbmFseXppbmcuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHRvIHVuZGVyc3RhbmQsIGJ1dCBJIG5lZWQgdG8gc3RhcnQgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MzAuNDQzNDk5NDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXFxuIDE4MTpcXHRpZiBUVFlcXG4gMTgyOlxcdFxcbiAxODM6XFx0Y29uZmlnIFBQUF9BU1lOQ1xcbiAxODQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiXFxuIDE4NTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN0YW5kYXJkXFxuIDE4ODpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMsIHN1Y2ggYXMgQ09NMSBvciBDT00yIG9uIGEgUEMuICBJZiB5b3UgdXNlXFxuIDE4OTpcXHRcXHQgIGEgbW9kZW0gKG5vdCBhIHN5bmNocm9ub3VzIG9yIElTRE4gbW9kZW0pIHRvIGNvbnRhY3QgeW91ciBJU1AsIHlvdVxcbiAxOTA6XFx0XFx0ICBuZWVkIHRoaXMgb3B0aW9uLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIFBQUF9TWU5DX1RUWVxcbiAxOTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1xcXCJcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcXG4gMjAwOlxcdFxcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxcbiAyMDE6XFx0XFx0ICBsaW5lcyBsaWtlIFQxL0UxLlxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDIwNDpcXHRcXG4gMjA1OlxcdGVuZGlmICMgVFRZXFxuIDIwNjpcXHRcXG4gMjA3OlxcdGVuZGlmICMgUFBQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjMwLjQ0MzU3MTAzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjgxODI0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQsIGFuZCB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIHNob3VsZCBiZSBzcGVsbGVkIG91dCB0aGVyZSB1c2luZyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuIExldCdzIGdldCB0byB0aGUgdG9wIG9mIHRoYXQgZmlsZSBpbW1lZGlhdGVseSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgd2hlcmUgbXkgbmV4dCBxdWVzdGlvbnMgc2hvdWxkIGJlIHBvc2VkLiBJJ20gaG9waW5nIEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDozMi4wMTE3NTY4NjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MzIuMDExODQ3NDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDY5MDYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2ggb2YgYHBwcF9zeW5jdHR5YCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9zeW5jdHR5YCBpcyBhY3R1YWxseSAqdXNlZCogYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdCdzIHJlYWNoZWQgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGUgY29yZSBxdWVzdGlvbiBJIGhhdmUgaXMgd2hldGhlciB0aGlzIG1vZHVsZSBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IHBzZXVkby10ZXJtaW5hbCAocHR5KSBvciB0ZXJtaW5hbCAodHR5KSBkZXZpY2UgaW4gUUVNVSB2aWEgdGhlIGBUSU9DU0VURGAgaW9jdGwgc3lzdGVtIGNhbGwsIHNwZWNpZmljYWxseSB3aGVuIHVzaW5nIHRoZSBgTl9TWU5DX1BQUGAgbGluZSBkaXNjaXBsaW5lLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHZlY3Rvci5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHBwcF9zeW5jdHR5LmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgbGluZSBkaXNjaXBsaW5lIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGlzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBhdHRhY2htZW50IHBvc3NpYmlsaXRpZXMgYW5kIGFueSBwb3RlbnRpYWwgY29uc3RyYWludHMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjMzLjkxODc1NzI0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwMzkwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X3JlZ2lzdGVyX2xkaXNjfE5fU1lOQ19QUFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0zMDk9cHBwX2FzeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMTItXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMxMzpcXHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnBwcF9sZGlzYyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMxNC1cXHRpZiAoZXJyICE9IDApXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yODY9c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9zeW5jX2xkaXNjID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4Ny1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI4ODpcXHQubnVtXFx0PSBOX1NZTkNfUFBQLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4OS1cXHQubmFtZVxcdD0gXFxcInBwcHN5bmNcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MzAwPXBwcF9zeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwMy1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzozMDQ6XFx0ZXJyID0gdHR5X3JlZ2lzdGVyX2xkaXNjKFxcdTAwMjZwcHBfc3luY19sZGlzYyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzA1LVxcdGlmIChlcnIgIT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTY1ND1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NjU1Ok1PRFVMRV9BTElBU19MRElTQyhOX1NZTkNfUFBQKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MzMuOTY5ODA0MTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTk1MTgwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgU3luYyBMaW5lIERpc2NpcGxpbmUqKlxuXG5Pa2F5LCBzbyBgTl9TWU5DX1BQUGAuLi4gdGhhdCdzIGEgbGluZSBkaXNjaXBsaW5lLCByaWdodD8gQW5kIHN5emthbGxlciwgY2xldmVyIHRoaW5nIHRoYXQgaXQgaXMsIGNhbiBqdXN0IHNsYXAgaXQgb250byAqYW55KiBwdHkgb3IgdHR5IHVzaW5nIGBpb2N0bGAgYW5kIGBUSU9DU0VURGAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoaXMgaXNuJ3Qgc29tZSBuaWNoZSwgZGVlcGx5IGJ1cmllZCBmdW5jdGlvbmFsaXR5OyBpdCdzIHBvdGVudGlhbGx5IHZlcnkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0OiBJIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIHBhdGguIFdoZW4gcGFja2V0cyBnbyBvdXQgb3ZlciBhIFBQUCBjaGFubmVsIHRoYXQncyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCBgTl9TWU5DX1BQUGAsIEkga25vdyBgcHBwX3N5bmNfc2VuZGAgZ2V0cyB0cmlnZ2VyZWQsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYHBwcF9zeW5jX3R4bXVuZ2VgLiBTbywgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogZWxzZSBgcHBwX3N5bmNfdHhtdW5nZWAgaXMgY2FsbGVkLiBJdCdzIHRpbWUgdG8gdHJhY2UgaXRzIHVzZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgb3RoZXIgYXJlYXMgb2YgaW50ZXJlc3QuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDozNi4wODkzMjUzMTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwPXN0cnVjdCBzeW5jcHBwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTgyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjgzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTg0LXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NDMxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZipcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MzI6cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQ4Nj1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQ5My1cXHRcXHRyZXR1cm4gMDtcXHQvKiBhbHJlYWR5IGZ1bGwgKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0OTQ6XFx0c2tiID0gcHBwX3N5bmNfdHhtdW5nZShhcCwgc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00OTUtXFx0aWYgKHNrYiAhPSBOVUxMKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDozNi4xMzUzMDY4MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU5MDQ3ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwcHBfc3luY190eG11bmdlYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBwcHBfc3luY190eG11bmdlYCAqaXMqIHJlYWNoYWJsZSDigJMgaXQncyB1c2VkIHdoZW4gc2VuZGluZyBwYWNrZXRzIG92ZXIgYSBgTl9TWU5DX1BQUGAgdHR5IGxpbmUgZGlzY2lwbGluZS4gV2UgY2FuIGdldCB0aGlzIHNldHVwIHZpYSBgcHRteGAsIGBwdHNgLCBvciBgdHR5YCwgYW5kIHRoZW4gcmVnaXN0ZXIgaXQgYXMgYSBQUFAgY2hhbm5lbCB1c2luZyBgUFBQSU9DQVRUQ0hBTmAsIGBQUFBJT0NBVFRBQ0hgLCBvciBgVElPQ1NFVERgLCB0cmFuc21pdHRpbmcgcGFja2V0cyB1c2luZyBlaXRoZXIgc3RhbmRhcmQgbmV0d29yayBtZXRob2RzLCB0aGUgUFBQIHVuaXQgc29ja2V0IG9yIGdlbmVyaWMgUFBQIGlvY3Rscy4gVGhlIGNyaXRpY2FsIGNhbGwgaXMgYHBwcF9zeW5jX3NlbmRgIHdoaWNoIGluIHR1cm4gY2FsbHMgYHBwcF9zeW5jX3R4bXVuZ2VgLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gaG93IGhlYWRyb29tIGlzIGhhbmRsZWQuIFByZXZpb3VzbHksIGlmIHdlIG5lZWRlZCBtb3JlIGhlYWRyb29tIChhbmQgdGhlIGBTQ19DT01QX0FDYCBmbGFnIHdhc24ndCBzZXQgb3IgaWYgaXQncyBMQ1ApLCBpdCB3b3VsZCBhbGxvY2F0ZSBhIG5ldyBgc2tfYnVmZmAgKGBucGt0YCksIGNvcHkgdGhlIGRhdGEsIGFuZCBmcmVlIHRoZSBvcmlnaW5hbCAoYHNrYmApLiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLiBUaGlzIGFpbXMgdG8gZW5zdXJlIHRoZSBgc2tiYCBoYXMgYXQgbGVhc3QgMiBieXRlcyBvZiBoZWFkcm9vbSwgbWFraW5nIGl0IHdyaXRhYmxlIOKAkyBwb3RlbnRpYWxseSBjbG9uaW5nIHRoZSBgc2tiYCBpZiBuZWNlc3NhcnkuXG5cbkJ1dCB0aGlzIHJhaXNlcyBxdWVzdGlvbnMhIFRoZSBjb2RlIGNoZWNrcyB0aGUgcmV0dXJuIG9mIGBza2JfY293X2hlYWRgLiBBICpmYWlsdXJlKiBmcm9tIGBza2JfY293X2hlYWRgIGlzIGluZGljYXRlZCBieSBhIG5vbi16ZXJvIHJldHVybiwgd2hpY2ggaXMgY29uY2VybmluZy4gRG9lcyBpdCBmcmVlIHRoZSBgc2tiYCBpbiBjYXNlIG9mIGZhaWx1cmU/IFRoZSBjb2RlICppbW1lZGlhdGVseSogYGtmcmVlX3NrYihza2IpYCB1cG9uIGZhaWx1cmUuIEJ1dCBpZiB0aGUgY2xvbmUgZmFpbHMsIGl0IGlzIGEgY29weS1vbi13cml0ZSBzbyB0aGUgKmNhbGxlciogc3RpbGwgaG9sZHMgYSB2YWxpZCByZWZlcmVuY2UuIFdoYXQgaGFwcGVucyB3aXRoIHRoaXMgYHNrYmAgaW4gdGhpcyBjYXNlPyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBsb29rcyBjb3JyZWN0IGdpdmVuIGl0IGhhcyB0aGUgZXF1aXZhbGVudCBlZmZlY3Qgb2YgdGhlIHByaW9yIGltcGxlbWVudGF0aW9uLCB3aGVyZSBhIG5ldyBgc2tiYCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgdGhlIG9sZCBza2IgZnJlZWQsIGJ1dCB3aXRob3V0IGRvdWJsZSBmcmVlcy5cblxuV2UgbmVlZCB0byByZWFsbHkgZGl2ZSBpbnRvIHRoZSBgc2tiX2Nvd19oZWFkYCBtYWNybyBpdHNlbGYgdG8gYmUgY2VydGFpbi4gV2Uga25vdyB0aGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyBlaXRoZXIgYHBza2JfZXhwYW5kX2hlYWRgIG9yIGBza2JfY293X2hlYWRgLCBidXQgbGV0IG1lIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBlbnRpcmVseSBzdXJlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo0MS43MjU3ODgyOTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTM1MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9jb3dfaGVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MzkyNj1zdGF0aWMgaW5saW5lIGludCBza2JfY293KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMS0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5MzI6ICpcXHRza2JfY293X2hlYWQgLSBza2JfY293IGJ1dCBvbmx5IG1ha2luZyB0aGUgaGVhZCB3cml0YWJsZVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMy0gKlxcdEBza2I6IGJ1ZmZlciB0byBjb3dcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk0MC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5NDE6c3RhdGljIGlubGluZSBpbnQgc2tiX2Nvd19oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM5NDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo0MS43NzQ3MjkxNDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNTc4MjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHNrYnVmZi5oIGZvciBhIFNwZWNpZmljIElzc3VlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCB0YXJnZXQgbGluZXMgMzkyNS0zOTUwLiBTb21ldGhpbmcncyBuYWdnaW5nIGF0IG1lLCBhbmQgYmFzZWQgb24gdGhlIHN5bXB0b21zIEkndmUgYmVlbiBzZWVpbmcsIEkgc3VzcGVjdCB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0byBob3cgd2UncmUgaGFuZGxpbmcsIG9yIG5vdCBoYW5kbGluZywgc29tZXRoaW5nIHdpdGhpbiB0aGF0IGNodW5rIG9mIHRoZSBza2Igc3RydWN0dXJlIG1hbmFnZW1lbnQuIEkga25vdyB0aGF0IGFyZWEgY292ZXJzIHNvbWUgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSwgbGlrZWx5IHRvdWNoaW5nIG9uIGZyYWdtZW50IGhhbmRsaW5nLCBvciBtYXliZSBzb21lIG9mIHRoZSBhbmNpbGxhcnkgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhvc2UgbGluZXMgZm9yIGFueSBvYnZpb3VzIHJlZCBmbGFncywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIGVzdGFibGlzaGVkIGJlc3QgcHJhY3RpY2VzLCBvciB0aGF0IG1pZ2h0IG5vdCBiZSBjb3JyZWN0bHkgY29uc2lkZXJpbmcgcmVjZW50IGNoYW5nZXMgdG8gb3VyIGhhcmR3YXJlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoYXQgcmFuZ2UuIElmIG5vdGhpbmcgcG9wcyBpbW1lZGlhdGVseSwgSSdsbCBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbHMgdG8gc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6NDQuNjEwNTEzOTE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5MjU6XFx0ICovXFxuMzkyNjpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfY293KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4zOTI3OlxcdHtcXG4zOTI4OlxcdFxcdHJldHVybiBfX3NrYl9jb3coc2tiLCBoZWFkcm9vbSwgc2tiX2Nsb25lZChza2IpKTtcXG4zOTI5OlxcdH1cXG4zOTMwOlxcdFxcbjM5MzE6XFx0LyoqXFxuMzkzMjpcXHQgKlxcdHNrYl9jb3dfaGVhZCAtIHNrYl9jb3cgYnV0IG9ubHkgbWFraW5nIHRoZSBoZWFkIHdyaXRhYmxlXFxuMzkzMzpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBjb3dcXG4zOTM0OlxcdCAqXFx0QGhlYWRyb29tOiBuZWVkZWQgaGVhZHJvb21cXG4zOTM1OlxcdCAqXFxuMzkzNjpcXHQgKlxcdFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHNrYl9jb3cgZXhjZXB0IHRoYXQgd2UgcmVwbGFjZSB0aGVcXG4zOTM3OlxcdCAqXFx0c2tiX2Nsb25lZCBjaGVjayBieSBza2JfaGVhZGVyX2Nsb25lZC4gIEl0IHNob3VsZCBiZSB1c2VkIHdoZW5cXG4zOTM4OlxcdCAqXFx0eW91IG9ubHkgbmVlZCB0byBwdXNoIG9uIHNvbWUgaGVhZGVyIGFuZCBkbyBub3QgbmVlZCB0byBtb2RpZnlcXG4zOTM5OlxcdCAqXFx0dGhlIGRhdGEuXFxuMzk0MDpcXHQgKi9cXG4zOTQxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3dfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuMzk0MjpcXHR7XFxuMzk0MzpcXHRcXHRyZXR1cm4gX19za2JfY293KHNrYiwgaGVhZHJvb20sIHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpO1xcbjM5NDQ6XFx0fVxcbjM5NDU6XFx0XFxuMzk0NjpcXHQvKipcXG4zOTQ3OlxcdCAqXFx0c2tiX3BhZHRvXFx0LSBwYWQgYW4gc2tidWZmIHVwIHRvIGEgbWluaW1hbCBzaXplXFxuMzk0ODpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBwYWRcXG4zOTQ5OlxcdCAqXFx0QGxlbjogbWluaW1hbCBsZW5ndGhcXG4zOTUwOlxcdCAqXFxuMzk1MTpcXHQgKlxcdFBhZHMgdXAgYSBidWZmZXIgdG8gZW5zdXJlIHRoZSB0cmFpbGluZyBieXRlcyBleGlzdCBhbmQgYXJlXFxuMzk1MjpcXHQgKlxcdGJsYW5rZWQuIElmIHRoZSBidWZmZXIgYWxyZWFkeSBjb250YWlucyBzdWZmaWNpZW50IGRhdGEgaXRcXG4zOTUzOlxcdCAqXFx0aXMgdW50b3VjaGVkLiBPdGhlcndpc2UgaXQgaXMgZXh0ZW5kZWQuIFJldHVybnMgemVybyBvblxcbjM5NTQ6XFx0ICpcXHRzdWNjZXNzLiBUaGUgc2tiIGlzIGZyZWVkIG9uIGVycm9yLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo0NC42MTA3MjYxOTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ0Mjg4NzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBwcHBfc3luY3R0eS5jKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBwcHBfc3luY3R0eS5jYC4gTXkgaW5pdGlhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQncyBicmVhayBpdCBkb3duIGJhc2VkIG9uIHRoZSBlc3RhYmxpc2hlZCBtZXRob2RvbG9neS5cblxuRmlyc3QsIGxldCdzIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBUaGUgdGV4dCBjbGVhcmx5IHN0YXRlcyB0aGF0IGBwcHBfc3luY3R0eWAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHZpcnR1YWwgb3Igc29mdHdhcmUgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHRoZSBUVFkgbGluZSBkaXNjaXBsaW5lIGBOX1NZTkNfUFBQYCBvbiBwc2V1ZG8tdGVybWluYWxzIGFuZCB2aXJ0dWFsIFRUWXMuIFNvLCBpdCdzIGRlZmluaXRlbHkgKnJlYWNoYWJsZSogY29kZS4gR29vZC5cblxuTm93LCByZWZlcnJpbmcgdG8gU2VjdGlvbiAzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uXCIgQ2hlY2suIEl0J3MgYWNjZXNzaWJsZSwgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBpdC4gU2VjdGlvbiAzIGFsc28gbWVudGlvbnMgZHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzLCB3aGljaCB0aGlzIHNlZW1zIHRvIGZhbGwgaW50byB3aXRoIHRoZSBUVFkgaW50ZXJmYWNlLCBzbyB0aGF0J3MgYW5vdGhlciBwb3NpdGl2ZSBpbmRpY2F0b3IuXG5cbkFuZCB0aGVuLCBsb29raW5nIGF0IFNlY3Rpb24gMSwgaXQgcmVtaW5kcyBtZSBub3QgdG8gYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIHJlZmFjdG9yaW5nLiBUaGF0J3MgYSBjcnVjaWFsIHJlbWluZGVyLCBiZWNhdXNlIHRob3NlIGNoYW5nZXMgY2FuIGludHJvZHVjZSBidWdzIG9yIHN1YnRsZSBzaGlmdHMuIFNpbmNlICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKiBpcyBiZWluZyBtb2RpZmllZCwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gTm8gcXVlc3Rpb24uXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZnV6emluZyBmb2N1cy4gSSBrbm93IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgcHBwX3N5bmNfdHhtdW5nZWAuIFNvLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzIGFuZCBlbnRyeSBwb2ludHMuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciBvdGhlciBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgd2l0aGluIGBwcHBfc3luY3R0eS5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VhcmNoIGZvciBmdW5jdGlvbnMgd2l0aGluIGBwcHBfc3luY3R0eS5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGNvbnRleHQgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6NTAuMDUzNjE2MzA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjYxMTA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NTA9c3RydWN0IHN5bmNwcHAge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtODItICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODM6c3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODQ6c3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODU6c3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtODYtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODc6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjg4OnN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjg5OnN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjkwOnN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxcdFxcdFxcdCAgIGludCBjb3VudCk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0xMDE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxMDI6cHBwX3ByaW50X2J1ZmZlciAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgX191OCAqYnVmLCBpbnQgY291bnQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTExOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTE5OnBwcF9zeW5jX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTY5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTcwOnBwcF9zeW5jX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTE5MD1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjE5MTpwcHBfc3luY19yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1OCAqYnVmLCBzaXplX3QgY291bnQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTkyLVxcdCAgICAgIHZvaWQgKipjb29raWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjAxPXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjAyOnBwcF9zeW5jX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTIwMy1cXHQgICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjA4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDk6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI1Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI1NzpwcHBfc3luY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpjZmxhZ3MsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjU4LVxcdFxcdCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yNzM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyNzQ6cHBwX3N5bmNfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI5OT1zdGF0aWMgaW50IF9faW5pdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMwMDpwcHBfc3luY19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMxND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzE1OnBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQwNS0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MDY6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDMyOnBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00ODU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQ4NjpwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00ODcte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NTA3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo1MDg6cHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTU1OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjU2MDpwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTU2MS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz01ODY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo1ODc6cHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudClcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NjQ1PXN0YXRpYyB2b2lkIF9fZXhpdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY0NjpwcHBfc3luY19jbGVhbnVwKHZvaWQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNjQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo2NTE6bW9kdWxlX2luaXQocHBwX3N5bmNfaW5pdCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NjUyOm1vZHVsZV9leGl0KHBwcF9zeW5jX2NsZWFudXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MzpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlBQUCBzeW5jaHJvbm91cyBUVFkgY2hhbm5lbCBtb2R1bGVcXFwiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo2NTQ6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1NTpNT0RVTEVfQUxJQVNfTERJU0MoTl9TWU5DX1BQUCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjUwLjEwNjIzMjA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5Nzk4NTQ4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgUFBQIFN5bmNocm9ub3VzIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHBwcF9zeW5jX3R4bXVuZ2VgIGlzIGludm9rZWQgZGlyZWN0bHkgZnJvbSBgcHBwX3N5bmNfc2VuZGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgY29ubmVjdCB0aGUgZG90cy4gSSByZWNhbGwgdGhhdCBgcHBwX3N5bmNfc2VuZGAgaXMsIGluIGVzc2VuY2UsIHRoZSBgLnN0YXJ0X3htaXRgIGZ1bmN0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0cmFuc21pc3Npb24gYWN0dWFsbHkgYmVnaW5zLCB0aGUgY2hhbm5lbCBvcGVyYXRpb25zJyBgLnN0YXJ0X3htaXRgIGhvb2sgZm9yIHRoaXMgc3BlY2lmaWMgUFBQIGNoYW5uZWwuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgc3RydWN0dXJlIHVzYWdlIG9mIGBwcHBfc3luY19zZW5kYCB3aXRoaW4gYHBwcF9zeW5jdHR5LmNgLiBNYWtlIHN1cmUgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB3aGF0IEkgZXhwZWN0IGFuZCB0aGF0IEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBpbXBvcnRhbnQgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo1NC4wODYwODkzMjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzgzNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9jaGFubmVsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTA3LVxcdC5zdGFydF94bWl0ID0gcHBwX2FzeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz05MD1zdGF0aWMgdm9pZCBwcHBfc3luY19pbnB1dChzdHJ1Y3Qgc3luY3BwcCAqYXAsIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpmbGFncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkyLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjkzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHN5bmNfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTk0LVxcdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkyMC1cXHQuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jPTQ5PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gcHB0cF9za19wcm90byBfX3JlYWRfbW9zdGx5O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz01NzY9c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNi1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA4LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo1NC4xMzM4Nzc0MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMwNzcwNzIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBTeW5jIFRUWSBNb2R1bGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgcHBwX3N5bmNfc2VuZGAgYXBwZWFycyB0byBiZSBhIHdyYXBwZXIgb3IgYW4gYWxpYXMgZm9yIGBzeW5jX29wcy5zdGFydF94bWl0YC4gVGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gbG9vayBhdCBtb3JlIGNsb3NlbHkgaXMgYHBwcF9zeW5jX3R4bXVuZ2VgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcsIGFuZCBgcHBwX3N5bmNfc2VuZGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiBjYWxsaW5nIGl0LiBJIGFsc28gc2hvdWxkIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93IHNlZW1zIHRvIGJlIG1hbmFnZWQgdGhyb3VnaCBgcHBwX3N5bmNfb3BlbmAsIGBwcHBfc3luY3R0eV9pb2N0bGAsIGFuZCBgcHBwX3N5bmNfaW9jdGxgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHN5bmMgdHR5IGNoYW5uZWwgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfUFBQX1NZTkNfVFRZYCBpcyBjbGVhcmx5IGRlcGVuZGVudCBvbiBgQ09ORklHX1BQUGAgYW5kIGBDT05GSUdfVFRZYCAtIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBwcm9iYWJseSBzY2FuIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0aG9yb3VnaGx5IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjU3LjQ0MTU4NzIzOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MjA0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qZHJpdmVycy9uZXQvcHBwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjU3LjYzODc5OTU4OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU4NjA3MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBMZXQncyBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGluaXRpYWwgZWZmb3J0cyBhcm91bmQgbGluZSA1MjguIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIG9wdGlvbiByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaGlkaW5nIHRoZXJlLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjU5LjU5NzQwOTM4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcXCJcXG4gNTIxOlxcdFxcbiA1MjI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXFwiXFxuIDUyMzpcXHRcXG4gNTI0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXFwiXFxuIDUyNTpcXHRcXG4gNTI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbiA1Mjc6XFx0XFxuIDUyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbiA1Mjk6XFx0XFxuIDUzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1xcXCJcXG4gNTMxOlxcdFxcbiA1MzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuIDUzMzpcXHRcXG4gNTM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcXFwiXFxuIDUzNTpcXHRcXG4gNTM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1xcXCJcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZ1xcXCJcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo1OS41OTc0OTEzNTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0NDkwNTI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUFBQIFN5bmNocm9ub3VzIFRUWSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHJlbGV2YW50IHRvIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGRyaXZlciAoYENPTkZJR19QUFBgLCBgQ09ORklHX1BQUF9TWU5DX1RUWWAsIGFuZCBgQ09ORklHX1RUWWApIGFyZSBlbmFibGVkLiBUaGUgYENPTkZJR19UVFlgIG9wdGlvbiBpcywgb2YgY291cnNlLCBzdGFuZGFyZCBvbiBhbiB4ODYgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCB3ZSBoYXZlIGBbXCJQUFBcIiwgXCJQUFBfU1lOQ19UVFlcIiwgXCJUVFlcIl1gLlxuXG5OZXh0LCBJJ2xsIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9sczogYFtcInBwcF9zeW5jX3R4bXVuZ2VcIiwgXCJwcHBfc3luY19zZW5kXCIsIFwicHBwX3N5bmNfb3BlblwiLCBcInBwcF9zeW5jdHR5X2lvY3RsXCJdYC4gQWN0dWFsbHksIGFmdGVyIGEgcXVpY2sgcmV2aWV3LCBgcHBwX3N5bmNfdHhtdW5nZWAgYW5kIGBwcHBfc3luY19zZW5kYCBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIHZ1bG5lcmFiaWxpdHkuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgeWVzLiBgcHBwX3N5bmN0dHkuY2AgaXMgYSByZWFjaGFibGUgbmV0d29yay9UVFkgbGluZSBkaXNjaXBsaW5lIGRyaXZlciwgd2hpY2ggaW1wbGllcyBpdCBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGlucHV0LiBDcml0aWNhbGx5LCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gaGVhZGVyIGV4cGFuc2lvbiBhbmQgaGVhZHJvb20gbG9naWMgdXNpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gVGhpcyBhcmVhIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuXG5cbldpdGggYWxsIHRoYXQgdmVyaWZpZWQsIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBtb3ZlIG9uIGFuZCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MCwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowMi44NDIzOTg5MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgxOTI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc2tiIGhlYWRyb29tIGhhbmRsaW5nIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSBieSByZXBsYWNpbmcgbWFudWFsIHNrYiBhbGxvY2F0aW9uL2NvcHlpbmcgd2l0aCBza2JfY293X2hlYWQoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgaW9jdGxzIChOX1NZTkNfUFBQKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBza2IgaGVhZHJvb20gaGFuZGxpbmcgaW4gcHBwX3N5bmNfdHhtdW5nZSgpIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIGFsbG9jYXRpb24vY29weWluZyB3aXRoIHNrYl9jb3dfaGVhZCgpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMgaW4gdGhlIFBQUCBzeW5jaHJvbm91cyBUVFkgbGluZSBkaXNjaXBsaW5lIGRyaXZlciwgd2hpY2ggY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgVFRZIGxpbmUgZGlzY2lwbGluZSBpb2N0bHMgKE5fU1lOQ19QUFApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowMi45MjMyMjU5MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTM5MDEzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTE6MDIuOTIzNzExMTA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTIxMzg1MjMzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBjb3B5LW9uLXdyaXRlIGhhbmRsaW5nIGluIGBwcHBfc3luY190eG11bmdlKClgIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiAoYGRldl9hbGxvY19za2IoKWAsIGBza2JfcmVzZXJ2ZSgpYCwgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoKWApIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC5cXG5cXG5Gb2xsb3dpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgYm90aCBuZXdseSBwdXNoZWQgYnl0ZXMgdmlhIGBza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7YCBhbmQgYHNrYi1cXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gZXhoYXVzdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igc2tiIGJ1ZmZlciBoYW5kbGluZyBhcmUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDg6MTA6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtNDU1LDE3ICs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiBcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbi1cdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyKSB7XG4tXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gKyAyKTtcbi1cdFx0XHRpZiAobnBrdCA9PSBOVUxMKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRza2JfcmVzZXJ2ZShucGt0LDIpO1xuLVx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLFxuLVx0XHRcdFx0ICAgICAgc2tiX3B1dChucGt0LCBza2ItXHUwMDNlbGVuKSwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0XHRza2IgPSBucGt0O1xuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFx0XHRza2JfcHVzaChza2IsMik7XG4gXHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTE6MDIuOTIzNzEyMDU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzMyMTM3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgU3luY2hyb25vdXMgVFRZIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMgYW5kIHRoZWlyIGNvbnRleHQuIFRoZSBwYXRjaCB0YXJnZXRzIGBwcHBfc3luY3R0eS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgZnVuY3Rpb24uIEJlZm9yZSBJIHN0YXJ0IGZvcm1pbmcgYW55IG9waW5pb24sIEkgbmVlZCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgcHJvcGVyIGNvbnRleHQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBiZWluZyBjaGFuZ2VkIGFuZCB3aHkuXG5cblNvLCBJJ2xsIGdvIGFoZWFkIGFuZCByZWFkIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDQ1NSBvZiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBLbm93aW5nIGhvdyB0aGF0IHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZSBmdW5jdGlvbnMgaXMga2V5IGJlZm9yZSBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowNy4zOTY5Mjg1MzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcbiA0MzE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmKlxcbiA0MzI6XFx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQzMzpcXHR7XFxuIDQzNDpcXHRcXHRpbnQgcHJvdG87XFxuIDQzNTpcXHRcXHR1bnNpZ25lZCBjaGFyICpkYXRhO1xcbiA0MzY6XFx0XFx0aW50IGlzbGNwO1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRcXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXFxuIDQzOTpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xcbiA0NDA6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ0MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcdGRhdGEgID0gc2tiLVxcdTAwM2VkYXRhO1xcbiA0NDQ6XFx0XFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcXG4gNDQ3OlxcdFxcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXFxuIDQ0ODpcXHRcXHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cXG4gNDQ5OlxcdFxcdCAqL1xcbiA0NTA6XFx0XFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IDEgXFx1MDAzYz0gZGF0YVsyXSBcXHUwMDI2XFx1MDAyNiBkYXRhWzJdIFxcdTAwM2M9IDc7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXFxuIDQ1MzpcXHRcXHRpZiAoZGF0YVswXSA9PSAwIFxcdTAwMjZcXHUwMDI2IChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpIFxcdTAwMjZcXHUwMDI2ICFpc2xjcClcXG4gNDU0OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwxKTtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiA0NTc6XFx0XFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuIDQ1ODpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcXG4gNDU5OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0NjA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ2MTpcXHRcXHRcXHR9XFxuIDQ2MjpcXHRcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIDQ2MzpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XFxuIDQ2NDpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdGFwLVxcdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0xPR19PVVRQS1QpXFxuIDQ3MDpcXHRcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDczOlxcdH1cXG4gNDc0OlxcdFxcbiA0NzU6XFx0LypcXG4gNDc2OlxcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXFxuIDQ3NzpcXHQgKi9cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0LypcXG4gNDgwOlxcdCAqIFNlbmQgYSBwYWNrZXQgdG8gdGhlIHBlZXIgb3ZlciBhbiBzeW5jIHR0eSBsaW5lLlxcbiA0ODE6XFx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cXG4gNDgyOlxcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXFxuIDQ4MzpcXHQgKiBhdCBzb21lIGxhdGVyIHRpbWUuXFxuIDQ4NDpcXHQgKi9cXG4gNDg1OlxcdHN0YXRpYyBpbnRcXG4gNDg2OlxcdHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0ODc6XFx0e1xcbiA0ODg6XFx0XFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4gNDg5OlxcdFxcbiA0OTA6XFx0XFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFhNSVRfRlVMTCwgXFx1MDAyNmFwLVxcdTAwM2V4bWl0X2ZsYWdzKSlcXG4gNDkzOlxcdFxcdFxcdHJldHVybiAwO1xcdC8qIGFscmVhZHkgZnVsbCAqL1xcbiA0OTQ6XFx0XFx0c2tiID0gcHBwX3N5bmNfdHhtdW5nZShhcCwgc2tiKTtcXG4gNDk1OlxcdFxcdGlmIChza2IgIT0gTlVMTClcXG4gNDk2OlxcdFxcdFxcdGFwLVxcdTAwM2V0cGt0ID0gc2tiO1xcbiA0OTc6XFx0XFx0ZWxzZVxcbiA0OTg6XFx0XFx0XFx0Y2xlYXJfYml0KFhNSVRfRlVMTCwgXFx1MDAyNmFwLVxcdTAwM2V4bWl0X2ZsYWdzKTtcXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowNy4zOTcwMjE1MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY2NTE4OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNLQiBIZWFkZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBJIHNlZSB3ZSd2ZSByZXBsYWNlZCBhIGNodW5rIG9mIGxvZ2ljIGludm9sdmluZyBgZGV2X2FsbG9jX3NrYmAsIGBza2JfcmVzZXJ2ZWAsIGFuZCBgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YWAgd2l0aCBhIGNhbGwgdG8gYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGF0IGl0J3MgYWJvdXQgZWZmaWNpZW50IGhlYWRyb29tIG1hbmFnZW1lbnQgYW5kIGVuc3VyaW5nIHdlIGhhdmUgYSB3cml0YWJsZSBidWZmZXIuIFRoZSBwcmltYXJ5IG1vdGl2YXRpb24gaXMgcHJldHR5IGNsZWFyOiBpbXByb3ZlIGVmZmljaWVuY3kgYW5kIHNhZmV0eSB3aGVuIHByZXBlbmRpbmcgZGF0YSB0byB0aGUgYHNrYmAuIFRoZSBvbGQgY29kZSB3YXMgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhlIGBza2JgJ3MgaGVhZHJvb20gd2FzIGluc3VmZmljaWVudC4gSXQgcmUtYWxsb2NhdGVkIGEgbmV3IGBza2JgLCBjb3BpZWQgdGhlIG9yaWdpbmFsIGRhdGEsIGFuZCB0aGVuIGRpc2NhcmRlZCB0aGUgb2xkIG9uZSwgYmVmb3JlIHByZXBlbmRpbmcgdGhlIDItYnl0ZSBQUFAgaGVhZGVyLiBUaGUgbmV3IGNvZGUgbGV2ZXJhZ2VzIGBza2JfY293X2hlYWRgLCB3aGljaCBoYW5kbGVzIGFsbG9jYXRpb24sIGNsb25pbmcgKGlmIHNoYXJlZCksIGxpbmVhcml6YXRpb24gKGlmIG5lZWRlZCkgQU5EIG1ha2VzIHN1cmUgd2UgaGF2ZSBhIHdyaXRhYmxlIGhlYWRyb29tIG9mIDIgYnl0ZXMgb3IgbW9yZSwgcmVkdWNpbmcgdGhlIGNoYW5jZXMgb2YgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHByZXBlbmRpbmcgZGF0YS4gTWFrZXMgc2Vuc2UsIGl0J3MgYSBzdGFuZGFyZCBoZWxwZXIgZm9yIHRoZXNlIHNpdHVhdGlvbnMsIHdoaWNoIHdlcmUgYSBiaXQgbWFudWFsbHkgaGFuZGxlZCBiZWZvcmUuXG5cbk5vdywgYSBrZXkgY29uY2VybiBpbiB0aGVzZSBjaGFuZ2VzIGlzIGFsd2F5cyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBsZXQncyBzdGVwIHRocm91Z2ggaXQ6XG5cbiogICBEb2VzIHRoaXMgY3JlYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIGBza2JfY293X2hlYWQoc2tiLCAyKWAgZWl0aGVyIHVzZXMgZXhpc3RpbmcgbWVtb3J5IG9yIHJlYWxsb2NhdGVzIHRoZSBoZWFkZXIgd2hpbGUgY29weWluZyB0aGUgZGF0YSwgc28gZXhpc3RpbmcgZGF0YSB3aWxsIGJlIGNvcGllZC5cbiogICBEb2VzIGl0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyB0aGUgcHJlcGVuZGVkIGRhdGEuIGBza2JfcHVzaChza2IsIDIpYCBjcmVhdGVzIHNwYWNlLCBhbmQgdGhlbiB0aGUgZm9sbG93aW5nIGxpbmVzIGBza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsgc2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7YCBleHBsaWNpdGx5IHNldCB0aGUgbmV3IGhlYWRlciBieXRlcy5cbiogICBEb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciB0aGUgbmV0d29yaz8gTm9wZS4gVGhvc2UgYnl0ZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHNvIG5vIGlzc3VlcyBoZXJlLlxuKiAgIEFueSBzdHJ1Y3QgZmllbGRzIGxlZnQgdW5pbml0aWFsaXplZD8gTm8uIFdlIG9ubHkgbW9kaWZ5IGFuZCBpbW1lZGlhdGVseSBpbml0aWFsaXplIGBza2ItXHUwMDNlZGF0YWAuXG4qICAgQW55IGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcz8gTm8sIGFsbCBpbml0aWFsIHZhbHVlcyBhcmUgYXNzaWduZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4qICAgQXJlIHRoZXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlZ2FyZGluZyBidWZmZXIgc2hhcmluZyBvciBoZWFkcm9vbSBpc3N1ZXMgaGVyZSB0aGF0IEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgd291bGQgY2F0Y2g/IFllcywgYW5kIHRoYXQgaXMgdmVyeSBpbXBvcnRhbnQuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdGhlc2Uga2luZHMgb2YgYnVmZmVyIG1hbmlwdWxhdGlvbnMuXG5cbkJhc2VkIG9uIGFsbCBvZiB0aGlzLCB0aGUgY2hhbmdlIHNlZW1zIHNhZmUuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgYSBkaXJlY3QgY29tcGFyaXNvbiBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTiwgd2hpY2gsIGJhc2VkIG9uIHRoZSBjaGVjaywgY29uZmlybXMgd2UgZG9uJ3QgbmVlZCBLTVNBTiBiZWNhdXNlIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kIG9mIG1lbW9yeSBlcnJvcnMgcHJlc2VudC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzEsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTE6MTUuMDYyMjE0ODQ5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgY29weS1vbi13cml0ZSBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZSgpYCBieSByZXBsYWNpbmcgbWFudWFsIHNrYiByZWFsbG9jYXRpb24gKGBkZXZfYWxsb2Nfc2tiKClgLCBgc2tiX3Jlc2VydmUoKWAsIGBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKClgKSB3aXRoIGBza2JfY293X2hlYWQoc2tiLCAyKWAuXFxuXFxuRm9sbG93aW5nIGBza2JfY293X2hlYWQoc2tiLCAyKWAsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVzIGJvdGggbmV3bHkgcHVzaGVkIGJ5dGVzIHZpYSBgc2tiLVxcdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO2AgYW5kIGBza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7YC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGJyYW5jaGluZyBkb2VzIG5vdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIGV4aGF1c3Rpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHNrYiBidWZmZXIgaGFuZGxpbmcgYXJlIG1lbW9yeSBzYWZldHkgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBjb3B5LW9uLXdyaXRlIGhhbmRsaW5nIGluIGBwcHBfc3luY190eG11bmdlKClgIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiAoYGRldl9hbGxvY19za2IoKWAsIGBza2JfcmVzZXJ2ZSgpYCwgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoKWApIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC5cXG5cXG5Gb2xsb3dpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgYm90aCBuZXdseSBwdXNoZWQgYnl0ZXMgdmlhIGBza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7YCBhbmQgYHNrYi1cXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gZXhoYXVzdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igc2tiIGJ1ZmZlciBoYW5kbGluZyBhcmUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 07:26:31 +0000 UTC FinishedAt: 2026-09-08 08:11:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_SYNC_TTY", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_SYNC_TTY", "TTY" ], "series_id": "fdabecea-19e5-4b37-a560-b31356624bda" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_sync_txmunge", "ppp_sync_send" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX3N5bmNfdHhtdW5nZSYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyBoZWFkcm9vbSBleHBhbnNpb24gYW5kIGNvcHktb24td3JpdGUgaGFuZGxpbmcgaW4gYHBwcF9zeW5jX3R4bXVuZ2UoKWAgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgcmVhbGxvY2F0aW9uIChgZGV2X2FsbG9jX3NrYigpYCwgYHNrYl9yZXNlcnZlKClgLCBgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgpYCkgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLlxuXG5Gb2xsb3dpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgYm90aCBuZXdseSBwdXNoZWQgYnl0ZXMgdmlhIGBza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztgIGFuZCBgc2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7YC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGJyYW5jaGluZyBkb2VzIG5vdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBleGhhdXN0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBza2IgYnVmZmVyIGhhbmRsaW5nIGFyZSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2M2QwYzJjNThkODBhN2JjOTZjY2UxYTllYzM3ZTA3MzgwOTZhODA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODoxMDowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtNDU1LDE3ICYjNDM7NDU1LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHQvKiBwcmVwZW5kIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgaWYgbmVjZXNzYXJ5ICovXG4gXHRpZiAoKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgMikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpucGt0ID0gZGV2X2FsbG9jX3NrYihza2ItXHUwMDNlbGVuICYjNDM7IDIpO1xuLVx0XHRcdGlmIChucGt0ID09IE5VTEwpIHtcbi1cdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrYl9yZXNlcnZlKG5wa3QsMik7XG4tXHRcdFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsXG4tXHRcdFx0XHQgICAgICBza2JfcHV0KG5wa3QsIHNrYi1cdTAwM2VsZW4pLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHNrYiA9IG5wa3Q7XG4mIzQzO1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdHNrYl9wdXNoKHNrYiwyKTtcbiBcdFx0c2tiLVx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2M2QwYzJjNThkODBhN2JjOTZjY2UxYTllYzM3ZTA3MzgwOTZhODA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODoxMDowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMKaW5kZXggZjg3ZDQzZmFlZWFiNS4uZWJkNjJhN2FiNTRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMKQEAgLTQ1NSwxNyAmIzQzOzQ1NSw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJLyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqLwogCWlmICgoYXAtJmd0O2ZsYWdzICZhbXA7IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHsKLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgMikgewotCQkJc3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi0mZ3Q7bGVuICYjNDM7IDIpOwotCQkJaWYgKG5wa3QgPT0gTlVMTCkgewotCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJc2tiX3Jlc2VydmUobnBrdCwyKTsKLQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLAotCQkJCSAgICAgIHNrYl9wdXQobnBrdCwgc2tiLSZndDtsZW4pLCBza2ItJmd0O2xlbik7Ci0JCQljb25zdW1lX3NrYihza2IpOwotCQkJc2tiID0gbnBrdDsKJiM0MzsJCWlmIChza2JfY293X2hlYWQoc2tiLCAyKSkgewomIzQzOwkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCXJldHVybiBOVUxMOwogCQl9CiAJCXNrYl9wdXNoKHNrYiwyKTsKIAkJc2tiLSZndDtkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIHJlcXVlc3QgaXMgYWJvdXQgZGVmZW5zaXZlIGNvZGUgZXZhbHVhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBrZXJuZWwgZnV6emluZy4gVGhhdCBtZWFucyBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG5vdCBqdXN0IHN0YW5kYXJkIFFBIG9yIHJvdXRpbmUgdHJpYWdlLiBFeGNlbGxlbnQuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCBhbmQgaXMgZm9jdXNlZCBvbiB0aGUgYHBwcF9zeW5jX3R4bXVuZ2VgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGF0IHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgbWFudWFsIGBkZXZfYWxsb2Nfc2tiYCwgY29weSwgYW5kIGZyZWUgc2VxdWVuY2Ugd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIGBza2JfY293X2hlYWRgIGlzIGEgQ29weS1Pbi1Xcml0ZSBvcGVyYXRpb24sIHdoaWNoIGdlbmVyYWxseSBhaW1zIGF0IG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLiBUaGUgY3J1Y2lhbCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYXJlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGVudGlyZSBmaWxlLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLCB1c2luZyBlaXRoZXIgYSByZWFkLWZpbGUgdG9vbCBvciBncmVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9zeW5jX3R4bXVuZ2VgIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBQUFAgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSB0aW1pbmcgaXNzdWVzLCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgKHVubGlrZWx5LCBidXQgSSBhbHdheXMgY2hlY2spLCBvciBhbnkgdW5pbnRlbmRlZCBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIHRoZSBDT1cgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwbGFjZXMgd2hlcmUgdGhlIGFzc3VtcHRpb24gb2Ygb3duZXJzaGlwIG9yIGRhdGEgaW50ZWdyaXR5IG1pZ2h0IGJlIGFsdGVyZWQuIEJhc2VkIG9uIHRoaXMsIEkmIzM5O2xsIHRoZW4gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBydW4gdGhpcyB0aHJvdWdoIFN5emthbGxlciBvciBzdWdnZXN0IHRoYXQgYW5vdGhlciBzZWN1cml0eSBhdWRpdCBpcyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ0MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NDI6XHRcdH1cbiA0NDM6XHRcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gNDQ0Olx0XHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiA0NDU6XHRcbiA0NDY6XHRcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcbiA0NDc6XHRcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXG4gNDQ4Olx0XHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cbiA0NDk6XHRcdCAqL1xuIDQ1MDpcdFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFx1MDAyNlx1MDAyNiAxIFx1MDAzYz0gZGF0YVsyXSBcdTAwMjZcdTAwMjYgZGF0YVsyXSBcdTAwM2M9IDc7XG4gNDUxOlx0XG4gNDUyOlx0XHQvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBvcHRpb24gZW5hYmxlZCAqL1xuIDQ1MzpcdFx0aWYgKGRhdGFbMF0gPT0gMCBcdTAwMjZcdTAwMjYgKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiAhaXNsY3ApXG4gNDU0Olx0XHRcdHNrYl9wdWxsKHNrYiwxKTtcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiA0NTc6XHRcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbiA0NTg6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKSB7XG4gNDU5Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDYwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDYxOlx0XHRcdH1cbiA0NjI6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MzpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjQ6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDY1Olx0XHR9XG4gNDY2Olx0XG4gNDY3Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2ODpcdFxuIDQ2OTpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDcwOlx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDcxOlx0XG4gNDcyOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MzpcdH1cbiA0NzQ6XHRcbiA0NzU6XHQvKlxuIDQ3NjpcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXG4gNDc3Olx0ICovXG4gNDc4Olx0XG4gNDc5Olx0LypcbiA0ODA6XHQgKiBTZW5kIGEgcGFja2V0IHRvIHRoZSBwZWVyIG92ZXIgYW4gc3luYyB0dHkgbGluZS5cbiA0ODE6XHQgKiBSZXR1cm5zIDEgaWZmIHRoZSBwYWNrZXQgd2FzIGFjY2VwdGVkLlxuIDQ4MjpcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXG4gNDgzOlx0ICogYXQgc29tZSBsYXRlciB0aW1lLlxuIDQ4NDpcdCAqL1xuIDQ4NTpcdHN0YXRpYyBpbnRcbiA0ODY6XHRwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0ODc6XHR7XG4gNDg4Olx0XHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4gNDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBQUCBTeW5jVFRZIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIEtjb25maWcgZm9yIGBwcHBfc3luY3R0eS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBTeW5jVFRZIGRyaXZlciBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgUFBQIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMsIHN5bWJvbHMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBndWFyZHJhaWxzLCB0aGUgKmlmKiBzdGF0ZW1lbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhpcyBkcml2ZXIgaXMgZXZlbiBjb25zaWRlcmVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFBQUCBvcHRpb25zLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgcGVyaGFwcyByZWxhdGVkIHRvIHNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24gb3Igc3BlY2lmaWMgVUFSVCBjb250cm9sbGVycz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBvdGhlciBQUFAgZHJpdmVycywgYW5kIGhvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhpcyBkcml2ZXIgZWZmZWN0cyB0aG9zZS4gV2hhdCBhYm91dCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBvZiB0aGUgU3luY1RUWSBkcml2ZXI/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVmYXVsdCB2YWx1ZXMgb3Igc3VidGxlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBzcGVjaWZpYyBzY2VuYXJpb3M/IFRoaXMgcmV2aWV3IHdpbGwgaGVscCBpZGVudGlmeSB3aGV0aGVyIHRoaXMgbW9kdWxlIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgYW5kIGZsYWcgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgzPWNvbmZpZyBQUFBfQVNZTkNcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk3LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19QUFBfTVBQRSkgJiM0Mzs9IHBwcF9tcHBlLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUFBQX1NZTkNfVFRZKSAmIzQzOz0gcHBwX3N5bmN0dHkub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUFBPWCkgJiM0Mzs9IHBwcG94Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFBQUCBLY29uZmlnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBpbiBvbiBsaW5lIDE5NiAoZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBvZiBjb3Vyc2UpLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIFBQUCBpcyBkZWZpbmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgZGVwZW5kZW5jeSwgYSBkZWZhdWx0IHZhbHVlLCBvciBhIHByb21wdCBzdHJpbmcgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uIGluIHRoZSBjb250ZXh0IG9mIGEgY3VycmVudCBidWlsZCBpc3N1ZS4gS25vd2luZyB0aGUgY29udGV4dCwgSSBleHBlY3QgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhbmQgc3RhcnQgYW5hbHl6aW5nLiBJIGFudGljaXBhdGUgaXQgd2lsbCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB1bmRlcnN0YW5kLCBidXQgSSBuZWVkIHRvIHN0YXJ0IHNvbWV3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXG4gMTgxOlx0aWYgVFRZXG4gMTgyOlx0XG4gMTgzOlx0Y29uZmlnIFBQUF9BU1lOQ1xuIDE4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuIDE4NTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzdGFuZGFyZFxuIDE4ODpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzdWNoIGFzIENPTTEgb3IgQ09NMiBvbiBhIFBDLiAgSWYgeW91IHVzZVxuIDE4OTpcdFx0ICBhIG1vZGVtIChub3QgYSBzeW5jaHJvbm91cyBvciBJU0ROIG1vZGVtKSB0byBjb250YWN0IHlvdXIgSVNQLCB5b3VcbiAxOTA6XHRcdCAgbmVlZCB0aGlzIG9wdGlvbi5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAxOTM6XHRcbiAxOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxOTU6XHRcbiAxOTY6XHRjb25maWcgUFBQX1NZTkNfVFRZXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcbiAyMDA6XHRcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxuIDIwMTpcdFx0ICBsaW5lcyBsaWtlIFQxL0UxLlxuIDIwMjpcdFxuIDIwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDIwNDpcdFxuIDIwNTpcdGVuZGlmICMgVFRZXG4gMjA2Olx0XG4gMjA3Olx0ZW5kaWYgIyBQUFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQUFAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLCBhbmQgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBzaG91bGQgYmUgc3BlbGxlZCBvdXQgdGhlcmUgdXNpbmcgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSB0b3Agb2YgdGhhdCBmaWxlIGltbWVkaWF0ZWx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIGFsbG93IG1lIHRvIGRldGVybWluZSB3aGVyZSBteSBuZXh0IHF1ZXN0aW9ucyBzaG91bGQgYmUgcG9zZWQuIEkmIzM5O20gaG9waW5nIEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIFBQUF9CU0RDT01QXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoIG9mIGBwcHBfc3luY3R0eWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9zeW5jdHR5YCBpcyBhY3R1YWxseSAqdXNlZCogYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdCYjMzk7cyByZWFjaGVkIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGNvcmUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgdGhpcyBtb2R1bGUgY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBwc2V1ZG8tdGVybWluYWwgKHB0eSkgb3IgdGVybWluYWwgKHR0eSkgZGV2aWNlIGluIFFFTVUgdmlhIHRoZSBgVElPQ1NFVERgIGlvY3RsIHN5c3RlbSBjYWxsLCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyB0aGUgYE5fU1lOQ19QUFBgIGxpbmUgZGlzY2lwbGluZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSB2ZWN0b3IuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHBwcF9zeW5jdHR5LmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgbGluZSBkaXNjaXBsaW5lIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGlzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBhdHRhY2htZW50IHBvc3NpYmlsaXRpZXMgYW5kIGFueSBwb3RlbnRpYWwgY29uc3RyYWludHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfcmVnaXN0ZXJfbGRpc2N8Tl9TWU5DX1BQUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MzA5PXBwcF9hc3luY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMxMi1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMTM6XHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXHUwMDI2cHBwX2xkaXNjKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMTQtXHRpZiAoZXJyICE9IDApXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9Mjg2PXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBwcHBfc3luY19sZGlzYyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4Ny1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI4ODpcdC5udW1cdD0gTl9TWU5DX1BQUCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4OS1cdC5uYW1lXHQ9IFwmIzM0O3BwcHN5bmNcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MzAwPXBwcF9zeW5jX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDMtXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzozMDQ6XHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzA1LVx0aWYgKGVyciAhPSAwKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTY1ND1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NjU1Ok1PRFVMRV9BTElBU19MRElTQyhOX1NZTkNfUFBQKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBQIFN5bmMgTGluZSBEaXNjaXBsaW5lKioKCk9rYXksIHNvIGBOX1NZTkNfUFBQYC4uLiB0aGF0JiMzOTtzIGEgbGluZSBkaXNjaXBsaW5lLCByaWdodD8gQW5kIHN5emthbGxlciwgY2xldmVyIHRoaW5nIHRoYXQgaXQgaXMsIGNhbiBqdXN0IHNsYXAgaXQgb250byAqYW55KiBwdHkgb3IgdHR5IHVzaW5nIGBpb2N0bGAgYW5kIGBUSU9DU0VURGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aGlzIGlzbiYjMzk7dCBzb21lIG5pY2hlLCBkZWVwbHkgYnVyaWVkIGZ1bmN0aW9uYWxpdHk7IGl0JiMzOTtzIHBvdGVudGlhbGx5IHZlcnkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBwYXRoLiBXaGVuIHBhY2tldHMgZ28gb3V0IG92ZXIgYSBQUFAgY2hhbm5lbCB0aGF0JiMzOTtzIGJlZW4gY29uZmlndXJlZCB3aXRoIGBOX1NZTkNfUFBQYCwgSSBrbm93IGBwcHBfc3luY19zZW5kYCBnZXRzIHRyaWdnZXJlZCwgYW5kIHRoYXQgaW4gdHVybiBjYWxscyBgcHBwX3N5bmNfdHhtdW5nZWAuIFNvLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiBlbHNlIGBwcHBfc3luY190eG11bmdlYCBpcyBjYWxsZWQuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2UgaXRzIHVzZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgb3RoZXIgYXJlYXMgb2YgaW50ZXJlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwPXN0cnVjdCBzeW5jcHBwIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjgzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtODQtc3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NDMxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZipcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQzMjpwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQzMy17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NDg2PXBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQ5My1cdFx0cmV0dXJuIDA7XHQvKiBhbHJlYWR5IGZ1bGwgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQ5NDpcdHNrYiA9IHBwcF9zeW5jX3R4bXVuZ2UoYXAsIHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00OTUtXHRpZiAoc2tiICE9IE5VTEwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBwcHBfc3luY190eG11bmdlYCAqaXMqIHJlYWNoYWJsZSDigJMgaXQmIzM5O3MgdXNlZCB3aGVuIHNlbmRpbmcgcGFja2V0cyBvdmVyIGEgYE5fU1lOQ19QUFBgIHR0eSBsaW5lIGRpc2NpcGxpbmUuIFdlIGNhbiBnZXQgdGhpcyBzZXR1cCB2aWEgYHB0bXhgLCBgcHRzYCwgb3IgYHR0eWAsIGFuZCB0aGVuIHJlZ2lzdGVyIGl0IGFzIGEgUFBQIGNoYW5uZWwgdXNpbmcgYFBQUElPQ0FUVENIQU5gLCBgUFBQSU9DQVRUQUNIYCwgb3IgYFRJT0NTRVREYCwgdHJhbnNtaXR0aW5nIHBhY2tldHMgdXNpbmcgZWl0aGVyIHN0YW5kYXJkIG5ldHdvcmsgbWV0aG9kcywgdGhlIFBQUCB1bml0IHNvY2tldCBvciBnZW5lcmljIFBQUCBpb2N0bHMuIFRoZSBjcml0aWNhbCBjYWxsIGlzIGBwcHBfc3luY19zZW5kYCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwcHBfc3luY190eG11bmdlYC4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBob3cgaGVhZHJvb20gaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgaWYgd2UgbmVlZGVkIG1vcmUgaGVhZHJvb20gKGFuZCB0aGUgYFNDX0NPTVBfQUNgIGZsYWcgd2FzbiYjMzk7dCBzZXQgb3IgaWYgaXQmIzM5O3MgTENQKSwgaXQgd291bGQgYWxsb2NhdGUgYSBuZXcgYHNrX2J1ZmZgIChgbnBrdGApLCBjb3B5IHRoZSBkYXRhLCBhbmQgZnJlZSB0aGUgb3JpZ2luYWwgKGBza2JgKS4gVGhlIGNydWNpYWwgZGlmZmVyZW5jZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gVGhpcyBhaW1zIHRvIGVuc3VyZSB0aGUgYHNrYmAgaGFzIGF0IGxlYXN0IDIgYnl0ZXMgb2YgaGVhZHJvb20sIG1ha2luZyBpdCB3cml0YWJsZSDigJMgcG90ZW50aWFsbHkgY2xvbmluZyB0aGUgYHNrYmAgaWYgbmVjZXNzYXJ5LgoKQnV0IHRoaXMgcmFpc2VzIHF1ZXN0aW9ucyEgVGhlIGNvZGUgY2hlY2tzIHRoZSByZXR1cm4gb2YgYHNrYl9jb3dfaGVhZGAuIEEgKmZhaWx1cmUqIGZyb20gYHNrYl9jb3dfaGVhZGAgaXMgaW5kaWNhdGVkIGJ5IGEgbm9uLXplcm8gcmV0dXJuLCB3aGljaCBpcyBjb25jZXJuaW5nLiBEb2VzIGl0IGZyZWUgdGhlIGBza2JgIGluIGNhc2Ugb2YgZmFpbHVyZT8gVGhlIGNvZGUgKmltbWVkaWF0ZWx5KiBga2ZyZWVfc2tiKHNrYilgIHVwb24gZmFpbHVyZS4gQnV0IGlmIHRoZSBjbG9uZSBmYWlscywgaXQgaXMgYSBjb3B5LW9uLXdyaXRlIHNvIHRoZSAqY2FsbGVyKiBzdGlsbCBob2xkcyBhIHZhbGlkIHJlZmVyZW5jZS4gV2hhdCBoYXBwZW5zIHdpdGggdGhpcyBgc2tiYCBpbiB0aGlzIGNhc2U/IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGxvb2tzIGNvcnJlY3QgZ2l2ZW4gaXQgaGFzIHRoZSBlcXVpdmFsZW50IGVmZmVjdCBvZiB0aGUgcHJpb3IgaW1wbGVtZW50YXRpb24sIHdoZXJlIGEgbmV3IGBza2JgIHdvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCB0aGUgb2xkIHNrYiBmcmVlZCwgYnV0IHdpdGhvdXQgZG91YmxlIGZyZWVzLgoKV2UgbmVlZCB0byByZWFsbHkgZGl2ZSBpbnRvIHRoZSBgc2tiX2Nvd19oZWFkYCBtYWNybyBpdHNlbGYgdG8gYmUgY2VydGFpbi4gV2Uga25vdyB0aGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyBlaXRoZXIgYHBza2JfZXhwYW5kX2hlYWRgIG9yIGBza2JfY293X2hlYWRgLCBidXQgbGV0IG1lIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBlbnRpcmVseSBzdXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9jb3dfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0zOTI2PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMS0vKipcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzkzMjogKlx0c2tiX2Nvd19oZWFkIC0gc2tiX2NvdyBidXQgb25seSBtYWtpbmcgdGhlIGhlYWQgd3JpdGFibGVcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMy0gKlx0QHNrYjogYnVmZmVyIHRvIGNvd1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk0MC0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mzk0MTpzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBza2J1ZmYuaCBmb3IgYSBTcGVjaWZpYyBJc3N1ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCB0YXJnZXQgbGluZXMgMzkyNS0zOTUwLiBTb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZSwgYW5kIGJhc2VkIG9uIHRoZSBzeW1wdG9tcyBJJiMzOTt2ZSBiZWVuIHNlZWluZywgSSBzdXNwZWN0IHRoZSBpc3N1ZSBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcsIG9yIG5vdCBoYW5kbGluZywgc29tZXRoaW5nIHdpdGhpbiB0aGF0IGNodW5rIG9mIHRoZSBza2Igc3RydWN0dXJlIG1hbmFnZW1lbnQuIEkga25vdyB0aGF0IGFyZWEgY292ZXJzIHNvbWUgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSwgbGlrZWx5IHRvdWNoaW5nIG9uIGZyYWdtZW50IGhhbmRsaW5nLCBvciBtYXliZSBzb21lIG9mIHRoZSBhbmNpbGxhcnkgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRob3NlIGxpbmVzIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgZGV2aWF0ZXMgZnJvbSBlc3RhYmxpc2hlZCBiZXN0IHByYWN0aWNlcywgb3IgdGhhdCBtaWdodCBub3QgYmUgY29ycmVjdGx5IGNvbnNpZGVyaW5nIHJlY2VudCBjaGFuZ2VzIHRvIG91ciBoYXJkd2FyZS4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhhdCByYW5nZS4gSWYgbm90aGluZyBwb3BzIGltbWVkaWF0ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbHMgdG8gc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTI1Olx0ICovXG4zOTI2Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4zOTI3Olx0e1xuMzkyODpcdFx0cmV0dXJuIF9fc2tiX2Nvdyhza2IsIGhlYWRyb29tLCBza2JfY2xvbmVkKHNrYikpO1xuMzkyOTpcdH1cbjM5MzA6XHRcbjM5MzE6XHQvKipcbjM5MzI6XHQgKlx0c2tiX2Nvd19oZWFkIC0gc2tiX2NvdyBidXQgb25seSBtYWtpbmcgdGhlIGhlYWQgd3JpdGFibGVcbjM5MzM6XHQgKlx0QHNrYjogYnVmZmVyIHRvIGNvd1xuMzkzNDpcdCAqXHRAaGVhZHJvb206IG5lZWRlZCBoZWFkcm9vbVxuMzkzNTpcdCAqXG4zOTM2Olx0ICpcdFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHNrYl9jb3cgZXhjZXB0IHRoYXQgd2UgcmVwbGFjZSB0aGVcbjM5Mzc6XHQgKlx0c2tiX2Nsb25lZCBjaGVjayBieSBza2JfaGVhZGVyX2Nsb25lZC4gIEl0IHNob3VsZCBiZSB1c2VkIHdoZW5cbjM5Mzg6XHQgKlx0eW91IG9ubHkgbmVlZCB0byBwdXNoIG9uIHNvbWUgaGVhZGVyIGFuZCBkbyBub3QgbmVlZCB0byBtb2RpZnlcbjM5Mzk6XHQgKlx0dGhlIGRhdGEuXG4zOTQwOlx0ICovXG4zOTQxOlx0c3RhdGljIGlubGluZSBpbnQgc2tiX2Nvd19oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbjM5NDI6XHR7XG4zOTQzOlx0XHRyZXR1cm4gX19za2JfY293KHNrYiwgaGVhZHJvb20sIHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpO1xuMzk0NDpcdH1cbjM5NDU6XHRcbjM5NDY6XHQvKipcbjM5NDc6XHQgKlx0c2tiX3BhZHRvXHQtIHBhZCBhbiBza2J1ZmYgdXAgdG8gYSBtaW5pbWFsIHNpemVcbjM5NDg6XHQgKlx0QHNrYjogYnVmZmVyIHRvIHBhZFxuMzk0OTpcdCAqXHRAbGVuOiBtaW5pbWFsIGxlbmd0aFxuMzk1MDpcdCAqXG4zOTUxOlx0ICpcdFBhZHMgdXAgYSBidWZmZXIgdG8gZW5zdXJlIHRoZSB0cmFpbGluZyBieXRlcyBleGlzdCBhbmQgYXJlXG4zOTUyOlx0ICpcdGJsYW5rZWQuIElmIHRoZSBidWZmZXIgYWxyZWFkeSBjb250YWlucyBzdWZmaWNpZW50IGRhdGEgaXRcbjM5NTM6XHQgKlx0aXMgdW50b3VjaGVkLiBPdGhlcndpc2UgaXQgaXMgZXh0ZW5kZWQuIFJldHVybnMgemVybyBvblxuMzk1NDpcdCAqXHRzdWNjZXNzLiBUaGUgc2tiIGlzIGZyZWVkIG9uIGVycm9yLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBwcHBfc3luY3R0eS5jKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBgcHBwX3N5bmN0dHkuY2AuIE15IGluaXRpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gYmFzZWQgb24gdGhlIGVzdGFibGlzaGVkIG1ldGhvZG9sb2d5LgoKRmlyc3QsIGxldCYjMzk7cyBjb25maXJtIHJlYWNoYWJpbGl0eS4gVGhlIHRleHQgY2xlYXJseSBzdGF0ZXMgdGhhdCBgcHBwX3N5bmN0dHlgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIG9yIHNvZnR3YXJlIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSB0aGUgVFRZIGxpbmUgZGlzY2lwbGluZSBgTl9TWU5DX1BQUGAgb24gcHNldWRvLXRlcm1pbmFscyBhbmQgdmlydHVhbCBUVFlzLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSAqcmVhY2hhYmxlKiBjb2RlLiBHb29kLgoKTm93LCByZWZlcnJpbmcgdG8gU2VjdGlvbiAzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uJiMzNDsgQ2hlY2suIEl0JiMzOTtzIGFjY2Vzc2libGUsIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgaXQuIFNlY3Rpb24gMyBhbHNvIG1lbnRpb25zIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywgd2hpY2ggdGhpcyBzZWVtcyB0byBmYWxsIGludG8gd2l0aCB0aGUgVFRZIGludGVyZmFjZSwgc28gdGhhdCYjMzk7cyBhbm90aGVyIHBvc2l0aXZlIGluZGljYXRvci4KCkFuZCB0aGVuLCBsb29raW5nIGF0IFNlY3Rpb24gMSwgaXQgcmVtaW5kcyBtZSBub3QgdG8gYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yIHJlZmFjdG9yaW5nLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCByZW1pbmRlciwgYmVjYXVzZSB0aG9zZSBjaGFuZ2VzIGNhbiBpbnRyb2R1Y2UgYnVncyBvciBzdWJ0bGUgc2hpZnRzLiBTaW5jZSAqcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSogaXMgYmVpbmcgbW9kaWZpZWQsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIE5vIHF1ZXN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZnV6emluZyBmb2N1cy4gSSBrbm93IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgcHBwX3N5bmNfdHhtdW5nZWAuIFNvLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzIGFuZCBlbnRyeSBwb2ludHMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBmb3Igb3RoZXIgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb25zIHdpdGhpbiBgcHBwX3N5bmN0dHkuY2AgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTXkgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCBmb3IgZnVuY3Rpb25zIHdpdGhpbiBgcHBwX3N5bmN0dHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBjb250ZXh0IGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWjAtOV9dJiM0MzsuKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwPXN0cnVjdCBzeW5jcHBwIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjgzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODQ6c3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo4NTpzdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTg2LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODc6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODg6c3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo4OTpzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjkwOnN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTEtXHRcdFx0ICAgaW50IGNvdW50KTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0xMDE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjEwMjpwcHBfcHJpbnRfYnVmZmVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBfX3U4ICpidWYsIGludCBjb3VudClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwMy17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTE4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjExOTpwcHBfc3luY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTE2OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTcwOnBwcF9zeW5jX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xNzEte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTE5MD1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTkxOnBwcF9zeW5jX3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHU4ICpidWYsIHNpemVfdCBjb3VudCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE5Mi1cdCAgICAgIHZvaWQgKipjb29raWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTIwMT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjAyOnBwcF9zeW5jX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjAzLVx0ICAgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yMDg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjA5OnBwcF9zeW5jdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjEwLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yNTY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI1NzpwcHBfc3luY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpjZmxhZ3MsXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yNTgtXHRcdCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjczPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyNzQ6cHBwX3N5bmNfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yNzUte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI5OT1zdGF0aWMgaW50IF9faW5pdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzAwOnBwcF9zeW5jX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwMS17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MzE0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMxNTpwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzE2LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MDUtICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MDY6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MDcte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MzI6cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MzMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQ4NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0ODY6cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00ODcte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwNz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo1MDg6cHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01MDkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTU1OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NTYwOnBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01NjEte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTU4Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NTg3OnBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01ODgte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTY0NT1zdGF0aWMgdm9pZCBfX2V4aXRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY0NjpwcHBfc3luY19jbGVhbnVwKHZvaWQpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy02NDcte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MTptb2R1bGVfaW5pdChwcHBfc3luY19pbml0KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1Mjptb2R1bGVfZXhpdChwcHBfc3luY19jbGVhbnVwKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MzpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UFBQIHN5bmNocm9ub3VzIFRUWSBjaGFubmVsIG1vZHVsZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo2NTQ6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1NTpNT0RVTEVfQUxJQVNfTERJU0MoTl9TWU5DX1BQUCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQ0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgUFBQIFN5bmNocm9ub3VzIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgcHBwX3N5bmNfdHhtdW5nZWAgaXMgaW52b2tlZCBkaXJlY3RseSBmcm9tIGBwcHBfc3luY19zZW5kYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhlIGRvdHMuIEkgcmVjYWxsIHRoYXQgYHBwcF9zeW5jX3NlbmRgIGlzLCBpbiBlc3NlbmNlLCB0aGUgYC5zdGFydF94bWl0YCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRyYW5zbWlzc2lvbiBhY3R1YWxseSBiZWdpbnMsIHRoZSBjaGFubmVsIG9wZXJhdGlvbnMmIzM5OyBgLnN0YXJ0X3htaXRgIGhvb2sgZm9yIHRoaXMgc3BlY2lmaWMgUFBQIGNoYW5uZWwuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHN0cnVjdHVyZSB1c2FnZSBvZiBgcHBwX3N5bmNfc2VuZGAgd2l0aGluIGBwcHBfc3luY3R0eS5jYC4gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggd2hhdCBJIGV4cGVjdCBhbmQgdGhhdCBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGltcG9ydGFudCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfY2hhbm5lbF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDUtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDctXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTkwPXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkyLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTM6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05NC1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA2LVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYzo2MDc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA4LVx0LnN0YXJ0X3htaXQgPSBwcHRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBQIFN5bmMgVFRZIE1vZHVsZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBwcHBfc3luY19zZW5kYCBhcHBlYXJzIHRvIGJlIGEgd3JhcHBlciBvciBhbiBhbGlhcyBmb3IgYHN5bmNfb3BzLnN0YXJ0X3htaXRgLiBUaGUga2V5IGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IG1vcmUgY2xvc2VseSBpcyBgcHBwX3N5bmNfdHhtdW5nZWAgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcsIGFuZCBgcHBwX3N5bmNfc2VuZGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiBjYWxsaW5nIGl0LiBJIGFsc28gc2hvdWxkIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93IHNlZW1zIHRvIGJlIG1hbmFnZWQgdGhyb3VnaCBgcHBwX3N5bmNfb3BlbmAsIGBwcHBfc3luY3R0eV9pb2N0bGAsIGFuZCBgcHBwX3N5bmNfaW9jdGxgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHN5bmMgdHR5IGNoYW5uZWwgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19QUFBfU1lOQ19UVFlgIGlzIGNsZWFybHkgZGVwZW5kZW50IG9uIGBDT05GSUdfUFBQYCBhbmQgYENPTkZJR19UVFlgIC0gbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IHNjYW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRob3JvdWdobHkgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UuKmRyaXZlcnMvbmV0L3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgTmV0d29yayBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgaXQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMgYXJvdW5kIGxpbmUgNTI4LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3Igb3B0aW9uIHJlc2lkZXMuIFRpbWUgdG8gc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBoaWRpbmcgdGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcJiMzNDtcbiA1MjE6XHRcbiA1MjI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCYjMzQ7XG4gNTIzOlx0XG4gNTI0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXCYjMzQ7XG4gNTI1Olx0XG4gNTI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1wmIzM0O1xuIDUyNzpcdFxuIDUyODpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuIDUyOTpcdFxuIDUzMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcJiMzNDtcbiA1MzE6XHRcbiA1MzI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCYjMzQ7XG4gNTMzOlx0XG4gNTM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCYjMzQ7XG4gNTM1Olx0XG4gNTM2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcJiMzNDtcbiA1Mzc6XHRcbiA1Mzg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2FuL0tjb25maWdcJiMzNDtcbiA1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjAKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQUFAgU3luY2hyb25vdXMgVFRZIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyByZWxldmFudCB0byB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBkcml2ZXIgKGBDT05GSUdfUFBQYCwgYENPTkZJR19QUFBfU1lOQ19UVFlgLCBhbmQgYENPTkZJR19UVFlgKSBhcmUgZW5hYmxlZC4gVGhlIGBDT05GSUdfVFRZYCBvcHRpb24gaXMsIG9mIGNvdXJzZSwgc3RhbmRhcmQgb24gYW4geDg2IGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBpbiB0ZXJtcyBvZiBlbmFibGluZyBjb25maWd1cmF0aW9ucywgd2UgaGF2ZSBgWyYjMzQ7UFBQJiMzNDssICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssICYjMzQ7VFRZJiMzNDtdYC4KCk5leHQsIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9sczogYFsmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywgJiMzNDtwcHBfc3luY19zZW5kJiMzNDssICYjMzQ7cHBwX3N5bmNfb3BlbiYjMzQ7LCAmIzM0O3BwcF9zeW5jdHR5X2lvY3RsJiMzNDtdYC4gQWN0dWFsbHksIGFmdGVyIGEgcXVpY2sgcmV2aWV3LCBgcHBwX3N5bmNfdHhtdW5nZWAgYW5kIGBwcHBfc3luY19zZW5kYCBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIHZ1bG5lcmFiaWxpdHkuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIHllcy4gYHBwcF9zeW5jdHR5LmNgIGlzIGEgcmVhY2hhYmxlIG5ldHdvcmsvVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGltcGxpZXMgaXQgaW50ZXJhY3RzIHdpdGggbmV0d29yayBpbnB1dC4gQ3JpdGljYWxseSwgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhlYWRlciBleHBhbnNpb24gYW5kIGhlYWRyb29tIGxvZ2ljIHVzaW5nIGBza2JfY293X2hlYWQoc2tiLCAyKWAuIFRoaXMgYXJlYSBpcyBhIHByaW1lIHRhcmdldCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzLgoKV2l0aCBhbGwgdGhhdCB2ZXJpZmllZCwgSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIG1vdmUgb24gYW5kIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc2tiIGhlYWRyb29tIGhhbmRsaW5nIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSBieSByZXBsYWNpbmcgbWFudWFsIHNrYiBhbGxvY2F0aW9uL2NvcHlpbmcgd2l0aCBza2JfY293X2hlYWQoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgaW9jdGxzIChOX1NZTkNfUFBQKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgY29weS1vbi13cml0ZSBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZSgpYCBieSByZXBsYWNpbmcgbWFudWFsIHNrYiByZWFsbG9jYXRpb24gKGBkZXZfYWxsb2Nfc2tiKClgLCBgc2tiX3Jlc2VydmUoKWAsIGBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKClgKSB3aXRoIGBza2JfY293X2hlYWQoc2tiLCAyKWAuXG5cbkZvbGxvd2luZyBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyBib3RoIG5ld2x5IHB1c2hlZCBieXRlcyB2aWEgYHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO2AgYW5kIGBza2ItXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIGV4aGF1c3Rpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHNrYiBidWZmZXIgaGFuZGxpbmcgYXJlIG1lbW9yeSBzYWZldHkgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDg6MTA6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCmluZGV4IGY4N2Q0M2ZhZWVhYjUuLmViZDYyYTdhYjU0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCkBAIC00NTUsMTcgJiM0Mzs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCS8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKGFwLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IDIpIHsKLQkJCXN0cnVjdCBza19idWZmICpucGt0ID0gZGV2X2FsbG9jX3NrYihza2ItJmd0O2xlbiAmIzQzOyAyKTsKLQkJCWlmIChucGt0ID09IE5VTEwpIHsKLQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXNrYl9yZXNlcnZlKG5wa3QsMik7Ci0JCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwKLQkJCQkgICAgICBza2JfcHV0KG5wa3QsIHNrYi0mZ3Q7bGVuKSwgc2tiLSZndDtsZW4pOwotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXNrYiA9IG5wa3Q7CiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlza2JfcHVzaChza2IsMik7CiAJCXNrYi0mZ3Q7ZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBTeW5jaHJvbm91cyBUVFkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIGFuZCB0aGVpciBjb250ZXh0LiBUaGUgcGF0Y2ggdGFyZ2V0cyBgcHBwX3N5bmN0dHkuY2AsIHNwZWNpZmljYWxseSB0aGUgYHBwcF9zeW5jX3R4bXVuZ2VgIGZ1bmN0aW9uLiBCZWZvcmUgSSBzdGFydCBmb3JtaW5nIGFueSBvcGluaW9uLCBJIG5lZWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHByb3BlciBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4KClNvLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgcmVhZCB0aGUgY29kZSBhcm91bmQgbGluZSA0NTUgb2YgYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYC4gS25vd2luZyBob3cgdGhhdCBwYXJ0aWN1bGFyIGFyZWEgb2YgdGhlIGNvZGUgZnVuY3Rpb25zIGlzIGtleSBiZWZvcmUgYXNzZXNzaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcbiA0MzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG4gNDMyOlx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gNDMzOlx0e1xuIDQzNDpcdFx0aW50IHByb3RvO1xuIDQzNTpcdFx0dW5zaWduZWQgY2hhciAqZGF0YTtcbiA0MzY6XHRcdGludCBpc2xjcDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdC8qIEVuc3VyZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBwcm90b2NvbCBmaWVsZCBhbmQgTENQIGNvZGUgKi9cbiA0Mzk6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKSB7XG4gNDQwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ0MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NDI6XHRcdH1cbiA0NDM6XHRcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gNDQ0Olx0XHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiA0NDU6XHRcbiA0NDY6XHRcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcbiA0NDc6XHRcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXG4gNDQ4Olx0XHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cbiA0NDk6XHRcdCAqL1xuIDQ1MDpcdFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFx1MDAyNlx1MDAyNiAxIFx1MDAzYz0gZGF0YVsyXSBcdTAwMjZcdTAwMjYgZGF0YVsyXSBcdTAwM2M9IDc7XG4gNDUxOlx0XG4gNDUyOlx0XHQvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBvcHRpb24gZW5hYmxlZCAqL1xuIDQ1MzpcdFx0aWYgKGRhdGFbMF0gPT0gMCBcdTAwMjZcdTAwMjYgKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiAhaXNsY3ApXG4gNDU0Olx0XHRcdHNrYl9wdWxsKHNrYiwxKTtcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiA0NTc6XHRcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbiA0NTg6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKSB7XG4gNDU5Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDYwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDYxOlx0XHRcdH1cbiA0NjI6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MzpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjQ6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDY1Olx0XHR9XG4gNDY2Olx0XG4gNDY3Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2ODpcdFxuIDQ2OTpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDcwOlx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDcxOlx0XG4gNDcyOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MzpcdH1cbiA0NzQ6XHRcbiA0NzU6XHQvKlxuIDQ3NjpcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXG4gNDc3Olx0ICovXG4gNDc4Olx0XG4gNDc5Olx0LypcbiA0ODA6XHQgKiBTZW5kIGEgcGFja2V0IHRvIHRoZSBwZWVyIG92ZXIgYW4gc3luYyB0dHkgbGluZS5cbiA0ODE6XHQgKiBSZXR1cm5zIDEgaWZmIHRoZSBwYWNrZXQgd2FzIGFjY2VwdGVkLlxuIDQ4MjpcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXG4gNDgzOlx0ICogYXQgc29tZSBsYXRlciB0aW1lLlxuIDQ4NDpcdCAqL1xuIDQ4NTpcdHN0YXRpYyBpbnRcbiA0ODY6XHRwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0ODc6XHR7XG4gNDg4Olx0XHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4gNDg5Olx0XG4gNDkwOlx0XHRwcHBfc3luY19wdXNoKGFwKTtcbiA0OTE6XHRcbiA0OTI6XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFhNSVRfRlVMTCwgXHUwMDI2YXAtXHUwMDNleG1pdF9mbGFncykpXG4gNDkzOlx0XHRcdHJldHVybiAwO1x0LyogYWxyZWFkeSBmdWxsICovXG4gNDk0Olx0XHRza2IgPSBwcHBfc3luY190eG11bmdlKGFwLCBza2IpO1xuIDQ5NTpcdFx0aWYgKHNrYiAhPSBOVUxMKVxuIDQ5NjpcdFx0XHRhcC1cdTAwM2V0cGt0ID0gc2tiO1xuIDQ5NzpcdFx0ZWxzZVxuIDQ5ODpcdFx0XHRjbGVhcl9iaXQoWE1JVF9GVUxMLCBcdTAwMjZhcC1cdTAwM2V4bWl0X2ZsYWdzKTtcbiA0OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MQoJCQkJCQkJb3V0cHV0OiAyMzIKCQkJCQkJCXRob3VnaHRzOiA4MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTS0IgSGVhZGVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBJIHNlZSB3ZSYjMzk7dmUgcmVwbGFjZWQgYSBjaHVuayBvZiBsb2dpYyBpbnZvbHZpbmcgYGRldl9hbGxvY19za2JgLCBgc2tiX3Jlc2VydmVgLCBhbmQgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFgIHdpdGggYSBjYWxsIHRvIGBza2JfY293X2hlYWQoc2tiLCAyKWAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBpdCYjMzk7cyBhYm91dCBlZmZpY2llbnQgaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgZW5zdXJpbmcgd2UgaGF2ZSBhIHdyaXRhYmxlIGJ1ZmZlci4gVGhlIHByaW1hcnkgbW90aXZhdGlvbiBpcyBwcmV0dHkgY2xlYXI6IGltcHJvdmUgZWZmaWNpZW5jeSBhbmQgc2FmZXR5IHdoZW4gcHJlcGVuZGluZyBkYXRhIHRvIHRoZSBgc2tiYC4gVGhlIG9sZCBjb2RlIHdhcyBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSB0aGUgYHNrYmAmIzM5O3MgaGVhZHJvb20gd2FzIGluc3VmZmljaWVudC4gSXQgcmUtYWxsb2NhdGVkIGEgbmV3IGBza2JgLCBjb3BpZWQgdGhlIG9yaWdpbmFsIGRhdGEsIGFuZCB0aGVuIGRpc2NhcmRlZCB0aGUgb2xkIG9uZSwgYmVmb3JlIHByZXBlbmRpbmcgdGhlIDItYnl0ZSBQUFAgaGVhZGVyLiBUaGUgbmV3IGNvZGUgbGV2ZXJhZ2VzIGBza2JfY293X2hlYWRgLCB3aGljaCBoYW5kbGVzIGFsbG9jYXRpb24sIGNsb25pbmcgKGlmIHNoYXJlZCksIGxpbmVhcml6YXRpb24gKGlmIG5lZWRlZCkgQU5EIG1ha2VzIHN1cmUgd2UgaGF2ZSBhIHdyaXRhYmxlIGhlYWRyb29tIG9mIDIgYnl0ZXMgb3IgbW9yZSwgcmVkdWNpbmcgdGhlIGNoYW5jZXMgb2YgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHByZXBlbmRpbmcgZGF0YS4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIGEgc3RhbmRhcmQgaGVscGVyIGZvciB0aGVzZSBzaXR1YXRpb25zLCB3aGljaCB3ZXJlIGEgYml0IG1hbnVhbGx5IGhhbmRsZWQgYmVmb3JlLgoKTm93LCBhIGtleSBjb25jZXJuIGluIHRoZXNlIGNoYW5nZXMgaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIGl0OgoKKiAgIERvZXMgdGhpcyBjcmVhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gYHNrYl9jb3dfaGVhZChza2IsIDIpYCBlaXRoZXIgdXNlcyBleGlzdGluZyBtZW1vcnkgb3IgcmVhbGxvY2F0ZXMgdGhlIGhlYWRlciB3aGlsZSBjb3B5aW5nIHRoZSBkYXRhLCBzbyBleGlzdGluZyBkYXRhIHdpbGwgYmUgY29waWVkLgoqICAgRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgdGhlIHByZXBlbmRlZCBkYXRhLiBgc2tiX3B1c2goc2tiLCAyKWAgY3JlYXRlcyBzcGFjZSwgYW5kIHRoZW4gdGhlIGZvbGxvd2luZyBsaW5lcyBgc2tiLSZndDtkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TOyBza2ItJmd0O2RhdGFbMV0gPSBQUFBfVUk7YCBleHBsaWNpdGx5IHNldCB0aGUgbmV3IGhlYWRlciBieXRlcy4KKiAgIERvZXMgaXQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIHRoZSBuZXR3b3JrPyBOb3BlLiBUaG9zZSBieXRlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gbm8gaXNzdWVzIGhlcmUuCiogICBBbnkgc3RydWN0IGZpZWxkcyBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IE5vLiBXZSBvbmx5IG1vZGlmeSBhbmQgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZSBgc2tiLSZndDtkYXRhYC4KKiAgIEFueSBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXM/IE5vLCBhbGwgaW5pdGlhbCB2YWx1ZXMgYXJlIGFzc2lnbmVkIGR1cmluZyB0aGUgb3BlcmF0aW9uLgoqICAgQXJlIHRoZXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlZ2FyZGluZyBidWZmZXIgc2hhcmluZyBvciBoZWFkcm9vbSBpc3N1ZXMgaGVyZSB0aGF0IEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgd291bGQgY2F0Y2g/IFllcywgYW5kIHRoYXQgaXMgdmVyeSBpbXBvcnRhbnQuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdGhlc2Uga2luZHMgb2YgYnVmZmVyIG1hbmlwdWxhdGlvbnMuCgpCYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhlIGNoYW5nZSBzZWVtcyBzYWZlLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSByZWFzb25pbmcgaGVyZSBpcyBhIGRpcmVjdCBjb21wYXJpc29uIGJldHdlZW4gS01TQU4gYW5kIEtBU0FOLCB3aGljaCwgYmFzZWQgb24gdGhlIGNoZWNrLCBjb25maXJtcyB3ZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBiZWNhdXNlIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kIG9mIG1lbW9yeSBlcnJvcnMgcHJlc2VudC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBjb3B5LW9uLXdyaXRlIGhhbmRsaW5nIGluIGBwcHBfc3luY190eG11bmdlKClgIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiAoYGRldl9hbGxvY19za2IoKWAsIGBza2JfcmVzZXJ2ZSgpYCwgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoKWApIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC5cblxuRm9sbG93aW5nIGBza2JfY293X2hlYWQoc2tiLCAyKWAsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVzIGJvdGggbmV3bHkgcHVzaGVkIGJ5dGVzIHZpYSBgc2tiLVx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7YCBhbmQgYHNrYi1cdTAwM2VkYXRhWzFdID0gUFBQX1VJO2AuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLCBicmFuY2hpbmcgZG9lcyBub3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3IgdGhlIG5ldHdvcmsuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gZXhoYXVzdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igc2tiIGJ1ZmZlciBoYW5kbGluZyBhcmUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgY29weS1vbi13cml0ZSBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZSgpYCBieSByZXBsYWNpbmcgbWFudWFsIHNrYiByZWFsbG9jYXRpb24gKGBkZXZfYWxsb2Nfc2tiKClgLCBgc2tiX3Jlc2VydmUoKWAsIGBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKClgKSB3aXRoIGBza2JfY293X2hlYWQoc2tiLCAyKWAuXG5cbkZvbGxvd2luZyBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyBib3RoIG5ld2x5IHB1c2hlZCBieXRlcyB2aWEgYHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO2AgYW5kIGBza2ItXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIGV4aGF1c3Rpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHNrYiBidWZmZXIgaGFuZGxpbmcgYXJlIG1lbW9yeSBzYWZldHkgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDowNi45MjY3MDI2NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODEzNTU0ODAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBoZWFkcm9vbSBleHBhbnNpb24gYW5kIGNvcHktb24td3JpdGUgaGFuZGxpbmcgaW4gYHBwcF9zeW5jX3R4bXVuZ2UoKWAgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgcmVhbGxvY2F0aW9uIChgZGV2X2FsbG9jX3NrYigpYCwgYHNrYl9yZXNlcnZlKClgLCBgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgpYCkgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLlxcblxcbkZvbGxvd2luZyBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyBib3RoIG5ld2x5IHB1c2hlZCBieXRlcyB2aWEgYHNrYi1cXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztgIGFuZCBgc2tiLVxcdTAwM2VkYXRhWzFdID0gUFBQX1VJO2AuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLCBicmFuY2hpbmcgZG9lcyBub3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3IgdGhlIG5ldHdvcmsuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBleGhhdXN0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBza2IgYnVmZmVyIGhhbmRsaW5nIGFyZSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc2tiIGhlYWRyb29tIGhhbmRsaW5nIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSBieSByZXBsYWNpbmcgbWFudWFsIHNrYiBhbGxvY2F0aW9uL2NvcHlpbmcgd2l0aCBza2JfY293X2hlYWQoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgaW9jdGxzIChOX1NZTkNfUFBQKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MDYuOTI2NzA3MzI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2NDY4MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA4OjEwOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5AQCAtNDU1LDE3ICs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cXG4gXFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuLVxcdFxcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNjIDIpIHtcXG4tXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi1cXHUwMDNlbGVuICsgMik7XFxuLVxcdFxcdFxcdGlmIChucGt0ID09IE5VTEwpIHtcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNrYl9yZXNlcnZlKG5wa3QsMik7XFxuLVxcdFxcdFxcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgICBza2JfcHV0KG5wa3QsIHNrYi1cXHUwMDNlbGVuKSwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBucGt0O1xcbitcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNrYl9wdXNoKHNrYiwyKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDowOC4zNTM4MjYyNDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU0NTY5Mzk1MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfc3luY190eG11bmdlXCIsXG4gICAgXCJwcHBfc3luY19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNrYiBoZWFkcm9vbSBoYW5kbGluZyBpbiBwcHBfc3luY190eG11bmdlKCkgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2IgYWxsb2NhdGlvbi9jb3B5aW5nIHdpdGggc2tiX2Nvd19oZWFkKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyBpbiB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIGlvY3RscyAoTl9TWU5DX1BQUCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDg6MTA6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtNDU1LDE3ICs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiBcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbi1cdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyKSB7XG4tXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gKyAyKTtcbi1cdFx0XHRpZiAobnBrdCA9PSBOVUxMKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRza2JfcmVzZXJ2ZShucGt0LDIpO1xuLVx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLFxuLVx0XHRcdFx0ICAgICAgc2tiX3B1dChucGt0LCBza2ItXHUwMDNlbGVuKSwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0XHRza2IgPSBucGt0O1xuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFx0XHRza2JfcHVzaChza2IsMik7XG4gXHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MDguMzUzODI3ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODA4MzAwOTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIGEgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcmVxdWVzdCBpcyBhYm91dCBkZWZlbnNpdmUgY29kZSBldmFsdWF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIGtlcm5lbCBmdXp6aW5nLiBUaGF0IG1lYW5zIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBub3QganVzdCBzdGFuZGFyZCBRQSBvciByb3V0aW5lIHRyaWFnZS4gRXhjZWxsZW50LlxuXG5Ob3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgaXQncyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIGFuZCBpcyBmb2N1c2VkIG9uIHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgdGhleSd2ZSByZXBsYWNlZCBhIG1hbnVhbCBgZGV2X2FsbG9jX3NrYmAsIGNvcHksIGFuZCBmcmVlIHNlcXVlbmNlIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIGBza2JfY293X2hlYWRgIGlzIGEgQ29weS1Pbi1Xcml0ZSBvcGVyYXRpb24sIHdoaWNoIGdlbmVyYWxseSBhaW1zIGF0IG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLiBUaGUgY3J1Y2lhbCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZW50aXJlIGZpbGUsIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AsIHVzaW5nIGVpdGhlciBhIHJlYWQtZmlsZSB0b29sIG9yIGdyZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcHBwX3N5bmNfdHhtdW5nZWAgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFBQUCBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlcikuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgc3VidGxlIHRpbWluZyBpc3N1ZXMsIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyAodW5saWtlbHksIGJ1dCBJIGFsd2F5cyBjaGVjayksIG9yIGFueSB1bmludGVuZGVkIGRhdGEgY29ycnVwdGlvbiBkdWUgdG8gdGhlIENPVyBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcGxhY2VzIHdoZXJlIHRoZSBhc3N1bXB0aW9uIG9mIG93bmVyc2hpcCBvciBkYXRhIGludGVncml0eSBtaWdodCBiZSBhbHRlcmVkLiBCYXNlZCBvbiB0aGlzLCBJJ2xsIHRoZW4gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBydW4gdGhpcyB0aHJvdWdoIFN5emthbGxlciBvciBzdWdnZXN0IHRoYXQgYW5vdGhlciBzZWN1cml0eSBhdWRpdCBpcyBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDoyNi40MzY4Mzk1MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ0MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcdGRhdGEgID0gc2tiLVxcdTAwM2VkYXRhO1xcbiA0NDQ6XFx0XFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcXG4gNDQ3OlxcdFxcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXFxuIDQ0ODpcXHRcXHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cXG4gNDQ5OlxcdFxcdCAqL1xcbiA0NTA6XFx0XFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IDEgXFx1MDAzYz0gZGF0YVsyXSBcXHUwMDI2XFx1MDAyNiBkYXRhWzJdIFxcdTAwM2M9IDc7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXFxuIDQ1MzpcXHRcXHRpZiAoZGF0YVswXSA9PSAwIFxcdTAwMjZcXHUwMDI2IChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpIFxcdTAwMjZcXHUwMDI2ICFpc2xjcClcXG4gNDU0OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwxKTtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiA0NTc6XFx0XFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuIDQ1ODpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcXG4gNDU5OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0NjA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ2MTpcXHRcXHRcXHR9XFxuIDQ2MjpcXHRcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIDQ2MzpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XFxuIDQ2NDpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdGFwLVxcdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0xPR19PVVRQS1QpXFxuIDQ3MDpcXHRcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDczOlxcdH1cXG4gNDc0OlxcdFxcbiA0NzU6XFx0LypcXG4gNDc2OlxcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXFxuIDQ3NzpcXHQgKi9cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0LypcXG4gNDgwOlxcdCAqIFNlbmQgYSBwYWNrZXQgdG8gdGhlIHBlZXIgb3ZlciBhbiBzeW5jIHR0eSBsaW5lLlxcbiA0ODE6XFx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cXG4gNDgyOlxcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXFxuIDQ4MzpcXHQgKiBhdCBzb21lIGxhdGVyIHRpbWUuXFxuIDQ4NDpcXHQgKi9cXG4gNDg1OlxcdHN0YXRpYyBpbnRcXG4gNDg2OlxcdHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0ODc6XFx0e1xcbiA0ODg6XFx0XFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4gNDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDoyNi40MzY5MjE1MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY4OTg3OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQUFAgU3luY1RUWSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgS2NvbmZpZyBmb3IgYHBwcF9zeW5jdHR5LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFN5bmNUVFkgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBQUFAgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLCBzeW1ib2xzLCBhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBndWFyZHJhaWxzLCB0aGUgKmlmKiBzdGF0ZW1lbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhpcyBkcml2ZXIgaXMgZXZlbiBjb25zaWRlcmVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFBQUCBvcHRpb25zLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgcGVyaGFwcyByZWxhdGVkIHRvIHNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24gb3Igc3BlY2lmaWMgVUFSVCBjb250cm9sbGVycz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBvdGhlciBQUFAgZHJpdmVycywgYW5kIGhvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhpcyBkcml2ZXIgZWZmZWN0cyB0aG9zZS4gV2hhdCBhYm91dCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBvZiB0aGUgU3luY1RUWSBkcml2ZXI/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVmYXVsdCB2YWx1ZXMgb3Igc3VidGxlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBzcGVjaWZpYyBzY2VuYXJpb3M/IFRoaXMgcmV2aWV3IHdpbGwgaGVscCBpZGVudGlmeSB3aGV0aGVyIHRoaXMgbW9kdWxlIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgYW5kIGZsYWcgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM4NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MjguNjA1OTEyMzE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzcwODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBQUF9TWU5DX1RUWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgzPWNvbmZpZyBQUFBfQVNZTkNcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19QUFBfTVBQRSkgKz0gcHBwX21wcGUub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUFBQX1NZTkNfVFRZKSArPSBwcHBfc3luY3R0eS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUFBPWCkgKz0gcHBwb3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDoyOC42NTgyOTAxOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzg1MjA1ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgUFBQIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBpbiBvbiBsaW5lIDE5NiAoZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBvZiBjb3Vyc2UpLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIFBQUCBpcyBkZWZpbmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBkZXBlbmRlbmN5LCBhIGRlZmF1bHQgdmFsdWUsIG9yIGEgcHJvbXB0IHN0cmluZyB0aGF0IG5lZWRzIGNsYXJpZmljYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgYSBjdXJyZW50IGJ1aWxkIGlzc3VlLiBLbm93aW5nIHRoZSBjb250ZXh0LCBJIGV4cGVjdCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCBzdGFydCBhbmFseXppbmcuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHRvIHVuZGVyc3RhbmQsIGJ1dCBJIG5lZWQgdG8gc3RhcnQgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MzAuNDQzNDk5NDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXFxuIDE4MTpcXHRpZiBUVFlcXG4gMTgyOlxcdFxcbiAxODM6XFx0Y29uZmlnIFBQUF9BU1lOQ1xcbiAxODQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiXFxuIDE4NTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN0YW5kYXJkXFxuIDE4ODpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMsIHN1Y2ggYXMgQ09NMSBvciBDT00yIG9uIGEgUEMuICBJZiB5b3UgdXNlXFxuIDE4OTpcXHRcXHQgIGEgbW9kZW0gKG5vdCBhIHN5bmNocm9ub3VzIG9yIElTRE4gbW9kZW0pIHRvIGNvbnRhY3QgeW91ciBJU1AsIHlvdVxcbiAxOTA6XFx0XFx0ICBuZWVkIHRoaXMgb3B0aW9uLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIFBQUF9TWU5DX1RUWVxcbiAxOTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1xcXCJcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcXG4gMjAwOlxcdFxcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxcbiAyMDE6XFx0XFx0ICBsaW5lcyBsaWtlIFQxL0UxLlxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDIwNDpcXHRcXG4gMjA1OlxcdGVuZGlmICMgVFRZXFxuIDIwNjpcXHRcXG4gMjA3OlxcdGVuZGlmICMgUFBQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjMwLjQ0MzU3MTAzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjgxODI0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQsIGFuZCB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIHNob3VsZCBiZSBzcGVsbGVkIG91dCB0aGVyZSB1c2luZyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuIExldCdzIGdldCB0byB0aGUgdG9wIG9mIHRoYXQgZmlsZSBpbW1lZGlhdGVseSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgd2hlcmUgbXkgbmV4dCBxdWVzdGlvbnMgc2hvdWxkIGJlIHBvc2VkLiBJJ20gaG9waW5nIEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDozMi4wMTE3NTY4NjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MzIuMDExODQ3NDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDY5MDYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2ggb2YgYHBwcF9zeW5jdHR5YCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9zeW5jdHR5YCBpcyBhY3R1YWxseSAqdXNlZCogYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdCdzIHJlYWNoZWQgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGUgY29yZSBxdWVzdGlvbiBJIGhhdmUgaXMgd2hldGhlciB0aGlzIG1vZHVsZSBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IHBzZXVkby10ZXJtaW5hbCAocHR5KSBvciB0ZXJtaW5hbCAodHR5KSBkZXZpY2UgaW4gUUVNVSB2aWEgdGhlIGBUSU9DU0VURGAgaW9jdGwgc3lzdGVtIGNhbGwsIHNwZWNpZmljYWxseSB3aGVuIHVzaW5nIHRoZSBgTl9TWU5DX1BQUGAgbGluZSBkaXNjaXBsaW5lLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHZlY3Rvci5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHBwcF9zeW5jdHR5LmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgbGluZSBkaXNjaXBsaW5lIGlzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGlzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBhdHRhY2htZW50IHBvc3NpYmlsaXRpZXMgYW5kIGFueSBwb3RlbnRpYWwgY29uc3RyYWludHMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjMzLjkxODc1NzI0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwMzkwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X3JlZ2lzdGVyX2xkaXNjfE5fU1lOQ19QUFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0zMDk9cHBwX2FzeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMTItXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMxMzpcXHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnBwcF9sZGlzYyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMxNC1cXHRpZiAoZXJyICE9IDApXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yODY9c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9zeW5jX2xkaXNjID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4Ny1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI4ODpcXHQubnVtXFx0PSBOX1NZTkNfUFBQLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTI4OS1cXHQubmFtZVxcdD0gXFxcInBwcHN5bmNcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MzAwPXBwcF9zeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwMy1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzozMDQ6XFx0ZXJyID0gdHR5X3JlZ2lzdGVyX2xkaXNjKFxcdTAwMjZwcHBfc3luY19sZGlzYyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzA1LVxcdGlmIChlcnIgIT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTY1ND1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NjU1Ok1PRFVMRV9BTElBU19MRElTQyhOX1NZTkNfUFBQKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6MzMuOTY5ODA0MTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTk1MTgwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgU3luYyBMaW5lIERpc2NpcGxpbmUqKlxuXG5Pa2F5LCBzbyBgTl9TWU5DX1BQUGAuLi4gdGhhdCdzIGEgbGluZSBkaXNjaXBsaW5lLCByaWdodD8gQW5kIHN5emthbGxlciwgY2xldmVyIHRoaW5nIHRoYXQgaXQgaXMsIGNhbiBqdXN0IHNsYXAgaXQgb250byAqYW55KiBwdHkgb3IgdHR5IHVzaW5nIGBpb2N0bGAgYW5kIGBUSU9DU0VURGAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoaXMgaXNuJ3Qgc29tZSBuaWNoZSwgZGVlcGx5IGJ1cmllZCBmdW5jdGlvbmFsaXR5OyBpdCdzIHBvdGVudGlhbGx5IHZlcnkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0OiBJIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIHBhdGguIFdoZW4gcGFja2V0cyBnbyBvdXQgb3ZlciBhIFBQUCBjaGFubmVsIHRoYXQncyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCBgTl9TWU5DX1BQUGAsIEkga25vdyBgcHBwX3N5bmNfc2VuZGAgZ2V0cyB0cmlnZ2VyZWQsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYHBwcF9zeW5jX3R4bXVuZ2VgLiBTbywgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogZWxzZSBgcHBwX3N5bmNfdHhtdW5nZWAgaXMgY2FsbGVkLiBJdCdzIHRpbWUgdG8gdHJhY2UgaXRzIHVzZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgb3RoZXIgYXJlYXMgb2YgaW50ZXJlc3QuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDozNi4wODkzMjUzMTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTUwPXN0cnVjdCBzeW5jcHBwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTgyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjgzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTg0LXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NDMxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZipcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MzI6cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQ4Nj1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQ5My1cXHRcXHRyZXR1cm4gMDtcXHQvKiBhbHJlYWR5IGZ1bGwgKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0OTQ6XFx0c2tiID0gcHBwX3N5bmNfdHhtdW5nZShhcCwgc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00OTUtXFx0aWYgKHNrYiAhPSBOVUxMKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDozNi4xMzUzMDY4MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU5MDQ3ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwcHBfc3luY190eG11bmdlYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBwcHBfc3luY190eG11bmdlYCAqaXMqIHJlYWNoYWJsZSDigJMgaXQncyB1c2VkIHdoZW4gc2VuZGluZyBwYWNrZXRzIG92ZXIgYSBgTl9TWU5DX1BQUGAgdHR5IGxpbmUgZGlzY2lwbGluZS4gV2UgY2FuIGdldCB0aGlzIHNldHVwIHZpYSBgcHRteGAsIGBwdHNgLCBvciBgdHR5YCwgYW5kIHRoZW4gcmVnaXN0ZXIgaXQgYXMgYSBQUFAgY2hhbm5lbCB1c2luZyBgUFBQSU9DQVRUQ0hBTmAsIGBQUFBJT0NBVFRBQ0hgLCBvciBgVElPQ1NFVERgLCB0cmFuc21pdHRpbmcgcGFja2V0cyB1c2luZyBlaXRoZXIgc3RhbmRhcmQgbmV0d29yayBtZXRob2RzLCB0aGUgUFBQIHVuaXQgc29ja2V0IG9yIGdlbmVyaWMgUFBQIGlvY3Rscy4gVGhlIGNyaXRpY2FsIGNhbGwgaXMgYHBwcF9zeW5jX3NlbmRgIHdoaWNoIGluIHR1cm4gY2FsbHMgYHBwcF9zeW5jX3R4bXVuZ2VgLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gaG93IGhlYWRyb29tIGlzIGhhbmRsZWQuIFByZXZpb3VzbHksIGlmIHdlIG5lZWRlZCBtb3JlIGhlYWRyb29tIChhbmQgdGhlIGBTQ19DT01QX0FDYCBmbGFnIHdhc24ndCBzZXQgb3IgaWYgaXQncyBMQ1ApLCBpdCB3b3VsZCBhbGxvY2F0ZSBhIG5ldyBgc2tfYnVmZmAgKGBucGt0YCksIGNvcHkgdGhlIGRhdGEsIGFuZCBmcmVlIHRoZSBvcmlnaW5hbCAoYHNrYmApLiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgc2tiX2Nvd19oZWFkKHNrYiwgMilgLiBUaGlzIGFpbXMgdG8gZW5zdXJlIHRoZSBgc2tiYCBoYXMgYXQgbGVhc3QgMiBieXRlcyBvZiBoZWFkcm9vbSwgbWFraW5nIGl0IHdyaXRhYmxlIOKAkyBwb3RlbnRpYWxseSBjbG9uaW5nIHRoZSBgc2tiYCBpZiBuZWNlc3NhcnkuXG5cbkJ1dCB0aGlzIHJhaXNlcyBxdWVzdGlvbnMhIFRoZSBjb2RlIGNoZWNrcyB0aGUgcmV0dXJuIG9mIGBza2JfY293X2hlYWRgLiBBICpmYWlsdXJlKiBmcm9tIGBza2JfY293X2hlYWRgIGlzIGluZGljYXRlZCBieSBhIG5vbi16ZXJvIHJldHVybiwgd2hpY2ggaXMgY29uY2VybmluZy4gRG9lcyBpdCBmcmVlIHRoZSBgc2tiYCBpbiBjYXNlIG9mIGZhaWx1cmU/IFRoZSBjb2RlICppbW1lZGlhdGVseSogYGtmcmVlX3NrYihza2IpYCB1cG9uIGZhaWx1cmUuIEJ1dCBpZiB0aGUgY2xvbmUgZmFpbHMsIGl0IGlzIGEgY29weS1vbi13cml0ZSBzbyB0aGUgKmNhbGxlciogc3RpbGwgaG9sZHMgYSB2YWxpZCByZWZlcmVuY2UuIFdoYXQgaGFwcGVucyB3aXRoIHRoaXMgYHNrYmAgaW4gdGhpcyBjYXNlPyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBsb29rcyBjb3JyZWN0IGdpdmVuIGl0IGhhcyB0aGUgZXF1aXZhbGVudCBlZmZlY3Qgb2YgdGhlIHByaW9yIGltcGxlbWVudGF0aW9uLCB3aGVyZSBhIG5ldyBgc2tiYCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgdGhlIG9sZCBza2IgZnJlZWQsIGJ1dCB3aXRob3V0IGRvdWJsZSBmcmVlcy5cblxuV2UgbmVlZCB0byByZWFsbHkgZGl2ZSBpbnRvIHRoZSBgc2tiX2Nvd19oZWFkYCBtYWNybyBpdHNlbGYgdG8gYmUgY2VydGFpbi4gV2Uga25vdyB0aGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyBlaXRoZXIgYHBza2JfZXhwYW5kX2hlYWRgIG9yIGBza2JfY293X2hlYWRgLCBidXQgbGV0IG1lIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBlbnRpcmVseSBzdXJlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo0MS43MjU3ODgyOTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTM1MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9jb3dfaGVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MzkyNj1zdGF0aWMgaW5saW5lIGludCBza2JfY293KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMS0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5MzI6ICpcXHRza2JfY293X2hlYWQgLSBza2JfY293IGJ1dCBvbmx5IG1ha2luZyB0aGUgaGVhZCB3cml0YWJsZVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzMy0gKlxcdEBza2I6IGJ1ZmZlciB0byBjb3dcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk0MC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5NDE6c3RhdGljIGlubGluZSBpbnQgc2tiX2Nvd19oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM5NDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo0MS43NzQ3MjkxNDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNTc4MjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHNrYnVmZi5oIGZvciBhIFNwZWNpZmljIElzc3VlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCB0YXJnZXQgbGluZXMgMzkyNS0zOTUwLiBTb21ldGhpbmcncyBuYWdnaW5nIGF0IG1lLCBhbmQgYmFzZWQgb24gdGhlIHN5bXB0b21zIEkndmUgYmVlbiBzZWVpbmcsIEkgc3VzcGVjdCB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0byBob3cgd2UncmUgaGFuZGxpbmcsIG9yIG5vdCBoYW5kbGluZywgc29tZXRoaW5nIHdpdGhpbiB0aGF0IGNodW5rIG9mIHRoZSBza2Igc3RydWN0dXJlIG1hbmFnZW1lbnQuIEkga25vdyB0aGF0IGFyZWEgY292ZXJzIHNvbWUgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSwgbGlrZWx5IHRvdWNoaW5nIG9uIGZyYWdtZW50IGhhbmRsaW5nLCBvciBtYXliZSBzb21lIG9mIHRoZSBhbmNpbGxhcnkgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhvc2UgbGluZXMgZm9yIGFueSBvYnZpb3VzIHJlZCBmbGFncywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIGVzdGFibGlzaGVkIGJlc3QgcHJhY3RpY2VzLCBvciB0aGF0IG1pZ2h0IG5vdCBiZSBjb3JyZWN0bHkgY29uc2lkZXJpbmcgcmVjZW50IGNoYW5nZXMgdG8gb3VyIGhhcmR3YXJlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoYXQgcmFuZ2UuIElmIG5vdGhpbmcgcG9wcyBpbW1lZGlhdGVseSwgSSdsbCBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbHMgdG8gc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6NDQuNjEwNTEzOTE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5MjU6XFx0ICovXFxuMzkyNjpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfY293KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4zOTI3OlxcdHtcXG4zOTI4OlxcdFxcdHJldHVybiBfX3NrYl9jb3coc2tiLCBoZWFkcm9vbSwgc2tiX2Nsb25lZChza2IpKTtcXG4zOTI5OlxcdH1cXG4zOTMwOlxcdFxcbjM5MzE6XFx0LyoqXFxuMzkzMjpcXHQgKlxcdHNrYl9jb3dfaGVhZCAtIHNrYl9jb3cgYnV0IG9ubHkgbWFraW5nIHRoZSBoZWFkIHdyaXRhYmxlXFxuMzkzMzpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBjb3dcXG4zOTM0OlxcdCAqXFx0QGhlYWRyb29tOiBuZWVkZWQgaGVhZHJvb21cXG4zOTM1OlxcdCAqXFxuMzkzNjpcXHQgKlxcdFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHNrYl9jb3cgZXhjZXB0IHRoYXQgd2UgcmVwbGFjZSB0aGVcXG4zOTM3OlxcdCAqXFx0c2tiX2Nsb25lZCBjaGVjayBieSBza2JfaGVhZGVyX2Nsb25lZC4gIEl0IHNob3VsZCBiZSB1c2VkIHdoZW5cXG4zOTM4OlxcdCAqXFx0eW91IG9ubHkgbmVlZCB0byBwdXNoIG9uIHNvbWUgaGVhZGVyIGFuZCBkbyBub3QgbmVlZCB0byBtb2RpZnlcXG4zOTM5OlxcdCAqXFx0dGhlIGRhdGEuXFxuMzk0MDpcXHQgKi9cXG4zOTQxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3dfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuMzk0MjpcXHR7XFxuMzk0MzpcXHRcXHRyZXR1cm4gX19za2JfY293KHNrYiwgaGVhZHJvb20sIHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpO1xcbjM5NDQ6XFx0fVxcbjM5NDU6XFx0XFxuMzk0NjpcXHQvKipcXG4zOTQ3OlxcdCAqXFx0c2tiX3BhZHRvXFx0LSBwYWQgYW4gc2tidWZmIHVwIHRvIGEgbWluaW1hbCBzaXplXFxuMzk0ODpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBwYWRcXG4zOTQ5OlxcdCAqXFx0QGxlbjogbWluaW1hbCBsZW5ndGhcXG4zOTUwOlxcdCAqXFxuMzk1MTpcXHQgKlxcdFBhZHMgdXAgYSBidWZmZXIgdG8gZW5zdXJlIHRoZSB0cmFpbGluZyBieXRlcyBleGlzdCBhbmQgYXJlXFxuMzk1MjpcXHQgKlxcdGJsYW5rZWQuIElmIHRoZSBidWZmZXIgYWxyZWFkeSBjb250YWlucyBzdWZmaWNpZW50IGRhdGEgaXRcXG4zOTUzOlxcdCAqXFx0aXMgdW50b3VjaGVkLiBPdGhlcndpc2UgaXQgaXMgZXh0ZW5kZWQuIFJldHVybnMgemVybyBvblxcbjM5NTQ6XFx0ICpcXHRzdWNjZXNzLiBUaGUgc2tiIGlzIGZyZWVkIG9uIGVycm9yLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo0NC42MTA3MjYxOTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ0Mjg4NzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBwcHBfc3luY3R0eS5jKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBwcHBfc3luY3R0eS5jYC4gTXkgaW5pdGlhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQncyBicmVhayBpdCBkb3duIGJhc2VkIG9uIHRoZSBlc3RhYmxpc2hlZCBtZXRob2RvbG9neS5cblxuRmlyc3QsIGxldCdzIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBUaGUgdGV4dCBjbGVhcmx5IHN0YXRlcyB0aGF0IGBwcHBfc3luY3R0eWAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHZpcnR1YWwgb3Igc29mdHdhcmUgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHRoZSBUVFkgbGluZSBkaXNjaXBsaW5lIGBOX1NZTkNfUFBQYCBvbiBwc2V1ZG8tdGVybWluYWxzIGFuZCB2aXJ0dWFsIFRUWXMuIFNvLCBpdCdzIGRlZmluaXRlbHkgKnJlYWNoYWJsZSogY29kZS4gR29vZC5cblxuTm93LCByZWZlcnJpbmcgdG8gU2VjdGlvbiAzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uXCIgQ2hlY2suIEl0J3MgYWNjZXNzaWJsZSwgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBpdC4gU2VjdGlvbiAzIGFsc28gbWVudGlvbnMgZHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzLCB3aGljaCB0aGlzIHNlZW1zIHRvIGZhbGwgaW50byB3aXRoIHRoZSBUVFkgaW50ZXJmYWNlLCBzbyB0aGF0J3MgYW5vdGhlciBwb3NpdGl2ZSBpbmRpY2F0b3IuXG5cbkFuZCB0aGVuLCBsb29raW5nIGF0IFNlY3Rpb24gMSwgaXQgcmVtaW5kcyBtZSBub3QgdG8gYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIHJlZmFjdG9yaW5nLiBUaGF0J3MgYSBjcnVjaWFsIHJlbWluZGVyLCBiZWNhdXNlIHRob3NlIGNoYW5nZXMgY2FuIGludHJvZHVjZSBidWdzIG9yIHN1YnRsZSBzaGlmdHMuIFNpbmNlICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKiBpcyBiZWluZyBtb2RpZmllZCwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gTm8gcXVlc3Rpb24uXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZnV6emluZyBmb2N1cy4gSSBrbm93IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgcHBwX3N5bmNfdHhtdW5nZWAuIFNvLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzIGFuZCBlbnRyeSBwb2ludHMuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciBvdGhlciBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgd2l0aGluIGBwcHBfc3luY3R0eS5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VhcmNoIGZvciBmdW5jdGlvbnMgd2l0aGluIGBwcHBfc3luY3R0eS5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGNvbnRleHQgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTA6NTAuMDUzNjE2MzA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjYxMTA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NTA9c3RydWN0IHN5bmNwcHAge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtODItICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODM6c3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODQ6c3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODU6c3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtODYtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODc6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjg4OnN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjg5OnN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjkwOnN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxcdFxcdFxcdCAgIGludCBjb3VudCk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0xMDE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxMDI6cHBwX3ByaW50X2J1ZmZlciAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgX191OCAqYnVmLCBpbnQgY291bnQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTExOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTE5OnBwcF9zeW5jX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTY5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MTcwOnBwcF9zeW5jX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTE5MD1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjE5MTpwcHBfc3luY19yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1OCAqYnVmLCBzaXplX3QgY291bnQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTkyLVxcdCAgICAgIHZvaWQgKipjb29raWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjAxPXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjAyOnBwcF9zeW5jX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTIwMy1cXHQgICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjA4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDk6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI1Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI1NzpwcHBfc3luY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpjZmxhZ3MsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjU4LVxcdFxcdCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0yNzM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyNzQ6cHBwX3N5bmNfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI5OT1zdGF0aWMgaW50IF9faW5pdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMwMDpwcHBfc3luY19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMxND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzE1OnBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQwNS0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo0MDY6c3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDMyOnBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00ODU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQ4NjpwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00ODcte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NTA3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo1MDg6cHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTU1OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjU2MDpwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTU2MS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz01ODY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo1ODc6cHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudClcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy01ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NjQ1PXN0YXRpYyB2b2lkIF9fZXhpdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY0NjpwcHBfc3luY19jbGVhbnVwKHZvaWQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNjQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo2NTE6bW9kdWxlX2luaXQocHBwX3N5bmNfaW5pdCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NjUyOm1vZHVsZV9leGl0KHBwcF9zeW5jX2NsZWFudXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MzpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlBQUCBzeW5jaHJvbm91cyBUVFkgY2hhbm5lbCBtb2R1bGVcXFwiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo2NTQ6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1NTpNT0RVTEVfQUxJQVNfTERJU0MoTl9TWU5DX1BQUCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjUwLjEwNjIzMjA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5Nzk4NTQ4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgUFBQIFN5bmNocm9ub3VzIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHBwcF9zeW5jX3R4bXVuZ2VgIGlzIGludm9rZWQgZGlyZWN0bHkgZnJvbSBgcHBwX3N5bmNfc2VuZGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgY29ubmVjdCB0aGUgZG90cy4gSSByZWNhbGwgdGhhdCBgcHBwX3N5bmNfc2VuZGAgaXMsIGluIGVzc2VuY2UsIHRoZSBgLnN0YXJ0X3htaXRgIGZ1bmN0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0cmFuc21pc3Npb24gYWN0dWFsbHkgYmVnaW5zLCB0aGUgY2hhbm5lbCBvcGVyYXRpb25zJyBgLnN0YXJ0X3htaXRgIGhvb2sgZm9yIHRoaXMgc3BlY2lmaWMgUFBQIGNoYW5uZWwuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgc3RydWN0dXJlIHVzYWdlIG9mIGBwcHBfc3luY19zZW5kYCB3aXRoaW4gYHBwcF9zeW5jdHR5LmNgLiBNYWtlIHN1cmUgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB3aGF0IEkgZXhwZWN0IGFuZCB0aGF0IEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBpbXBvcnRhbnQgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo1NC4wODYwODkzMjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzgzNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9jaGFubmVsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTA3LVxcdC5zdGFydF94bWl0ID0gcHBwX2FzeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz05MD1zdGF0aWMgdm9pZCBwcHBfc3luY19pbnB1dChzdHJ1Y3Qgc3luY3BwcCAqYXAsIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpmbGFncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkyLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjkzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHN5bmNfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTk0LVxcdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkyMC1cXHQuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jPTQ5PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gcHB0cF9za19wcm90byBfX3JlYWRfbW9zdGx5O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz01NzY9c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNi1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA4LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo1NC4xMzM4Nzc0MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMwNzcwNzIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBTeW5jIFRUWSBNb2R1bGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgcHBwX3N5bmNfc2VuZGAgYXBwZWFycyB0byBiZSBhIHdyYXBwZXIgb3IgYW4gYWxpYXMgZm9yIGBzeW5jX29wcy5zdGFydF94bWl0YC4gVGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gbG9vayBhdCBtb3JlIGNsb3NlbHkgaXMgYHBwcF9zeW5jX3R4bXVuZ2VgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcsIGFuZCBgcHBwX3N5bmNfc2VuZGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiBjYWxsaW5nIGl0LiBJIGFsc28gc2hvdWxkIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93IHNlZW1zIHRvIGJlIG1hbmFnZWQgdGhyb3VnaCBgcHBwX3N5bmNfb3BlbmAsIGBwcHBfc3luY3R0eV9pb2N0bGAsIGFuZCBgcHBwX3N5bmNfaW9jdGxgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHN5bmMgdHR5IGNoYW5uZWwgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfUFBQX1NZTkNfVFRZYCBpcyBjbGVhcmx5IGRlcGVuZGVudCBvbiBgQ09ORklHX1BQUGAgYW5kIGBDT05GSUdfVFRZYCAtIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBwcm9iYWJseSBzY2FuIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0aG9yb3VnaGx5IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjU3LjQ0MTU4NzIzOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MjA0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qZHJpdmVycy9uZXQvcHBwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjU3LjYzODc5OTU4OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU4NjA3MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBMZXQncyBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGluaXRpYWwgZWZmb3J0cyBhcm91bmQgbGluZSA1MjguIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIG9wdGlvbiByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaGlkaW5nIHRoZXJlLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjEwOjU5LjU5NzQwOTM4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcXCJcXG4gNTIxOlxcdFxcbiA1MjI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXFwiXFxuIDUyMzpcXHRcXG4gNTI0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXFwiXFxuIDUyNTpcXHRcXG4gNTI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbiA1Mjc6XFx0XFxuIDUyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbiA1Mjk6XFx0XFxuIDUzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1xcXCJcXG4gNTMxOlxcdFxcbiA1MzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuIDUzMzpcXHRcXG4gNTM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcXFwiXFxuIDUzNTpcXHRcXG4gNTM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1xcXCJcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZ1xcXCJcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMDo1OS41OTc0OTEzNTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0NDkwNTI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUFBQIFN5bmNocm9ub3VzIFRUWSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHJlbGV2YW50IHRvIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGRyaXZlciAoYENPTkZJR19QUFBgLCBgQ09ORklHX1BQUF9TWU5DX1RUWWAsIGFuZCBgQ09ORklHX1RUWWApIGFyZSBlbmFibGVkLiBUaGUgYENPTkZJR19UVFlgIG9wdGlvbiBpcywgb2YgY291cnNlLCBzdGFuZGFyZCBvbiBhbiB4ODYgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCB3ZSBoYXZlIGBbXCJQUFBcIiwgXCJQUFBfU1lOQ19UVFlcIiwgXCJUVFlcIl1gLlxuXG5OZXh0LCBJJ2xsIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9sczogYFtcInBwcF9zeW5jX3R4bXVuZ2VcIiwgXCJwcHBfc3luY19zZW5kXCIsIFwicHBwX3N5bmNfb3BlblwiLCBcInBwcF9zeW5jdHR5X2lvY3RsXCJdYC4gQWN0dWFsbHksIGFmdGVyIGEgcXVpY2sgcmV2aWV3LCBgcHBwX3N5bmNfdHhtdW5nZWAgYW5kIGBwcHBfc3luY19zZW5kYCBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIHZ1bG5lcmFiaWxpdHkuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgeWVzLiBgcHBwX3N5bmN0dHkuY2AgaXMgYSByZWFjaGFibGUgbmV0d29yay9UVFkgbGluZSBkaXNjaXBsaW5lIGRyaXZlciwgd2hpY2ggaW1wbGllcyBpdCBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGlucHV0LiBDcml0aWNhbGx5LCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gaGVhZGVyIGV4cGFuc2lvbiBhbmQgaGVhZHJvb20gbG9naWMgdXNpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gVGhpcyBhcmVhIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuXG5cbldpdGggYWxsIHRoYXQgdmVyaWZpZWQsIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBtb3ZlIG9uIGFuZCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MCwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowMi44NDIzOTg5MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgxOTI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc2tiIGhlYWRyb29tIGhhbmRsaW5nIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSBieSByZXBsYWNpbmcgbWFudWFsIHNrYiBhbGxvY2F0aW9uL2NvcHlpbmcgd2l0aCBza2JfY293X2hlYWQoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIHRoZSBQUFAgc3luY2hyb25vdXMgVFRZIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgaW9jdGxzIChOX1NZTkNfUFBQKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBza2IgaGVhZHJvb20gaGFuZGxpbmcgaW4gcHBwX3N5bmNfdHhtdW5nZSgpIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIGFsbG9jYXRpb24vY29weWluZyB3aXRoIHNrYl9jb3dfaGVhZCgpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMgaW4gdGhlIFBQUCBzeW5jaHJvbm91cyBUVFkgbGluZSBkaXNjaXBsaW5lIGRyaXZlciwgd2hpY2ggY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgVFRZIGxpbmUgZGlzY2lwbGluZSBpb2N0bHMgKE5fU1lOQ19QUFApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowMi45MjMyMjU5MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTM5MDEzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTE6MDIuOTIzNzExMTA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTIxMzg1MjMzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBjb3B5LW9uLXdyaXRlIGhhbmRsaW5nIGluIGBwcHBfc3luY190eG11bmdlKClgIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiAoYGRldl9hbGxvY19za2IoKWAsIGBza2JfcmVzZXJ2ZSgpYCwgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoKWApIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC5cXG5cXG5Gb2xsb3dpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgYm90aCBuZXdseSBwdXNoZWQgYnl0ZXMgdmlhIGBza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7YCBhbmQgYHNrYi1cXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gZXhoYXVzdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igc2tiIGJ1ZmZlciBoYW5kbGluZyBhcmUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjNkMGMyYzU4ZDgwYTdiYzk2Y2NlMWE5ZWMzN2UwNzM4MDk2YTgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDg6MTA6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li5lYmQ2MmE3YWI1NGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtNDU1LDE3ICs0NTUsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cbiBcdGlmICgoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcbi1cdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyKSB7XG4tXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm5wa3QgPSBkZXZfYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gKyAyKTtcbi1cdFx0XHRpZiAobnBrdCA9PSBOVUxMKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRza2JfcmVzZXJ2ZShucGt0LDIpO1xuLVx0XHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLFxuLVx0XHRcdFx0ICAgICAgc2tiX3B1dChucGt0LCBza2ItXHUwMDNlbGVuKSwgc2tiLVx1MDAzZWxlbik7XG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0XHRza2IgPSBucGt0O1xuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFx0XHRza2JfcHVzaChza2IsMik7XG4gXHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTE6MDIuOTIzNzEyMDU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzMyMTM3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgU3luY2hyb25vdXMgVFRZIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMgYW5kIHRoZWlyIGNvbnRleHQuIFRoZSBwYXRjaCB0YXJnZXRzIGBwcHBfc3luY3R0eS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgZnVuY3Rpb24uIEJlZm9yZSBJIHN0YXJ0IGZvcm1pbmcgYW55IG9waW5pb24sIEkgbmVlZCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgcHJvcGVyIGNvbnRleHQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBiZWluZyBjaGFuZ2VkIGFuZCB3aHkuXG5cblNvLCBJJ2xsIGdvIGFoZWFkIGFuZCByZWFkIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDQ1NSBvZiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBLbm93aW5nIGhvdyB0aGF0IHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZSBmdW5jdGlvbnMgaXMga2V5IGJlZm9yZSBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowNy4zOTY5Mjg1MzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcbiA0MzE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmKlxcbiA0MzI6XFx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQzMzpcXHR7XFxuIDQzNDpcXHRcXHRpbnQgcHJvdG87XFxuIDQzNTpcXHRcXHR1bnNpZ25lZCBjaGFyICpkYXRhO1xcbiA0MzY6XFx0XFx0aW50IGlzbGNwO1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRcXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXFxuIDQzOTpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xcbiA0NDA6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ0MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcdGRhdGEgID0gc2tiLVxcdTAwM2VkYXRhO1xcbiA0NDQ6XFx0XFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcXG4gNDQ3OlxcdFxcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXFxuIDQ0ODpcXHRcXHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cXG4gNDQ5OlxcdFxcdCAqL1xcbiA0NTA6XFx0XFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IDEgXFx1MDAzYz0gZGF0YVsyXSBcXHUwMDI2XFx1MDAyNiBkYXRhWzJdIFxcdTAwM2M9IDc7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXFxuIDQ1MzpcXHRcXHRpZiAoZGF0YVswXSA9PSAwIFxcdTAwMjZcXHUwMDI2IChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpIFxcdTAwMjZcXHUwMDI2ICFpc2xjcClcXG4gNDU0OlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwxKTtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiA0NTc6XFx0XFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuIDQ1ODpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcXG4gNDU5OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0NjA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ2MTpcXHRcXHRcXHR9XFxuIDQ2MjpcXHRcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIDQ2MzpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XFxuIDQ2NDpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdGFwLVxcdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0xPR19PVVRQS1QpXFxuIDQ3MDpcXHRcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDczOlxcdH1cXG4gNDc0OlxcdFxcbiA0NzU6XFx0LypcXG4gNDc2OlxcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXFxuIDQ3NzpcXHQgKi9cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0LypcXG4gNDgwOlxcdCAqIFNlbmQgYSBwYWNrZXQgdG8gdGhlIHBlZXIgb3ZlciBhbiBzeW5jIHR0eSBsaW5lLlxcbiA0ODE6XFx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cXG4gNDgyOlxcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXFxuIDQ4MzpcXHQgKiBhdCBzb21lIGxhdGVyIHRpbWUuXFxuIDQ4NDpcXHQgKi9cXG4gNDg1OlxcdHN0YXRpYyBpbnRcXG4gNDg2OlxcdHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0ODc6XFx0e1xcbiA0ODg6XFx0XFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4gNDg5OlxcdFxcbiA0OTA6XFx0XFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFhNSVRfRlVMTCwgXFx1MDAyNmFwLVxcdTAwM2V4bWl0X2ZsYWdzKSlcXG4gNDkzOlxcdFxcdFxcdHJldHVybiAwO1xcdC8qIGFscmVhZHkgZnVsbCAqL1xcbiA0OTQ6XFx0XFx0c2tiID0gcHBwX3N5bmNfdHhtdW5nZShhcCwgc2tiKTtcXG4gNDk1OlxcdFxcdGlmIChza2IgIT0gTlVMTClcXG4gNDk2OlxcdFxcdFxcdGFwLVxcdTAwM2V0cGt0ID0gc2tiO1xcbiA0OTc6XFx0XFx0ZWxzZVxcbiA0OTg6XFx0XFx0XFx0Y2xlYXJfYml0KFhNSVRfRlVMTCwgXFx1MDAyNmFwLVxcdTAwM2V4bWl0X2ZsYWdzKTtcXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODoxMTowNy4zOTcwMjE1MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY2NTE4OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNLQiBIZWFkZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBJIHNlZSB3ZSd2ZSByZXBsYWNlZCBhIGNodW5rIG9mIGxvZ2ljIGludm9sdmluZyBgZGV2X2FsbG9jX3NrYmAsIGBza2JfcmVzZXJ2ZWAsIGFuZCBgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YWAgd2l0aCBhIGNhbGwgdG8gYHNrYl9jb3dfaGVhZChza2IsIDIpYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGF0IGl0J3MgYWJvdXQgZWZmaWNpZW50IGhlYWRyb29tIG1hbmFnZW1lbnQgYW5kIGVuc3VyaW5nIHdlIGhhdmUgYSB3cml0YWJsZSBidWZmZXIuIFRoZSBwcmltYXJ5IG1vdGl2YXRpb24gaXMgcHJldHR5IGNsZWFyOiBpbXByb3ZlIGVmZmljaWVuY3kgYW5kIHNhZmV0eSB3aGVuIHByZXBlbmRpbmcgZGF0YSB0byB0aGUgYHNrYmAuIFRoZSBvbGQgY29kZSB3YXMgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhlIGBza2JgJ3MgaGVhZHJvb20gd2FzIGluc3VmZmljaWVudC4gSXQgcmUtYWxsb2NhdGVkIGEgbmV3IGBza2JgLCBjb3BpZWQgdGhlIG9yaWdpbmFsIGRhdGEsIGFuZCB0aGVuIGRpc2NhcmRlZCB0aGUgb2xkIG9uZSwgYmVmb3JlIHByZXBlbmRpbmcgdGhlIDItYnl0ZSBQUFAgaGVhZGVyLiBUaGUgbmV3IGNvZGUgbGV2ZXJhZ2VzIGBza2JfY293X2hlYWRgLCB3aGljaCBoYW5kbGVzIGFsbG9jYXRpb24sIGNsb25pbmcgKGlmIHNoYXJlZCksIGxpbmVhcml6YXRpb24gKGlmIG5lZWRlZCkgQU5EIG1ha2VzIHN1cmUgd2UgaGF2ZSBhIHdyaXRhYmxlIGhlYWRyb29tIG9mIDIgYnl0ZXMgb3IgbW9yZSwgcmVkdWNpbmcgdGhlIGNoYW5jZXMgb2YgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHByZXBlbmRpbmcgZGF0YS4gTWFrZXMgc2Vuc2UsIGl0J3MgYSBzdGFuZGFyZCBoZWxwZXIgZm9yIHRoZXNlIHNpdHVhdGlvbnMsIHdoaWNoIHdlcmUgYSBiaXQgbWFudWFsbHkgaGFuZGxlZCBiZWZvcmUuXG5cbk5vdywgYSBrZXkgY29uY2VybiBpbiB0aGVzZSBjaGFuZ2VzIGlzIGFsd2F5cyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBsZXQncyBzdGVwIHRocm91Z2ggaXQ6XG5cbiogICBEb2VzIHRoaXMgY3JlYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIGBza2JfY293X2hlYWQoc2tiLCAyKWAgZWl0aGVyIHVzZXMgZXhpc3RpbmcgbWVtb3J5IG9yIHJlYWxsb2NhdGVzIHRoZSBoZWFkZXIgd2hpbGUgY29weWluZyB0aGUgZGF0YSwgc28gZXhpc3RpbmcgZGF0YSB3aWxsIGJlIGNvcGllZC5cbiogICBEb2VzIGl0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgY29kZSBpbW1lZGlhdGVseSBpbml0aWFsaXplcyB0aGUgcHJlcGVuZGVkIGRhdGEuIGBza2JfcHVzaChza2IsIDIpYCBjcmVhdGVzIHNwYWNlLCBhbmQgdGhlbiB0aGUgZm9sbG93aW5nIGxpbmVzIGBza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsgc2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7YCBleHBsaWNpdGx5IHNldCB0aGUgbmV3IGhlYWRlciBieXRlcy5cbiogICBEb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciB0aGUgbmV0d29yaz8gTm9wZS4gVGhvc2UgYnl0ZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIHNvIG5vIGlzc3VlcyBoZXJlLlxuKiAgIEFueSBzdHJ1Y3QgZmllbGRzIGxlZnQgdW5pbml0aWFsaXplZD8gTm8uIFdlIG9ubHkgbW9kaWZ5IGFuZCBpbW1lZGlhdGVseSBpbml0aWFsaXplIGBza2ItXHUwMDNlZGF0YWAuXG4qICAgQW55IGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcz8gTm8sIGFsbCBpbml0aWFsIHZhbHVlcyBhcmUgYXNzaWduZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4qICAgQXJlIHRoZXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlZ2FyZGluZyBidWZmZXIgc2hhcmluZyBvciBoZWFkcm9vbSBpc3N1ZXMgaGVyZSB0aGF0IEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgd291bGQgY2F0Y2g/IFllcywgYW5kIHRoYXQgaXMgdmVyeSBpbXBvcnRhbnQuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdGhlc2Uga2luZHMgb2YgYnVmZmVyIG1hbmlwdWxhdGlvbnMuXG5cbkJhc2VkIG9uIGFsbCBvZiB0aGlzLCB0aGUgY2hhbmdlIHNlZW1zIHNhZmUuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgYSBkaXJlY3QgY29tcGFyaXNvbiBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTiwgd2hpY2gsIGJhc2VkIG9uIHRoZSBjaGVjaywgY29uZmlybXMgd2UgZG9uJ3QgbmVlZCBLTVNBTiBiZWNhdXNlIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBraW5kIG9mIG1lbW9yeSBlcnJvcnMgcHJlc2VudC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzEsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MTE6MTUuMDYyMjE0ODQ5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgY29weS1vbi13cml0ZSBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZSgpYCBieSByZXBsYWNpbmcgbWFudWFsIHNrYiByZWFsbG9jYXRpb24gKGBkZXZfYWxsb2Nfc2tiKClgLCBgc2tiX3Jlc2VydmUoKWAsIGBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKClgKSB3aXRoIGBza2JfY293X2hlYWQoc2tiLCAyKWAuXFxuXFxuRm9sbG93aW5nIGBza2JfY293X2hlYWQoc2tiLCAyKWAsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVzIGJvdGggbmV3bHkgcHVzaGVkIGJ5dGVzIHZpYSBgc2tiLVxcdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO2AgYW5kIGBza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7YC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGJyYW5jaGluZyBkb2VzIG5vdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIGV4aGF1c3Rpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHNrYiBidWZmZXIgaGFuZGxpbmcgYXJlIG1lbW9yeSBzYWZldHkgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBjb3B5LW9uLXdyaXRlIGhhbmRsaW5nIGluIGBwcHBfc3luY190eG11bmdlKClgIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiAoYGRldl9hbGxvY19za2IoKWAsIGBza2JfcmVzZXJ2ZSgpYCwgYHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoKWApIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIDIpYC5cXG5cXG5Gb2xsb3dpbmcgYHNrYl9jb3dfaGVhZChza2IsIDIpYCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZXMgYm90aCBuZXdseSBwdXNoZWQgYnl0ZXMgdmlhIGBza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7YCBhbmQgYHNrYi1cXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtgLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgYnJhbmNoaW5nIGRvZXMgbm90IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gZXhoYXVzdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igc2tiIGJ1ZmZlciBoYW5kbGluZyBhcmUgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[1] Phase: Succeeded StartedAt: 2026-09-08 08:11:26 +0000 UTC FinishedAt: 2026-09-08 08:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 08:11:26 +0000 UTC FinishedAt: 2026-09-08 08:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2] Phase: Succeeded StartedAt: 2026-09-08 08:11:26 +0000 UTC FinishedAt: 2026-09-08 09:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 08:11:26 +0000 UTC FinishedAt: 2026-09-08 09:52:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 08:11:26 +0000 UTC FinishedAt: 2026-09-08 08:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 08:11:26 +0000 UTC FinishedAt: 2026-09-08 08:11:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownwskv/series-workflownwskv-convert-artifact-922592624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 08:11:36 +0000 UTC FinishedAt: 2026-09-08 08:31:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 08:11:36 +0000 UTC FinishedAt: 2026-09-08 08:31:44 +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:*97f6fa2d-6675-4d73-8bda-f3f95c01739a,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-workflownwskv/series-workflownwskv-convert-artifact-922592624/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": "0387ded3-4835-4242-b784-cdc80a531964", "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-workflownwskv/series-workflownwskv-build-action-3516313718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 08:11:36 +0000 UTC FinishedAt: 2026-09-08 08:31:34 +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:*97f6fa2d-6675-4d73-8bda-f3f95c01739a,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-workflownwskv/series-workflownwskv-convert-artifact-922592624/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": "0387ded3-4835-4242-b784-cdc80a531964", "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-workflownwskv/series-workflownwskv-build-action-3516313718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 08:31:44 +0000 UTC FinishedAt: 2026-09-08 08:31:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 08:31:44 +0000 UTC FinishedAt: 2026-09-08 08:31:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 08:31:44 +0000 UTC FinishedAt: 2026-09-08 08:31:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 08:31:44 +0000 UTC FinishedAt: 2026-09-08 08:31:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownwskv/series-workflownwskv-convert-artifact-1292233303/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 08:31:54 +0000 UTC FinishedAt: 2026-09-08 08:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 08:31:54 +0000 UTC FinishedAt: 2026-09-08 08:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0387ded3-4835-4242-b784-cdc80a531964,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-workflownwskv/series-workflownwskv-build-action-3516313718/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-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 08:33:51 +0000 UTC FinishedAt: 2026-09-08 08:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 08:33:51 +0000 UTC FinishedAt: 2026-09-08 08:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 08:33:51 +0000 UTC FinishedAt: 2026-09-08 08:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 08:33:51 +0000 UTC FinishedAt: 2026-09-08 08:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*97f6fa2d-6675-4d73-8bda-f3f95c01739a,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-workflownwskv/series-workflownwskv-convert-artifact-1292233303/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": "9ac663e7-a135-4681-bdf1-bdbe42455fa7", "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-workflownwskv/series-workflownwskv-build-action-233333147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 08:33:51 +0000 UTC FinishedAt: 2026-09-08 08:53:58 +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:*97f6fa2d-6675-4d73-8bda-f3f95c01739a,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-workflownwskv/series-workflownwskv-convert-artifact-1292233303/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": "9ac663e7-a135-4681-bdf1-bdbe42455fa7", "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-workflownwskv/series-workflownwskv-build-action-233333147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 08:54:08 +0000 UTC FinishedAt: 2026-09-08 08:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 08:54:08 +0000 UTC FinishedAt: 2026-09-08 08:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 08:54:08 +0000 UTC FinishedAt: 2026-09-08 08:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 08:54:08 +0000 UTC FinishedAt: 2026-09-08 08:56:05 +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:*9ac663e7-a135-4681-bdf1-bdbe42455fa7,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-workflownwskv/series-workflownwskv-build-action-233333147/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-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 09:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 09:52:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"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:*0387ded3-4835-4242-b784-cdc80a531964,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ac663e7-a135-4681-bdf1-bdbe42455fa7,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-workflownwskv/series-workflownwskv-build-action-3516313718/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-workflownwskv/series-workflownwskv-build-action-233333147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 08:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 08:56:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"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-workflownwskv/series-workflownwskv-convert-artifact-1545008912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 08:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 08:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 08:56:15 +0000 UTC FinishedAt: 2026-09-08 08:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 08:56:25 +0000 UTC FinishedAt: 2026-09-08 09:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownwskv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_SYNC_TTY","TTY"],"series_id":"fdabecea-19e5-4b37-a560-b31356624bda","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 08:56:25 +0000 UTC FinishedAt: 2026-09-08 09:52:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0387ded3-4835-4242-b784-cdc80a531964,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ac663e7-a135-4681-bdf1-bdbe42455fa7,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-workflownwskv/series-workflownwskv-build-action-3516313718/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-workflownwskv/series-workflownwskv-build-action-233333147/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-workflownwskv/series-workflownwskv-convert-artifact-1545008912/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,}