Name: series-workflowmk6kb Phase: Succeeded StartedAt: 2026-07-28 23:27:33 +0000 UTC FinishedAt: 2026-07-29 03:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[0] Phase: Succeeded StartedAt: 2026-07-28 23:27:33 +0000 UTC FinishedAt: 2026-07-28 23:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 23:27:33 +0000 UTC FinishedAt: 2026-07-28 23:55:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "9a76645c-7db0-4458-8195-50607803ddc5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_start_estimator", "ip_vs_stop_estimator", "ip_vs_est_kthread_start", "ip_vs_est_reload_start" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4mIzM5O3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNjI5MmExYjQ5ZTVlYTdlMjYwODgxNTU1NGUyMzY2N2RhMmEzMDY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMjM6NTQ6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5pbmRleCBhYjA5ZjUxODI5NTEyLi44NmQyMGYxOWZlMzE3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcbkBAIC0xOTEsOCAmIzQzOzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHR9XG4gXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbiYjNDM7XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gXHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4mIzQzO1x0XHRcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLVx1MDAzZWVuYWJsZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHR3aGlsZSAoMSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N0YXJ0X2VzdGltYXRvciYjMzQ7LAogICAgJiMzNDtpcF92c19zdG9wX2VzdGltYXRvciYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3RfcmVsb2FkX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQgdG8gZXhpdCBlYXJseSBpZiB0aGUga3RocmVhZCBzaG91bGQgc3RvcCBvciBpZiBJUFZTIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVBWUyBsb2dpYyB0aGF0IHByZXZlbnRzIHRoZSBrdGhyZWFkIGZyb20gY29udGludWluZyBleGVjdXRpb24gd2hlbiBpdCBzaG91bGRuJiMzOTt0LCBwb3RlbnRpYWxseSBmaXhpbmcgYSBoYW5nIG9yIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjYyOTJhMWI0OWU1ZWE3ZTI2MDg4MTU1NTRlMjM2NjdkYTJhMzA2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDIzOjU0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCmluZGV4IGFiMDlmNTE4Mjk1MTIuLjg2ZDIwZjE5ZmUzMTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKQEAgLTE5MSw4ICYjNDM7MTkxLDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpCiAJCX0KIAogCQkvKiBrdGhyZWFkIDAgd2lsbCBoYW5kbGUgdGhlIGNhbGMgcGhhc2UgKi8KLQkJaWYgKGlwdnMtJmd0O2VzdF9jYWxjX3BoYXNlKQomIzQzOwkJaWYgKGlwdnMtJmd0O2VzdF9jYWxjX3BoYXNlKSB7CiAJCQlpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTsKJiM0MzsJCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy0mZ3Q7ZW5hYmxlKSkKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAJfQogCiAJd2hpbGUgKDEpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0aW9uIFRocmVhZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHRoZSBgaXBfdnNfZXN0LmNgIGZpbGUgd2l0aGluIHRoZSBgbmV0ZmlsdGVyL2lwdnNgIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBvZiB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIHRocmVhZC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYW4gYWRkZWQgY29uZGl0aW9uYWwgY2hlY2sgd2l0aGluIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBmdW5jdGlvbi4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIHNlZSBpZiB0aGUga2VybmVsIHRocmVhZCBzaG91bGQgdGVybWluYXRlIHVzaW5nIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQsIG1lYW5pbmcgYCFSRUFEX09OQ0UoaXB2cy0mZ3Q7ZW5hYmxlKWAuIElmIGVpdGhlciBvZiB0aG9zZSBjb25kaXRpb25zIGlzIG1ldCDigJMgZWl0aGVyIHRoZSB0aHJlYWQgbmVlZHMgdG8gc3RvcCBvciBJUFZTIGlzIGRpc2FibGVkIOKAkyB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcmV0dXJucyAwLiBUaGF0IG1ha2VzIGl0IGEgbm8tb3AgZnJvbSBteSBwZXJzcGVjdGl2ZS4KClRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybi4gSXQgYWxsb3dzIHRoZSBrZXJuZWwgdGhyZWFkIHRvIGdyYWNlZnVsbHkgZXhpdCBvciBzdG9wIGRvaW5nIGl0cyBlc3RpbWF0aW9uIGR1dGllcyB3aGVuIGluc3RydWN0ZWQsIG9yIGlmIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGdsb2JhbGx5IGRpc2FibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHJldHVybmluZyAwIGluIHRoaXMgY29udGV4dC4gSXMgdGhhdCBhIHN0YW5kYXJkIHJldHVybiB2YWx1ZSBpbmRpY2F0aW5nIGEgc3VjY2Vzc2Z1bCB0ZXJtaW5hdGlvbiBvciBtZXJlbHkgYSBjb25kaXRpb25hbCBzdG9wPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNhbGxlciB0byB1bmRlcnN0YW5kIHRoZSBtZWFuaW5nIG9mIHRoYXQgcmV0dXJuIGNvZGUuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZXN0aW1hdGlvbiB0aHJlYWQgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE1MT1zdGF0aWMgdm9pZCBpcF92c190aWNrX2VzdGltYXRpb24oc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCwgaW50IHJvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMTczLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjE3NDpzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTE3NS17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTI1Mz1pbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI2OC1cdFx0a2QtXHUwMDNlZXN0X3RpbWVyID0gbm93O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI2OTpcdGtkLVx1MDAzZXRhc2sgPSBrdGhyZWFkX2NyZWF0ZShpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQsIGtkLCBcJiMzNDtpcHZzLWU6JWQ6JWRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjcwLVx0XHRcdFx0ICBpcHZzLVx1MDAzZWdlbiwga2QtXHUwMDNlaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJUFZTIEVzdGltYXRpb24gS3RocmVhZCBFbmhhbmNlbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21ldGhpbmcgaW4gdGhlIElQVlMgZXN0aW1hdGlvbiBrdGhyZWFkLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGVuc3VyaW5nIGEgcHJvcGVyIGV4aXQgcGF0aC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgZnVuY3Rpb24uIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIHN0b3AgdGhlIGt0aHJlYWQgd2hlbiBpdCBzaG91bGQgYmUgc3RvcHBlZCwgb3IgbW9yZSBwcmVjaXNlbHksIHdoZW4gaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgZGlzYWJsZWQuIFRoZSB0d28gY29uZGl0aW9ucyBiZWluZyBjaGVja2VkIGFyZSB0aGUgc3RvcCBjb25kaXRpb24gYW5kIHRoZSBgaXB2cy0mZ3Q7ZW5hYmxlYCBmbGFnIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkIGV4dGVybmFsbHkuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZS4gSXQmIzM5O3Mgbm90IGp1c3QgYSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb247IGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc3RhdGUgd2hlcmUgdGhlIGt0aHJlYWQgbWlnaHQgaGFuZyBhcm91bmQgbG9uZ2VyIHRoYW4gaXQgc2hvdWxkLCBwb3RlbnRpYWxseSBjb25zdW1pbmcgcmVzb3VyY2VzIG9yIGNyZWF0aW5nIG90aGVyIHN1YnRsZSBpc3N1ZXMuIFRoaW5raW5nIGJhY2ssIEkgY2FuIHNlZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIElQVlMgc3Vic3lzdGVtIG1pZ2h0IGJlIHNodXQgZG93biBvciByZWNvbmZpZ3VyZWQgYW5kIHdlJiMzOTtkICpkZWZpbml0ZWx5KiB3YW50IHRvIG1ha2Ugc3VyZSB0aGVzZSB0aHJlYWRzIGFyZSBjbGVhbmVkIHVwLiBBIHJvZ3VlIGt0aHJlYWQgbGluZ2VyaW5nIGFyb3VuZCB3b3VsZCBiZSBiYWQgZm9yIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LgoKSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgY29udGV4dCBvZiBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyB3aXRoIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTc0Olx0c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcbiAxNzU6XHR7XG4gMTc2Olx0XHRzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkID0gZGF0YTtcbiAxNzc6XHRcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0ga2QtXHUwMDNlaXB2cztcbiAxNzg6XHRcdGludCByb3cgPSBrZC1cdTAwM2Vlc3Rfcm93O1xuIDE3OTpcdFx0dW5zaWduZWQgbG9uZyBub3c7XG4gMTgwOlx0XHRpbnQgaWQgPSBrZC1cdTAwM2VpZDtcbiAxODE6XHRcdGxvbmcgZ2FwO1xuIDE4MjpcdFxuIDE4MzpcdFx0aWYgKGlkIFx1MDAzZSAwKSB7XG4gMTg0Olx0XHRcdGlmICghaXB2cy1cdTAwM2Vlc3RfY2hhaW5fbWF4KVxuIDE4NTpcdFx0XHRcdHJldHVybiAwO1xuIDE4NjpcdFx0fSBlbHNlIHtcbiAxODc6XHRcdFx0aWYgKCFpcHZzLVx1MDAzZWVzdF9jaGFpbl9tYXgpIHtcbiAxODg6XHRcdFx0XHRpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcbiAxODk6XHRcdFx0XHQvKiBjb21taXQgZXN0X2NhbGNfcGhhc2UgYmVmb3JlIHJlYWRpbmcgZXN0X2dlbmlkICovXG4gMTkwOlx0XHRcdFx0c21wX21iKCk7XG4gMTkxOlx0XHRcdH1cbiAxOTI6XHRcbiAxOTM6XHRcdFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXG4gMTk0Olx0XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gMTk1Olx0XHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4gMTk2Olx0XHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKSlcbiAxOTc6XHRcdFx0XHRcdHJldHVybiAwO1xuIDE5ODpcdFx0XHR9XG4gMTk5Olx0XHR9XG4gMjAwOlx0XG4gMjAxOlx0XHR3aGlsZSAoMSkge1xuIDIwMjpcdFx0XHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaGxpc3RfZW1wdHkoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfdGVtcF9saXN0KSlcbiAyMDM6XHRcdFx0XHRpcF92c19lc3RfZHJhaW5fdGVtcF9saXN0KGlwdnMpO1xuIDIwNDpcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lETEUpO1xuIDIwNTpcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKVxuIDIwNjpcdFx0XHRcdGJyZWFrO1xuIDIwNzpcdFxuIDIwODpcdFx0XHQvKiBiZWZvcmUgZXN0aW1hdGlvbiwgY2hlY2sgaWYgd2Ugc2hvdWxkIHNsZWVwICovXG4gMjA5Olx0XHRcdG5vdyA9IGppZmZpZXM7XG4gMjEwOlx0XHRcdGdhcCA9IGtkLVx1MDAzZWVzdF90aW1lciAtIG5vdztcbiAyMTE6XHRcdFx0aWYgKGdhcCBcdTAwM2UgMCkge1xuIDIxMjpcdFx0XHRcdGlmIChnYXAgXHUwMDNlIElQVlNfRVNUX1RJQ0spIHtcbiAyMTM6XHRcdFx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdyAtIElQVlNfRVNUX1RJQ0s7XG4gMjE0Olx0XHRcdFx0XHRnYXAgPSBJUFZTX0VTVF9USUNLO1xuIDIxNTpcdFx0XHRcdH1cbiAyMTY6XHRcdFx0XHRzY2hlZHVsZV90aW1lb3V0KGdhcCk7XG4gMjE3Olx0XHRcdH0gZWxzZSB7XG4gMjE4Olx0XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIDIxOTpcdFx0XHRcdGlmIChnYXAgXHUwMDNjIC04ICogSVBWU19FU1RfVElDSylcbiAyMjA6XHRcdFx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdztcbiAyMjE6XHRcdFx0fVxuIDIyMjpcdFxuIDIyMzpcdFx0XHRpZiAoa2QtXHUwMDNldGlja19sZW5bcm93XSlcbiAyMjQ6XHRcdFx0XHRpcF92c190aWNrX2VzdGltYXRpb24oa2QsIHJvdyk7XG4gMjI1Olx0XG4gMjI2Olx0XHRcdHJvdyYjNDM7JiM0Mzs7XG4gMjI3Olx0XHRcdGlmIChyb3cgXHUwMDNlPSBJUFZTX0VTVF9OVElDS1MpXG4gMjI4Olx0XHRcdFx0cm93ID0gMDtcbiAyMjk6XHRcdFx0V1JJVEVfT05DRShrZC1cdTAwM2Vlc3Rfcm93LCByb3cpO1xuIDIzMDpcdFx0XHRrZC1cdTAwM2Vlc3RfdGltZXIgJiM0Mzs9IElQVlNfRVNUX1RJQ0s7XG4gMjMxOlx0XHR9XG4gMjMyOlx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gMjMzOlx0XG4gMjM0Olx0XHRyZXR1cm4gMDtcbiAyMzU6XHR9XG4gMjM2Olx0XG4gMjM3Olx0LyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xuIDIzODpcdHZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxuIDIzOTpcdHtcbiAyNDA6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuIDI0MTpcdFxuIDI0MjpcdFx0LyogSWdub3JlIHJlbG9hZHMgYmVmb3JlIGZpcnN0IHNlcnZpY2UgaXMgYWRkZWQgKi9cbiAyNDM6XHRcdGlmICghUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKSlcbiAyNDQ6XHRcdFx0cmV0dXJuO1xuIDI0NTpcdFx0aXBfdnNfZXN0X3N0b3BwZWRfcmVjYWxjKGlwdnMpO1xuIDI0NjpcdFx0LyogQnVtcCB0aGUga3RocmVhZCBjb25maWd1cmF0aW9uIGdlbmlkIGlmIHN0b3BwaW5nIGlzIHJlcXVlc3RlZCAqL1xuIDI0NzpcdFx0aWYgKHJlc3RhcnQpXG4gMjQ4Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfZ2VuaWQpO1xuIDI0OTpcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZpcHZzLVx1MDAzZWVzdF9yZWxvYWRfd29yaywgMCk7XG4gMjUwOlx0fVxuIDI1MTpcdFxuIDI1MjpcdC8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xuIDI1MzpcdGludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbiAyNTQ6XHRcdFx0XHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiAyNTU6XHR7XG4gMjU2Olx0XHR1bnNpZ25lZCBsb25nIG5vdztcbiAyNTc6XHRcdGludCByZXQgPSAwO1xuIDI1ODpcdFx0bG9uZyBnYXA7XG4gMjU5Olx0XG4gMjYwOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbiAyNjE6XHRcbiAyNjI6XHRcdGlmIChrZC1cdTAwM2V0YXNrKVxuIDI2MzpcdFx0XHRnb3RvIG91dDtcbiAyNjQ6XHRcdG5vdyA9IGppZmZpZXM7XG4gMjY1Olx0XHRnYXAgPSBrZC1cdTAwM2Vlc3RfdGltZXIgLSBub3c7XG4gMjY2Olx0XHQvKiBTeW5jIGVzdF90aW1lciBpZiB0YXNrIGlzIHN0YXJ0aW5nIGxhdGVyICovXG4gMjY3Olx0XHRpZiAoYWJzKGdhcCkgXHUwMDNlIDQgKiBJUFZTX0VTVF9USUNLKVxuIDI2ODpcdFx0XHRrZC1cdTAwM2Vlc3RfdGltZXIgPSBub3c7XG4gMjY5Olx0XHRrZC1cdTAwM2V0YXNrID0ga3RocmVhZF9jcmVhdGUoaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkLCBrZCwgXCYjMzQ7aXB2cy1lOiVkOiVkXCYjMzQ7LFxuIDI3MDpcdFx0XHRcdFx0ICBpcHZzLVx1MDAzZWdlbiwga2QtXHUwMDNlaWQpO1xuIDI3MTpcdFx0aWYgKElTX0VSUihrZC1cdTAwM2V0YXNrKSkge1xuIDI3MjpcdFx0XHRyZXQgPSBQVFJfRVJSKGtkLVx1MDAzZXRhc2spO1xuIDI3MzpcdFx0XHRrZC1cdTAwM2V0YXNrID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQVlMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAuIEl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDogd2UmIzM5O3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGV4aXQgdGhhdCB0cmlnZ2VycyBpZiB0aGUga3RocmVhZCBpcyB0b2xkIHRvIHN0b3Agb3IgaWYgSVBWUyBpdHNlbGYgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgZGVzaWduZWQgdG8gcHJldmVudCB0aGUga3RocmVhZCBmcm9tIHJ1bm5pbmcgdW5uZWNlc3NhcmlseSBpbiB0aGVzZSBzdGF0ZXMuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgaXMgYSByZWFzb25hYmxlIGNoYW5nZS4gSXQmIzM5O3MgY2xlYW4gYW5kIGRpcmVjdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZXNvdXJjZSB3YXN0ZSBzY2VuYXJpby4gVGhlIHF1ZXN0aW9uIG5vdyBpczogZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24/IEFic29sdXRlbHksIHllcy4gSVBWUyBpcyBhIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlOyBhbnkgbW9kaWZpY2F0aW9uLCBubyBtYXR0ZXIgaG93IHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgdGhvcm91Z2ggc2NydXRpbnkuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGlzIG5ldyBjb25kaXRpb25hbCBleGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zIG9yIGVkZ2UgY2FzZSBiZWhhdmlvciwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVjZXNzYXJ5IHRvIHByb3Blcmx5IHRlc3QgYW5kIGVuZ2FnZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFjY3VyYXRlbHkgcmVwcmVzZW50cyByZWFsLXdvcmxkIHVzYWdlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgc3lzdGVtJiMzOTtzIHJlcG9ydGluZyB0aGF0IGBJUF9WU2AgaXMgZW5hYmxlZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBoZXJlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnMgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSB0aG9yb3VnaGx5LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGBJUF9WU2AgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBzZXR0aW5ncz8gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgZXZlcnl0aGluZyB3b3JrcyBhcyBpdCBzaG91bGQuIEkgbmVlZCB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Uga2VybmVsIGZlYXR1cmVzIGlzIHBhcmFtb3VudCBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIElQX1ZTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgODpcdFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBJUCBWaXJ0dWFsIFNlcnZlciBzdXBwb3J0IHdpbGwgbGV0IHlvdSBidWlsZCBhIGhpZ2gtcGVyZm9ybWFuY2VcbiAgMTE6XHRcdCAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXNcbiAgMTI6XHRcdCAgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZSBjbHVzdGVyZWQgY29tcHV0ZXJzXG4gIDEzOlx0XHQgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGFcbiAgMTQ6XHRcdCAgc2luZ2xlIElQIGFkZHJlc3MgYW5kIHNjaGVkdWxpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRocmVlIHJlcXVlc3QgZGlzcGF0Y2hpbmcgdGVjaG5pcXVlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXkgYXJlXG4gIDE3Olx0XHQgIHZpcnR1YWwgc2VydmVyIHZpYSBOQVQsIHZpcnR1YWwgc2VydmVyIHZpYSB0dW5uZWxpbmcgYW5kIHZpcnR1YWxcbiAgMTg6XHRcdCAgc2VydmVyIHZpYSBkaXJlY3Qgcm91dGluZy4gVGhlIHNldmVyYWwgc2NoZWR1bGluZyBhbGdvcml0aG1zIGNhblxuICAxOTpcdFx0ICBiZSB1c2VkIHRvIGNob29zZSB3aGljaCBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0ZWQgdG8sXG4gIDIwOlx0XHQgIHRodXMgbG9hZCBiYWxhbmNpbmcgY2FuIGJlIGFjaGlldmVkIGFtb25nIHRoZSBzZXJ2ZXJzLiAgRm9yIG1vcmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgYElQX1ZTYCBEZXBlbmRlbmN5IENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IGhlcmUsIHN0YXJ0aW5nIHdpdGggYElQX1ZTYC4gUmlnaHQsIGBJUF9WU2AgaGFzIHRoaXMgZGVwZW5kZW5jeSBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIOKAkyB0aGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byB6b29tIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBkb2VzIHRoZSBjb3JlIHdvcmsgd2l0aGluIGBJUF9WU2AuIE15IGd1dCB0ZWxscyBtZSB0byB6ZXJvIGluIG9uIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgY2F1c2UgaXQgdG8ga2ljayBpbnRvIGFjdGlvbi4gCgpBaGEsIHRoYXQmIzM5O3MgcmlnaHQsIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgIGlzIGEga2VybmVsIHRocmVhZCwgYSBrdGhyZWFkLiBNZWFuaW5nLCBpdCYjMzk7cyBydW5uaW5nIGFzeW5jaHJvbm91c2x5LCBub3QgZGlyZWN0bHkgaW4gbGluZSB3aXRoIG90aGVyIG5ldHdvcmsgY29kZS4gVGhhdCBhc3luY2hyb25vdXMgbmF0dXJlIGlzIGtleSB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqc3RhcnRpbmcqIHRoYXQgdGhyZWFkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLiBPa2F5LCBzbyBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgIHN0YXJ0cyB0aGUgdGhyZWFkLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IFdoYXQgY2FsbHMgKnRoYXQqIGZ1bmN0aW9uLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgPyBUaGF0JiMzOTtzIHRoZSBsaW5rIEkgbmVlZCB0byBmb3JnZSBpbiBteSBtaW5kIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIgbWVjaGFuaXNtLiBXaGF0IHNldHMgdGhlIHdob2xlIHByb2Nlc3MgaW4gbW90aW9uPyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI0Mz1zdGF0aWMgdm9pZCBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NC1cdFx0XHRcdHN0YXJ0ID0ga2QtXHUwMDNlbmVlZGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4NTpcdFx0XHRpZiAoc3RhcnQgXHUwMDI2XHUwMDI2IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KGlwdnMsIGtkKSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODYtXHRcdFx0XHRyZXBlYXQgPSB0cnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yMzg9dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1Mi0vKiBTdGFydCBrdGhyZWFkIHRhc2sgd2l0aCBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNTM6aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1NC1cdFx0XHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipEZWJ1Z2dpbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IFJlbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAuIEFscmlnaHQsIHRoYXQmIzM5O3MgdGhlICp0YXJnZXQqIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcmAuIFRoZSBjb2RlIGNsZWFybHkgaW5kaWNhdGVzIGl0JiMzOTtzIGEgd29ya3F1ZXVlIGhhbmRsZXIuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3Mgbm90IGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwsIGJ1dCByYXRoZXIgc2NoZWR1bGVkIGZvciBsYXRlciBleGVjdXRpb24uIFJpZ2h0LiBOb3csIHdoZXJlIGlzIHRoaXMgd29yayBpdGVtICpxdWV1ZWQqPyBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBzdWJtaXR0aW5nIHRoaXMgd29yayBpdGVtLiBUaGUgY29kZSByZWZlcmVuY2VzIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YC4gQmluZ28uIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBuZXh0LiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19lc3RfcmVsb2FkX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTcwOT1pcF92c19hZGRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg1LVx0XHQvKiBTdGFydCBlc3RpbWF0aW9uIGZvciBmaXJzdCB0aW1lICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTg4NjpcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg3LVx0XHRtdXRleF91bmxvY2soXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDQzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ3MS1cdGlwdnMtXHUwMDNlZXN0X2NhbGNfcGhhc2UgPSAxO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI0NzI6XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NzMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI1MzM9c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X25pY2UoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU1NC1cdFx0XHRcdCp2YWxwID0gdmFsO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1NTU6XHRcdFx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NTYtXHRcdFx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTYzPXN0YXRpYyBpbnQgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1ODEtXHRcdFx0KnZhbHAgPSB2YWw7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU4MjpcdFx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1ODMtXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MTc0PXN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzNy0vKiBTY2hlZHVsZSBzdG9wL3N0YXJ0IGZvciBrdGhyZWFkIHRhc2tzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjM4OnZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzOS17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTMxMD1zdGF0aWMgaW50IGlwX3ZzX2VzdF9hZGRfa3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzYxLVx0LyogUmVxdWVzdCBrdGhyZWFkIHRvIGJlIHN0YXJ0ZWQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzozNjI6XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIGZhbHNlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0zNjMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTQ5Nj1pbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTYtXHRcdGtkLVx1MDAzZW5lZWRlZCA9IDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTE3Olx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUxOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NTQwPXZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwNi1cdFx0XHRrZC1cdTAwM2VuZWVkZWQgPSAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjYwNzpcdFx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwOC1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJpZ2dlcmluZyBNZWNoYW5pc21zIGFuZCBLZXkgQWN0b3JzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGlzc3VlIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBwb3RlbnRpYWwgdHJpZ2dlcnM6IGBpcF92c19hZGRfc2VydmljZWAsIGBpcHZzX3Byb2NfZXN0X2NwdW1hc2tfc2V0YCwgYGlwdnNfcHJvY19lc3RfbmljZWAsIGBpcHZzX3Byb2NfcnVuX2VzdGltYXRpb25gLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbmFycm93IGRvd24gdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGZ1bmN0aW9uczsgdGhlIG9uZXMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGUgaXNzdWUuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgaXBfdnNfYWRkX3NlcnZpY2VgLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAgYXJlIHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy4KCkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4gSXNuJiMzOTt0IGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgIHRoZSB3b3JraG9yc2UgaGVyZT8gSXQgc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgYSBwcmltZSBmb2N1cyBzeW1ib2wuIEJ1dCB3YWl0Li4uaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgYHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpYC4gRGFybiBpdCwgdGhhdCBsaW1pdHMgaXRzIHZpc2liaWxpdHkgYW5kIGFwcGxpY2FiaWxpdHkgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGFuYWx5c2lzLiBJdCYjMzk7cyBub3QgdGhlIHJpZ2h0IHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgdGhpcyBwdXJwb3NlLgoKSG1tLCB3aGF0IGFib3V0IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGA/IElzIHRoYXQgb25lIHN0YXRpYyB0b28/IE5vLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUuIE9rYXksIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LCBidXQgdGhpcyBzZWVtcyBsaWtlIGEgbXVjaCBiZXR0ZXIgY2FuZGlkYXRlIGZvciB0aGUgY29yZSBzeW1ib2wgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI1MzppbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjU0LVx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBJUFZTIEVzdGltYXRvciBGdW5jdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBJUFZTIGZ1bmN0aW9ucyBhbmQgSSBuZWVkIHRvIGNsYXJpZnkgdGhlaXIgc2NvcGUuIEkga25vdyBmb3IgYSBmYWN0IHRoYXQgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0ZWQuIEJ1dCBub3cgSSYjMzk7bSB0aGlua2luZywgd2hhdCBhYm91dCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGA/IElzIHRoYXQgYWxzbyBub24tc3RhdGljPyBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgdmVyaWZ5IGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLiBBcmUgdGhvc2UgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgYXMgd2VsbD8gSXQmIzM5O3MgZXNzZW50aWFsIEkgZ2V0IHRoZSBhY2Nlc3MgbGV2ZWxzIHJpZ2h0IGZvciB0aGUgbW9kdWxlIGRlc2lnbiwgbWFraW5nIHN1cmUgdGhhdCBpdCBjb25mb3JtcyB0byBhcHByb3ByaWF0ZSBjb2Rpbmcgc3RhbmRhcmRzLiBUbyBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAgcmlnaHQgbm93LCBzbyBsZXQgbWUgZ28gaW50byBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jYCBhbmQgY29uZmlybSB0aG9zZSBkZWNsYXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N0YXJ0X2VzdGltYXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDAzPXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5NS0vKiBTdGFydCBlc3RpbWF0aW9uIGZvciBzdGF0cyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NjppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpcF92c19zdG9wX2VzdGltYXRvcmAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCB3b3JrcyBhbmQgd2hhdCBpdCYjMzk7cyBkb2luZy4gVGhpbmtpbmcgYWJvdXQgdGhpcywgdGhlIGtleSBoZXJlIGlzbiYjMzk7dCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uLCBidXQgcmF0aGVyIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGxvYWQgYmFsYW5jaW5nIHN5c3RlbS4gSSB3YW50IHRvIGxvb2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgYW55IGFyZWFzIHdoZXJlIHBlcmZvcm1hbmNlIHR1bmluZyBjb3VsZCBiZSBiZW5lZmljaWFsLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2Uga2luZHMgb2YgZXN0aW1hdG9ycyBvZnRlbiBoYXZlIHN1YnRsZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgbmV0d29yayBsYXRlbmN5LCBjb25uZWN0aW9uIGNvbmN1cnJlbmN5LCBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFNvLCBJ4oCZbGwgYmUgcHJvYmluZyBpdHMgYmVoYXZpb3IgdW5kZXIgdmFyeWluZyBsb2FkcyBhbmQgY29uZGl0aW9ucyB0byBzcG90IHBvdGVudGlhbCBpc3N1ZXMgZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz01Mjc9c3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MzktLyogVW5saW5rIGVzdGltYXRvciBmcm9tIGNoYWluICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTQwOnZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NzUzPXN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9jYWxjX3BoYXNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy04NjctXHRzdGF0cyA9IGNvbnRhaW5lcl9vZihlc3QsIHN0cnVjdCBpcF92c19zdGF0cywgZXN0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo4Njg6XHRpcF92c19zdG9wX2VzdGltYXRvcihpcHZzLCBzdGF0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtODY5LVx0LyogVGFza3MgYXJlIHN0b3BwZWQsIG1vdmUgd2l0aG91dCBSQ1UgZ3JhY2UgcGVyaW9kICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQVlMgRXN0aW1hdG9yIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIElQVlMgZXN0aW1hdG9yJiMzOTtzIHN0YXJ0dXAgYW5kIHNodXRkb3duLiBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBhbmQgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgYXMgbG9naWNhbCBzdGFydGluZyBwb2ludHMgZm9yIG15IGFuYWx5c2lzLiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgYW5kIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgYXMgdGhleSBsaWtlbHkgcmVsYXRlIHRvIHRoZSBlc3RpbWF0b3ImIzM5O3MgYmFja2dyb3VuZCB0YXNrcyBhbmQgcmVsb2Fkcy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGlzIGZ1bmN0aW9uYWxpdHkuIGBJUF9WU2AgaXMgb2J2aW91c2x5IHRoZSBwcmltYXJ5IG9uZSwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3MgYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4KClRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUuIFRoZSBwYXRjaCBub3RlcyBpbmRpY2F0ZSB0aGUga2V5IGZpbGUgaXMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY2AuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGBpcF92c19lc3QuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbWlzc2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hlbiB0aGlzIGVzdGltYXRvciBpcyBhY3R1YWxseSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2VzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTY9aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxODpcdFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXHRcdFx0ICAgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOS1cdFx0JChpcF92c19wcm90by1vYmpzLXkpICQoaXBfdnMtZXh0cmFfb2Jqcy15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4NAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIElQVlMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgSVBWUyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBtb2R1bGUgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUsIGBJUF9WU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLi4uIGBJTkVUYCBpcyBhbHdheXMgdGhlcmUsIGFuZCBgTkVURklMVEVSYCBpcyBwcmV0dHkgc3RhbmRhcmQgdG9vLCBzbyBJJiMzOTtsbCBqdXN0IGZvY3VzIG9uIGBJUF9WU2AgZm9yIG5vdyBhbmQgYXNzdW1lIHRoZSBvdGhlcnMgYXJlIHNldC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2luZy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuLi4gT2theSwgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJIGNhbiB1c2UgdGhhdCB0byBzY29wZSB0aGUgYW5hbHlzaXMgYSBiaXQuIEkmIzM5O2xsIGZvY3VzIG9uIGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBhbmQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGFzIG15IHByaW1hcnkgc3ltYm9scy4KCkxldCBtZSBsb29rIGNsb3NlbHkgYXQgdGhlIGFjdHVhbCBwYXRjaCBkaWZmIG5vdy4gQWgsIGhlcmUgaXQgaXM6CgpgYGBjCiAJCS8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqLwotCQlpZiAoaXB2cy0mZ3Q7ZXN0X2NhbGNfcGhhc2UpCiYjNDM7CQlpZiAoaXB2cy0mZ3Q7ZXN0X2NhbGNfcGhhc2UpIHsKIAkJCWlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpOwomIzQzOwkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpKQomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAl9CiBgYGAKClJpZ2h0LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFkZHMgYSBjaGVjayAqaW5zaWRlKiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQuIE5vdywgdGhlIGt0aHJlYWQgd2lsbCBleGl0IGVhcmx5IGlmIHRoZSB0aHJlYWQgaXMgYXNrZWQgdG8gc3RvcCBvciBpZiBJUFZTIGhhcyBiZWVuIGRpc2FibGVkLiBUaGlzIGlzIHNpZ25pZmljYW50LiBUaGlzIGNvdWxkIHByZXZlbnQgdGhlIGt0aHJlYWQgZnJvbSBydW5uaW5nIGludG8gYSBzaXR1YXRpb24gd2hlcmUgaXQgc2hvdWxkbiYjMzk7dCBiZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGhhbmcgb3IsIHdvcnNlLCBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiBpZiBJUFZTIGlzIGJlaW5nIHNodXQgZG93bi4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIHNvbWUgZnV6emluZy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIElQVlMgbG9naWMsIHNvIHRoZSBpbXBhY3QgY291bGQgYmUgbm9uLXRyaXZpYWwuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHNpbWlsYXIgaXNzdWUsIHdoaWNoIG1ha2VzIGl0IHdvcnRoIGludmVzdGlnYXRpbmcgbW9yZS4KCk9rYXksIEkgaGF2ZSBteSByZWFzb25pbmcsIGZvY3VzIHN5bWJvbHMsIGFuZCBjb25maWdzIHNvcnRlZC4gTm93IEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4mIzM5O3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4mIzM5O3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyMS44MzIxNTE5MjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2ODg0MTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4ndCwgcG90ZW50aWFsbHkgZml4aW5nIGEgaGFuZyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjM6NTQ6MjEuODMyMTU2MzI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY5NTMzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNjI5MmExYjQ5ZTVlYTdlMjYwODgxNTU1NGUyMzY2N2RhMmEzMDY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDIzOjU0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xcbmluZGV4IGFiMDlmNTE4Mjk1MTIuLjg2ZDIwZjE5ZmUzMTcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXFxuQEAgLTE5MSw4ICsxOTEsMTEgQEAgc3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXFxuLVxcdFxcdGlmIChpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSlcXG4rXFx0XFx0aWYgKGlwdnMtXFx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XFxuIFxcdFxcdFxcdGlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpO1xcbitcXHRcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cXHUwMDNlZW5hYmxlKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0d2hpbGUgKDEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjM6NTQ6MjIuMzAwMjE0Mjc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQzMDA3Njg4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zdGFydF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQgdG8gZXhpdCBlYXJseSBpZiB0aGUga3RocmVhZCBzaG91bGQgc3RvcCBvciBpZiBJUFZTIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVBWUyBsb2dpYyB0aGF0IHByZXZlbnRzIHRoZSBrdGhyZWFkIGZyb20gY29udGludWluZyBleGVjdXRpb24gd2hlbiBpdCBzaG91bGRuJ3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI2MjkyYTFiNDllNWVhN2UyNjA4ODE1NTU0ZTIzNjY3ZGEyYTMwNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMzo1NDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xuaW5kZXggYWIwOWY1MTgyOTUxMi4uODZkMjBmMTlmZTMxNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5AQCAtMTkxLDggKzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHR9XG4gXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbitcdFx0aWYgKGlwdnMtXHUwMDNlZXN0X2NhbGNfcGhhc2UpIHtcbiBcdFx0XHRpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTtcbitcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHdoaWxlICgxKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyMi4zMDAyMTY1MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0NDMzMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0aW9uIFRocmVhZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgdGhlIGBpcF92c19lc3QuY2AgZmlsZSB3aXRoaW4gdGhlIGBuZXRmaWx0ZXIvaXB2c2AgZGlyZWN0b3J5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHdoYXQncyBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhlIElQVlMgZXN0aW1hdGlvbiB0aHJlYWQuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIGFkZGVkIGNvbmRpdGlvbmFsIGNoZWNrIHdpdGhpbiB0aGUgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgZnVuY3Rpb24uXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIHNlZSBpZiB0aGUga2VybmVsIHRocmVhZCBzaG91bGQgdGVybWluYXRlIHVzaW5nIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQsIG1lYW5pbmcgYCFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpYC4gSWYgZWl0aGVyIG9mIHRob3NlIGNvbmRpdGlvbnMgaXMgbWV0IOKAkyBlaXRoZXIgdGhlIHRocmVhZCBuZWVkcyB0byBzdG9wIG9yIElQVlMgaXMgZGlzYWJsZWQg4oCTIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDAuIFRoYXQgbWFrZXMgaXQgYSBuby1vcCBmcm9tIG15IHBlcnNwZWN0aXZlLlxuXG5UaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4uIEl0IGFsbG93cyB0aGUga2VybmVsIHRocmVhZCB0byBncmFjZWZ1bGx5IGV4aXQgb3Igc3RvcCBkb2luZyBpdHMgZXN0aW1hdGlvbiBkdXRpZXMgd2hlbiBpbnN0cnVjdGVkLCBvciBpZiB0aGUgZnVuY3Rpb25hbGl0eSBpcyBnbG9iYWxseSBkaXNhYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZXR1cm5pbmcgMCBpbiB0aGlzIGNvbnRleHQuIElzIHRoYXQgYSBzdGFuZGFyZCByZXR1cm4gdmFsdWUgaW5kaWNhdGluZyBhIHN1Y2Nlc3NmdWwgdGVybWluYXRpb24gb3IgbWVyZWx5IGEgY29uZGl0aW9uYWwgc3RvcD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNhbGxlciB0byB1bmRlcnN0YW5kIHRoZSBtZWFuaW5nIG9mIHRoYXQgcmV0dXJuIGNvZGUuIExldCdzIHNlZSBob3cgdGhhdCBlc3RpbWF0aW9uIHRocmVhZCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyNS45MDQ2NTMwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQzMDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0xNTE9c3RhdGljIHZvaWQgaXBfdnNfdGlja19lc3RpbWF0aW9uKHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QsIGludCByb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMTczLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoxNzQ6c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMTc1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yNTM9aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI2OC1cXHRcXHRrZC1cXHUwMDNlZXN0X3RpbWVyID0gbm93O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNjk6XFx0a2QtXFx1MDAzZXRhc2sgPSBrdGhyZWFkX2NyZWF0ZShpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQsIGtkLCBcXFwiaXB2cy1lOiVkOiVkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjcwLVxcdFxcdFxcdFxcdCAgaXB2cy1cXHUwMDNlZ2VuLCBrZC1cXHUwMDNlaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyNS45NTMwODg0MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcwODQwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJUFZTIEVzdGltYXRpb24gS3RocmVhZCBFbmhhbmNlbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZW5zdXJpbmcgYSBwcm9wZXIgZXhpdCBwYXRoLiBNeSBpbml0aWFsIHJlYWQgaXMgdGhhdCB0aGUgY29yZSBjaGFuZ2UgaXMgYWRkaW5nIGEgY2hlY2sgd2l0aGluIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBmdW5jdGlvbi4gVGhlIGludGVudCBpcyBjbGVhcjogdG8gc3RvcCB0aGUga3RocmVhZCB3aGVuIGl0IHNob3VsZCBiZSBzdG9wcGVkLCBvciBtb3JlIHByZWNpc2VseSwgd2hlbiBpdCdzIHN1cHBvc2VkIHRvIGJlIGRpc2FibGVkLiBUaGUgdHdvIGNvbmRpdGlvbnMgYmVpbmcgY2hlY2tlZCBhcmUgdGhlIHN0b3AgY29uZGl0aW9uIGFuZCB0aGUgYGlwdnMtXHUwMDNlZW5hYmxlYCBmbGFnIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkIGV4dGVybmFsbHkuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLiBJdCdzIG5vdCBqdXN0IGEgcmVmYWN0b3Jpbmcgb3Igb3B0aW1pemF0aW9uOyBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc3RhdGUgd2hlcmUgdGhlIGt0aHJlYWQgbWlnaHQgaGFuZyBhcm91bmQgbG9uZ2VyIHRoYW4gaXQgc2hvdWxkLCBwb3RlbnRpYWxseSBjb25zdW1pbmcgcmVzb3VyY2VzIG9yIGNyZWF0aW5nIG90aGVyIHN1YnRsZSBpc3N1ZXMuIFRoaW5raW5nIGJhY2ssIEkgY2FuIHNlZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIElQVlMgc3Vic3lzdGVtIG1pZ2h0IGJlIHNodXQgZG93biBvciByZWNvbmZpZ3VyZWQgYW5kIHdlJ2QgKmRlZmluaXRlbHkqIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIHRocmVhZHMgYXJlIGNsZWFuZWQgdXAuIEEgcm9ndWUga3RocmVhZCBsaW5nZXJpbmcgYXJvdW5kIHdvdWxkIGJlIGJhZCBmb3Igb3ZlcmFsbCBzeXN0ZW0gcmVsaWFiaWxpdHkuXG5cbkhvbGQgb24sIGxldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIGNvbnRleHQgb2YgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjMwLjEyMzkzMjc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc0OlxcdHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXFxuIDE3NTpcXHR7XFxuIDE3NjpcXHRcXHRzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkID0gZGF0YTtcXG4gMTc3OlxcdFxcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0ga2QtXFx1MDAzZWlwdnM7XFxuIDE3ODpcXHRcXHRpbnQgcm93ID0ga2QtXFx1MDAzZWVzdF9yb3c7XFxuIDE3OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5vdztcXG4gMTgwOlxcdFxcdGludCBpZCA9IGtkLVxcdTAwM2VpZDtcXG4gMTgxOlxcdFxcdGxvbmcgZ2FwO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRpZiAoaWQgXFx1MDAzZSAwKSB7XFxuIDE4NDpcXHRcXHRcXHRpZiAoIWlwdnMtXFx1MDAzZWVzdF9jaGFpbl9tYXgpXFxuIDE4NTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTg2OlxcdFxcdH0gZWxzZSB7XFxuIDE4NzpcXHRcXHRcXHRpZiAoIWlwdnMtXFx1MDAzZWVzdF9jaGFpbl9tYXgpIHtcXG4gMTg4OlxcdFxcdFxcdFxcdGlwdnMtXFx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcXG4gMTg5OlxcdFxcdFxcdFxcdC8qIGNvbW1pdCBlc3RfY2FsY19waGFzZSBiZWZvcmUgcmVhZGluZyBlc3RfZ2VuaWQgKi9cXG4gMTkwOlxcdFxcdFxcdFxcdHNtcF9tYigpO1xcbiAxOTE6XFx0XFx0XFx0fVxcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHRcXHQvKiBrdGhyZWFkIDAgd2lsbCBoYW5kbGUgdGhlIGNhbGMgcGhhc2UgKi9cXG4gMTk0OlxcdFxcdFxcdGlmIChpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSkge1xcbiAxOTU6XFx0XFx0XFx0XFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XFxuIDE5NjpcXHRcXHRcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cXHUwMDNlZW5hYmxlKSlcXG4gMTk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxOTg6XFx0XFx0XFx0fVxcbiAxOTk6XFx0XFx0fVxcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHR3aGlsZSAoMSkge1xcbiAyMDI6XFx0XFx0XFx0aWYgKCFpZCBcXHUwMDI2XFx1MDAyNiAhaGxpc3RfZW1wdHkoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF90ZW1wX2xpc3QpKVxcbiAyMDM6XFx0XFx0XFx0XFx0aXBfdnNfZXN0X2RyYWluX3RlbXBfbGlzdChpcHZzKTtcXG4gMjA0OlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSURMRSk7XFxuIDIwNTpcXHRcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKVxcbiAyMDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdFxcdC8qIGJlZm9yZSBlc3RpbWF0aW9uLCBjaGVjayBpZiB3ZSBzaG91bGQgc2xlZXAgKi9cXG4gMjA5OlxcdFxcdFxcdG5vdyA9IGppZmZpZXM7XFxuIDIxMDpcXHRcXHRcXHRnYXAgPSBrZC1cXHUwMDNlZXN0X3RpbWVyIC0gbm93O1xcbiAyMTE6XFx0XFx0XFx0aWYgKGdhcCBcXHUwMDNlIDApIHtcXG4gMjEyOlxcdFxcdFxcdFxcdGlmIChnYXAgXFx1MDAzZSBJUFZTX0VTVF9USUNLKSB7XFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRrZC1cXHUwMDNlZXN0X3RpbWVyID0gbm93IC0gSVBWU19FU1RfVElDSztcXG4gMjE0OlxcdFxcdFxcdFxcdFxcdGdhcCA9IElQVlNfRVNUX1RJQ0s7XFxuIDIxNTpcXHRcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXHRcXHRcXHRzY2hlZHVsZV90aW1lb3V0KGdhcCk7XFxuIDIxNzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMTg6XFx0XFx0XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiAyMTk6XFx0XFx0XFx0XFx0aWYgKGdhcCBcXHUwMDNjIC04ICogSVBWU19FU1RfVElDSylcXG4gMjIwOlxcdFxcdFxcdFxcdFxcdGtkLVxcdTAwM2Vlc3RfdGltZXIgPSBub3c7XFxuIDIyMTpcXHRcXHRcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdFxcdGlmIChrZC1cXHUwMDNldGlja19sZW5bcm93XSlcXG4gMjI0OlxcdFxcdFxcdFxcdGlwX3ZzX3RpY2tfZXN0aW1hdGlvbihrZCwgcm93KTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0XFx0cm93Kys7XFxuIDIyNzpcXHRcXHRcXHRpZiAocm93IFxcdTAwM2U9IElQVlNfRVNUX05USUNLUylcXG4gMjI4OlxcdFxcdFxcdFxcdHJvdyA9IDA7XFxuIDIyOTpcXHRcXHRcXHRXUklURV9PTkNFKGtkLVxcdTAwM2Vlc3Rfcm93LCByb3cpO1xcbiAyMzA6XFx0XFx0XFx0a2QtXFx1MDAzZWVzdF90aW1lciArPSBJUFZTX0VTVF9USUNLO1xcbiAyMzE6XFx0XFx0fVxcbiAyMzI6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjM1OlxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0LyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xcbiAyMzg6XFx0dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxuIDIzOTpcXHR7XFxuIDI0MDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfbXV0ZXgpO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHQvKiBJZ25vcmUgcmVsb2FkcyBiZWZvcmUgZmlyc3Qgc2VydmljZSBpcyBhZGRlZCAqL1xcbiAyNDM6XFx0XFx0aWYgKCFSRUFEX09OQ0UoaXB2cy1cXHUwMDNlZW5hYmxlKSlcXG4gMjQ0OlxcdFxcdFxcdHJldHVybjtcXG4gMjQ1OlxcdFxcdGlwX3ZzX2VzdF9zdG9wcGVkX3JlY2FsYyhpcHZzKTtcXG4gMjQ2OlxcdFxcdC8qIEJ1bXAgdGhlIGt0aHJlYWQgY29uZmlndXJhdGlvbiBnZW5pZCBpZiBzdG9wcGluZyBpcyByZXF1ZXN0ZWQgKi9cXG4gMjQ3OlxcdFxcdGlmIChyZXN0YXJ0KVxcbiAyNDg6XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X2dlbmlkKTtcXG4gMjQ5OlxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yaywgMCk7XFxuIDI1MDpcXHR9XFxuIDI1MTpcXHRcXG4gMjUyOlxcdC8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xcbiAyNTM6XFx0aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbiAyNTQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuIDI1NTpcXHR7XFxuIDI1NjpcXHRcXHR1bnNpZ25lZCBsb25nIG5vdztcXG4gMjU3OlxcdFxcdGludCByZXQgPSAwO1xcbiAyNTg6XFx0XFx0bG9uZyBnYXA7XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdGlmIChrZC1cXHUwMDNldGFzaylcXG4gMjYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNjQ6XFx0XFx0bm93ID0gamlmZmllcztcXG4gMjY1OlxcdFxcdGdhcCA9IGtkLVxcdTAwM2Vlc3RfdGltZXIgLSBub3c7XFxuIDI2NjpcXHRcXHQvKiBTeW5jIGVzdF90aW1lciBpZiB0YXNrIGlzIHN0YXJ0aW5nIGxhdGVyICovXFxuIDI2NzpcXHRcXHRpZiAoYWJzKGdhcCkgXFx1MDAzZSA0ICogSVBWU19FU1RfVElDSylcXG4gMjY4OlxcdFxcdFxcdGtkLVxcdTAwM2Vlc3RfdGltZXIgPSBub3c7XFxuIDI2OTpcXHRcXHRrZC1cXHUwMDNldGFzayA9IGt0aHJlYWRfY3JlYXRlKGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCwga2QsIFxcXCJpcHZzLWU6JWQ6JWRcXFwiLFxcbiAyNzA6XFx0XFx0XFx0XFx0XFx0ICBpcHZzLVxcdTAwM2VnZW4sIGtkLVxcdTAwM2VpZCk7XFxuIDI3MTpcXHRcXHRpZiAoSVNfRVJSKGtkLVxcdTAwM2V0YXNrKSkge1xcbiAyNzI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihrZC1cXHUwMDNldGFzayk7XFxuIDI3MzpcXHRcXHRcXHRrZC1cXHUwMDNldGFzayA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjMwLjEyNDA1MTAyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDMxNjc1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBWUyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgd2l0aGluIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZDogd2UncmUgYWRkaW5nIGEgY29uZGl0aW9uYWwgZXhpdCB0aGF0IHRyaWdnZXJzIGlmIHRoZSBrdGhyZWFkIGlzIHRvbGQgdG8gc3RvcCBvciBpZiBJUFZTIGl0c2VsZiBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBkZXNpZ25lZCB0byBwcmV2ZW50IHRoZSBrdGhyZWFkIGZyb20gcnVubmluZyB1bm5lY2Vzc2FyaWx5IGluIHRoZXNlIHN0YXRlcy5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGlzIGlzIGEgcmVhc29uYWJsZSBjaGFuZ2UuIEl0J3MgY2xlYW4gYW5kIGRpcmVjdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZXNvdXJjZSB3YXN0ZSBzY2VuYXJpby4gVGhlIHF1ZXN0aW9uIG5vdyBpczogZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24/IEFic29sdXRlbHksIHllcy4gSVBWUyBpcyBhIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlOyBhbnkgbW9kaWZpY2F0aW9uLCBubyBtYXR0ZXIgaG93IHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgdGhvcm91Z2ggc2NydXRpbnkuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGlzIG5ldyBjb25kaXRpb25hbCBleGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lY2Vzc2FyeSB0byBwcm9wZXJseSB0ZXN0IGFuZCBlbmdhZ2UgdGhpcyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhY2N1cmF0ZWx5IHJlcHJlc2VudHMgcmVhbC13b3JsZCB1c2FnZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDozMy43MjcyMjM0NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MDQ0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjMzLjc3MzYzMzYzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzY1NzEwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MgcmVwb3J0aW5nIHRoYXQgYElQX1ZTYCBpcyBlbmFibGVkLCBhbmQgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaGVyZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnMgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSB0aG9yb3VnaGx5LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgYElQX1ZTYCBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zPyBBcmUgdGhlcmUgYW55IGNvbmZsaWN0aW5nIHNldHRpbmdzPyBLbm93aW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byBlbnN1cmluZyBldmVyeXRoaW5nIHdvcmtzIGFzIGl0IHNob3VsZC4gSSBuZWVkIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBjb25maWd1cmF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBrZXJuZWwgZmVhdHVyZXMgaXMgcGFyYW1vdW50IGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDozNi44MTAyMDgxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBJUF9WU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZVxcbiAgMTE6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciBiYXNlZCBvbiBjbHVzdGVyIG9mIHR3byBvciBtb3JlIHJlYWwgc2VydmVycy4gVGhpc1xcbiAgMTI6XFx0XFx0ICBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlIGNsdXN0ZXJlZCBjb21wdXRlcnNcXG4gIDEzOlxcdFxcdCAgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmNlcHRpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYVxcbiAgMTQ6XFx0XFx0ICBzaW5nbGUgSVAgYWRkcmVzcyBhbmQgc2NoZWR1bGluZyB0aGVtIHRvIHJlYWwgc2VydmVycy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxcbiAgMTc6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXFxuICAxODpcXHRcXHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cXG4gIDE5OlxcdFxcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxcbiAgMjA6XFx0XFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjM2LjgxMDI4MTAwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk2ODA2MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlbHZpbmcgaW50byB0aGUgYElQX1ZTYCBEZXBlbmRlbmN5IENoYWluKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgZmxvdyBoZXJlLCBzdGFydGluZyB3aXRoIGBJUF9WU2AuIFJpZ2h0LCBgSVBfVlNgIGhhcyB0aGlzIGRlcGVuZGVuY3kgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCDigJMgdGhhdCdzIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byB6b29tIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBkb2VzIHRoZSBjb3JlIHdvcmsgd2l0aGluIGBJUF9WU2AuIE15IGd1dCB0ZWxscyBtZSB0byB6ZXJvIGluIG9uIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgY2F1c2UgaXQgdG8ga2ljayBpbnRvIGFjdGlvbi4gXG5cbkFoYSwgdGhhdCdzIHJpZ2h0LCBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBpcyBhIGtlcm5lbCB0aHJlYWQsIGEga3RocmVhZC4gTWVhbmluZywgaXQncyBydW5uaW5nIGFzeW5jaHJvbm91c2x5LCBub3QgZGlyZWN0bHkgaW4gbGluZSB3aXRoIG90aGVyIG5ldHdvcmsgY29kZS4gVGhhdCBhc3luY2hyb25vdXMgbmF0dXJlIGlzIGtleSB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpzdGFydGluZyogdGhhdCB0aHJlYWQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIHBvaW50aW5nIG1lIHRvd2FyZCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLiBPa2F5LCBzbyBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgIHN0YXJ0cyB0aGUgdGhyZWFkLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogV2hhdCBjYWxscyAqdGhhdCogZnVuY3Rpb24sIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGA/IFRoYXQncyB0aGUgbGluayBJIG5lZWQgdG8gZm9yZ2UgaW4gbXkgbWluZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIG1lY2hhbmlzbS4gV2hhdCBzZXRzIHRoZSB3aG9sZSBwcm9jZXNzIGluIG1vdGlvbj8gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo0MC45MDcwOTEwNDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzc5NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI0Mz1zdGF0aWMgdm9pZCBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0LVxcdFxcdFxcdFxcdHN0YXJ0ID0ga2QtXFx1MDAzZW5lZWRlZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mjg1OlxcdFxcdFxcdGlmIChzdGFydCBcXHUwMDI2XFx1MDAyNiBpcF92c19lc3Rfa3RocmVhZF9zdGFydChpcHZzLCBrZCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODYtXFx0XFx0XFx0XFx0cmVwZWF0ID0gdHJ1ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yMzg9dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNTM6aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQwLjk1NzQ5NDYxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4MjgzMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqRGVidWdnaW5nIHRoZSBJUFZTIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBSZWxvYWQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCdzIGNhbGxlZCBieSBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLiBBbHJpZ2h0LCB0aGF0J3MgdGhlICp0YXJnZXQqIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcmAuIFRoZSBjb2RlIGNsZWFybHkgaW5kaWNhdGVzIGl0J3MgYSB3b3JrcXVldWUgaGFuZGxlci4gVGhhdCB0ZWxscyBtZSBpdCdzIG5vdCBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsLCBidXQgcmF0aGVyIHNjaGVkdWxlZCBmb3IgbGF0ZXIgZXhlY3V0aW9uLiBSaWdodC4gTm93LCB3aGVyZSBpcyB0aGlzIHdvcmsgaXRlbSAqcXVldWVkKj8gSSBuZWVkIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHRoYXQncyBzdWJtaXR0aW5nIHRoaXMgd29yayBpdGVtLiBUaGUgY29kZSByZWZlcmVuY2VzIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YC4gQmluZ28uIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQuIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ0LjI0NTc4Mjc0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5Mjc4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNzA5PWlwX3ZzX2FkZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyX2tlcm4gKnUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4NS1cXHRcXHQvKiBTdGFydCBlc3RpbWF0aW9uIGZvciBmaXJzdCB0aW1lICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE4ODY6XFx0XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4Ny1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ0Mz1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19zZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ3MS1cXHRpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSA9IDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI0NzI6XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ3My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTMzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9uaWNlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU1NC1cXHRcXHRcXHRcXHQqdmFscCA9IHZhbDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU1NTpcXHRcXHRcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTU2LVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTYzPXN0YXRpYyBpbnQgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU4MS1cXHRcXHRcXHQqdmFscCA9IHZhbDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU4MjpcXHRcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgzLVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0xNzQ9c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyMzg6dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MzEwPXN0YXRpYyBpbnQgaXBfdnNfZXN0X2FkZF9rdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTM2MS1cXHQvKiBSZXF1ZXN0IGt0aHJlYWQgdG8gYmUgc3RhcnRlZCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzozNjI6XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCBmYWxzZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTM2My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz00OTY9aW50IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTYtXFx0XFx0a2QtXFx1MDAzZW5lZWRlZCA9IDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjUxNzpcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTgtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfbXV0ZXgpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTU0MD12b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwNi1cXHRcXHRcXHRrZC1cXHUwMDNlbmVlZGVkID0gMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NjA3OlxcdFxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwOC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ0LjI5MTcxNzA2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzgxMDA0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVHJpZ2dlcmluZyBNZWNoYW5pc21zIGFuZCBLZXkgQWN0b3JzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhpcyBpc3N1ZSBhbmQgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcG90ZW50aWFsIHRyaWdnZXJzOiBgaXBfdnNfYWRkX3NlcnZpY2VgLCBgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldGAsIGBpcHZzX3Byb2NfZXN0X25pY2VgLCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYCwgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbmFycm93IGRvd24gdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGZ1bmN0aW9uczsgdGhlIG9uZXMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGUgaXNzdWUuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgaXBfdnNfYWRkX3NlcnZpY2VgLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAgYXJlIHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJc24ndCBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCB0aGUgd29ya2hvcnNlIGhlcmU/IEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgcHJpbWUgZm9jdXMgc3ltYm9sLiBCdXQgd2FpdC4uLml0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgYHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpYC4gRGFybiBpdCwgdGhhdCBsaW1pdHMgaXRzIHZpc2liaWxpdHkgYW5kIGFwcGxpY2FiaWxpdHkgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGFuYWx5c2lzLiBJdCdzIG5vdCB0aGUgcmlnaHQgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzIHB1cnBvc2UuXG5cbkhtbSwgd2hhdCBhYm91dCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgPyBJcyB0aGF0IG9uZSBzdGF0aWMgdG9vPyBObywgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUuIE9rYXksIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQsIGJ1dCB0aGlzIHNlZW1zIGxpa2UgYSBtdWNoIGJldHRlciBjYW5kaWRhdGUgZm9yIHRoZSBjb3JlIHN5bWJvbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ4LjY3MjcyNDkzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yMzg9dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNTM6aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ4LjcxOTgzNzEzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkxMjY2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBJUFZTIEVzdGltYXRvciBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgSVBWUyBmdW5jdGlvbnMgYW5kIEkgbmVlZCB0byBjbGFyaWZ5IHRoZWlyIHNjb3BlLiBJIGtub3cgZm9yIGEgZmFjdCB0aGF0IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdGVkLiBCdXQgbm93IEknbSB0aGlua2luZywgd2hhdCBhYm91dCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGA/IElzIHRoYXQgYWxzbyBub24tc3RhdGljPyBBbmQgd2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCB2ZXJpZnkgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIEFyZSB0aG9zZSBpbnRlbmRlZCB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCBhcyB3ZWxsPyBJdCdzIGVzc2VudGlhbCBJIGdldCB0aGUgYWNjZXNzIGxldmVscyByaWdodCBmb3IgdGhlIG1vZHVsZSBkZXNpZ24sIG1ha2luZyBzdXJlIHRoYXQgaXQgY29uZm9ybXMgdG8gYXBwcm9wcmlhdGUgY29kaW5nIHN0YW5kYXJkcy4gVG8gYmUgc3VyZSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgIHJpZ2h0IG5vdywgc28gbGV0IG1lIGdvIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY2AgYW5kIGNvbmZpcm0gdGhvc2UgZGVjbGFyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjUyLjAxMTEwNjkxOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTg4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc3RhcnRfZXN0aW1hdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDAzPXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk1LS8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIHN0YXRzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NjppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy00OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1Mi4wNTcyNzExMDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMTg3ODM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IHdvcmtzIGFuZCB3aGF0IGl0J3MgZG9pbmcuIFRoaW5raW5nIGFib3V0IHRoaXMsIHRoZSBrZXkgaGVyZSBpc24ndCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uLCBidXQgcmF0aGVyIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbG9hZCBiYWxhbmNpbmcgc3lzdGVtLiBJIHdhbnQgdG8gbG9vayBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMsIGFuZCBhbnkgYXJlYXMgd2hlcmUgcGVyZm9ybWFuY2UgdHVuaW5nIGNvdWxkIGJlIGJlbmVmaWNpYWwuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSBraW5kcyBvZiBlc3RpbWF0b3JzIG9mdGVuIGhhdmUgc3VidGxlIGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBuZXR3b3JrIGxhdGVuY3ksIGNvbm5lY3Rpb24gY29uY3VycmVuY3ksIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU28sIEnigJlsbCBiZSBwcm9iaW5nIGl0cyBiZWhhdmlvciB1bmRlciB2YXJ5aW5nIGxvYWRzIGFuZCBjb25kaXRpb25zIHRvIHNwb3QgcG90ZW50aWFsIGlzc3VlcyBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjU0Ljk3OTE1Mjk5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTk3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz01Mjc9c3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUzOS0vKiBVbmxpbmsgZXN0aW1hdG9yIGZyb20gY2hhaW4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTQwOnZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTU0MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NzUzPXN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9jYWxjX3BoYXNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTg2Ny1cXHRzdGF0cyA9IGNvbnRhaW5lcl9vZihlc3QsIHN0cnVjdCBpcF92c19zdGF0cywgZXN0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6ODY4OlxcdGlwX3ZzX3N0b3BfZXN0aW1hdG9yKGlwdnMsIHN0YXRzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtODY5LVxcdC8qIFRhc2tzIGFyZSBzdG9wcGVkLCBtb3ZlIHdpdGhvdXQgUkNVIGdyYWNlIHBlcmlvZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1NS4wMjYzNTgzNzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NzY4MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVBWUyBFc3RpbWF0b3IgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIElQVlMgZXN0aW1hdG9yJ3Mgc3RhcnR1cCBhbmQgc2h1dGRvd24uIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgIGltbWVkaWF0ZWx5IHN0YW5kIG91dCBhcyBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cyBmb3IgbXkgYW5hbHlzaXMuIEkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBhbmQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLCBhcyB0aGV5IGxpa2VseSByZWxhdGUgdG8gdGhlIGVzdGltYXRvcidzIGJhY2tncm91bmQgdGFza3MgYW5kIHJlbG9hZHMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoaXMgZnVuY3Rpb25hbGl0eS4gYElQX1ZTYCBpcyBvYnZpb3VzbHkgdGhlIHByaW1hcnkgb25lLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIGFmZmVjdGluZyBpdHMgYmVoYXZpb3IuXG5cblRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZS4gVGhlIHBhdGNoIG5vdGVzIGluZGljYXRlIHRoZSBrZXkgZmlsZSBpcyBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jYC4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGlwX3ZzX2VzdC5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBtaXNzZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoaXMgZXN0aW1hdG9yIGlzIGFjdHVhbGx5IGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1OC43NzQwNDM2ODJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzEzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2VzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE2PWlwX3ZzLW9ianMgOj1cXHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cXHQgICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVxcdFxcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cXHQgICBcXHRcXHQgICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE4OlxcdFxcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xcdFxcdFxcdCAgIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTktXFx0XFx0JChpcF92c19wcm90by1vYmpzLXkpICQoaXBfdnMtZXh0cmFfb2Jqcy15KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1OC44MTkzNjIxMDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NDg5OTUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVBWUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSVBWUyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBtb2R1bGUgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgc28gdGhhdCdzIHRoZSBvbmx5IGNvbmZpZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZSwgYElQX1ZTYCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuLi4gYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgYW5kIGBORVRGSUxURVJgIGlzIHByZXR0eSBzdGFuZGFyZCB0b28sIHNvIEknbGwganVzdCBmb2N1cyBvbiBgSVBfVlNgIGZvciBub3cgYW5kIGFzc3VtZSB0aGUgb3RoZXJzIGFyZSBzZXQuXG5cbk5vdywgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdpbmcuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuLi4gT2theSwgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJIGNhbiB1c2UgdGhhdCB0byBzY29wZSB0aGUgYW5hbHlzaXMgYSBiaXQuIEknbGwgZm9jdXMgb24gYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGFuZCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgYXMgbXkgcHJpbWFyeSBzeW1ib2xzLlxuXG5MZXQgbWUgbG9vayBjbG9zZWx5IGF0IHRoZSBhY3R1YWwgcGF0Y2ggZGlmZiBub3cuIEFoLCBoZXJlIGl0IGlzOlxuXG5gYGBjXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbitcdFx0aWYgKGlwdnMtXHUwMDNlZXN0X2NhbGNfcGhhc2UpIHtcbiBcdFx0XHRpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTtcbitcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH1cbiBgYGBcblxuUmlnaHQsIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgYWRkcyBhIGNoZWNrICppbnNpZGUqIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZC4gTm93LCB0aGUga3RocmVhZCB3aWxsIGV4aXQgZWFybHkgaWYgdGhlIHRocmVhZCBpcyBhc2tlZCB0byBzdG9wIG9yIGlmIElQVlMgaGFzIGJlZW4gZGlzYWJsZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIFRoaXMgY291bGQgcHJldmVudCB0aGUga3RocmVhZCBmcm9tIHJ1bm5pbmcgaW50byBhIHNpdHVhdGlvbiB3aGVyZSBpdCBzaG91bGRuJ3QgYmUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBoYW5nIG9yLCB3b3JzZSwgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gaWYgSVBWUyBpcyBiZWluZyBzaHV0IGRvd24uIFRoaXMgZGVmaW5pdGVseSBuZWVkcyBzb21lIGZ1enppbmcuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIElQVlMgbG9naWMsIHNvIHRoZSBpbXBhY3QgY291bGQgYmUgbm9uLXRyaXZpYWwuXG5cbkknbSB0aGlua2luZyB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBzaW1pbGFyIGlzc3VlLCB3aGljaCBtYWtlcyBpdCB3b3J0aCBpbnZlc3RpZ2F0aW5nIG1vcmUuXG5cbk9rYXksIEkgaGF2ZSBteSByZWFzb25pbmcsIGZvY3VzIHN5bWJvbHMsIGFuZCBjb25maWdzIHNvcnRlZC4gTm93IEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODQsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU1OjA2LjUxNDI2NTE2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzEyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4ndCwgcG90ZW50aWFsbHkgZml4aW5nIGEgaGFuZyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4ndCwgcG90ZW50aWFsbHkgZml4aW5nIGEgaGFuZyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmk6kb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 23:27:33 +0000 UTC FinishedAt: 2026-07-28 23:55:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "9a76645c-7db0-4458-8195-50607803ddc5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_start_estimator", "ip_vs_stop_estimator", "ip_vs_est_kthread_start", "ip_vs_est_reload_start" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4mIzM5O3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNjI5MmExYjQ5ZTVlYTdlMjYwODgxNTU1NGUyMzY2N2RhMmEzMDY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMjM6NTQ6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5pbmRleCBhYjA5ZjUxODI5NTEyLi44NmQyMGYxOWZlMzE3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcbkBAIC0xOTEsOCAmIzQzOzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHR9XG4gXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbiYjNDM7XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gXHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4mIzQzO1x0XHRcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLVx1MDAzZWVuYWJsZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHR3aGlsZSAoMSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N0YXJ0X2VzdGltYXRvciYjMzQ7LAogICAgJiMzNDtpcF92c19zdG9wX2VzdGltYXRvciYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3RfcmVsb2FkX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQgdG8gZXhpdCBlYXJseSBpZiB0aGUga3RocmVhZCBzaG91bGQgc3RvcCBvciBpZiBJUFZTIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVBWUyBsb2dpYyB0aGF0IHByZXZlbnRzIHRoZSBrdGhyZWFkIGZyb20gY29udGludWluZyBleGVjdXRpb24gd2hlbiBpdCBzaG91bGRuJiMzOTt0LCBwb3RlbnRpYWxseSBmaXhpbmcgYSBoYW5nIG9yIHVzZS1hZnRlci1mcmVlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjYyOTJhMWI0OWU1ZWE3ZTI2MDg4MTU1NTRlMjM2NjdkYTJhMzA2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDIzOjU0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCmluZGV4IGFiMDlmNTE4Mjk1MTIuLjg2ZDIwZjE5ZmUzMTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKQEAgLTE5MSw4ICYjNDM7MTkxLDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpCiAJCX0KIAogCQkvKiBrdGhyZWFkIDAgd2lsbCBoYW5kbGUgdGhlIGNhbGMgcGhhc2UgKi8KLQkJaWYgKGlwdnMtJmd0O2VzdF9jYWxjX3BoYXNlKQomIzQzOwkJaWYgKGlwdnMtJmd0O2VzdF9jYWxjX3BoYXNlKSB7CiAJCQlpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTsKJiM0MzsJCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy0mZ3Q7ZW5hYmxlKSkKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAJfQogCiAJd2hpbGUgKDEpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0aW9uIFRocmVhZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHRoZSBgaXBfdnNfZXN0LmNgIGZpbGUgd2l0aGluIHRoZSBgbmV0ZmlsdGVyL2lwdnNgIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBvZiB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIHRocmVhZC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYW4gYWRkZWQgY29uZGl0aW9uYWwgY2hlY2sgd2l0aGluIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBmdW5jdGlvbi4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIHNlZSBpZiB0aGUga2VybmVsIHRocmVhZCBzaG91bGQgdGVybWluYXRlIHVzaW5nIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQsIG1lYW5pbmcgYCFSRUFEX09OQ0UoaXB2cy0mZ3Q7ZW5hYmxlKWAuIElmIGVpdGhlciBvZiB0aG9zZSBjb25kaXRpb25zIGlzIG1ldCDigJMgZWl0aGVyIHRoZSB0aHJlYWQgbmVlZHMgdG8gc3RvcCBvciBJUFZTIGlzIGRpc2FibGVkIOKAkyB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcmV0dXJucyAwLiBUaGF0IG1ha2VzIGl0IGEgbm8tb3AgZnJvbSBteSBwZXJzcGVjdGl2ZS4KClRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybi4gSXQgYWxsb3dzIHRoZSBrZXJuZWwgdGhyZWFkIHRvIGdyYWNlZnVsbHkgZXhpdCBvciBzdG9wIGRvaW5nIGl0cyBlc3RpbWF0aW9uIGR1dGllcyB3aGVuIGluc3RydWN0ZWQsIG9yIGlmIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGdsb2JhbGx5IGRpc2FibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHJldHVybmluZyAwIGluIHRoaXMgY29udGV4dC4gSXMgdGhhdCBhIHN0YW5kYXJkIHJldHVybiB2YWx1ZSBpbmRpY2F0aW5nIGEgc3VjY2Vzc2Z1bCB0ZXJtaW5hdGlvbiBvciBtZXJlbHkgYSBjb25kaXRpb25hbCBzdG9wPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNhbGxlciB0byB1bmRlcnN0YW5kIHRoZSBtZWFuaW5nIG9mIHRoYXQgcmV0dXJuIGNvZGUuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZXN0aW1hdGlvbiB0aHJlYWQgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE1MT1zdGF0aWMgdm9pZCBpcF92c190aWNrX2VzdGltYXRpb24oc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCwgaW50IHJvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMTczLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjE3NDpzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTE3NS17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTI1Mz1pbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI2OC1cdFx0a2QtXHUwMDNlZXN0X3RpbWVyID0gbm93O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI2OTpcdGtkLVx1MDAzZXRhc2sgPSBrdGhyZWFkX2NyZWF0ZShpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQsIGtkLCBcJiMzNDtpcHZzLWU6JWQ6JWRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjcwLVx0XHRcdFx0ICBpcHZzLVx1MDAzZWdlbiwga2QtXHUwMDNlaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJUFZTIEVzdGltYXRpb24gS3RocmVhZCBFbmhhbmNlbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21ldGhpbmcgaW4gdGhlIElQVlMgZXN0aW1hdGlvbiBrdGhyZWFkLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGVuc3VyaW5nIGEgcHJvcGVyIGV4aXQgcGF0aC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgZnVuY3Rpb24uIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIHN0b3AgdGhlIGt0aHJlYWQgd2hlbiBpdCBzaG91bGQgYmUgc3RvcHBlZCwgb3IgbW9yZSBwcmVjaXNlbHksIHdoZW4gaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgZGlzYWJsZWQuIFRoZSB0d28gY29uZGl0aW9ucyBiZWluZyBjaGVja2VkIGFyZSB0aGUgc3RvcCBjb25kaXRpb24gYW5kIHRoZSBgaXB2cy0mZ3Q7ZW5hYmxlYCBmbGFnIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkIGV4dGVybmFsbHkuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZS4gSXQmIzM5O3Mgbm90IGp1c3QgYSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb247IGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc3RhdGUgd2hlcmUgdGhlIGt0aHJlYWQgbWlnaHQgaGFuZyBhcm91bmQgbG9uZ2VyIHRoYW4gaXQgc2hvdWxkLCBwb3RlbnRpYWxseSBjb25zdW1pbmcgcmVzb3VyY2VzIG9yIGNyZWF0aW5nIG90aGVyIHN1YnRsZSBpc3N1ZXMuIFRoaW5raW5nIGJhY2ssIEkgY2FuIHNlZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIElQVlMgc3Vic3lzdGVtIG1pZ2h0IGJlIHNodXQgZG93biBvciByZWNvbmZpZ3VyZWQgYW5kIHdlJiMzOTtkICpkZWZpbml0ZWx5KiB3YW50IHRvIG1ha2Ugc3VyZSB0aGVzZSB0aHJlYWRzIGFyZSBjbGVhbmVkIHVwLiBBIHJvZ3VlIGt0aHJlYWQgbGluZ2VyaW5nIGFyb3VuZCB3b3VsZCBiZSBiYWQgZm9yIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LgoKSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgY29udGV4dCBvZiBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyB3aXRoIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTc0Olx0c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcbiAxNzU6XHR7XG4gMTc2Olx0XHRzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkID0gZGF0YTtcbiAxNzc6XHRcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0ga2QtXHUwMDNlaXB2cztcbiAxNzg6XHRcdGludCByb3cgPSBrZC1cdTAwM2Vlc3Rfcm93O1xuIDE3OTpcdFx0dW5zaWduZWQgbG9uZyBub3c7XG4gMTgwOlx0XHRpbnQgaWQgPSBrZC1cdTAwM2VpZDtcbiAxODE6XHRcdGxvbmcgZ2FwO1xuIDE4MjpcdFxuIDE4MzpcdFx0aWYgKGlkIFx1MDAzZSAwKSB7XG4gMTg0Olx0XHRcdGlmICghaXB2cy1cdTAwM2Vlc3RfY2hhaW5fbWF4KVxuIDE4NTpcdFx0XHRcdHJldHVybiAwO1xuIDE4NjpcdFx0fSBlbHNlIHtcbiAxODc6XHRcdFx0aWYgKCFpcHZzLVx1MDAzZWVzdF9jaGFpbl9tYXgpIHtcbiAxODg6XHRcdFx0XHRpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcbiAxODk6XHRcdFx0XHQvKiBjb21taXQgZXN0X2NhbGNfcGhhc2UgYmVmb3JlIHJlYWRpbmcgZXN0X2dlbmlkICovXG4gMTkwOlx0XHRcdFx0c21wX21iKCk7XG4gMTkxOlx0XHRcdH1cbiAxOTI6XHRcbiAxOTM6XHRcdFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXG4gMTk0Olx0XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gMTk1Olx0XHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4gMTk2Olx0XHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKSlcbiAxOTc6XHRcdFx0XHRcdHJldHVybiAwO1xuIDE5ODpcdFx0XHR9XG4gMTk5Olx0XHR9XG4gMjAwOlx0XG4gMjAxOlx0XHR3aGlsZSAoMSkge1xuIDIwMjpcdFx0XHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaGxpc3RfZW1wdHkoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfdGVtcF9saXN0KSlcbiAyMDM6XHRcdFx0XHRpcF92c19lc3RfZHJhaW5fdGVtcF9saXN0KGlwdnMpO1xuIDIwNDpcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lETEUpO1xuIDIwNTpcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKVxuIDIwNjpcdFx0XHRcdGJyZWFrO1xuIDIwNzpcdFxuIDIwODpcdFx0XHQvKiBiZWZvcmUgZXN0aW1hdGlvbiwgY2hlY2sgaWYgd2Ugc2hvdWxkIHNsZWVwICovXG4gMjA5Olx0XHRcdG5vdyA9IGppZmZpZXM7XG4gMjEwOlx0XHRcdGdhcCA9IGtkLVx1MDAzZWVzdF90aW1lciAtIG5vdztcbiAyMTE6XHRcdFx0aWYgKGdhcCBcdTAwM2UgMCkge1xuIDIxMjpcdFx0XHRcdGlmIChnYXAgXHUwMDNlIElQVlNfRVNUX1RJQ0spIHtcbiAyMTM6XHRcdFx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdyAtIElQVlNfRVNUX1RJQ0s7XG4gMjE0Olx0XHRcdFx0XHRnYXAgPSBJUFZTX0VTVF9USUNLO1xuIDIxNTpcdFx0XHRcdH1cbiAyMTY6XHRcdFx0XHRzY2hlZHVsZV90aW1lb3V0KGdhcCk7XG4gMjE3Olx0XHRcdH0gZWxzZSB7XG4gMjE4Olx0XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIDIxOTpcdFx0XHRcdGlmIChnYXAgXHUwMDNjIC04ICogSVBWU19FU1RfVElDSylcbiAyMjA6XHRcdFx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdztcbiAyMjE6XHRcdFx0fVxuIDIyMjpcdFxuIDIyMzpcdFx0XHRpZiAoa2QtXHUwMDNldGlja19sZW5bcm93XSlcbiAyMjQ6XHRcdFx0XHRpcF92c190aWNrX2VzdGltYXRpb24oa2QsIHJvdyk7XG4gMjI1Olx0XG4gMjI2Olx0XHRcdHJvdyYjNDM7JiM0Mzs7XG4gMjI3Olx0XHRcdGlmIChyb3cgXHUwMDNlPSBJUFZTX0VTVF9OVElDS1MpXG4gMjI4Olx0XHRcdFx0cm93ID0gMDtcbiAyMjk6XHRcdFx0V1JJVEVfT05DRShrZC1cdTAwM2Vlc3Rfcm93LCByb3cpO1xuIDIzMDpcdFx0XHRrZC1cdTAwM2Vlc3RfdGltZXIgJiM0Mzs9IElQVlNfRVNUX1RJQ0s7XG4gMjMxOlx0XHR9XG4gMjMyOlx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gMjMzOlx0XG4gMjM0Olx0XHRyZXR1cm4gMDtcbiAyMzU6XHR9XG4gMjM2Olx0XG4gMjM3Olx0LyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xuIDIzODpcdHZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxuIDIzOTpcdHtcbiAyNDA6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuIDI0MTpcdFxuIDI0MjpcdFx0LyogSWdub3JlIHJlbG9hZHMgYmVmb3JlIGZpcnN0IHNlcnZpY2UgaXMgYWRkZWQgKi9cbiAyNDM6XHRcdGlmICghUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKSlcbiAyNDQ6XHRcdFx0cmV0dXJuO1xuIDI0NTpcdFx0aXBfdnNfZXN0X3N0b3BwZWRfcmVjYWxjKGlwdnMpO1xuIDI0NjpcdFx0LyogQnVtcCB0aGUga3RocmVhZCBjb25maWd1cmF0aW9uIGdlbmlkIGlmIHN0b3BwaW5nIGlzIHJlcXVlc3RlZCAqL1xuIDI0NzpcdFx0aWYgKHJlc3RhcnQpXG4gMjQ4Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfZ2VuaWQpO1xuIDI0OTpcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZpcHZzLVx1MDAzZWVzdF9yZWxvYWRfd29yaywgMCk7XG4gMjUwOlx0fVxuIDI1MTpcdFxuIDI1MjpcdC8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xuIDI1MzpcdGludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbiAyNTQ6XHRcdFx0XHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiAyNTU6XHR7XG4gMjU2Olx0XHR1bnNpZ25lZCBsb25nIG5vdztcbiAyNTc6XHRcdGludCByZXQgPSAwO1xuIDI1ODpcdFx0bG9uZyBnYXA7XG4gMjU5Olx0XG4gMjYwOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbiAyNjE6XHRcbiAyNjI6XHRcdGlmIChrZC1cdTAwM2V0YXNrKVxuIDI2MzpcdFx0XHRnb3RvIG91dDtcbiAyNjQ6XHRcdG5vdyA9IGppZmZpZXM7XG4gMjY1Olx0XHRnYXAgPSBrZC1cdTAwM2Vlc3RfdGltZXIgLSBub3c7XG4gMjY2Olx0XHQvKiBTeW5jIGVzdF90aW1lciBpZiB0YXNrIGlzIHN0YXJ0aW5nIGxhdGVyICovXG4gMjY3Olx0XHRpZiAoYWJzKGdhcCkgXHUwMDNlIDQgKiBJUFZTX0VTVF9USUNLKVxuIDI2ODpcdFx0XHRrZC1cdTAwM2Vlc3RfdGltZXIgPSBub3c7XG4gMjY5Olx0XHRrZC1cdTAwM2V0YXNrID0ga3RocmVhZF9jcmVhdGUoaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkLCBrZCwgXCYjMzQ7aXB2cy1lOiVkOiVkXCYjMzQ7LFxuIDI3MDpcdFx0XHRcdFx0ICBpcHZzLVx1MDAzZWdlbiwga2QtXHUwMDNlaWQpO1xuIDI3MTpcdFx0aWYgKElTX0VSUihrZC1cdTAwM2V0YXNrKSkge1xuIDI3MjpcdFx0XHRyZXQgPSBQVFJfRVJSKGtkLVx1MDAzZXRhc2spO1xuIDI3MzpcdFx0XHRrZC1cdTAwM2V0YXNrID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQVlMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAuIEl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDogd2UmIzM5O3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGV4aXQgdGhhdCB0cmlnZ2VycyBpZiB0aGUga3RocmVhZCBpcyB0b2xkIHRvIHN0b3Agb3IgaWYgSVBWUyBpdHNlbGYgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgZGVzaWduZWQgdG8gcHJldmVudCB0aGUga3RocmVhZCBmcm9tIHJ1bm5pbmcgdW5uZWNlc3NhcmlseSBpbiB0aGVzZSBzdGF0ZXMuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgaXMgYSByZWFzb25hYmxlIGNoYW5nZS4gSXQmIzM5O3MgY2xlYW4gYW5kIGRpcmVjdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZXNvdXJjZSB3YXN0ZSBzY2VuYXJpby4gVGhlIHF1ZXN0aW9uIG5vdyBpczogZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24/IEFic29sdXRlbHksIHllcy4gSVBWUyBpcyBhIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlOyBhbnkgbW9kaWZpY2F0aW9uLCBubyBtYXR0ZXIgaG93IHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgdGhvcm91Z2ggc2NydXRpbnkuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGlzIG5ldyBjb25kaXRpb25hbCBleGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zIG9yIGVkZ2UgY2FzZSBiZWhhdmlvciwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVjZXNzYXJ5IHRvIHByb3Blcmx5IHRlc3QgYW5kIGVuZ2FnZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFjY3VyYXRlbHkgcmVwcmVzZW50cyByZWFsLXdvcmxkIHVzYWdlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgc3lzdGVtJiMzOTtzIHJlcG9ydGluZyB0aGF0IGBJUF9WU2AgaXMgZW5hYmxlZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBoZXJlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnMgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSB0aG9yb3VnaGx5LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGBJUF9WU2AgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBzZXR0aW5ncz8gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgZXZlcnl0aGluZyB3b3JrcyBhcyBpdCBzaG91bGQuIEkgbmVlZCB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Uga2VybmVsIGZlYXR1cmVzIGlzIHBhcmFtb3VudCBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIElQX1ZTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgODpcdFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBJUCBWaXJ0dWFsIFNlcnZlciBzdXBwb3J0IHdpbGwgbGV0IHlvdSBidWlsZCBhIGhpZ2gtcGVyZm9ybWFuY2VcbiAgMTE6XHRcdCAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXNcbiAgMTI6XHRcdCAgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZSBjbHVzdGVyZWQgY29tcHV0ZXJzXG4gIDEzOlx0XHQgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGFcbiAgMTQ6XHRcdCAgc2luZ2xlIElQIGFkZHJlc3MgYW5kIHNjaGVkdWxpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRocmVlIHJlcXVlc3QgZGlzcGF0Y2hpbmcgdGVjaG5pcXVlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXkgYXJlXG4gIDE3Olx0XHQgIHZpcnR1YWwgc2VydmVyIHZpYSBOQVQsIHZpcnR1YWwgc2VydmVyIHZpYSB0dW5uZWxpbmcgYW5kIHZpcnR1YWxcbiAgMTg6XHRcdCAgc2VydmVyIHZpYSBkaXJlY3Qgcm91dGluZy4gVGhlIHNldmVyYWwgc2NoZWR1bGluZyBhbGdvcml0aG1zIGNhblxuICAxOTpcdFx0ICBiZSB1c2VkIHRvIGNob29zZSB3aGljaCBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0ZWQgdG8sXG4gIDIwOlx0XHQgIHRodXMgbG9hZCBiYWxhbmNpbmcgY2FuIGJlIGFjaGlldmVkIGFtb25nIHRoZSBzZXJ2ZXJzLiAgRm9yIG1vcmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgYElQX1ZTYCBEZXBlbmRlbmN5IENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IGhlcmUsIHN0YXJ0aW5nIHdpdGggYElQX1ZTYC4gUmlnaHQsIGBJUF9WU2AgaGFzIHRoaXMgZGVwZW5kZW5jeSBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIOKAkyB0aGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byB6b29tIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBkb2VzIHRoZSBjb3JlIHdvcmsgd2l0aGluIGBJUF9WU2AuIE15IGd1dCB0ZWxscyBtZSB0byB6ZXJvIGluIG9uIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgY2F1c2UgaXQgdG8ga2ljayBpbnRvIGFjdGlvbi4gCgpBaGEsIHRoYXQmIzM5O3MgcmlnaHQsIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgIGlzIGEga2VybmVsIHRocmVhZCwgYSBrdGhyZWFkLiBNZWFuaW5nLCBpdCYjMzk7cyBydW5uaW5nIGFzeW5jaHJvbm91c2x5LCBub3QgZGlyZWN0bHkgaW4gbGluZSB3aXRoIG90aGVyIG5ldHdvcmsgY29kZS4gVGhhdCBhc3luY2hyb25vdXMgbmF0dXJlIGlzIGtleSB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqc3RhcnRpbmcqIHRoYXQgdGhyZWFkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLiBPa2F5LCBzbyBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgIHN0YXJ0cyB0aGUgdGhyZWFkLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IFdoYXQgY2FsbHMgKnRoYXQqIGZ1bmN0aW9uLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgPyBUaGF0JiMzOTtzIHRoZSBsaW5rIEkgbmVlZCB0byBmb3JnZSBpbiBteSBtaW5kIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIgbWVjaGFuaXNtLiBXaGF0IHNldHMgdGhlIHdob2xlIHByb2Nlc3MgaW4gbW90aW9uPyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI0Mz1zdGF0aWMgdm9pZCBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NC1cdFx0XHRcdHN0YXJ0ID0ga2QtXHUwMDNlbmVlZGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4NTpcdFx0XHRpZiAoc3RhcnQgXHUwMDI2XHUwMDI2IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KGlwdnMsIGtkKSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODYtXHRcdFx0XHRyZXBlYXQgPSB0cnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yMzg9dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1Mi0vKiBTdGFydCBrdGhyZWFkIHRhc2sgd2l0aCBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNTM6aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1NC1cdFx0XHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipEZWJ1Z2dpbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IFJlbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAuIEFscmlnaHQsIHRoYXQmIzM5O3MgdGhlICp0YXJnZXQqIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcmAuIFRoZSBjb2RlIGNsZWFybHkgaW5kaWNhdGVzIGl0JiMzOTtzIGEgd29ya3F1ZXVlIGhhbmRsZXIuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3Mgbm90IGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwsIGJ1dCByYXRoZXIgc2NoZWR1bGVkIGZvciBsYXRlciBleGVjdXRpb24uIFJpZ2h0LiBOb3csIHdoZXJlIGlzIHRoaXMgd29yayBpdGVtICpxdWV1ZWQqPyBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBzdWJtaXR0aW5nIHRoaXMgd29yayBpdGVtLiBUaGUgY29kZSByZWZlcmVuY2VzIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YC4gQmluZ28uIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBuZXh0LiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19lc3RfcmVsb2FkX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTcwOT1pcF92c19hZGRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg1LVx0XHQvKiBTdGFydCBlc3RpbWF0aW9uIGZvciBmaXJzdCB0aW1lICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTg4NjpcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg3LVx0XHRtdXRleF91bmxvY2soXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDQzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ3MS1cdGlwdnMtXHUwMDNlZXN0X2NhbGNfcGhhc2UgPSAxO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI0NzI6XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NzMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI1MzM9c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X25pY2UoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU1NC1cdFx0XHRcdCp2YWxwID0gdmFsO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1NTU6XHRcdFx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NTYtXHRcdFx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTYzPXN0YXRpYyBpbnQgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1ODEtXHRcdFx0KnZhbHAgPSB2YWw7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU4MjpcdFx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1ODMtXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MTc0PXN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzNy0vKiBTY2hlZHVsZSBzdG9wL3N0YXJ0IGZvciBrdGhyZWFkIHRhc2tzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjM4OnZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzOS17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTMxMD1zdGF0aWMgaW50IGlwX3ZzX2VzdF9hZGRfa3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzYxLVx0LyogUmVxdWVzdCBrdGhyZWFkIHRvIGJlIHN0YXJ0ZWQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzozNjI6XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIGZhbHNlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0zNjMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTQ5Nj1pbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTYtXHRcdGtkLVx1MDAzZW5lZWRlZCA9IDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTE3Olx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUxOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NTQwPXZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwNi1cdFx0XHRrZC1cdTAwM2VuZWVkZWQgPSAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjYwNzpcdFx0XHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwOC1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJpZ2dlcmluZyBNZWNoYW5pc21zIGFuZCBLZXkgQWN0b3JzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGlzc3VlIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBwb3RlbnRpYWwgdHJpZ2dlcnM6IGBpcF92c19hZGRfc2VydmljZWAsIGBpcHZzX3Byb2NfZXN0X2NwdW1hc2tfc2V0YCwgYGlwdnNfcHJvY19lc3RfbmljZWAsIGBpcHZzX3Byb2NfcnVuX2VzdGltYXRpb25gLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbmFycm93IGRvd24gdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGZ1bmN0aW9uczsgdGhlIG9uZXMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGUgaXNzdWUuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgaXBfdnNfYWRkX3NlcnZpY2VgLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAgYXJlIHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy4KCkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4gSXNuJiMzOTt0IGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgIHRoZSB3b3JraG9yc2UgaGVyZT8gSXQgc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgYSBwcmltZSBmb2N1cyBzeW1ib2wuIEJ1dCB3YWl0Li4uaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgYHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpYC4gRGFybiBpdCwgdGhhdCBsaW1pdHMgaXRzIHZpc2liaWxpdHkgYW5kIGFwcGxpY2FiaWxpdHkgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGFuYWx5c2lzLiBJdCYjMzk7cyBub3QgdGhlIHJpZ2h0IHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgdGhpcyBwdXJwb3NlLgoKSG1tLCB3aGF0IGFib3V0IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGA/IElzIHRoYXQgb25lIHN0YXRpYyB0b28/IE5vLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUuIE9rYXksIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LCBidXQgdGhpcyBzZWVtcyBsaWtlIGEgbXVjaCBiZXR0ZXIgY2FuZGlkYXRlIGZvciB0aGUgY29yZSBzeW1ib2wgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI1MzppbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjU0LVx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBJUFZTIEVzdGltYXRvciBGdW5jdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBJUFZTIGZ1bmN0aW9ucyBhbmQgSSBuZWVkIHRvIGNsYXJpZnkgdGhlaXIgc2NvcGUuIEkga25vdyBmb3IgYSBmYWN0IHRoYXQgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0ZWQuIEJ1dCBub3cgSSYjMzk7bSB0aGlua2luZywgd2hhdCBhYm91dCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGA/IElzIHRoYXQgYWxzbyBub24tc3RhdGljPyBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgdmVyaWZ5IGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLiBBcmUgdGhvc2UgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgYXMgd2VsbD8gSXQmIzM5O3MgZXNzZW50aWFsIEkgZ2V0IHRoZSBhY2Nlc3MgbGV2ZWxzIHJpZ2h0IGZvciB0aGUgbW9kdWxlIGRlc2lnbiwgbWFraW5nIHN1cmUgdGhhdCBpdCBjb25mb3JtcyB0byBhcHByb3ByaWF0ZSBjb2Rpbmcgc3RhbmRhcmRzLiBUbyBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAgcmlnaHQgbm93LCBzbyBsZXQgbWUgZ28gaW50byBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jYCBhbmQgY29uZmlybSB0aG9zZSBkZWNsYXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N0YXJ0X2VzdGltYXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDAzPXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5NS0vKiBTdGFydCBlc3RpbWF0aW9uIGZvciBzdGF0cyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NjppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpcF92c19zdG9wX2VzdGltYXRvcmAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCB3b3JrcyBhbmQgd2hhdCBpdCYjMzk7cyBkb2luZy4gVGhpbmtpbmcgYWJvdXQgdGhpcywgdGhlIGtleSBoZXJlIGlzbiYjMzk7dCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uLCBidXQgcmF0aGVyIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGxvYWQgYmFsYW5jaW5nIHN5c3RlbS4gSSB3YW50IHRvIGxvb2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgYW55IGFyZWFzIHdoZXJlIHBlcmZvcm1hbmNlIHR1bmluZyBjb3VsZCBiZSBiZW5lZmljaWFsLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2Uga2luZHMgb2YgZXN0aW1hdG9ycyBvZnRlbiBoYXZlIHN1YnRsZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgbmV0d29yayBsYXRlbmN5LCBjb25uZWN0aW9uIGNvbmN1cnJlbmN5LCBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFNvLCBJ4oCZbGwgYmUgcHJvYmluZyBpdHMgYmVoYXZpb3IgdW5kZXIgdmFyeWluZyBsb2FkcyBhbmQgY29uZGl0aW9ucyB0byBzcG90IHBvdGVudGlhbCBpc3N1ZXMgZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz01Mjc9c3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MzktLyogVW5saW5rIGVzdGltYXRvciBmcm9tIGNoYWluICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTQwOnZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NzUzPXN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9jYWxjX3BoYXNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy04NjctXHRzdGF0cyA9IGNvbnRhaW5lcl9vZihlc3QsIHN0cnVjdCBpcF92c19zdGF0cywgZXN0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo4Njg6XHRpcF92c19zdG9wX2VzdGltYXRvcihpcHZzLCBzdGF0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtODY5LVx0LyogVGFza3MgYXJlIHN0b3BwZWQsIG1vdmUgd2l0aG91dCBSQ1UgZ3JhY2UgcGVyaW9kICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQVlMgRXN0aW1hdG9yIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIElQVlMgZXN0aW1hdG9yJiMzOTtzIHN0YXJ0dXAgYW5kIHNodXRkb3duLiBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBhbmQgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgYXMgbG9naWNhbCBzdGFydGluZyBwb2ludHMgZm9yIG15IGFuYWx5c2lzLiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgYW5kIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgYXMgdGhleSBsaWtlbHkgcmVsYXRlIHRvIHRoZSBlc3RpbWF0b3ImIzM5O3MgYmFja2dyb3VuZCB0YXNrcyBhbmQgcmVsb2Fkcy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGlzIGZ1bmN0aW9uYWxpdHkuIGBJUF9WU2AgaXMgb2J2aW91c2x5IHRoZSBwcmltYXJ5IG9uZSwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3MgYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4KClRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUuIFRoZSBwYXRjaCBub3RlcyBpbmRpY2F0ZSB0aGUga2V5IGZpbGUgaXMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY2AuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGBpcF92c19lc3QuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbWlzc2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hlbiB0aGlzIGVzdGltYXRvciBpcyBhY3R1YWxseSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2VzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTY9aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxODpcdFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXHRcdFx0ICAgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOS1cdFx0JChpcF92c19wcm90by1vYmpzLXkpICQoaXBfdnMtZXh0cmFfb2Jqcy15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4NAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIElQVlMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgSVBWUyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBtb2R1bGUgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUsIGBJUF9WU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLi4uIGBJTkVUYCBpcyBhbHdheXMgdGhlcmUsIGFuZCBgTkVURklMVEVSYCBpcyBwcmV0dHkgc3RhbmRhcmQgdG9vLCBzbyBJJiMzOTtsbCBqdXN0IGZvY3VzIG9uIGBJUF9WU2AgZm9yIG5vdyBhbmQgYXNzdW1lIHRoZSBvdGhlcnMgYXJlIHNldC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2luZy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuLi4gT2theSwgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJIGNhbiB1c2UgdGhhdCB0byBzY29wZSB0aGUgYW5hbHlzaXMgYSBiaXQuIEkmIzM5O2xsIGZvY3VzIG9uIGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBhbmQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGFzIG15IHByaW1hcnkgc3ltYm9scy4KCkxldCBtZSBsb29rIGNsb3NlbHkgYXQgdGhlIGFjdHVhbCBwYXRjaCBkaWZmIG5vdy4gQWgsIGhlcmUgaXQgaXM6CgpgYGBjCiAJCS8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqLwotCQlpZiAoaXB2cy0mZ3Q7ZXN0X2NhbGNfcGhhc2UpCiYjNDM7CQlpZiAoaXB2cy0mZ3Q7ZXN0X2NhbGNfcGhhc2UpIHsKIAkJCWlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpOwomIzQzOwkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpKQomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAl9CiBgYGAKClJpZ2h0LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFkZHMgYSBjaGVjayAqaW5zaWRlKiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQuIE5vdywgdGhlIGt0aHJlYWQgd2lsbCBleGl0IGVhcmx5IGlmIHRoZSB0aHJlYWQgaXMgYXNrZWQgdG8gc3RvcCBvciBpZiBJUFZTIGhhcyBiZWVuIGRpc2FibGVkLiBUaGlzIGlzIHNpZ25pZmljYW50LiBUaGlzIGNvdWxkIHByZXZlbnQgdGhlIGt0aHJlYWQgZnJvbSBydW5uaW5nIGludG8gYSBzaXR1YXRpb24gd2hlcmUgaXQgc2hvdWxkbiYjMzk7dCBiZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGhhbmcgb3IsIHdvcnNlLCBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiBpZiBJUFZTIGlzIGJlaW5nIHNodXQgZG93bi4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIHNvbWUgZnV6emluZy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIElQVlMgbG9naWMsIHNvIHRoZSBpbXBhY3QgY291bGQgYmUgbm9uLXRyaXZpYWwuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHNpbWlsYXIgaXNzdWUsIHdoaWNoIG1ha2VzIGl0IHdvcnRoIGludmVzdGlnYXRpbmcgbW9yZS4KCk9rYXksIEkgaGF2ZSBteSByZWFzb25pbmcsIGZvY3VzIHN5bWJvbHMsIGFuZCBjb25maWdzIHNvcnRlZC4gTm93IEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4mIzM5O3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4mIzM5O3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyMS44MzIxNTE5MjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2ODg0MTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4ndCwgcG90ZW50aWFsbHkgZml4aW5nIGEgaGFuZyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjM6NTQ6MjEuODMyMTU2MzI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY5NTMzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNjI5MmExYjQ5ZTVlYTdlMjYwODgxNTU1NGUyMzY2N2RhMmEzMDY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDIzOjU0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xcbmluZGV4IGFiMDlmNTE4Mjk1MTIuLjg2ZDIwZjE5ZmUzMTcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXFxuQEAgLTE5MSw4ICsxOTEsMTEgQEAgc3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXFxuLVxcdFxcdGlmIChpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSlcXG4rXFx0XFx0aWYgKGlwdnMtXFx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XFxuIFxcdFxcdFxcdGlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpO1xcbitcXHRcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cXHUwMDNlZW5hYmxlKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0d2hpbGUgKDEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjM6NTQ6MjIuMzAwMjE0Mjc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQzMDA3Njg4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zdGFydF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQgdG8gZXhpdCBlYXJseSBpZiB0aGUga3RocmVhZCBzaG91bGQgc3RvcCBvciBpZiBJUFZTIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVBWUyBsb2dpYyB0aGF0IHByZXZlbnRzIHRoZSBrdGhyZWFkIGZyb20gY29udGludWluZyBleGVjdXRpb24gd2hlbiBpdCBzaG91bGRuJ3QsIHBvdGVudGlhbGx5IGZpeGluZyBhIGhhbmcgb3IgdXNlLWFmdGVyLWZyZWUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI2MjkyYTFiNDllNWVhN2UyNjA4ODE1NTU0ZTIzNjY3ZGEyYTMwNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMzo1NDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xuaW5kZXggYWIwOWY1MTgyOTUxMi4uODZkMjBmMTlmZTMxNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5AQCAtMTkxLDggKzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHR9XG4gXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbitcdFx0aWYgKGlwdnMtXHUwMDNlZXN0X2NhbGNfcGhhc2UpIHtcbiBcdFx0XHRpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTtcbitcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHdoaWxlICgxKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyMi4zMDAyMTY1MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0NDMzMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0aW9uIFRocmVhZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgdGhlIGBpcF92c19lc3QuY2AgZmlsZSB3aXRoaW4gdGhlIGBuZXRmaWx0ZXIvaXB2c2AgZGlyZWN0b3J5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHdoYXQncyBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhlIElQVlMgZXN0aW1hdGlvbiB0aHJlYWQuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIGFkZGVkIGNvbmRpdGlvbmFsIGNoZWNrIHdpdGhpbiB0aGUgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgZnVuY3Rpb24uXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIHNlZSBpZiB0aGUga2VybmVsIHRocmVhZCBzaG91bGQgdGVybWluYXRlIHVzaW5nIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQsIG1lYW5pbmcgYCFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpYC4gSWYgZWl0aGVyIG9mIHRob3NlIGNvbmRpdGlvbnMgaXMgbWV0IOKAkyBlaXRoZXIgdGhlIHRocmVhZCBuZWVkcyB0byBzdG9wIG9yIElQVlMgaXMgZGlzYWJsZWQg4oCTIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDAuIFRoYXQgbWFrZXMgaXQgYSBuby1vcCBmcm9tIG15IHBlcnNwZWN0aXZlLlxuXG5UaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4uIEl0IGFsbG93cyB0aGUga2VybmVsIHRocmVhZCB0byBncmFjZWZ1bGx5IGV4aXQgb3Igc3RvcCBkb2luZyBpdHMgZXN0aW1hdGlvbiBkdXRpZXMgd2hlbiBpbnN0cnVjdGVkLCBvciBpZiB0aGUgZnVuY3Rpb25hbGl0eSBpcyBnbG9iYWxseSBkaXNhYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZXR1cm5pbmcgMCBpbiB0aGlzIGNvbnRleHQuIElzIHRoYXQgYSBzdGFuZGFyZCByZXR1cm4gdmFsdWUgaW5kaWNhdGluZyBhIHN1Y2Nlc3NmdWwgdGVybWluYXRpb24gb3IgbWVyZWx5IGEgY29uZGl0aW9uYWwgc3RvcD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNhbGxlciB0byB1bmRlcnN0YW5kIHRoZSBtZWFuaW5nIG9mIHRoYXQgcmV0dXJuIGNvZGUuIExldCdzIHNlZSBob3cgdGhhdCBlc3RpbWF0aW9uIHRocmVhZCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyNS45MDQ2NTMwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQzMDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0xNTE9c3RhdGljIHZvaWQgaXBfdnNfdGlja19lc3RpbWF0aW9uKHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QsIGludCByb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMTczLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoxNzQ6c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMTc1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yNTM9aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI2OC1cXHRcXHRrZC1cXHUwMDNlZXN0X3RpbWVyID0gbm93O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNjk6XFx0a2QtXFx1MDAzZXRhc2sgPSBrdGhyZWFkX2NyZWF0ZShpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQsIGtkLCBcXFwiaXB2cy1lOiVkOiVkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjcwLVxcdFxcdFxcdFxcdCAgaXB2cy1cXHUwMDNlZ2VuLCBrZC1cXHUwMDNlaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDoyNS45NTMwODg0MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcwODQwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJUFZTIEVzdGltYXRpb24gS3RocmVhZCBFbmhhbmNlbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgSVBWUyBlc3RpbWF0aW9uIGt0aHJlYWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZW5zdXJpbmcgYSBwcm9wZXIgZXhpdCBwYXRoLiBNeSBpbml0aWFsIHJlYWQgaXMgdGhhdCB0aGUgY29yZSBjaGFuZ2UgaXMgYWRkaW5nIGEgY2hlY2sgd2l0aGluIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBmdW5jdGlvbi4gVGhlIGludGVudCBpcyBjbGVhcjogdG8gc3RvcCB0aGUga3RocmVhZCB3aGVuIGl0IHNob3VsZCBiZSBzdG9wcGVkLCBvciBtb3JlIHByZWNpc2VseSwgd2hlbiBpdCdzIHN1cHBvc2VkIHRvIGJlIGRpc2FibGVkLiBUaGUgdHdvIGNvbmRpdGlvbnMgYmVpbmcgY2hlY2tlZCBhcmUgdGhlIHN0b3AgY29uZGl0aW9uIGFuZCB0aGUgYGlwdnMtXHUwMDNlZW5hYmxlYCBmbGFnIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkIGV4dGVybmFsbHkuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLiBJdCdzIG5vdCBqdXN0IGEgcmVmYWN0b3Jpbmcgb3Igb3B0aW1pemF0aW9uOyBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc3RhdGUgd2hlcmUgdGhlIGt0aHJlYWQgbWlnaHQgaGFuZyBhcm91bmQgbG9uZ2VyIHRoYW4gaXQgc2hvdWxkLCBwb3RlbnRpYWxseSBjb25zdW1pbmcgcmVzb3VyY2VzIG9yIGNyZWF0aW5nIG90aGVyIHN1YnRsZSBpc3N1ZXMuIFRoaW5raW5nIGJhY2ssIEkgY2FuIHNlZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIElQVlMgc3Vic3lzdGVtIG1pZ2h0IGJlIHNodXQgZG93biBvciByZWNvbmZpZ3VyZWQgYW5kIHdlJ2QgKmRlZmluaXRlbHkqIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIHRocmVhZHMgYXJlIGNsZWFuZWQgdXAuIEEgcm9ndWUga3RocmVhZCBsaW5nZXJpbmcgYXJvdW5kIHdvdWxkIGJlIGJhZCBmb3Igb3ZlcmFsbCBzeXN0ZW0gcmVsaWFiaWxpdHkuXG5cbkhvbGQgb24sIGxldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIGNvbnRleHQgb2YgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjMwLjEyMzkzMjc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc0OlxcdHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXFxuIDE3NTpcXHR7XFxuIDE3NjpcXHRcXHRzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkID0gZGF0YTtcXG4gMTc3OlxcdFxcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0ga2QtXFx1MDAzZWlwdnM7XFxuIDE3ODpcXHRcXHRpbnQgcm93ID0ga2QtXFx1MDAzZWVzdF9yb3c7XFxuIDE3OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5vdztcXG4gMTgwOlxcdFxcdGludCBpZCA9IGtkLVxcdTAwM2VpZDtcXG4gMTgxOlxcdFxcdGxvbmcgZ2FwO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRpZiAoaWQgXFx1MDAzZSAwKSB7XFxuIDE4NDpcXHRcXHRcXHRpZiAoIWlwdnMtXFx1MDAzZWVzdF9jaGFpbl9tYXgpXFxuIDE4NTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTg2OlxcdFxcdH0gZWxzZSB7XFxuIDE4NzpcXHRcXHRcXHRpZiAoIWlwdnMtXFx1MDAzZWVzdF9jaGFpbl9tYXgpIHtcXG4gMTg4OlxcdFxcdFxcdFxcdGlwdnMtXFx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcXG4gMTg5OlxcdFxcdFxcdFxcdC8qIGNvbW1pdCBlc3RfY2FsY19waGFzZSBiZWZvcmUgcmVhZGluZyBlc3RfZ2VuaWQgKi9cXG4gMTkwOlxcdFxcdFxcdFxcdHNtcF9tYigpO1xcbiAxOTE6XFx0XFx0XFx0fVxcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHRcXHQvKiBrdGhyZWFkIDAgd2lsbCBoYW5kbGUgdGhlIGNhbGMgcGhhc2UgKi9cXG4gMTk0OlxcdFxcdFxcdGlmIChpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSkge1xcbiAxOTU6XFx0XFx0XFx0XFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XFxuIDE5NjpcXHRcXHRcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cXHUwMDNlZW5hYmxlKSlcXG4gMTk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxOTg6XFx0XFx0XFx0fVxcbiAxOTk6XFx0XFx0fVxcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHR3aGlsZSAoMSkge1xcbiAyMDI6XFx0XFx0XFx0aWYgKCFpZCBcXHUwMDI2XFx1MDAyNiAhaGxpc3RfZW1wdHkoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF90ZW1wX2xpc3QpKVxcbiAyMDM6XFx0XFx0XFx0XFx0aXBfdnNfZXN0X2RyYWluX3RlbXBfbGlzdChpcHZzKTtcXG4gMjA0OlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSURMRSk7XFxuIDIwNTpcXHRcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKVxcbiAyMDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdFxcdC8qIGJlZm9yZSBlc3RpbWF0aW9uLCBjaGVjayBpZiB3ZSBzaG91bGQgc2xlZXAgKi9cXG4gMjA5OlxcdFxcdFxcdG5vdyA9IGppZmZpZXM7XFxuIDIxMDpcXHRcXHRcXHRnYXAgPSBrZC1cXHUwMDNlZXN0X3RpbWVyIC0gbm93O1xcbiAyMTE6XFx0XFx0XFx0aWYgKGdhcCBcXHUwMDNlIDApIHtcXG4gMjEyOlxcdFxcdFxcdFxcdGlmIChnYXAgXFx1MDAzZSBJUFZTX0VTVF9USUNLKSB7XFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRrZC1cXHUwMDNlZXN0X3RpbWVyID0gbm93IC0gSVBWU19FU1RfVElDSztcXG4gMjE0OlxcdFxcdFxcdFxcdFxcdGdhcCA9IElQVlNfRVNUX1RJQ0s7XFxuIDIxNTpcXHRcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXHRcXHRcXHRzY2hlZHVsZV90aW1lb3V0KGdhcCk7XFxuIDIxNzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMTg6XFx0XFx0XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiAyMTk6XFx0XFx0XFx0XFx0aWYgKGdhcCBcXHUwMDNjIC04ICogSVBWU19FU1RfVElDSylcXG4gMjIwOlxcdFxcdFxcdFxcdFxcdGtkLVxcdTAwM2Vlc3RfdGltZXIgPSBub3c7XFxuIDIyMTpcXHRcXHRcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdFxcdGlmIChrZC1cXHUwMDNldGlja19sZW5bcm93XSlcXG4gMjI0OlxcdFxcdFxcdFxcdGlwX3ZzX3RpY2tfZXN0aW1hdGlvbihrZCwgcm93KTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0XFx0cm93Kys7XFxuIDIyNzpcXHRcXHRcXHRpZiAocm93IFxcdTAwM2U9IElQVlNfRVNUX05USUNLUylcXG4gMjI4OlxcdFxcdFxcdFxcdHJvdyA9IDA7XFxuIDIyOTpcXHRcXHRcXHRXUklURV9PTkNFKGtkLVxcdTAwM2Vlc3Rfcm93LCByb3cpO1xcbiAyMzA6XFx0XFx0XFx0a2QtXFx1MDAzZWVzdF90aW1lciArPSBJUFZTX0VTVF9USUNLO1xcbiAyMzE6XFx0XFx0fVxcbiAyMzI6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjM1OlxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0LyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xcbiAyMzg6XFx0dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxuIDIzOTpcXHR7XFxuIDI0MDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfbXV0ZXgpO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHQvKiBJZ25vcmUgcmVsb2FkcyBiZWZvcmUgZmlyc3Qgc2VydmljZSBpcyBhZGRlZCAqL1xcbiAyNDM6XFx0XFx0aWYgKCFSRUFEX09OQ0UoaXB2cy1cXHUwMDNlZW5hYmxlKSlcXG4gMjQ0OlxcdFxcdFxcdHJldHVybjtcXG4gMjQ1OlxcdFxcdGlwX3ZzX2VzdF9zdG9wcGVkX3JlY2FsYyhpcHZzKTtcXG4gMjQ2OlxcdFxcdC8qIEJ1bXAgdGhlIGt0aHJlYWQgY29uZmlndXJhdGlvbiBnZW5pZCBpZiBzdG9wcGluZyBpcyByZXF1ZXN0ZWQgKi9cXG4gMjQ3OlxcdFxcdGlmIChyZXN0YXJ0KVxcbiAyNDg6XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X2dlbmlkKTtcXG4gMjQ5OlxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yaywgMCk7XFxuIDI1MDpcXHR9XFxuIDI1MTpcXHRcXG4gMjUyOlxcdC8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xcbiAyNTM6XFx0aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbiAyNTQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuIDI1NTpcXHR7XFxuIDI1NjpcXHRcXHR1bnNpZ25lZCBsb25nIG5vdztcXG4gMjU3OlxcdFxcdGludCByZXQgPSAwO1xcbiAyNTg6XFx0XFx0bG9uZyBnYXA7XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdGlmIChrZC1cXHUwMDNldGFzaylcXG4gMjYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNjQ6XFx0XFx0bm93ID0gamlmZmllcztcXG4gMjY1OlxcdFxcdGdhcCA9IGtkLVxcdTAwM2Vlc3RfdGltZXIgLSBub3c7XFxuIDI2NjpcXHRcXHQvKiBTeW5jIGVzdF90aW1lciBpZiB0YXNrIGlzIHN0YXJ0aW5nIGxhdGVyICovXFxuIDI2NzpcXHRcXHRpZiAoYWJzKGdhcCkgXFx1MDAzZSA0ICogSVBWU19FU1RfVElDSylcXG4gMjY4OlxcdFxcdFxcdGtkLVxcdTAwM2Vlc3RfdGltZXIgPSBub3c7XFxuIDI2OTpcXHRcXHRrZC1cXHUwMDNldGFzayA9IGt0aHJlYWRfY3JlYXRlKGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCwga2QsIFxcXCJpcHZzLWU6JWQ6JWRcXFwiLFxcbiAyNzA6XFx0XFx0XFx0XFx0XFx0ICBpcHZzLVxcdTAwM2VnZW4sIGtkLVxcdTAwM2VpZCk7XFxuIDI3MTpcXHRcXHRpZiAoSVNfRVJSKGtkLVxcdTAwM2V0YXNrKSkge1xcbiAyNzI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihrZC1cXHUwMDNldGFzayk7XFxuIDI3MzpcXHRcXHRcXHRrZC1cXHUwMDNldGFzayA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjMwLjEyNDA1MTAyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDMxNjc1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBWUyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgd2l0aGluIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZDogd2UncmUgYWRkaW5nIGEgY29uZGl0aW9uYWwgZXhpdCB0aGF0IHRyaWdnZXJzIGlmIHRoZSBrdGhyZWFkIGlzIHRvbGQgdG8gc3RvcCBvciBpZiBJUFZTIGl0c2VsZiBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBkZXNpZ25lZCB0byBwcmV2ZW50IHRoZSBrdGhyZWFkIGZyb20gcnVubmluZyB1bm5lY2Vzc2FyaWx5IGluIHRoZXNlIHN0YXRlcy5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGlzIGlzIGEgcmVhc29uYWJsZSBjaGFuZ2UuIEl0J3MgY2xlYW4gYW5kIGRpcmVjdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZXNvdXJjZSB3YXN0ZSBzY2VuYXJpby4gVGhlIHF1ZXN0aW9uIG5vdyBpczogZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24/IEFic29sdXRlbHksIHllcy4gSVBWUyBpcyBhIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlOyBhbnkgbW9kaWZpY2F0aW9uLCBubyBtYXR0ZXIgaG93IHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgdGhvcm91Z2ggc2NydXRpbnkuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGlzIG5ldyBjb25kaXRpb25hbCBleGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lY2Vzc2FyeSB0byBwcm9wZXJseSB0ZXN0IGFuZCBlbmdhZ2UgdGhpcyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhY2N1cmF0ZWx5IHJlcHJlc2VudHMgcmVhbC13b3JsZCB1c2FnZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDozMy43MjcyMjM0NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MDQ0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjMzLjc3MzYzMzYzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzY1NzEwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MgcmVwb3J0aW5nIHRoYXQgYElQX1ZTYCBpcyBlbmFibGVkLCBhbmQgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaGVyZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnMgcHVsbGluZyB1cCB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSB0aG9yb3VnaGx5LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgYElQX1ZTYCBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zPyBBcmUgdGhlcmUgYW55IGNvbmZsaWN0aW5nIHNldHRpbmdzPyBLbm93aW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byBlbnN1cmluZyBldmVyeXRoaW5nIHdvcmtzIGFzIGl0IHNob3VsZC4gSSBuZWVkIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBjb25maWd1cmF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBrZXJuZWwgZmVhdHVyZXMgaXMgcGFyYW1vdW50IGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDozNi44MTAyMDgxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBJUF9WU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZVxcbiAgMTE6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciBiYXNlZCBvbiBjbHVzdGVyIG9mIHR3byBvciBtb3JlIHJlYWwgc2VydmVycy4gVGhpc1xcbiAgMTI6XFx0XFx0ICBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlIGNsdXN0ZXJlZCBjb21wdXRlcnNcXG4gIDEzOlxcdFxcdCAgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmNlcHRpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYVxcbiAgMTQ6XFx0XFx0ICBzaW5nbGUgSVAgYWRkcmVzcyBhbmQgc2NoZWR1bGluZyB0aGVtIHRvIHJlYWwgc2VydmVycy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxcbiAgMTc6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXFxuICAxODpcXHRcXHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cXG4gIDE5OlxcdFxcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxcbiAgMjA6XFx0XFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjM2LjgxMDI4MTAwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk2ODA2MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlbHZpbmcgaW50byB0aGUgYElQX1ZTYCBEZXBlbmRlbmN5IENoYWluKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgZmxvdyBoZXJlLCBzdGFydGluZyB3aXRoIGBJUF9WU2AuIFJpZ2h0LCBgSVBfVlNgIGhhcyB0aGlzIGRlcGVuZGVuY3kgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCDigJMgdGhhdCdzIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byB6b29tIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBkb2VzIHRoZSBjb3JlIHdvcmsgd2l0aGluIGBJUF9WU2AuIE15IGd1dCB0ZWxscyBtZSB0byB6ZXJvIGluIG9uIHRoZSBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgY2F1c2UgaXQgdG8ga2ljayBpbnRvIGFjdGlvbi4gXG5cbkFoYSwgdGhhdCdzIHJpZ2h0LCBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCBpcyBhIGtlcm5lbCB0aHJlYWQsIGEga3RocmVhZC4gTWVhbmluZywgaXQncyBydW5uaW5nIGFzeW5jaHJvbm91c2x5LCBub3QgZGlyZWN0bHkgaW4gbGluZSB3aXRoIG90aGVyIG5ldHdvcmsgY29kZS4gVGhhdCBhc3luY2hyb25vdXMgbmF0dXJlIGlzIGtleSB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpzdGFydGluZyogdGhhdCB0aHJlYWQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIHBvaW50aW5nIG1lIHRvd2FyZCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLiBPa2F5LCBzbyBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgIHN0YXJ0cyB0aGUgdGhyZWFkLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogV2hhdCBjYWxscyAqdGhhdCogZnVuY3Rpb24sIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGA/IFRoYXQncyB0aGUgbGluayBJIG5lZWQgdG8gZm9yZ2UgaW4gbXkgbWluZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIG1lY2hhbmlzbS4gV2hhdCBzZXRzIHRoZSB3aG9sZSBwcm9jZXNzIGluIG1vdGlvbj8gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo0MC45MDcwOTEwNDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzc5NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI0Mz1zdGF0aWMgdm9pZCBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0LVxcdFxcdFxcdFxcdHN0YXJ0ID0ga2QtXFx1MDAzZW5lZWRlZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mjg1OlxcdFxcdFxcdGlmIChzdGFydCBcXHUwMDI2XFx1MDAyNiBpcF92c19lc3Rfa3RocmVhZF9zdGFydChpcHZzLCBrZCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODYtXFx0XFx0XFx0XFx0cmVwZWF0ID0gdHJ1ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yMzg9dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNTM6aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQwLjk1NzQ5NDYxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4MjgzMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqRGVidWdnaW5nIHRoZSBJUFZTIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBSZWxvYWQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCdzIGNhbGxlZCBieSBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLiBBbHJpZ2h0LCB0aGF0J3MgdGhlICp0YXJnZXQqIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcmAuIFRoZSBjb2RlIGNsZWFybHkgaW5kaWNhdGVzIGl0J3MgYSB3b3JrcXVldWUgaGFuZGxlci4gVGhhdCB0ZWxscyBtZSBpdCdzIG5vdCBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsLCBidXQgcmF0aGVyIHNjaGVkdWxlZCBmb3IgbGF0ZXIgZXhlY3V0aW9uLiBSaWdodC4gTm93LCB3aGVyZSBpcyB0aGlzIHdvcmsgaXRlbSAqcXVldWVkKj8gSSBuZWVkIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHRoYXQncyBzdWJtaXR0aW5nIHRoaXMgd29yayBpdGVtLiBUaGUgY29kZSByZWZlcmVuY2VzIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YC4gQmluZ28uIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQuIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ0LjI0NTc4Mjc0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5Mjc4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNzA5PWlwX3ZzX2FkZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyX2tlcm4gKnUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4NS1cXHRcXHQvKiBTdGFydCBlc3RpbWF0aW9uIGZvciBmaXJzdCB0aW1lICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE4ODY6XFx0XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4Ny1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ0Mz1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19zZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ3MS1cXHRpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSA9IDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI0NzI6XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ3My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTMzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9uaWNlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU1NC1cXHRcXHRcXHRcXHQqdmFscCA9IHZhbDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU1NTpcXHRcXHRcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTU2LVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTYzPXN0YXRpYyBpbnQgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU4MS1cXHRcXHRcXHQqdmFscCA9IHZhbDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU4MjpcXHRcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgzLVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0xNzQ9c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyMzg6dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MzEwPXN0YXRpYyBpbnQgaXBfdnNfZXN0X2FkZF9rdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTM2MS1cXHQvKiBSZXF1ZXN0IGt0aHJlYWQgdG8gYmUgc3RhcnRlZCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzozNjI6XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCBmYWxzZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTM2My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz00OTY9aW50IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTYtXFx0XFx0a2QtXFx1MDAzZW5lZWRlZCA9IDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjUxNzpcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTgtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfbXV0ZXgpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTU0MD12b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwNi1cXHRcXHRcXHRrZC1cXHUwMDNlbmVlZGVkID0gMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NjA3OlxcdFxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTYwOC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ0LjI5MTcxNzA2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzgxMDA0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVHJpZ2dlcmluZyBNZWNoYW5pc21zIGFuZCBLZXkgQWN0b3JzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhpcyBpc3N1ZSBhbmQgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcG90ZW50aWFsIHRyaWdnZXJzOiBgaXBfdnNfYWRkX3NlcnZpY2VgLCBgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldGAsIGBpcHZzX3Byb2NfZXN0X25pY2VgLCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYCwgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbmFycm93IGRvd24gdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGZ1bmN0aW9uczsgdGhlIG9uZXMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGUgaXNzdWUuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgaXBfdnNfYWRkX3NlcnZpY2VgLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAgYXJlIHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJc24ndCBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCB0aGUgd29ya2hvcnNlIGhlcmU/IEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgcHJpbWUgZm9jdXMgc3ltYm9sLiBCdXQgd2FpdC4uLml0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgYHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpYC4gRGFybiBpdCwgdGhhdCBsaW1pdHMgaXRzIHZpc2liaWxpdHkgYW5kIGFwcGxpY2FiaWxpdHkgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGFuYWx5c2lzLiBJdCdzIG5vdCB0aGUgcmlnaHQgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzIHB1cnBvc2UuXG5cbkhtbSwgd2hhdCBhYm91dCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgPyBJcyB0aGF0IG9uZSBzdGF0aWMgdG9vPyBObywgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUuIE9rYXksIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQsIGJ1dCB0aGlzIHNlZW1zIGxpa2UgYSBtdWNoIGJldHRlciBjYW5kaWRhdGUgZm9yIHRoZSBjb3JlIHN5bWJvbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ4LjY3MjcyNDkzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0yMzg9dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyNTM6aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjQ4LjcxOTgzNzEzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkxMjY2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBJUFZTIEVzdGltYXRvciBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgSVBWUyBmdW5jdGlvbnMgYW5kIEkgbmVlZCB0byBjbGFyaWZ5IHRoZWlyIHNjb3BlLiBJIGtub3cgZm9yIGEgZmFjdCB0aGF0IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdGVkLiBCdXQgbm93IEknbSB0aGlua2luZywgd2hhdCBhYm91dCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGA/IElzIHRoYXQgYWxzbyBub24tc3RhdGljPyBBbmQgd2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCB2ZXJpZnkgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIEFyZSB0aG9zZSBpbnRlbmRlZCB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCBhcyB3ZWxsPyBJdCdzIGVzc2VudGlhbCBJIGdldCB0aGUgYWNjZXNzIGxldmVscyByaWdodCBmb3IgdGhlIG1vZHVsZSBkZXNpZ24sIG1ha2luZyBzdXJlIHRoYXQgaXQgY29uZm9ybXMgdG8gYXBwcm9wcmlhdGUgY29kaW5nIHN0YW5kYXJkcy4gVG8gYmUgc3VyZSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgIHJpZ2h0IG5vdywgc28gbGV0IG1lIGdvIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY2AgYW5kIGNvbmZpcm0gdGhvc2UgZGVjbGFyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjUyLjAxMTEwNjkxOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTg4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc3RhcnRfZXN0aW1hdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDAzPXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk1LS8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIHN0YXRzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NjppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy00OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1Mi4wNTcyNzExMDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMTg3ODM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IHdvcmtzIGFuZCB3aGF0IGl0J3MgZG9pbmcuIFRoaW5raW5nIGFib3V0IHRoaXMsIHRoZSBrZXkgaGVyZSBpc24ndCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uLCBidXQgcmF0aGVyIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbG9hZCBiYWxhbmNpbmcgc3lzdGVtLiBJIHdhbnQgdG8gbG9vayBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMsIGFuZCBhbnkgYXJlYXMgd2hlcmUgcGVyZm9ybWFuY2UgdHVuaW5nIGNvdWxkIGJlIGJlbmVmaWNpYWwuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSBraW5kcyBvZiBlc3RpbWF0b3JzIG9mdGVuIGhhdmUgc3VidGxlIGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBuZXR3b3JrIGxhdGVuY3ksIGNvbm5lY3Rpb24gY29uY3VycmVuY3ksIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU28sIEnigJlsbCBiZSBwcm9iaW5nIGl0cyBiZWhhdmlvciB1bmRlciB2YXJ5aW5nIGxvYWRzIGFuZCBjb25kaXRpb25zIHRvIHNwb3QgcG90ZW50aWFsIGlzc3VlcyBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU0OjU0Ljk3OTE1Mjk5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTk3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz01Mjc9c3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUzOS0vKiBVbmxpbmsgZXN0aW1hdG9yIGZyb20gY2hhaW4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTQwOnZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTU0MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NzUzPXN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9jYWxjX3BoYXNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTg2Ny1cXHRzdGF0cyA9IGNvbnRhaW5lcl9vZihlc3QsIHN0cnVjdCBpcF92c19zdGF0cywgZXN0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6ODY4OlxcdGlwX3ZzX3N0b3BfZXN0aW1hdG9yKGlwdnMsIHN0YXRzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtODY5LVxcdC8qIFRhc2tzIGFyZSBzdG9wcGVkLCBtb3ZlIHdpdGhvdXQgUkNVIGdyYWNlIHBlcmlvZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1NS4wMjYzNTgzNzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NzY4MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVBWUyBFc3RpbWF0b3IgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIElQVlMgZXN0aW1hdG9yJ3Mgc3RhcnR1cCBhbmQgc2h1dGRvd24uIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgIGltbWVkaWF0ZWx5IHN0YW5kIG91dCBhcyBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cyBmb3IgbXkgYW5hbHlzaXMuIEkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBhbmQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLCBhcyB0aGV5IGxpa2VseSByZWxhdGUgdG8gdGhlIGVzdGltYXRvcidzIGJhY2tncm91bmQgdGFza3MgYW5kIHJlbG9hZHMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoaXMgZnVuY3Rpb25hbGl0eS4gYElQX1ZTYCBpcyBvYnZpb3VzbHkgdGhlIHByaW1hcnkgb25lLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIGFmZmVjdGluZyBpdHMgYmVoYXZpb3IuXG5cblRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZS4gVGhlIHBhdGNoIG5vdGVzIGluZGljYXRlIHRoZSBrZXkgZmlsZSBpcyBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jYC4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGlwX3ZzX2VzdC5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBtaXNzZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoaXMgZXN0aW1hdG9yIGlzIGFjdHVhbGx5IGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1OC43NzQwNDM2ODJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzEzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2VzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE2PWlwX3ZzLW9ianMgOj1cXHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cXHQgICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVxcdFxcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cXHQgICBcXHRcXHQgICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE4OlxcdFxcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xcdFxcdFxcdCAgIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTktXFx0XFx0JChpcF92c19wcm90by1vYmpzLXkpICQoaXBfdnMtZXh0cmFfb2Jqcy15KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMzo1NDo1OC44MTkzNjIxMDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NDg5OTUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVBWUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSVBWUyBjaGFuZ2UuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBtb2R1bGUgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgc28gdGhhdCdzIHRoZSBvbmx5IGNvbmZpZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZSwgYElQX1ZTYCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuLi4gYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgYW5kIGBORVRGSUxURVJgIGlzIHByZXR0eSBzdGFuZGFyZCB0b28sIHNvIEknbGwganVzdCBmb2N1cyBvbiBgSVBfVlNgIGZvciBub3cgYW5kIGFzc3VtZSB0aGUgb3RoZXJzIGFyZSBzZXQuXG5cbk5vdywgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdpbmcuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuLi4gT2theSwgYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJIGNhbiB1c2UgdGhhdCB0byBzY29wZSB0aGUgYW5hbHlzaXMgYSBiaXQuIEknbGwgZm9jdXMgb24gYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGFuZCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgYXMgbXkgcHJpbWFyeSBzeW1ib2xzLlxuXG5MZXQgbWUgbG9vayBjbG9zZWx5IGF0IHRoZSBhY3R1YWwgcGF0Y2ggZGlmZiBub3cuIEFoLCBoZXJlIGl0IGlzOlxuXG5gYGBjXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbitcdFx0aWYgKGlwdnMtXHUwMDNlZXN0X2NhbGNfcGhhc2UpIHtcbiBcdFx0XHRpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTtcbitcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH1cbiBgYGBcblxuUmlnaHQsIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgYWRkcyBhIGNoZWNrICppbnNpZGUqIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZC4gTm93LCB0aGUga3RocmVhZCB3aWxsIGV4aXQgZWFybHkgaWYgdGhlIHRocmVhZCBpcyBhc2tlZCB0byBzdG9wIG9yIGlmIElQVlMgaGFzIGJlZW4gZGlzYWJsZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIFRoaXMgY291bGQgcHJldmVudCB0aGUga3RocmVhZCBmcm9tIHJ1bm5pbmcgaW50byBhIHNpdHVhdGlvbiB3aGVyZSBpdCBzaG91bGRuJ3QgYmUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBoYW5nIG9yLCB3b3JzZSwgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gaWYgSVBWUyBpcyBiZWluZyBzaHV0IGRvd24uIFRoaXMgZGVmaW5pdGVseSBuZWVkcyBzb21lIGZ1enppbmcuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIElQVlMgbG9naWMsIHNvIHRoZSBpbXBhY3QgY291bGQgYmUgbm9uLXRyaXZpYWwuXG5cbkknbSB0aGlua2luZyB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBzaW1pbGFyIGlzc3VlLCB3aGljaCBtYWtlcyBpdCB3b3J0aCBpbnZlc3RpZ2F0aW5nIG1vcmUuXG5cbk9rYXksIEkgaGF2ZSBteSByZWFzb25pbmcsIGZvY3VzIHN5bWJvbHMsIGFuZCBjb25maWdzIHNvcnRlZC4gTm93IEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODQsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIzOjU1OjA2LjUxNDI2NTE2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzEyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4ndCwgcG90ZW50aWFsbHkgZml4aW5nIGEgaGFuZyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBJUFZTIGVzdGltYXRpb24ga3RocmVhZCB0byBleGl0IGVhcmx5IGlmIHRoZSBrdGhyZWFkIHNob3VsZCBzdG9wIG9yIGlmIElQVlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgcHJldmVudHMgdGhlIGt0aHJlYWQgZnJvbSBjb250aW51aW5nIGV4ZWN1dGlvbiB3aGVuIGl0IHNob3VsZG4ndCwgcG90ZW50aWFsbHkgZml4aW5nIGEgaGFuZyBvciB1c2UtYWZ0ZXItZnJlZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmk6kb[1] Phase: Succeeded StartedAt: 2026-07-28 23:55:18 +0000 UTC FinishedAt: 2026-07-28 23:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 23:55:18 +0000 UTC FinishedAt: 2026-07-28 23:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2] Phase: Succeeded StartedAt: 2026-07-28 23:55:18 +0000 UTC FinishedAt: 2026-07-29 03:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 23:55:18 +0000 UTC FinishedAt: 2026-07-29 03:53:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 23:55:18 +0000 UTC FinishedAt: 2026-07-28 23:55:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 23:55:18 +0000 UTC FinishedAt: 2026-07-28 23:55:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowmk6kb/series-workflowmk6kb-convert-artifact-3676314491/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 23:55:28 +0000 UTC FinishedAt: 2026-07-29 00:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 23:55:28 +0000 UTC FinishedAt: 2026-07-29 00:18: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:*005186f6-f0a8-4e54-9bfe-b5bd26b1ed49,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-workflowmk6kb/series-workflowmk6kb-convert-artifact-3676314491/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": "ebc5e23d-ea28-493b-85cf-acb138ff5107", "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-workflowmk6kb/series-workflowmk6kb-build-action-4012034745/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 23:55:28 +0000 UTC FinishedAt: 2026-07-29 00:18:22 +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:*005186f6-f0a8-4e54-9bfe-b5bd26b1ed49,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-workflowmk6kb/series-workflowmk6kb-convert-artifact-3676314491/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": "ebc5e23d-ea28-493b-85cf-acb138ff5107", "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-workflowmk6kb/series-workflowmk6kb-build-action-4012034745/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 00:18:34 +0000 UTC FinishedAt: 2026-07-29 00:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 00:18:34 +0000 UTC FinishedAt: 2026-07-29 00:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 00:18:34 +0000 UTC FinishedAt: 2026-07-29 00:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 00:18:34 +0000 UTC FinishedAt: 2026-07-29 00:18:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowmk6kb/series-workflowmk6kb-convert-artifact-2688528594/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 00:18:55 +0000 UTC FinishedAt: 2026-07-29 00:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 00:18:55 +0000 UTC FinishedAt: 2026-07-29 00:21:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ebc5e23d-ea28-493b-85cf-acb138ff5107,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-workflowmk6kb/series-workflowmk6kb-build-action-4012034745/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-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 00:21:11 +0000 UTC FinishedAt: 2026-07-29 00:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 00:21:11 +0000 UTC FinishedAt: 2026-07-29 00:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 00:21:11 +0000 UTC FinishedAt: 2026-07-29 00:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 00:21:11 +0000 UTC FinishedAt: 2026-07-29 00:49:35 +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:*005186f6-f0a8-4e54-9bfe-b5bd26b1ed49,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-workflowmk6kb/series-workflowmk6kb-convert-artifact-2688528594/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": "d16162df-3be3-4708-8867-d5fe4304baf8", "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-workflowmk6kb/series-workflowmk6kb-build-action-3835572070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 00:21:11 +0000 UTC FinishedAt: 2026-07-29 00:49:25 +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:*005186f6-f0a8-4e54-9bfe-b5bd26b1ed49,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-workflowmk6kb/series-workflowmk6kb-convert-artifact-2688528594/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": "d16162df-3be3-4708-8867-d5fe4304baf8", "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-workflowmk6kb/series-workflowmk6kb-build-action-3835572070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 00:49:35 +0000 UTC FinishedAt: 2026-07-29 00:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 00:49:35 +0000 UTC FinishedAt: 2026-07-29 00:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 00:49:35 +0000 UTC FinishedAt: 2026-07-29 00:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 00:49:35 +0000 UTC FinishedAt: 2026-07-29 00:51:29 +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:*d16162df-3be3-4708-8867-d5fe4304baf8,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-workflowmk6kb/series-workflowmk6kb-build-action-3835572070/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-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 00:51:38 +0000 UTC FinishedAt: 2026-07-29 03:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 00:51:38 +0000 UTC FinishedAt: 2026-07-29 03:53:09 +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":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"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:*ebc5e23d-ea28-493b-85cf-acb138ff5107,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d16162df-3be3-4708-8867-d5fe4304baf8,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-workflowmk6kb/series-workflowmk6kb-build-action-4012034745/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-workflowmk6kb/series-workflowmk6kb-build-action-3835572070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 00:51:38 +0000 UTC FinishedAt: 2026-07-29 00:51:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 00:51:38 +0000 UTC FinishedAt: 2026-07-29 00:51:45 +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":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"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-workflowmk6kb/series-workflowmk6kb-convert-artifact-1396634663/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 00:51:38 +0000 UTC FinishedAt: 2026-07-29 00:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 00:51:38 +0000 UTC FinishedAt: 2026-07-29 00:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 00:51:39 +0000 UTC FinishedAt: 2026-07-29 00:51:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 00:51:49 +0000 UTC FinishedAt: 2026-07-29 03:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmk6kb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_kthread_start","ip_vs_est_reload_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"9a76645c-7db0-4458-8195-50607803ddc5","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 00:51:49 +0000 UTC FinishedAt: 2026-07-29 03:53:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ebc5e23d-ea28-493b-85cf-acb138ff5107,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d16162df-3be3-4708-8867-d5fe4304baf8,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-workflowmk6kb/series-workflowmk6kb-build-action-4012034745/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-workflowmk6kb/series-workflowmk6kb-build-action-3835572070/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-workflowmk6kb/series-workflowmk6kb-convert-artifact-1396634663/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,}