Name: series-workflowgnbvn Phase: Succeeded StartedAt: 2026-09-09 12:38:44 +0000 UTC FinishedAt: 2026-09-09 16:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[0] Phase: Succeeded StartedAt: 2026-09-09 12:38:44 +0000 UTC FinishedAt: 2026-09-09 12:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 12:38:44 +0000 UTC FinishedAt: 2026-09-09 12:58:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "23da087d9a636d9b2046f3aa3b7470ae51b89c8a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "23da087d9a636d9b2046f3aa3b7470ae51b89c8a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "f780b1cb-4f06-4520-8fc4-94625f7d83e6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_mb_release", "ext4_fill_super", "ext4_force_commit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X21iX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZm9yY2VfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHdvcmtxdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIG9yZGVyaW5nIGR1cmluZyBtb3VudCBmYWlsdXJlIGNsZWFudXAgaW4gZXh0NC4gU3BlY2lmaWNhbGx5LCBpdCBjYWxscyBkaXNhYmxlX3dvcmtfc3luYygpIG9uIHNfZGlzY2FyZF93b3JrIGluIGV4dDRfbWJfcmVsZWFzZSgpIGFuZCBleHQ0X2ZvcmNlX2NvbW1pdCgpIGJlZm9yZSB0ZWFyaW5nIGRvd24gbWJhbGxvYyB0byBwcmV2ZW50IGRpc2NhcmQgd29yayBmcm9tIHJ1bm5pbmcgYWZ0ZXIgb3IgZHVyaW5nIG1iYWxsb2MgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBpc3N1ZXMgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudC9lcnJvciBwYXRocy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc28gdGhlc2Ugcmlza3MgZmFsbCB1bmRlciBLQVNBTiYjMzk7cyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4mIzM5O3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzc3NzViOWQ5MzU3ZWYyNWEzOWI3MGYxMGM3NTNjYjVmMGFhODljZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTI6NTc6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggZWQxYmQwMGUxMWNkNS4uODc0YjcxOTMxYWI2ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTM4OTcsNiAmIzQzOzM4OTcsOCBAQCB2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxuIFx0ICovXG4gXHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4mIzQzO1x0LyogUHJldmVudCB0aGUgbGF0ZXIgam91cm5hbCB0ZWFyZG93biBmcm9tIHJlcXVldWVpbmcgZGlzY2FyZCB3b3JrLiAqL1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG4gXG4gXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cdTAwM2VzX2dyb3VwX2luZm8pO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIGZhaWxlZF9tb3VudDc6XG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4gZmFpbGVkX21vdW50NjpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbiYjNDM7XHQgKiBzZXR1cC4gQ29tbWl0IGl0IHNvIHRoYXQgZGlzY2FyZCB3b3JrIGFmdGVyIGNvbW1pdCBydW5zIGJlZm9yZVxuJiM0MztcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXh0NF9mb3JjZV9jb21taXQoc2IpO1xuIFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbiBcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXh0NF9mb3JjZV9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzc3NzViOWQ5MzU3ZWYyNWEzOWI3MGYxMGM3NTNjYjVmMGFhODljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTI6NTc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGVkMWJkMDBlMTFjZDUuLjg3NGI3MTkzMWFiNmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0zODk3LDYgJiM0MzszODk3LDggQEAgdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhCiAJICovCiAJZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovCiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfbGlzdCkpOwogCiAJZ3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktJmd0O3NfZ3JvdXBfaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogZmFpbGVkX21vdW50NzoKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiBmYWlsZWRfbW91bnQ2OgomIzQzOwkvKgomIzQzOwkgKiBXZSBjYW4gaGF2ZSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gZnJvbSBvcnBoYW4gcmVwbGF5IG9yIHF1b3RhCiYjNDM7CSAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlCiYjNDM7CSAqIHdlIHNodXRkb3duIG1iYWxsb2MuCiYjNDM7CSAqLwomIzQzOwlleHQ0X2ZvcmNlX2NvbW1pdChzYik7CiAJZXh0NF9tYl9yZWxlYXNlKHNiKTsKIAlleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTsKIGZhaWxlZF9tb3VudDU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzQKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2UgdGhpcyBvbmUgaXMgZm9jdXNlZCBvbiBjaGFuZ2VzIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2V4dDQvbWJhbGxvYy5jYCBhbmQgYGZzL2V4dDQvc3VwZXIuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoZSBzcGVjaWZpYyBmaWxlcywgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBhcmVhczogaG93IG1pZ2h0IHRoaXMgYWZmZWN0IGJsb2NrIGFsbG9jYXRpb24sIHN1cGVyIGJsb2NrIGhhbmRsaW5nLCBvciBvdmVyYWxsIGZpbGVzeXN0ZW0gaW50ZWdyaXR5PyBUaW1lIHRvIGRpZyBpbiBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIHRvIGRvIHRoaXMgSSB3aWxsIHBlcmZvcm0gYSByZWFkLWZpbGUgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcy4gSSB3aWxsIGFsc28gbWFrZSBhbiBhZGRpdGlvbmFsIGdyZXBwZXIgc2VhcmNoIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4ODU6XHRcbjM4ODY6XHR2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuMzg4NzpcdHtcbjM4ODg6XHRcdGV4dDRfZ3JvdXBfdCBuZ3JvdXBzID0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKTtcbjM4ODk6XHRcdGV4dDRfZ3JvdXBfdCBpO1xuMzg5MDpcdFx0aW50IG51bV9tZXRhX2dyb3VwX2luZm9zO1xuMzg5MTpcdFx0c3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JpbmZvLCAqKipncm91cF9pbmZvO1xuMzg5MjpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG4zODkzOlx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwID0gZ2V0X2dyb3VwaW5mb19jYWNoZShzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbjM4OTQ6XHRcdGludCBjb3VudDtcbjM4OTU6XHRcbjM4OTY6XHRcdC8qXG4zODk3Olx0XHQgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhXG4zODk4Olx0XHQgKi9cbjM4OTk6XHRcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF93b3JrKTtcbjM5MDA6XHRcdC8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi9cbjM5MDE6XHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4zOTAyOlx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG4zOTAzOlx0XG4zOTA0Olx0XHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cdTAwM2VzX2dyb3VwX2luZm8pO1xuMzkwNTpcdFx0aWYgKGdyb3VwX2luZm8pIHtcbjM5MDY6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbmdyb3VwczsgaSYjNDM7JiM0MzspIHtcbjM5MDc6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjM5MDg6XHRcdFx0XHRncmluZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBpKTtcbjM5MDk6XHRcdFx0XHRpZiAoIWdyaW5mbylcbjM5MTA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzkxMTpcdFx0XHRcdG1iX2dyb3VwX2JiX2JpdG1hcF9mcmVlKGdyaW5mbyk7XG4zOTEyOlx0XHRcdFx0ZXh0NF9sb2NrX2dyb3VwKHNiLCBpKTtcbjM5MTM6XHRcdFx0XHRjb3VudCA9IGV4dDRfbWJfY2xlYW51cF9wYShncmluZm8pO1xuMzkxNDpcdFx0XHRcdGlmIChjb3VudClcbjM5MTU6XHRcdFx0XHRcdG1iX2RlYnVnKHNiLCBcJiMzNDttYmFsbG9jOiAlZCBQQXMgbGVmdFxcblwmIzM0OyxcbjM5MTY6XHRcdFx0XHRcdFx0IGNvdW50KTtcbjM5MTc6XHRcdFx0XHRleHQ0X3VubG9ja19ncm91cChzYiwgaSk7XG4zOTE4Olx0XHRcdFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ3JpbmZvKTtcbjM5MTk6XHRcdFx0fVxuMzkyMDpcdFx0XHRudW1fbWV0YV9ncm91cF9pbmZvcyA9IChuZ3JvdXBzICYjNDM7XG4zOTIxOlx0XHRcdFx0XHRFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKSAtIDEpIFx1MDAzZVx1MDAzZVxuMzkyMjpcdFx0XHRcdEVYVDRfREVTQ19QRVJfQkxPQ0tfQklUUyhzYik7XG4zOTIzOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9tZXRhX2dyb3VwX2luZm9zOyBpJiM0MzsmIzQzOylcbjM5MjQ6XHRcdFx0XHRrZnJlZShncm91cF9pbmZvW2ldKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTc1MDpcdFx0LyogUmVnaXN0ZXIgc3lzZnMgYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyBhcmUgY29tcGxldGUuICovXG41NzUxOlx0XHRlcnIgPSBleHQ0X3JlZ2lzdGVyX3N5c2ZzKHNiKTtcbjU3NTI6XHRcdGlmIChlcnIpXG41NzUzOlx0XHRcdGdvdG8gZmFpbGVkX21vdW50OTtcbjU3NTQ6XHRcbjU3NTU6XHRcdHJldHVybiAwO1xuNTc1NjpcdFxuNTc1NzpcdGZhaWxlZF9tb3VudDk6XG41NzU4Olx0XHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbjU3NTk6XHRmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuNTc2MDpcdFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbjU3NjE6XHRmYWlsZWRfbW91bnQ3OlxuNTc2MjpcdFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuNTc2MzpcdGZhaWxlZF9tb3VudDY6XG41NzY0Olx0XHQvKlxuNTc2NTpcdFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxuNTc2NjpcdFx0ICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmVcbjU3Njc6XHRcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXG41NzY4Olx0XHQgKi9cbjU3Njk6XHRcdGV4dDRfZm9yY2VfY29tbWl0KHNiKTtcbjU3NzA6XHRcdGV4dDRfbWJfcmVsZWFzZShzYik7XG41NzcxOlx0XHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbjU3NzI6XHRmYWlsZWRfbW91bnQ1OlxuNTc3MzpcdFx0ZXh0NF9wZXJjcHVfcGFyYW1fZGVzdHJveShzYmkpO1xuNTc3NDpcdFx0ZXh0NF9leHRfcmVsZWFzZShzYik7XG41Nzc1Olx0XHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuNTc3NjpcdGZhaWxlZF9tb3VudDRhOlxuNTc3NzpcdFx0ZHB1dChzYi1cdTAwM2VzX3Jvb3QpO1xuNTc3ODpcdFx0c2ItXHUwMDNlc19yb290ID0gTlVMTDtcbjU3Nzk6XHRmYWlsZWRfbW91bnQ0OlxuNTc4MDpcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDttb3VudCBmYWlsZWRcJiMzNDspO1xuNTc4MTpcdFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuNTc4MjpcdFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG41NzgzOlx0ZmFpbGVkX21vdW50X3dxOlxuNTc4NDpcdFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbjU3ODU6XHRcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbjU3ODY6XHRcbjU3ODc6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSk7XG41Nzg4Olx0XHRzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XG41Nzg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBSZXNvdXJjZSBMZWFrYWdlIGluIGV4dDQgRmlsZXN5c3RlbSBDbGVhbnVwKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGUgYWxsb2NhdGlvbiBiaXRtYXAgcmVsZWFzZSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBleHQ0X2ZpbGxfc3VwZXJgJiMzOTtzIGVycm9yIGhhbmRsaW5nLCB0aGUgYGV4dDRfbWJfcmVsZWFzZWAgZnVuY3Rpb24gKHdoaWNoIHNob3VsZCBiZSBoYW5kbGluZyB0aGUgYWN0dWFsIGJpdG1hcCByZWxlYXNlKSwgYW5kIHRoZSBkaXNjYXJkIHdvcmsgcXVldWUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdGhyZWUgYXJlYXMgYXJlIHBsYXlpbmcgbmljZWx5IHRvZ2V0aGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBleHQ0X21iX3JlbGVhc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgY29ycmVjdGx5IGludm9rZWQgZHVyaW5nIHVubW91bnQgYW5kIGdlbmVyYWwgZmlsZXN5c3RlbSBjbGVhbnVwLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBleHQ0X3B1dF9zdXBlcmAsIGJ1dCBJJiMzOTtsbCBhbHNvIHNjYW4gZm9yIG90aGVyIGNsZWFudXAgcGF0aHMgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBjb2RlIHNlYXJjaCBmb3IgYGV4dDRfbWJfcmVsZWFzZWAgdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIGl04oCZcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgd2hlcmUgaXQgKmlzbiYjMzk7dCogYmVpbmcgdXNlZCB3aGVuIGl0IHNob3VsZCBiZS4gVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIGV2ZXJ5IGFsbG9jYXRlZCBiaXRtYXAgaXMgZnJlZWQgaW4gYWxsIHJlbGV2YW50IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X21iX3JlbGVhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzA5Mz1leHRlcm4gaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9leHQ0L2V4dDQuaDozMDk0OmV4dGVybiB2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9leHQ0L2V4dDQuaC0zMDk1LWV4dGVybiBleHQ0X2ZzYmxrX3QgZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZV90ICosXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz03Mz1zdGF0aWMgaW50IG1idF9tYl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTUtZXJyX21iX3JlbGVhc2U6XG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjExNjpcdGV4dDRfbWJfcmVsZWFzZShzYik7XG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTExNy1lcnJfb3V0OlxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9MTIzPXN0YXRpYyB2b2lkIG1idF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMjYtXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZnJlZWNsdXN0ZXJzX2NvdW50ZXIpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMjc6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMjgtXHRrZnJlZShzYi1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfcXVldWUpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTIyNjItXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcbmZzL2V4dDQvbWJhbGxvYy5jOjIyNjM6XHQgKiBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cdCAqL1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTM4ODUtXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L21iYWxsb2MuYy0zODg3LXtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00Njg3PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTQ3MjItICogY29udGV4dC4gIFdlIGRvbiYjMzk7dCBuZWVkIHRoaXMgZm9yIE1CX0dST1VQX1BBIGJlY2F1c2Ugd2Ugb25seSBjaGFuZ2VcbmZzL2V4dDQvbWJhbGxvYy5jOjQ3MjM6ICogcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpLCBidXQgb24gZmFpbHVyZSwgd2UmIzM5O3ZlIGFscmVhZHlcbmZzL2V4dDQvbWJhbGxvYy5jLTQ3MjQtICogemVyb2VkIG91dCBhYy1cdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXHUwMDNlcGFfZnJlZSBpcyBub3QgY2hhbmdlZC5cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00NzkyPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwNi1cdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcbmZzL2V4dDQvbWJhbGxvYy5jOjQ4MDc6XHQgKiBpbiBvbi1kaXNrIGJpdG1hcCAtLSBzZWUgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoKVxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwOC1cdCAqIE90aGVyIENQVXMgYXJlIHByZXZlbnRlZCBmcm9tIGFsbG9jYXRpbmcgZnJvbSB0aGlzIHBhIGJ5IGxnX211dGV4XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3OD1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01MDIxLVx0XHQgKiAgICAgIGV4dDRfbWJfbmV3X2Jsb2Nrc1xuZnMvZXh0NC9tYmFsbG9jLmM6NTAyMjpcdFx0ICogICAgICAgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHRcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMjMtXHRcdCAqICAgICAgICBleHQ0X21iX3B1dF9wYVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTM9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01Mzk3LVx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XG5mcy9leHQ0L21iYWxsb2MuYzo1Mzk4Olx0ICogYWZ0ZXIgdXBkYXRpbmcgdGhlIHBhX2ZyZWUgaW4gZXh0NF9tYl9yZWxlYXNlX2NvbnRleHRcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTktXHQgKi9cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NDE4PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQxOTpleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoc3RydWN0IGV4dDRfYnVkZHkgKmU0Yiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmgsXG5mcy9leHQ0L21iYWxsb2MuYy01NDIwLVx0XHRcdHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ3LVx0XHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XG5mcy9leHQ0L21iYWxsb2MuYzo1NDQ4Olx0XHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICYjNDM7XG5mcy9leHQ0L21iYWxsb2MuYy01NDQ5LVx0XHRcdFx0XHRcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU0NzA9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXG5mcy9leHQ0L21iYWxsb2MuYzo1NDcxOmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3Mi1cdFx0XHRcdHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NDc3LVxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ3ODpcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3OS1cdEJVR19PTihwYS1cdTAwM2VwYV9kZWxldGVkID09IDApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU1MDE9ZXh0NF9tYl9kaXNjYXJkX2dyb3VwX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4Mi1cdFx0aWYgKHBhLVx1MDAzZXBhX3R5cGUgPT0gTUJfR1JPVVBfUEEpIHtcbmZzL2V4dDQvbWJhbGxvYy5jOjU1ODM6XHRcdFx0ZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKFx1MDAyNmU0YiwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTU4NC1cdFx0XHRjYWxsX3JjdShcdTAwMjYocGEpLVx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODUtXHRcdH0gZWxzZSB7XG5mcy9leHQ0L21iYWxsb2MuYzo1NTg2Olx0XHRcdGV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTU4Ny1cdFx0XHRleHQ0X21iX3BhX2ZyZWUocGEpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU2MDk9dm9pZCBleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NzA1LVx0XHRsaXN0X2RlbChcdTAwMjZwYS1cdTAwM2VwYV9ncm91cF9saXN0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDY6XHRcdGV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTcwNy1cdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01OTM3PWV4dDRfbWJfZGlzY2FyZF9sZ19wcmVhbGxvY2F0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXHRcdGxpc3RfZGVsKFx1MDAyNnBhLVx1MDAzZXBhX2dyb3VwX2xpc3QpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMjpcdFx0ZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKFx1MDAyNmU0YiwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNjAwMy1cdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MDIwPXN0YXRpYyB2b2lkIGV4dDRfbWJfYWRkX25fdHJpbShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYwNjctICovXG5mcy9leHQ0L21iYWxsb2MuYzo2MDY4OnN0YXRpYyB2b2lkIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG5mcy9leHQ0L21iYWxsb2MuYy02MDY5LXtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MjMxPWV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MzU1LVx0fVxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NjpcdGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KGFjKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTYzNTctXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz03Mjc5PUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2ZyZWVfZ3JvdXBfY2x1c3RlcnNfc2V0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjcyODA6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XG5mcy9leHQ0L21iYWxsb2MuYy03MjgxLUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X3JlYWRfYmxvY2tfYml0bWFwX25vd2FpdCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTMyMi1cdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XG5mcy9leHQ0L3N1cGVyLmM6MTMyMzpcdGV4dDRfbWJfcmVsZWFzZShzYik7XG5mcy9leHQ0L3N1cGVyLmMtMTMyNC1cdGV4dDRfZXh0X3JlbGVhc2Uoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjktXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG5mcy9leHQ0L3N1cGVyLmM6NTc3MDpcdGV4dDRfbWJfcmVsZWFzZShzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTc3MS1cdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD03NzA9REVGSU5FX0VWRU5UKGV4dDRfX21iX25ld19wYSwgZXh0NF9tYl9uZXdfZ3JvdXBfcGEsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTc3Ny1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDo3Nzg6VFJBQ0VfRVZFTlQoZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTc3OS1cdFRQX1BST1RPKHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtODA0LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjgwNTpUUkFDRV9FVkVOVChleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtODA2LVx0VFBfUFJPVE8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgZXh0NF9wdXRfc3VwZXJgIENvbnRleHQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGBleHQ0X3B1dF9zdXBlcmAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtIGNsZWFudXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBsaWZlY3ljbGUsIGFzIHdlbGwgYXMgdGhlIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXRzZWxmLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0uIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXkgYXQgdGhpcyBwb2ludD8gQW5kIHRoZSBwb3RlbnRpYWwgcmVwZXJjdXNzaW9ucyBpZiBpdCBmYWlscz8gSSBjYW4mIzM5O3QganVzdCBsb29rIGF0IHRoZSBmdW5jdGlvbiBpbiBpc29sYXRpb247IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGVyZSBpdCBzaXRzIGluIHRoZSBjb2RlJiMzOTtzIGhpZXJhcmNoeS4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBtb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzEwOlx0XG4xMzExOlx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuMTMxMjpcdFx0XHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuMTMxMzpcdFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuMTMxNDpcdFx0XHRpZiAoKGVyciBcdTAwM2MgMCkgXHUwMDI2XHUwMDI2ICFhYm9ydGVkKSB7XG4xMzE1Olx0XHRcdFx0ZXh0NF9hYm9ydChzYiwgLWVyciwgXCYjMzQ7Q291bGRuJiMzOTt0IGNsZWFuIHVwIHRoZSBqb3VybmFsXCYjMzQ7KTtcbjEzMTY6XHRcdFx0fVxuMTMxNzpcdFx0fSBlbHNlXG4xMzE4Olx0XHRcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuMTMxOTpcdFxuMTMyMDpcdFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4xMzIxOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuMTMyMjpcdFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbjEzMjM6XHRcdGV4dDRfbWJfcmVsZWFzZShzYik7XG4xMzI0Olx0XHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcbjEzMjU6XHRcbjEzMjY6XHRcdGlmICghZXh0NF9lbWVyZ2VuY3lfc3RhdGUoc2IpIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuMTMyNzpcdFx0XHRpZiAoIWFib3J0ZWQpIHtcbjEzMjg6XHRcdFx0XHRleHQ0X2NsZWFyX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYik7XG4xMzI5Olx0XHRcdFx0ZXh0NF9jbGVhcl9mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKTtcbjEzMzA6XHRcdFx0XHRlcy1cdTAwM2VzX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLVx1MDAzZXNfbW91bnRfc3RhdGUpO1xuMTMzMTpcdFx0XHR9XG4xMzMyOlx0XHRcdGV4dDRfY29tbWl0X3N1cGVyKHNiKTtcbjEzMzM6XHRcdH1cbjEzMzQ6XHRcbjEzMzU6XHRcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4xMzM2Olx0XHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbjEzMzc6XHRcbjEzMzg6XHRcdFdBUk5fT05fT05DRSghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0VSUk9SX0ZTKSBcdTAwMjZcdTAwMjZcbjEzMzk6XHRcdFx0ICAgICBwZXJjcHVfY291bnRlcl9zdW0oXHUwMDI2c2JpLVx1MDAzZXNfZGlydHljbHVzdGVyc19jb3VudGVyKSk7XG4xMzQwOlx0XHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XG4xMzQxOlx0I2lmZGVmIENPTkZJR19RVU9UQVxuMTM0MjpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEVYVDRfTUFYUVVPVEFTOyBpJiM0MzsmIzQzOylcbjEzNDM6XHRcdFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xuMTM0NDpcdCNlbmRpZlxuMTM0NTpcdFxuMTM0NjpcdFx0LyogRGVidWdnaW5nIGNvZGUganVzdCBpbiBjYXNlIHRoZSBpbi1tZW1vcnkgaW5vZGUgb3JwaGFuIGxpc3RcbjEzNDc6XHRcdCAqIGlzbiYjMzk7dCBlbXB0eS4gIFRoZSBvbi1kaXNrIG9uZSBjYW4gYmUgbm9uLWVtcHR5IGlmIHdlJiMzOTt2ZVxuMTM0ODpcdFx0ICogZGV0ZWN0ZWQgYW4gZXJyb3IgYW5kIHRha2VuIHRoZSBmcyByZWFkb25seSwgYnV0IHRoZVxuMTM0OTpcdFx0ICogaW4tbWVtb3J5IGxpc3QgaGFkIGJldHRlciBiZSBjbGVhbiBieSB0aGlzIHBvaW50LiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTY0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGBmcy9leHQ0L21iYWxsb2MuY2AgYW5kIGBmcy9leHQ0L3N1cGVyLmNgLiBSaWdodCBhd2F5LCB0aGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gRXh0NCBpcyBhIGNsYXNzaWMsIGEgY29yZSBMaW51eCBmaWxlc3lzdGVtLiBUaGF0IG1ha2VzIGl0IGJvdGggY3J1Y2lhbCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICplYXNpbHkqIGZ1enphYmxlIHZpYSBzdGFuZGFyZCBhdmVudWVzIGxpa2UgbW91bnRpbmcgY29ycnVwdGVkIGltYWdlcywgbG9vcCBkZXZpY2VzLCBhbmQgb2YgY291cnNlLCBzeXprYWxsZXIuIFRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLgoKRmlyc3QsIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgY2hhbmdlcy4gSXQgc2VlbXMgd2UmIzM5O3ZlIGdvdDoKCjEuICBJbiBgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYDogSSBzcG90IHRoYXQgYGRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7YCBpcyBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBgZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspO2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBzeW5jaHJvbml6YXRpb24gY2hhbmdlIGluIHRoZSBkaXNjYXJkIHdvcmsuCjIuICBBbHNvLCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgaXMgYWRkZWQgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZShzYik7YCBpbiBgZmFpbGVkX21vdW50NmAgd2l0aGluIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgbW91bnQgZmFpbHVyZSBwYXRoIC0gaW50ZXJlc3RpbmcuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb25zOiBJcyBleHQ0IGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIHNjZW5hcmlvPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIEl0JiMzOTtzIGEgY29yZSBmaWxlc3lzdGVtLiBTeXprYWxsZXIgbWFrZXMgc2hvcnQgd29yayBvZiB0cmlnZ2VyaW5nIGFsbCBzb3J0cyBvZiBleHQ0IGNvZGUgcGF0aHMuIFRoZSBzZWNvbmQgcXVlc3Rpb24sIGlzIHRoaXMgdGFyZ2V0ZWQgY29kZSBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIHZpYSBub3JtYWwgb3BlcmF0aW9uPyBBYnNvbHV0ZWx5LiBNb3VudCBmYWlsdXJlcyBhcmUgcm91dGluZSBpbiBmdXp6aW5nLCBhbmQgdGhlIHN1cGVyYmxvY2sgcmVsZWFzZSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgKGBleHQ0X21iX3JlbGVhc2VgLCBgZXh0NF9maWxsX3N1cGVyYCwgYGV4dDRfcHV0X3N1cGVyYCkgYXJlIGRpcmVjdGx5IGhpdCBieSBzeXprYWxsZXIuCgpGaW5hbGx5LCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uOiBMZXQgbWUgY2hlY2sgdGhlIGBDT05GSUdfRVhUNF9GU2AgaW4gdGhlIEtjb25maWcsIGFuZCB0aGVuIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9leHQ0L0tjb25maWdgIGl0c2VsZiB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MjUKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSBzZWUgYGV4dDRfbWJfcmVsZWFzZWAsIGBleHQ0X2ZpbGxfc3VwZXJgLCBgZXh0NF9mb3JjZV9jb21taXRgLCBhbmQgYGV4dDRfcHV0X3N1cGVyYC4gKkhtbSosIGBleHQ0X3B1dF9zdXBlcmAgaXMgbGlrZWx5IG5vdCBhcyBjcml0aWNhbCBhcyB0aGUgb3RoZXJzIGZvciB0aGlzIHB1cnBvc2UsIHNvIEkmIzM5O2xsIGV4Y2x1ZGUgaXQgZnJvbSBpbml0aWFsIGNvbnNpZGVyYXRpb24uCgpOb3csIGFyZSB0aGUgcmVtYWluaW5nIHRocmVlIGdvb2QgKkZvY3VzU3ltYm9scyo/IEkgdGhpbmsgc28sIGJlY2F1c2UgdGhleSBhcmUgZGVmaW5pdGVseSBub3QgdWJpcXVpdG91cy4gYGV4dDRfbWJfcmVsZWFzZWAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gZXh0NCBzdXBlcmJsb2NrIHRlYXJkb3duLCBtb3VudCBlcnJvciBoYW5kbGluZywgYW5kIG1iYWxsb2MgY2xlYW51cC4gYGV4dDRfZmlsbF9zdXBlcmAgaXMsIG9mIGNvdXJzZSwgY3JpdGljYWwgZm9yIGV4dDQgbW91bnRpbmcuIEZpbmFsbHksIGBleHQ0X2ZvcmNlX2NvbW1pdGAgaXMgYWxsIGFib3V0IGNvbW1pdHRpbmcgdGhlIGV4dDQgam91cm5hbC4KClRoZSAqV29ydGhGdXp6aW5nKiBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc291bmQ7IHRoaXMgcGF0Y2ggdGFyZ2V0cyBlcnJvciBoYW5kbGluZyBpbiBgZXh0NF9maWxsX3N1cGVyYCBhbmQgY2xlYW51cCBpbiBgZXh0NF9tYl9yZWxlYXNlYC4gSXQgYWxzbyBtZW50aW9ucyB0aGF0IGl0IHByZXZlbnRzIGRpc2NhcmQgd29yayByZXF1ZXVlaW5nIGR1cmluZyBqb3VybmFsIHRlYXJkb3duLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIGJlY2F1c2UgdGhlc2UgcGF0aHMgYXJlIHRyaWdnZXJlZCBkdXJpbmcgbW91bnQgZXJyb3IgdW53aW5kaW5nIGFuZCB1bm1vdW50IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuCgpTbywgbGV0JiMzOTtzIHZlcmlmeSBteSBmaW5kaW5ncy4gSSYjMzk7bGwgY29uZmlybSB0aGF0IHRoZSAqRW5hYmxlQ29uZmlncyogdmFsdWUgaXMgY29ycmVjdC4gSSBzZWUgWyYjMzQ7RVhUNF9GUyYjMzQ7XS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFRoZSAqRm9jdXNTeW1ib2xzKiBhcmUgbm9uLXViaXF1aXRvdXMsIGFuZCBzcGVjaWZpYy4gVGhleSBhbHNvIHNlZW0gdG8gcmVwcmVzZW50IGEgZ29vZCBzZXQgb2YgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlICpSZWFzb25pbmcqIGlzIGNvbmNpc2UgYW5kIGNsZWFyLiBUaGlzIGNoZWNrcyBvdXQuCgpPa2F5LCBhbGwgdGhlIGRldGFpbHMgbG9vayBnb29kLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXh0NF9mb3JjZV9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9tYl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtleHQ0X2ZvcmNlX2NvbW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IG1iYWxsb2Mgc2h1dGRvd24gbG9naWMgYW5kIG1vdW50IGZhaWx1cmUgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGFkZGluZyBleHQ0X2ZvcmNlX2NvbW1pdCBhbmQgZGlzYWJsaW5nIGRpc2NhcmQgd29yayBiZWZvcmUgcmVsZWFzaW5nIG1iYWxsb2Mgc3RydWN0dXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgZXh0NCBtb3VudC91bm1vdW50IHBhdGhzIGFuZCBtb3VudCBlcnJvciBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3JkZXJpbmcgZHVyaW5nIG1vdW50IGZhaWx1cmUgY2xlYW51cCBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgb24gc19kaXNjYXJkX3dvcmsgaW4gZXh0NF9tYl9yZWxlYXNlKCkgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgYmVmb3JlIHRlYXJpbmcgZG93biBtYmFsbG9jIHRvIHByZXZlbnQgZGlzY2FyZCB3b3JrIGZyb20gcnVubmluZyBhZnRlciBvciBkdXJpbmcgbWJhbGxvYyBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGlzc3VlcyBkdXJpbmcgZmlsZXN5c3RlbSB1bm1vdW50L2Vycm9yIHBhdGhzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBzbyB0aGVzZSByaXNrcyBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbiByYXRoZXIgdGhhbiBLTVNBTiYjMzk7cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzc3NzViOWQ5MzU3ZWYyNWEzOWI3MGYxMGM3NTNjYjVmMGFhODljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTI6NTc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGVkMWJkMDBlMTFjZDUuLjg3NGI3MTkzMWFiNmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0zODk3LDYgJiM0MzszODk3LDggQEAgdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhCiAJICovCiAJZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovCiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfbGlzdCkpOwogCiAJZ3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktJmd0O3NfZ3JvdXBfaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogZmFpbGVkX21vdW50NzoKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiBmYWlsZWRfbW91bnQ2OgomIzQzOwkvKgomIzQzOwkgKiBXZSBjYW4gaGF2ZSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gZnJvbSBvcnBoYW4gcmVwbGF5IG9yIHF1b3RhCiYjNDM7CSAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlCiYjNDM7CSAqIHdlIHNodXRkb3duIG1iYWxsb2MuCiYjNDM7CSAqLwomIzQzOwlleHQ0X2ZvcmNlX2NvbW1pdChzYik7CiAJZXh0NF9tYl9yZWxlYXNlKHNiKTsKIAlleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTsKIGZhaWxlZF9tb3VudDU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ2CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgYW5kIFN5bmNocm9uaXphdGlvbiBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcHJpbWFyaWx5IGFkZHJlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIChLTVNBTikgb3IgaWYgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiwgY2xlYW51cCwgdXNlLWFmdGVyLWZyZWUgKFVBRiksIG9yIHRlYXJkb3duIG9yZGVyaW5nIHByb2JsZW1zIChLQVNBTi9MT0NLREVQIHRlcnJpdG9yeSkuCgpSZWFkaW5nIHRoZSBwYXRjaCBpdHNlbGYgcmV2ZWFscyBzb21lIGludGVyZXN0aW5nIGFkZGl0aW9ucy4gSW4gYGZzL2V4dDQvbWJhbGxvYy5jYCwgd2Ugc2VlIGEgbmV3IGBkaXNhYmxlX3dvcmtfc3luY2AgY2FsbCBhZGRlZCB0byB0aGUgYGV4dDRfbWJfcmVsZWFzZWAgZnVuY3Rpb246CgpgYGBjCnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCnsKLi4uCgkvKgoJICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YQoJICovCglmbHVzaF93b3JrKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7CiYjNDM7CS8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi8KJiM0MzsJZGlzYWJsZV93b3JrX3N5bmMoJmFtcDtzYmktJmd0O3NfZGlzY2FyZF93b3JrKTsKCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX2xpc3QpKTsKYGBgCgpUaGUgY29tbWVudCBzdWdnZXN0cyB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgdGhlIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZS1lbnF1ZXVpbmcgZGlzY2FyZCB3b3JrLiBJbnRlcmVzdGluZy4gSXQgaW1wbGllcyBhIHNwZWNpZmljIG9yZGVyaW5nIGRlcGVuZGVuY3kgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBBbHNvIGluIGBmcy9leHQ0L3N1cGVyLmNgLCB3aXRoaW4gdGhlIGBmYWlsZWRfbW91bnRgIGxhYmVscywgdGhlcmUgaXM6CgpgYGBjCmZhaWxlZF9tb3VudDY6CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGEKJiM0MzsJICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmUKJiM0MzsJICogd2Ugc2h1dGRvd24gbWJhbGxvYy4KJiM0MzsJICovCiYjNDM7CWV4dDRfZm9yY2VfY29tbWl0KHNiKTsKCWV4dDRfbWJfcmVsZWFzZShzYik7CglleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTsKZmFpbGVkX21vdW50NToKYGBgCgpUaGlzIGFkZGl0aW9uIG9mIGBleHQ0X2ZvcmNlX2NvbW1pdChzYilgIGJlZm9yZSBgZXh0NF9tYl9yZWxlYXNlKHNiKWAgaXMgYWxzbyBjcml0aWNhbC4gSXQgZXhwbGljaXRseSBhaW1zIHRvIGVuc3VyZSB0aGF0IGRpc2NhcmQgd29yaywgd2hpY2ggaXMgcGFydCBvZiB0aGUgYG1iYWxsb2NgIHN1YnN5c3RlbSwgaXMgY29tcGxldGVkIGJlZm9yZSB0ZWFyaW5nIHRoaW5ncyBkb3duLgoKTm93LCBJIG5lZWQgdG8gem9vbSBvdXQuIEkgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGJvdGggYGZzL2V4dDQvbWJhbGxvYy5jYCBhbmQgYGZzL2V4dDQvc3VwZXIuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHBpbnBvaW50ICp3aHkqIHRoZXNlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGRpc2NhcmQgd29yaywgam91cm5hbCB0ZWFyZG93biwgYW5kIHRoZSBgbWJhbGxvY2Agc3Vic3lzdGVtIHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIHNvdW5kbmVzcyBvZiB0aGlzIHBhdGNoLiBJcyBpdCBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYmVpbmcgYWRkcmVzc2VkPyBPciBhIG1vcmUgc3VidGxlIG1lbW9yeSBzYWZldHkgaXNzdWU/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHdvcmtxdWV1ZSBpbnRlcmFjdGlvbnMgYW5kIHRyYW5zYWN0aW9uIHNlbWFudGljcyB0byBzYXkgZm9yIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4OTA6XHRcdGludCBudW1fbWV0YV9ncm91cF9pbmZvcztcbjM4OTE6XHRcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbywgKioqZ3JvdXBfaW5mbztcbjM4OTI6XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xuMzg5MzpcdFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGdldF9ncm91cGluZm9fY2FjaGUoc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG4zODk0Olx0XHRpbnQgY291bnQ7XG4zODk1Olx0XG4zODk2Olx0XHQvKlxuMzg5NzpcdFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxuMzg5ODpcdFx0ICovXG4zODk5Olx0XHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4zOTAwOlx0XHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXG4zOTAxOlx0XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuMzkwMjpcdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xuMzkwMzpcdFxuMzkwNDpcdFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXHUwMDNlc19ncm91cF9pbmZvKTtcbjM5MDU6XHRcdGlmIChncm91cF9pbmZvKSB7XG4zOTA2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncm91cHM7IGkmIzQzOyYjNDM7KSB7XG4zOTA3Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4zOTA4Olx0XHRcdFx0Z3JpbmZvID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhzYiwgaSk7XG4zOTA5Olx0XHRcdFx0aWYgKCFncmluZm8pXG4zOTEwOlx0XHRcdFx0XHRjb250aW51ZTtcbjM5MTE6XHRcdFx0XHRtYl9ncm91cF9iYl9iaXRtYXBfZnJlZShncmluZm8pO1xuMzkxMjpcdFx0XHRcdGV4dDRfbG9ja19ncm91cChzYiwgaSk7XG4zOTEzOlx0XHRcdFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcbjM5MTQ6XHRcdFx0XHRpZiAoY291bnQpXG4zOTE1Olx0XHRcdFx0XHRtYl9kZWJ1ZyhzYiwgXCYjMzQ7bWJhbGxvYzogJWQgUEFzIGxlZnRcXG5cJiMzNDssXG4zOTE2Olx0XHRcdFx0XHRcdCBjb3VudCk7XG4zOTE3Olx0XHRcdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xuMzkxODpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdyaW5mbyk7XG4zOTE5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NTA6XHRcdC8qIFJlZ2lzdGVyIHN5c2ZzIGFmdGVyIGFsbCBpbml0aWFsaXphdGlvbnMgYXJlIGNvbXBsZXRlLiAqL1xuNTc1MTpcdFx0ZXJyID0gZXh0NF9yZWdpc3Rlcl9zeXNmcyhzYik7XG41NzUyOlx0XHRpZiAoZXJyKVxuNTc1MzpcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDk7XG41NzU0Olx0XG41NzU1Olx0XHRyZXR1cm4gMDtcbjU3NTY6XHRcbjU3NTc6XHRmYWlsZWRfbW91bnQ5OlxuNTc1ODpcdFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG41NzU5Olx0ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbjU3NjA6XHRcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG41NzYxOlx0ZmFpbGVkX21vdW50NzpcbjU3NjI6XHRcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbjU3NjM6XHRmYWlsZWRfbW91bnQ2OlxuNTc2NDpcdFx0LypcbjU3NjU6XHRcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbjU3NjY6XHRcdCAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlXG41NzY3Olx0XHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxuNTc2ODpcdFx0ICovXG41NzY5Olx0XHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG41NzcwOlx0XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuNTc3MTpcdFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG41NzcyOlx0ZmFpbGVkX21vdW50NTpcbjU3NzM6XHRcdGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc2JpKTtcbjU3NzQ6XHRcdGV4dDRfZXh0X3JlbGVhc2Uoc2IpO1xuNTc3NTpcdFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbjU3NzY6XHRmYWlsZWRfbW91bnQ0YTpcbjU3Nzc6XHRcdGRwdXQoc2ItXHUwMDNlc19yb290KTtcbjU3Nzg6XHRcdHNiLVx1MDAzZXNfcm9vdCA9IE5VTEw7XG41Nzc5Olx0ZmFpbGVkX21vdW50NDpcbjU3ODA6XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXCYjMzQ7bW91bnQgZmFpbGVkXCYjMzQ7KTtcbjU3ODE6XHRcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbjU3ODI6XHRcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuNTc4MzpcdGZhaWxlZF9tb3VudF93cTpcbjU3ODQ6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTgKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBidWcgZml4LiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIG1vdW50IGVycm9yIGNsZWFudXAgYW5kIG1iYWxsb2MgdGVhcmRvd24gcHJvY2Vzcy4gVGhlIGlzc3VlIGFyaXNlcyBmcm9tIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGRpc2NhcmQgd29ya3F1ZXVlLgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBgZXh0NF9tYl9yZWxlYXNlYCBjYW4gc3RhcnQgZGlzbWFudGxpbmcgdGhlIGdyb3VwX2luZm8gYW5kIG1iYWxsb2Mgc3RydWN0dXJlcy4gSWYgdGhlIGRpc2NhcmQgd29ya3F1ZXVlIGlzIGFsbG93ZWQgdG8gZXhlY3V0ZSBlaXRoZXIgYWZ0ZXIgb3IgY29uY3VycmVudGx5IHdpdGggdGhpcyB0ZWFyZG93biBwcm9jZXNzLCBpdCByaXNrcyBhY2Nlc3NpbmcgbWVtb3J5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBmcmVlZCBvciB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZC4gVGhpcyBsZWFkcyB0byB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMgYW5kIHdvcmtxdWV1ZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB3aGljaCwgYXMgd2Uga25vdywgYXJlIG5hc3R5IHRvIGRlYnVnLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWxlZ2FudCwgZm9jdXNpbmcgb24gdHdvIGtleSBhY3Rpb25zLiBGaXJzdCwgYGRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7YCBwcmV2ZW50cyB0aGUgcmVxdWV1aW5nIG9mIGRpc2NhcmQgd29yayBhZnRlciBgZXh0NF9tYl9yZWxlYXNlYCBzdGFydHMsIGVuc3VyaW5nIHRoYXQgbm8gbmV3IHdvcmsgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGR1cmluZyB0aGlzIGNyaXRpY2FsIHBlcmlvZC4gU2Vjb25kLCBhbmQgY3J1Y2lhbGx5LCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgY29tbWl0cyBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGJlZm9yZSB0aGUgbWJhbGxvYyBpcyBzaHV0IGRvd24uIFRoaXMgaXMgdGhlIHNhZmVndWFyZCB0aGF0IGVuc3VyZXMgdGhlIGRpc2NhcmQgd29yayBxdWV1ZWQgKmJlZm9yZSogdGhlIGNvbW1pdCBjb21wbGV0ZXMgKmJlZm9yZSogbWJhbGxvYyBpcyBzaHV0IGRvd24uCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgbGVha3MgaW5mb3JtYXRpb24uIEFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHJlYWRzLiBUaGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8gbGVha3MsIGFuZCBubyBwYWRkaW5nIGlzc3Vlcywgbm9yIGFueSBuZXcgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSBhdCByaXNrLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIGNsZWFybHkgVUFGLCByYWNlIGNvbmRpdGlvbnMsIGFuZCB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIHByb2JsZW1zIGR1cmluZyB1bm1vdW50L2Vycm9yIHNjZW5hcmlvcywgd2hpY2ggYXJlIHRoYW5rZnVsbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBLTVNBTiwgaG93ZXZlciwgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdoaWNoIGlzbiYjMzk7dCB0aGUgZm9jdXMgaGVyZS4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7dmUgY29uZmlybWVkIHRoZSBwYXRjaCYjMzk7cyBzY29wZS4gVGhlIGZpeCBjb25zaXN0cyBvZiB0d28gcGFydHM6IHRoZSBgZGlzYWJsZV93b3JrX3N5bmNgIGNhbGwgd2l0aGluIGBleHQ0X21iX3JlbGVhc2VgIGFuZCBgZXh0NF9mb3JjZV9jb21taXRgIGluIHRoZSBgZXh0NF9maWxsX3N1cGVyYCBlcnJvciBwYXRoLiBOZWl0aGVyIG9mIHRoZXNlIHNlY3Rpb25zIGludHJvZHVjZXMsIG9yIGV2ZW4gdG91Y2hlcywgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZGlmZmVyZW50IGNhdGVnb3J5IG9mIG1lbW9yeSBzYWZldHkgaXNzdWUsIGFuZCB3aGlsZSBpbXBvcnRhbnQsIGRvZXNuJiMzOTt0IHdhcnJhbnQgS01TQU4gYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4mIzM5O3MgZG9tYWluIHJhdGhlciB0aGFuIEtNU0FOJiMzOTtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3JkZXJpbmcgZHVyaW5nIG1vdW50IGZhaWx1cmUgY2xlYW51cCBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgb24gc19kaXNjYXJkX3dvcmsgaW4gZXh0NF9tYl9yZWxlYXNlKCkgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgYmVmb3JlIHRlYXJpbmcgZG93biBtYmFsbG9jIHRvIHByZXZlbnQgZGlzY2FyZCB3b3JrIGZyb20gcnVubmluZyBhZnRlciBvciBkdXJpbmcgbWJhbGxvYyBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGlzc3VlcyBkdXJpbmcgZmlsZXN5c3RlbSB1bm1vdW50L2Vycm9yIHBhdGhzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBzbyB0aGVzZSByaXNrcyBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbiByYXRoZXIgdGhhbiBLTVNBTiYjMzk7cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo0MC42NjE5MDY0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODgyMjQ4ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgICBcImV4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9mb3JjZV9jb21taXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4ncyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4ncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgbWJhbGxvYyBzaHV0ZG93biBsb2dpYyBhbmQgbW91bnQgZmFpbHVyZSBlcnJvciBoYW5kbGluZyBwYXRocywgYWRkaW5nIGV4dDRfZm9yY2VfY29tbWl0IGFuZCBkaXNhYmxpbmcgZGlzY2FyZCB3b3JrIGJlZm9yZSByZWxlYXNpbmcgbWJhbGxvYyBzdHJ1Y3R1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBleHQ0IG1vdW50L3VubW91bnQgcGF0aHMgYW5kIG1vdW50IGVycm9yIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NDAuNjYxOTEyNDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTAyNjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3Nzc1YjlkOTM1N2VmMjVhMzliNzBmMTBjNzUzY2I1ZjBhYTg5Y2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxMjo1NzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuaW5kZXggZWQxYmQwMGUxMWNkNS4uODc0YjcxOTMxYWI2ZiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuQEAgLTM4OTcsNiArMzg5Nyw4IEBAIHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdCAqIHdhaXQgdGhlIGRpc2NhcmQgd29yayB0byBkcmFpbiBhbGwgb2YgZXh0NF9mcmVlX2RhdGFcXG4gXFx0ICovXFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19kaXNjYXJkX3dvcmspO1xcbitcXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXFxuK1xcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XFxuIFxcbiBcXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cXHUwMDNlc19ncm91cF9pbmZvKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtNTc2MSw2ICs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIGZhaWxlZF9tb3VudDc6XFxuIFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG4gZmFpbGVkX21vdW50NjpcXG4rXFx0LypcXG4rXFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxcbitcXHQgKiBzZXR1cC4gQ29tbWl0IGl0IHNvIHRoYXQgZGlzY2FyZCB3b3JrIGFmdGVyIGNvbW1pdCBydW5zIGJlZm9yZVxcbitcXHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxcbitcXHQgKi9cXG4rXFx0ZXh0NF9mb3JjZV9jb21taXQoc2IpO1xcbiBcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbiBcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG4gZmFpbGVkX21vdW50NTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NDEuMjM3ODc4MjQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTg4NDQzMzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9tYl9yZWxlYXNlXCIsXG4gICAgXCJleHQ0X2ZpbGxfc3VwZXJcIixcbiAgICBcImV4dDRfZm9yY2VfY29tbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3Nzc1YjlkOTM1N2VmMjVhMzliNzBmMTBjNzUzY2I1ZjBhYTg5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjU3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggZWQxYmQwMGUxMWNkNS4uODc0YjcxOTMxYWI2ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4rKysgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTM4OTcsNiArMzg5Nyw4IEBAIHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhXG4gXHQgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF93b3JrKTtcbitcdC8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi9cbitcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG4gXG4gXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cdTAwM2VzX2dyb3VwX2luZm8pO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNTc2MSw2ICs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gZmFpbGVkX21vdW50NzpcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiBmYWlsZWRfbW91bnQ2OlxuK1x0LypcbitcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbitcdCAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlXG4rXHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxuK1x0ICovXG4rXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG4gXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuIFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50NTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU3OjQxLjIzNzg4MDI1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTk5NTQyNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbml0aWFsIFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNjb3BlLiBJdCBsb29rcyBsaWtlIHRoaXMgb25lIGlzIGZvY3VzZWQgb24gY2hhbmdlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBmcy9leHQ0L21iYWxsb2MuY2AgYW5kIGBmcy9leHQ0L3N1cGVyLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoZSBzcGVjaWZpYyBmaWxlcywgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBhcmVhczogaG93IG1pZ2h0IHRoaXMgYWZmZWN0IGJsb2NrIGFsbG9jYXRpb24sIHN1cGVyIGJsb2NrIGhhbmRsaW5nLCBvciBvdmVyYWxsIGZpbGVzeXN0ZW0gaW50ZWdyaXR5PyBUaW1lIHRvIGRpZyBpbiBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIHRvIGRvIHRoaXMgSSB3aWxsIHBlcmZvcm0gYSByZWFkLWZpbGUgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcy4gSSB3aWxsIGFsc28gbWFrZSBhbiBhZGRpdGlvbmFsIGdyZXBwZXIgc2VhcmNoIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzQsIk91dHB1dFRva2VucyI6NzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU3OjUxLjgzNzQyNTU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvbWJhbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4ODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4ODU6XFx0XFxuMzg4NjpcXHR2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjM4ODc6XFx0e1xcbjM4ODg6XFx0XFx0ZXh0NF9ncm91cF90IG5ncm91cHMgPSBleHQ0X2dldF9ncm91cHNfY291bnQoc2IpO1xcbjM4ODk6XFx0XFx0ZXh0NF9ncm91cF90IGk7XFxuMzg5MDpcXHRcXHRpbnQgbnVtX21ldGFfZ3JvdXBfaW5mb3M7XFxuMzg5MTpcXHRcXHRzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncmluZm8sICoqKmdyb3VwX2luZm87XFxuMzg5MjpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcXG4zODkzOlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBnZXRfZ3JvdXBpbmZvX2NhY2hlKHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcXG4zODk0OlxcdFxcdGludCBjb3VudDtcXG4zODk1OlxcdFxcbjM4OTY6XFx0XFx0LypcXG4zODk3OlxcdFxcdCAqIHdhaXQgdGhlIGRpc2NhcmQgd29yayB0byBkcmFpbiBhbGwgb2YgZXh0NF9mcmVlX2RhdGFcXG4zODk4OlxcdFxcdCAqL1xcbjM4OTk6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfd29yayk7XFxuMzkwMDpcXHRcXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXFxuMzkwMTpcXHRcXHRkaXNhYmxlX3dvcmtfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfd29yayk7XFxuMzkwMjpcXHRcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNnNiaS1cXHUwMDNlc19kaXNjYXJkX2xpc3QpKTtcXG4zOTAzOlxcdFxcbjM5MDQ6XFx0XFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXFx1MDAzZXNfZ3JvdXBfaW5mbyk7XFxuMzkwNTpcXHRcXHRpZiAoZ3JvdXBfaW5mbykge1xcbjM5MDY6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ncm91cHM7IGkrKykge1xcbjM5MDc6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMzkwODpcXHRcXHRcXHRcXHRncmluZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBpKTtcXG4zOTA5OlxcdFxcdFxcdFxcdGlmICghZ3JpbmZvKVxcbjM5MTA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzkxMTpcXHRcXHRcXHRcXHRtYl9ncm91cF9iYl9iaXRtYXBfZnJlZShncmluZm8pO1xcbjM5MTI6XFx0XFx0XFx0XFx0ZXh0NF9sb2NrX2dyb3VwKHNiLCBpKTtcXG4zOTEzOlxcdFxcdFxcdFxcdGNvdW50ID0gZXh0NF9tYl9jbGVhbnVwX3BhKGdyaW5mbyk7XFxuMzkxNDpcXHRcXHRcXHRcXHRpZiAoY291bnQpXFxuMzkxNTpcXHRcXHRcXHRcXHRcXHRtYl9kZWJ1ZyhzYiwgXFxcIm1iYWxsb2M6ICVkIFBBcyBsZWZ0XFxcXG5cXFwiLFxcbjM5MTY6XFx0XFx0XFx0XFx0XFx0XFx0IGNvdW50KTtcXG4zOTE3OlxcdFxcdFxcdFxcdGV4dDRfdW5sb2NrX2dyb3VwKHNiLCBpKTtcXG4zOTE4OlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdyaW5mbyk7XFxuMzkxOTpcXHRcXHRcXHR9XFxuMzkyMDpcXHRcXHRcXHRudW1fbWV0YV9ncm91cF9pbmZvcyA9IChuZ3JvdXBzICtcXG4zOTIxOlxcdFxcdFxcdFxcdFxcdEVYVDRfREVTQ19QRVJfQkxPQ0soc2IpIC0gMSkgXFx1MDAzZVxcdTAwM2VcXG4zOTIyOlxcdFxcdFxcdFxcdEVYVDRfREVTQ19QRVJfQkxPQ0tfQklUUyhzYik7XFxuMzkyMzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX21ldGFfZ3JvdXBfaW5mb3M7IGkrKylcXG4zOTI0OlxcdFxcdFxcdFxcdGtmcmVlKGdyb3VwX2luZm9baV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo1MS44Mzc4ODE5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTc1MDpcXHRcXHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cXG41NzUxOlxcdFxcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xcbjU3NTI6XFx0XFx0aWYgKGVycilcXG41NzUzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50OTtcXG41NzU0OlxcdFxcbjU3NTU6XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdGZhaWxlZF9tb3VudDk6XFxuNTc1ODpcXHRcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG41NzU5OlxcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuNTc2MDpcXHRcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbjU3NjE6XFx0ZmFpbGVkX21vdW50NzpcXG41NzYyOlxcdFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG41NzYzOlxcdGZhaWxlZF9tb3VudDY6XFxuNTc2NDpcXHRcXHQvKlxcbjU3NjU6XFx0XFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxcbjU3NjY6XFx0XFx0ICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmVcXG41NzY3OlxcdFxcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXFxuNTc2ODpcXHRcXHQgKi9cXG41NzY5OlxcdFxcdGV4dDRfZm9yY2VfY29tbWl0KHNiKTtcXG41NzcwOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc3MTpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzcyOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc3MzpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc3NDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzc3OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc3ODpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzc5OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4MDpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzgxOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc4MjpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3ODM6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3ODQ6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuNTc4NTpcXHRcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbjU3ODY6XFx0XFxuNTc4NzpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcXG41Nzg4OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XFxuNTc4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NTEuODM4MzM5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTYyMDExNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha2FnZSBpbiBleHQ0IEZpbGVzeXN0ZW0gQ2xlYW51cCoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoZSBhbGxvY2F0aW9uIGJpdG1hcCByZWxlYXNlIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGV4dDRfZmlsbF9zdXBlcmAncyBlcnJvciBoYW5kbGluZywgdGhlIGBleHQ0X21iX3JlbGVhc2VgIGZ1bmN0aW9uICh3aGljaCBzaG91bGQgYmUgaGFuZGxpbmcgdGhlIGFjdHVhbCBiaXRtYXAgcmVsZWFzZSksIGFuZCB0aGUgZGlzY2FyZCB3b3JrIHF1ZXVlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIHRocmVlIGFyZWFzIGFyZSBwbGF5aW5nIG5pY2VseSB0b2dldGhlci5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBleHQ0X21iX3JlbGVhc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBjb3JyZWN0bHkgaW52b2tlZCBkdXJpbmcgdW5tb3VudCBhbmQgZ2VuZXJhbCBmaWxlc3lzdGVtIGNsZWFudXAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGV4dDRfcHV0X3N1cGVyYCwgYnV0IEknbGwgYWxzbyBzY2FuIGZvciBvdGhlciBjbGVhbnVwIHBhdGhzIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEknbGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBjb2RlIHNlYXJjaCBmb3IgYGV4dDRfbWJfcmVsZWFzZWAgdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIGl04oCZcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgd2hlcmUgaXQgKmlzbid0KiBiZWluZyB1c2VkIHdoZW4gaXQgc2hvdWxkIGJlLiBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgZXZlcnkgYWxsb2NhdGVkIGJpdG1hcCBpcyBmcmVlZCBpbiBhbGwgcmVsZXZhbnQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo1NC40MDAzNTUwNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTU5MDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X21iX3JlbGVhc2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzA5Mz1leHRlcm4gaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvZXh0NC9leHQ0Lmg6MzA5NDpleHRlcm4gdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbmZzL2V4dDQvZXh0NC5oLTMwOTUtZXh0ZXJuIGV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9NzM9c3RhdGljIGludCBtYnRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTUtZXJyX21iX3JlbGVhc2U6XFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMTY6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTExNy1lcnJfb3V0Olxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz0xMjM9c3RhdGljIHZvaWQgbWJ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI2LVxcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZyZWVjbHVzdGVyc19jb3VudGVyKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjEyNzpcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI4LVxcdGtmcmVlKHNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX3F1ZXVlKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlxcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00Njg3PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiBjb250ZXh0LiAgV2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMzogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSd2ZSBhbHJlYWR5XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyNC0gKiB6ZXJvZWQgb3V0IGFjLVxcdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXFx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00NzkyPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00ODA2LVxcdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA3OlxcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwOC1cXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3OD1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMjEtXFx0XFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIyOlxcdFxcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMy1cXHRcXHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTM9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTctXFx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5ODpcXHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTktXFx0ICovXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NDE4PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTk6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MjAtXFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0Ny1cXHRcXHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0ODpcXHRcXHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICtcXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ3MD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5mcy9leHQ0L21iYWxsb2MuYzo1NDcxOmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzItXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3Ny1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc4OlxcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzktXFx0QlVHX09OKHBhLVxcdTAwM2VwYV9kZWxldGVkID09IDApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTUwMT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXFx0XFx0aWYgKHBhLVxcdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MzpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODQtXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNihwYSktXFx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy01NTg1LVxcdFxcdH0gZWxzZSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NjpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4Ny1cXHRcXHRcXHRleHQ0X21iX3BhX2ZyZWUocGEpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwOT12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwNS1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cGEtXFx1MDAzZXBhX2dyb3VwX2xpc3QpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDY6XFx0XFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFxcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDctXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTU5Mzc9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDAxLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYS1cXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMjpcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDMtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYwMjA9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDY3LSAqL1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjg6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG5mcy9leHQ0L21iYWxsb2MuYy02MDY5LXtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYyMzE9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cXHR9XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NjpcXHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1Ny1cXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzk9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjcyODA6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNzI4MS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzIyLVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTMyNC1cXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTc2OS1cXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XFxuZnMvZXh0NC9zdXBlci5jOjU3NzA6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc3MS1cXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD03NzA9REVGSU5FX0VWRU5UKGV4dDRfX21iX25ld19wYSwgZXh0NF9tYl9uZXdfZ3JvdXBfcGEsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtNzc3LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDo3Nzg6VFJBQ0VfRVZFTlQoZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC03NzktXFx0VFBfUFJPVE8oc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTgwNC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6ODA1OlRSQUNFX0VWRU5UKGV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtODA2LVxcdFRQX1BST1RPKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU3OjU2Ljg2OTk1NDkzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjgzMDIzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGV4dDRfcHV0X3N1cGVyYCBDb250ZXh0KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29kZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBgZXh0NF9wdXRfc3VwZXJgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtIGNsZWFudXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBsaWZlY3ljbGUsIGFzIHdlbGwgYXMgdGhlIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXRzZWxmLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0uIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXkgYXQgdGhpcyBwb2ludD8gQW5kIHRoZSBwb3RlbnRpYWwgcmVwZXJjdXNzaW9ucyBpZiBpdCBmYWlscz8gSSBjYW4ndCBqdXN0IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGluIGlzb2xhdGlvbjsgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGNvZGUncyBoaWVyYXJjaHkuIExldCdzIGRpZyBpbiBhIGJpdCBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NTguNzk4MjYwMTE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzEwOlxcdFxcbjEzMTE6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuMTMxMjpcXHRcXHRcXHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG4xMzEzOlxcdFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbjEzMTQ6XFx0XFx0XFx0aWYgKChlcnIgXFx1MDAzYyAwKSBcXHUwMDI2XFx1MDAyNiAhYWJvcnRlZCkge1xcbjEzMTU6XFx0XFx0XFx0XFx0ZXh0NF9hYm9ydChzYiwgLWVyciwgXFxcIkNvdWxkbid0IGNsZWFuIHVwIHRoZSBqb3VybmFsXFxcIik7XFxuMTMxNjpcXHRcXHRcXHR9XFxuMTMxNzpcXHRcXHR9IGVsc2VcXG4xMzE4OlxcdFxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19zYl91cGRfd29yayk7XFxuMTMxOTpcXHRcXG4xMzIwOlxcdFxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbjEzMjE6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbjEzMjI6XFx0XFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcXG4xMzIzOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuMTMyNDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0aWYgKCFleHQ0X2VtZXJnZW5jeV9zdGF0ZShzYikgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4xMzI3OlxcdFxcdFxcdGlmICghYWJvcnRlZCkge1xcbjEzMjg6XFx0XFx0XFx0XFx0ZXh0NF9jbGVhcl9mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpO1xcbjEzMjk6XFx0XFx0XFx0XFx0ZXh0NF9jbGVhcl9mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKTtcXG4xMzMwOlxcdFxcdFxcdFxcdGVzLVxcdTAwM2VzX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLVxcdTAwM2VzX21vdW50X3N0YXRlKTtcXG4xMzMxOlxcdFxcdFxcdH1cXG4xMzMyOlxcdFxcdFxcdGV4dDRfY29tbWl0X3N1cGVyKHNiKTtcXG4xMzMzOlxcdFxcdH1cXG4xMzM0OlxcdFxcbjEzMzU6XFx0XFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG4xMzM2OlxcdFxcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xcbjEzMzc6XFx0XFxuMTMzODpcXHRcXHRXQVJOX09OX09OQ0UoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0VSUk9SX0ZTKSBcXHUwMDI2XFx1MDAyNlxcbjEzMzk6XFx0XFx0XFx0ICAgICBwZXJjcHVfY291bnRlcl9zdW0oXFx1MDAyNnNiaS1cXHUwMDNlc19kaXJ0eWNsdXN0ZXJzX2NvdW50ZXIpKTtcXG4xMzQwOlxcdFxcdGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc2JpKTtcXG4xMzQxOlxcdCNpZmRlZiBDT05GSUdfUVVPVEFcXG4xMzQyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkrKylcXG4xMzQzOlxcdFxcdFxcdGtmcmVlKGdldF9xZl9uYW1lKHNiLCBzYmksIGkpKTtcXG4xMzQ0OlxcdCNlbmRpZlxcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHQvKiBEZWJ1Z2dpbmcgY29kZSBqdXN0IGluIGNhc2UgdGhlIGluLW1lbW9yeSBpbm9kZSBvcnBoYW4gbGlzdFxcbjEzNDc6XFx0XFx0ICogaXNuJ3QgZW1wdHkuICBUaGUgb24tZGlzayBvbmUgY2FuIGJlIG5vbi1lbXB0eSBpZiB3ZSd2ZVxcbjEzNDg6XFx0XFx0ICogZGV0ZWN0ZWQgYW4gZXJyb3IgYW5kIHRha2VuIHRoZSBmcyByZWFkb25seSwgYnV0IHRoZVxcbjEzNDk6XFx0XFx0ICogaW4tbWVtb3J5IGxpc3QgaGFkIGJldHRlciBiZSBjbGVhbiBieSB0aGlzIHBvaW50LiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo1OC43OTg1MTM2MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkxNDU5MTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZXh0NCBGaWxlc3lzdGVtKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBzZWUgd2UncmUgbG9va2luZyBhdCBgZnMvZXh0NC9tYmFsbG9jLmNgIGFuZCBgZnMvZXh0NC9zdXBlci5jYC4gUmlnaHQgYXdheSwgdGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEV4dDQgaXMgYSBjbGFzc2ljLCBhIGNvcmUgTGludXggZmlsZXN5c3RlbS4gVGhhdCBtYWtlcyBpdCBib3RoIGNydWNpYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqZWFzaWx5KiBmdXp6YWJsZSB2aWEgc3RhbmRhcmQgYXZlbnVlcyBsaWtlIG1vdW50aW5nIGNvcnJ1cHRlZCBpbWFnZXMsIGxvb3AgZGV2aWNlcywgYW5kIG9mIGNvdXJzZSwgc3l6a2FsbGVyLiBUaGUgYXR0YWNrIHN1cmZhY2UgaXMgZGVmaW5pdGVseSB0aGVyZS5cblxuRmlyc3QsIGxldCdzIHBpbnBvaW50IHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSd2ZSBnb3Q6XG5cbjEuICBJbiBgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYDogSSBzcG90IHRoYXQgYGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7YCBpcyBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBgZmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO2AuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHN5bmNocm9uaXphdGlvbiBjaGFuZ2UgaW4gdGhlIGRpc2NhcmQgd29yay5cbjIuICBBbHNvLCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgaXMgYWRkZWQgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZShzYik7YCBpbiBgZmFpbGVkX21vdW50NmAgd2l0aGluIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgbW91bnQgZmFpbHVyZSBwYXRoIC0gaW50ZXJlc3RpbmcuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbnM6IElzIGV4dDQgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIGZ1enppbmcgc2NlbmFyaW8/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gSXQncyBhIGNvcmUgZmlsZXN5c3RlbS4gU3l6a2FsbGVyIG1ha2VzIHNob3J0IHdvcmsgb2YgdHJpZ2dlcmluZyBhbGwgc29ydHMgb2YgZXh0NCBjb2RlIHBhdGhzLiBUaGUgc2Vjb25kIHF1ZXN0aW9uLCBpcyB0aGlzIHRhcmdldGVkIGNvZGUgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZCB2aWEgbm9ybWFsIG9wZXJhdGlvbj8gQWJzb2x1dGVseS4gTW91bnQgZmFpbHVyZXMgYXJlIHJvdXRpbmUgaW4gZnV6emluZywgYW5kIHRoZSBzdXBlcmJsb2NrIHJlbGVhc2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIChgZXh0NF9tYl9yZWxlYXNlYCwgYGV4dDRfZmlsbF9zdXBlcmAsIGBleHQ0X3B1dF9zdXBlcmApIGFyZSBkaXJlY3RseSBoaXQgYnkgc3l6a2FsbGVyLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uOiBMZXQgbWUgY2hlY2sgdGhlIGBDT05GSUdfRVhUNF9GU2AgaW4gdGhlIEtjb25maWcsIGFuZCB0aGVuIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9leHQ0L0tjb25maWdgIGl0c2VsZiB0byBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MDIuNzEzMTA3OTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3ODMwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODowMi44MTY4OTg3MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4NTU1OTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IHN5bWJvbHMuIEkgc2VlIGBleHQ0X21iX3JlbGVhc2VgLCBgZXh0NF9maWxsX3N1cGVyYCwgYGV4dDRfZm9yY2VfY29tbWl0YCwgYW5kIGBleHQ0X3B1dF9zdXBlcmAuICpIbW0qLCBgZXh0NF9wdXRfc3VwZXJgIGlzIGxpa2VseSBub3QgYXMgY3JpdGljYWwgYXMgdGhlIG90aGVycyBmb3IgdGhpcyBwdXJwb3NlLCBzbyBJJ2xsIGV4Y2x1ZGUgaXQgZnJvbSBpbml0aWFsIGNvbnNpZGVyYXRpb24uXG5cbk5vdywgYXJlIHRoZSByZW1haW5pbmcgdGhyZWUgZ29vZCAqRm9jdXNTeW1ib2xzKj8gSSB0aGluayBzbywgYmVjYXVzZSB0aGV5IGFyZSBkZWZpbml0ZWx5IG5vdCB1YmlxdWl0b3VzLiBgZXh0NF9tYl9yZWxlYXNlYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBleHQ0IHN1cGVyYmxvY2sgdGVhcmRvd24sIG1vdW50IGVycm9yIGhhbmRsaW5nLCBhbmQgbWJhbGxvYyBjbGVhbnVwLiBgZXh0NF9maWxsX3N1cGVyYCBpcywgb2YgY291cnNlLCBjcml0aWNhbCBmb3IgZXh0NCBtb3VudGluZy4gRmluYWxseSwgYGV4dDRfZm9yY2VfY29tbWl0YCBpcyBhbGwgYWJvdXQgY29tbWl0dGluZyB0aGUgZXh0NCBqb3VybmFsLlxuXG5UaGUgKldvcnRoRnV6emluZyogZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0LiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvdW5kOyB0aGlzIHBhdGNoIHRhcmdldHMgZXJyb3IgaGFuZGxpbmcgaW4gYGV4dDRfZmlsbF9zdXBlcmAgYW5kIGNsZWFudXAgaW4gYGV4dDRfbWJfcmVsZWFzZWAuIEl0IGFsc28gbWVudGlvbnMgdGhhdCBpdCBwcmV2ZW50cyBkaXNjYXJkIHdvcmsgcmVxdWV1ZWluZyBkdXJpbmcgam91cm5hbCB0ZWFyZG93bi4gVGhhdCdzIGEgZ29vZCBzaWduIGJlY2F1c2UgdGhlc2UgcGF0aHMgYXJlIHRyaWdnZXJlZCBkdXJpbmcgbW91bnQgZXJyb3IgdW53aW5kaW5nIGFuZCB1bm1vdW50IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuXG5cblNvLCBsZXQncyB2ZXJpZnkgbXkgZmluZGluZ3MuIEknbGwgY29uZmlybSB0aGF0IHRoZSAqRW5hYmxlQ29uZmlncyogdmFsdWUgaXMgY29ycmVjdC4gSSBzZWUgW1wiRVhUNF9GU1wiXS4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlICpGb2N1c1N5bWJvbHMqIGFyZSBub24tdWJpcXVpdG91cywgYW5kIHNwZWNpZmljLiBUaGV5IGFsc28gc2VlbSB0byByZXByZXNlbnQgYSBnb29kIHNldCBvZiBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgKlJlYXNvbmluZyogaXMgY29uY2lzZSBhbmQgY2xlYXIuIFRoaXMgY2hlY2tzIG91dC5cblxuT2theSwgYWxsIHRoZSBkZXRhaWxzIGxvb2sgZ29vZC4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTI1LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODowNy4wMDI0Njc2NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4NDA5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgICBcImV4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9mb3JjZV9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0IG1iYWxsb2Mgc2h1dGRvd24gbG9naWMgYW5kIG1vdW50IGZhaWx1cmUgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGFkZGluZyBleHQ0X2ZvcmNlX2NvbW1pdCBhbmQgZGlzYWJsaW5nIGRpc2NhcmQgd29yayBiZWZvcmUgcmVsZWFzaW5nIG1iYWxsb2Mgc3RydWN0dXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgZXh0NCBtb3VudC91bm1vdW50IHBhdGhzIGFuZCBtb3VudCBlcnJvciBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfbWJfcmVsZWFzZVwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJleHQ0X2ZvcmNlX2NvbW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgbWJhbGxvYyBzaHV0ZG93biBsb2dpYyBhbmQgbW91bnQgZmFpbHVyZSBlcnJvciBoYW5kbGluZyBwYXRocywgYWRkaW5nIGV4dDRfZm9yY2VfY29tbWl0IGFuZCBkaXNhYmxpbmcgZGlzY2FyZCB3b3JrIGJlZm9yZSByZWxlYXNpbmcgbWJhbGxvYyBzdHJ1Y3R1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBleHQ0IG1vdW50L3VubW91bnQgcGF0aHMgYW5kIG1vdW50IGVycm9yIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MDcuMTIyMzE1Nzk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyMTgxNzgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU4OjA3LjEyMjkxMzUwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNDIxMjE0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3JkZXJpbmcgZHVyaW5nIG1vdW50IGZhaWx1cmUgY2xlYW51cCBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgb24gc19kaXNjYXJkX3dvcmsgaW4gZXh0NF9tYl9yZWxlYXNlKCkgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgYmVmb3JlIHRlYXJpbmcgZG93biBtYmFsbG9jIHRvIHByZXZlbnQgZGlzY2FyZCB3b3JrIGZyb20gcnVubmluZyBhZnRlciBvciBkdXJpbmcgbWJhbGxvYyBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGlzc3VlcyBkdXJpbmcgZmlsZXN5c3RlbSB1bm1vdW50L2Vycm9yIHBhdGhzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBzbyB0aGVzZSByaXNrcyBmYWxsIHVuZGVyIEtBU0FOJ3MgZG9tYWluIHJhdGhlciB0aGFuIEtNU0FOJ3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNzc3NWI5ZDkzNTdlZjI1YTM5YjcwZjEwYzc1M2NiNWYwYWE4OWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMjo1NzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmNcbmluZGV4IGVkMWJkMDBlMTFjZDUuLjg3NGI3MTkzMWFiNmYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xuKysrIGIvZnMvZXh0NC9tYmFsbG9jLmNcbkBAIC0zODk3LDYgKzM4OTcsOCBAQCB2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxuIFx0ICovXG4gXHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4rXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xuIFxuIFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXHUwMDNlc19ncm91cF9pbmZvKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDRiNjExMmU1ZDZjNTkuLjM3ZGM2YjVmMjBjNjEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTU3NjEsNiArNTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIGZhaWxlZF9tb3VudDc6XG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4gZmFpbGVkX21vdW50NjpcbitcdC8qXG4rXHQgKiBXZSBjYW4gaGF2ZSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gZnJvbSBvcnBoYW4gcmVwbGF5IG9yIHF1b3RhXG4rXHQgKiBzZXR1cC4gQ29tbWl0IGl0IHNvIHRoYXQgZGlzY2FyZCB3b3JrIGFmdGVyIGNvbW1pdCBydW5zIGJlZm9yZVxuK1x0ICogd2Ugc2h1dGRvd24gbWJhbGxvYy5cbitcdCAqL1xuK1x0ZXh0NF9mb3JjZV9jb21taXQoc2IpO1xuIFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbiBcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODowNy4xMjI5MTQ0NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg4MzEwNTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFBvdGVudGlhbCBNZW1vcnkgU2FmZXR5IGFuZCBTeW5jaHJvbml6YXRpb24gSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHByaW1hcmlseSBhZGRyZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyAoS01TQU4pIG9yIGlmIGl0J3MgZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiwgY2xlYW51cCwgdXNlLWFmdGVyLWZyZWUgKFVBRiksIG9yIHRlYXJkb3duIG9yZGVyaW5nIHByb2JsZW1zIChLQVNBTi9MT0NLREVQIHRlcnJpdG9yeSkuXG5cblJlYWRpbmcgdGhlIHBhdGNoIGl0c2VsZiByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgYWRkaXRpb25zLiBJbiBgZnMvZXh0NC9tYmFsbG9jLmNgLCB3ZSBzZWUgYSBuZXcgYGRpc2FibGVfd29ya19zeW5jYCBjYWxsIGFkZGVkIHRvIHRoZSBgZXh0NF9tYl9yZWxlYXNlYCBmdW5jdGlvbjpcblxuYGBgY1xudm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbntcbi4uLlxuXHQvKlxuXHQgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhXG5cdCAqL1xuXHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4rXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG5gYGBcblxuVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSBqb3VybmFsIHRlYXJkb3duIGZyb20gcmUtZW5xdWV1aW5nIGRpc2NhcmQgd29yay4gSW50ZXJlc3RpbmcuIEl0IGltcGxpZXMgYSBzcGVjaWZpYyBvcmRlcmluZyBkZXBlbmRlbmN5IG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gQWxzbyBpbiBgZnMvZXh0NC9zdXBlci5jYCwgd2l0aGluIHRoZSBgZmFpbGVkX21vdW50YCBsYWJlbHMsIHRoZXJlIGlzOlxuXG5gYGBjXG5mYWlsZWRfbW91bnQ2OlxuK1x0LypcbitcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbitcdCAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlXG4rXHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxuK1x0ICovXG4rXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG5cdGV4dDRfbWJfcmVsZWFzZShzYik7XG5cdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuZmFpbGVkX21vdW50NTpcbmBgYFxuXG5UaGlzIGFkZGl0aW9uIG9mIGBleHQ0X2ZvcmNlX2NvbW1pdChzYilgIGJlZm9yZSBgZXh0NF9tYl9yZWxlYXNlKHNiKWAgaXMgYWxzbyBjcml0aWNhbC4gSXQgZXhwbGljaXRseSBhaW1zIHRvIGVuc3VyZSB0aGF0IGRpc2NhcmQgd29yaywgd2hpY2ggaXMgcGFydCBvZiB0aGUgYG1iYWxsb2NgIHN1YnN5c3RlbSwgaXMgY29tcGxldGVkIGJlZm9yZSB0ZWFyaW5nIHRoaW5ncyBkb3duLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIG91dC4gSSBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCBgZnMvZXh0NC9tYmFsbG9jLmNgIGFuZCBgZnMvZXh0NC9zdXBlci5jYCB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcGlucG9pbnQgKndoeSogdGhlc2UgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgZGlzY2FyZCB3b3JrLCBqb3VybmFsIHRlYXJkb3duLCBhbmQgdGhlIGBtYmFsbG9jYCBzdWJzeXN0ZW0gd2lsbCBiZSBjcnVjaWFsIHRvIGFzc2Vzc2luZyB0aGUgc291bmRuZXNzIG9mIHRoaXMgcGF0Y2guIElzIGl0IGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBiZWluZyBhZGRyZXNzZWQ/IE9yIGEgbW9yZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSB3b3JrcXVldWUgaW50ZXJhY3Rpb25zIGFuZCB0cmFuc2FjdGlvbiBzZW1hbnRpY3MgdG8gc2F5IGZvciBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ2LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MTIuMDA2MDIyNjgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21iYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODkwOlxcdFxcdGludCBudW1fbWV0YV9ncm91cF9pbmZvcztcXG4zODkxOlxcdFxcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbywgKioqZ3JvdXBfaW5mbztcXG4zODkyOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjM4OTM6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGdldF9ncm91cGluZm9fY2FjaGUoc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbjM4OTQ6XFx0XFx0aW50IGNvdW50O1xcbjM4OTU6XFx0XFxuMzg5NjpcXHRcXHQvKlxcbjM4OTc6XFx0XFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxcbjM4OTg6XFx0XFx0ICovXFxuMzg5OTpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4zOTAwOlxcdFxcdC8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi9cXG4zOTAxOlxcdFxcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4zOTAyOlxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xcbjM5MDM6XFx0XFxuMzkwNDpcXHRcXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cXHUwMDNlc19ncm91cF9pbmZvKTtcXG4zOTA1OlxcdFxcdGlmIChncm91cF9pbmZvKSB7XFxuMzkwNjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbmdyb3VwczsgaSsrKSB7XFxuMzkwNzpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4zOTA4OlxcdFxcdFxcdFxcdGdyaW5mbyA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpO1xcbjM5MDk6XFx0XFx0XFx0XFx0aWYgKCFncmluZm8pXFxuMzkxMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zOTExOlxcdFxcdFxcdFxcdG1iX2dyb3VwX2JiX2JpdG1hcF9mcmVlKGdyaW5mbyk7XFxuMzkxMjpcXHRcXHRcXHRcXHRleHQ0X2xvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTM6XFx0XFx0XFx0XFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcXG4zOTE0OlxcdFxcdFxcdFxcdGlmIChjb3VudClcXG4zOTE1OlxcdFxcdFxcdFxcdFxcdG1iX2RlYnVnKHNiLCBcXFwibWJhbGxvYzogJWQgUEFzIGxlZnRcXFxcblxcXCIsXFxuMzkxNjpcXHRcXHRcXHRcXHRcXHRcXHQgY291bnQpO1xcbjM5MTc6XFx0XFx0XFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTg6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ3JpbmZvKTtcXG4zOTE5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MTIuMDA2Mzk5MjQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc1MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTc1MDpcXHRcXHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cXG41NzUxOlxcdFxcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xcbjU3NTI6XFx0XFx0aWYgKGVycilcXG41NzUzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50OTtcXG41NzU0OlxcdFxcbjU3NTU6XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdGZhaWxlZF9tb3VudDk6XFxuNTc1ODpcXHRcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG41NzU5OlxcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuNTc2MDpcXHRcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbjU3NjE6XFx0ZmFpbGVkX21vdW50NzpcXG41NzYyOlxcdFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG41NzYzOlxcdGZhaWxlZF9tb3VudDY6XFxuNTc2NDpcXHRcXHQvKlxcbjU3NjU6XFx0XFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxcbjU3NjY6XFx0XFx0ICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmVcXG41NzY3OlxcdFxcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXFxuNTc2ODpcXHRcXHQgKi9cXG41NzY5OlxcdFxcdGV4dDRfZm9yY2VfY29tbWl0KHNiKTtcXG41NzcwOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc3MTpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzcyOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc3MzpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc3NDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzc3OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc3ODpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzc5OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4MDpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzgxOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc4MjpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3ODM6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3ODQ6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU4OjEyLjAwNjc0ODgxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTM3MzQ1NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYnVnIGZpeC4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIG1vdW50IGVycm9yIGNsZWFudXAgYW5kIG1iYWxsb2MgdGVhcmRvd24gcHJvY2Vzcy4gVGhlIGlzc3VlIGFyaXNlcyBmcm9tIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGRpc2NhcmQgd29ya3F1ZXVlLlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGBleHQ0X21iX3JlbGVhc2VgIGNhbiBzdGFydCBkaXNtYW50bGluZyB0aGUgZ3JvdXBfaW5mbyBhbmQgbWJhbGxvYyBzdHJ1Y3R1cmVzLiBJZiB0aGUgZGlzY2FyZCB3b3JrcXVldWUgaXMgYWxsb3dlZCB0byBleGVjdXRlIGVpdGhlciBhZnRlciBvciBjb25jdXJyZW50bHkgd2l0aCB0aGlzIHRlYXJkb3duIHByb2Nlc3MsIGl0IHJpc2tzIGFjY2Vzc2luZyBtZW1vcnkgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGZyZWVkIG9yIHRyeWluZyB0byBvcGVyYXRlIG9uIHN0cnVjdHVyZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkLiBUaGlzIGxlYWRzIHRvIHVzZS1hZnRlci1mcmVlIGVycm9ycyBhbmQgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgbmFzdHkgdG8gZGVidWcuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWxlZ2FudCwgZm9jdXNpbmcgb24gdHdvIGtleSBhY3Rpb25zLiBGaXJzdCwgYGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7YCBwcmV2ZW50cyB0aGUgcmVxdWV1aW5nIG9mIGRpc2NhcmQgd29yayBhZnRlciBgZXh0NF9tYl9yZWxlYXNlYCBzdGFydHMsIGVuc3VyaW5nIHRoYXQgbm8gbmV3IHdvcmsgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGR1cmluZyB0aGlzIGNyaXRpY2FsIHBlcmlvZC4gU2Vjb25kLCBhbmQgY3J1Y2lhbGx5LCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgY29tbWl0cyBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGJlZm9yZSB0aGUgbWJhbGxvYyBpcyBzaHV0IGRvd24uIFRoaXMgaXMgdGhlIHNhZmVndWFyZCB0aGF0IGVuc3VyZXMgdGhlIGRpc2NhcmQgd29yayBxdWV1ZWQgKmJlZm9yZSogdGhlIGNvbW1pdCBjb21wbGV0ZXMgKmJlZm9yZSogbWJhbGxvYyBpcyBzaHV0IGRvd24uXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLCBvciBwZXJoYXBzIGxlYWtzIGluZm9ybWF0aW9uLiBBZnRlciBhIGNhcmVmdWwgcmV2aWV3LCBpdCdzIGNsZWFyIHRoYXQgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcmVhZHMuIFRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mbyBsZWFrcywgYW5kIG5vIHBhZGRpbmcgaXNzdWVzLCBub3IgYW55IG5ldyBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIGF0IHJpc2suIFRoZSBidWdzIGFkZHJlc3NlZCBhcmUgY2xlYXJseSBVQUYsIHJhY2UgY29uZGl0aW9ucywgYW5kIHdvcmtxdWV1ZSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMgZHVyaW5nIHVubW91bnQvZXJyb3Igc2NlbmFyaW9zLCB3aGljaCBhcmUgdGhhbmtmdWxseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIEtNU0FOLCBob3dldmVyLCBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgd2hpY2ggaXNuJ3QgdGhlIGZvY3VzIGhlcmUuXG5cblRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSd2ZSBjb25maXJtZWQgdGhlIHBhdGNoJ3Mgc2NvcGUuIFRoZSBmaXggY29uc2lzdHMgb2YgdHdvIHBhcnRzOiB0aGUgYGRpc2FibGVfd29ya19zeW5jYCBjYWxsIHdpdGhpbiBgZXh0NF9tYl9yZWxlYXNlYCBhbmQgYGV4dDRfZm9yY2VfY29tbWl0YCBpbiB0aGUgYGV4dDRfZmlsbF9zdXBlcmAgZXJyb3IgcGF0aC4gTmVpdGhlciBvZiB0aGVzZSBzZWN0aW9ucyBpbnRyb2R1Y2VzLCBvciBldmVuIHRvdWNoZXMsIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZGlmZmVyZW50IGNhdGVnb3J5IG9mIG1lbW9yeSBzYWZldHkgaXNzdWUsIGFuZCB3aGlsZSBpbXBvcnRhbnQsIGRvZXNuJ3Qgd2FycmFudCBLTVNBTiBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5OCwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODoxNy41NDQwOTc1NzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4ncyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4ncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4ncyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4ncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowgnbvn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 12:38:44 +0000 UTC FinishedAt: 2026-09-09 12:58:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "23da087d9a636d9b2046f3aa3b7470ae51b89c8a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "23da087d9a636d9b2046f3aa3b7470ae51b89c8a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "f780b1cb-4f06-4520-8fc4-94625f7d83e6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_mb_release", "ext4_fill_super", "ext4_force_commit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X21iX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZm9yY2VfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHdvcmtxdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIG9yZGVyaW5nIGR1cmluZyBtb3VudCBmYWlsdXJlIGNsZWFudXAgaW4gZXh0NC4gU3BlY2lmaWNhbGx5LCBpdCBjYWxscyBkaXNhYmxlX3dvcmtfc3luYygpIG9uIHNfZGlzY2FyZF93b3JrIGluIGV4dDRfbWJfcmVsZWFzZSgpIGFuZCBleHQ0X2ZvcmNlX2NvbW1pdCgpIGJlZm9yZSB0ZWFyaW5nIGRvd24gbWJhbGxvYyB0byBwcmV2ZW50IGRpc2NhcmQgd29yayBmcm9tIHJ1bm5pbmcgYWZ0ZXIgb3IgZHVyaW5nIG1iYWxsb2MgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBpc3N1ZXMgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudC9lcnJvciBwYXRocy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc28gdGhlc2Ugcmlza3MgZmFsbCB1bmRlciBLQVNBTiYjMzk7cyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4mIzM5O3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzc3NzViOWQ5MzU3ZWYyNWEzOWI3MGYxMGM3NTNjYjVmMGFhODljZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTI6NTc6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggZWQxYmQwMGUxMWNkNS4uODc0YjcxOTMxYWI2ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTM4OTcsNiAmIzQzOzM4OTcsOCBAQCB2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxuIFx0ICovXG4gXHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4mIzQzO1x0LyogUHJldmVudCB0aGUgbGF0ZXIgam91cm5hbCB0ZWFyZG93biBmcm9tIHJlcXVldWVpbmcgZGlzY2FyZCB3b3JrLiAqL1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG4gXG4gXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cdTAwM2VzX2dyb3VwX2luZm8pO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIGZhaWxlZF9tb3VudDc6XG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4gZmFpbGVkX21vdW50NjpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbiYjNDM7XHQgKiBzZXR1cC4gQ29tbWl0IGl0IHNvIHRoYXQgZGlzY2FyZCB3b3JrIGFmdGVyIGNvbW1pdCBydW5zIGJlZm9yZVxuJiM0MztcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXh0NF9mb3JjZV9jb21taXQoc2IpO1xuIFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbiBcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXh0NF9mb3JjZV9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzc3NzViOWQ5MzU3ZWYyNWEzOWI3MGYxMGM3NTNjYjVmMGFhODljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTI6NTc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGVkMWJkMDBlMTFjZDUuLjg3NGI3MTkzMWFiNmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0zODk3LDYgJiM0MzszODk3LDggQEAgdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhCiAJICovCiAJZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovCiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfbGlzdCkpOwogCiAJZ3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktJmd0O3NfZ3JvdXBfaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogZmFpbGVkX21vdW50NzoKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiBmYWlsZWRfbW91bnQ2OgomIzQzOwkvKgomIzQzOwkgKiBXZSBjYW4gaGF2ZSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gZnJvbSBvcnBoYW4gcmVwbGF5IG9yIHF1b3RhCiYjNDM7CSAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlCiYjNDM7CSAqIHdlIHNodXRkb3duIG1iYWxsb2MuCiYjNDM7CSAqLwomIzQzOwlleHQ0X2ZvcmNlX2NvbW1pdChzYik7CiAJZXh0NF9tYl9yZWxlYXNlKHNiKTsKIAlleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTsKIGZhaWxlZF9tb3VudDU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzQKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2UgdGhpcyBvbmUgaXMgZm9jdXNlZCBvbiBjaGFuZ2VzIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2V4dDQvbWJhbGxvYy5jYCBhbmQgYGZzL2V4dDQvc3VwZXIuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoZSBzcGVjaWZpYyBmaWxlcywgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBhcmVhczogaG93IG1pZ2h0IHRoaXMgYWZmZWN0IGJsb2NrIGFsbG9jYXRpb24sIHN1cGVyIGJsb2NrIGhhbmRsaW5nLCBvciBvdmVyYWxsIGZpbGVzeXN0ZW0gaW50ZWdyaXR5PyBUaW1lIHRvIGRpZyBpbiBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIHRvIGRvIHRoaXMgSSB3aWxsIHBlcmZvcm0gYSByZWFkLWZpbGUgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcy4gSSB3aWxsIGFsc28gbWFrZSBhbiBhZGRpdGlvbmFsIGdyZXBwZXIgc2VhcmNoIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4ODU6XHRcbjM4ODY6XHR2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuMzg4NzpcdHtcbjM4ODg6XHRcdGV4dDRfZ3JvdXBfdCBuZ3JvdXBzID0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKTtcbjM4ODk6XHRcdGV4dDRfZ3JvdXBfdCBpO1xuMzg5MDpcdFx0aW50IG51bV9tZXRhX2dyb3VwX2luZm9zO1xuMzg5MTpcdFx0c3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JpbmZvLCAqKipncm91cF9pbmZvO1xuMzg5MjpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG4zODkzOlx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwID0gZ2V0X2dyb3VwaW5mb19jYWNoZShzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbjM4OTQ6XHRcdGludCBjb3VudDtcbjM4OTU6XHRcbjM4OTY6XHRcdC8qXG4zODk3Olx0XHQgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhXG4zODk4Olx0XHQgKi9cbjM4OTk6XHRcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF93b3JrKTtcbjM5MDA6XHRcdC8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi9cbjM5MDE6XHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4zOTAyOlx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG4zOTAzOlx0XG4zOTA0Olx0XHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cdTAwM2VzX2dyb3VwX2luZm8pO1xuMzkwNTpcdFx0aWYgKGdyb3VwX2luZm8pIHtcbjM5MDY6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbmdyb3VwczsgaSYjNDM7JiM0MzspIHtcbjM5MDc6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjM5MDg6XHRcdFx0XHRncmluZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBpKTtcbjM5MDk6XHRcdFx0XHRpZiAoIWdyaW5mbylcbjM5MTA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzkxMTpcdFx0XHRcdG1iX2dyb3VwX2JiX2JpdG1hcF9mcmVlKGdyaW5mbyk7XG4zOTEyOlx0XHRcdFx0ZXh0NF9sb2NrX2dyb3VwKHNiLCBpKTtcbjM5MTM6XHRcdFx0XHRjb3VudCA9IGV4dDRfbWJfY2xlYW51cF9wYShncmluZm8pO1xuMzkxNDpcdFx0XHRcdGlmIChjb3VudClcbjM5MTU6XHRcdFx0XHRcdG1iX2RlYnVnKHNiLCBcJiMzNDttYmFsbG9jOiAlZCBQQXMgbGVmdFxcblwmIzM0OyxcbjM5MTY6XHRcdFx0XHRcdFx0IGNvdW50KTtcbjM5MTc6XHRcdFx0XHRleHQ0X3VubG9ja19ncm91cChzYiwgaSk7XG4zOTE4Olx0XHRcdFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ3JpbmZvKTtcbjM5MTk6XHRcdFx0fVxuMzkyMDpcdFx0XHRudW1fbWV0YV9ncm91cF9pbmZvcyA9IChuZ3JvdXBzICYjNDM7XG4zOTIxOlx0XHRcdFx0XHRFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKSAtIDEpIFx1MDAzZVx1MDAzZVxuMzkyMjpcdFx0XHRcdEVYVDRfREVTQ19QRVJfQkxPQ0tfQklUUyhzYik7XG4zOTIzOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9tZXRhX2dyb3VwX2luZm9zOyBpJiM0MzsmIzQzOylcbjM5MjQ6XHRcdFx0XHRrZnJlZShncm91cF9pbmZvW2ldKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTc1MDpcdFx0LyogUmVnaXN0ZXIgc3lzZnMgYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyBhcmUgY29tcGxldGUuICovXG41NzUxOlx0XHRlcnIgPSBleHQ0X3JlZ2lzdGVyX3N5c2ZzKHNiKTtcbjU3NTI6XHRcdGlmIChlcnIpXG41NzUzOlx0XHRcdGdvdG8gZmFpbGVkX21vdW50OTtcbjU3NTQ6XHRcbjU3NTU6XHRcdHJldHVybiAwO1xuNTc1NjpcdFxuNTc1NzpcdGZhaWxlZF9tb3VudDk6XG41NzU4Olx0XHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbjU3NTk6XHRmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuNTc2MDpcdFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbjU3NjE6XHRmYWlsZWRfbW91bnQ3OlxuNTc2MjpcdFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuNTc2MzpcdGZhaWxlZF9tb3VudDY6XG41NzY0Olx0XHQvKlxuNTc2NTpcdFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxuNTc2NjpcdFx0ICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmVcbjU3Njc6XHRcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXG41NzY4Olx0XHQgKi9cbjU3Njk6XHRcdGV4dDRfZm9yY2VfY29tbWl0KHNiKTtcbjU3NzA6XHRcdGV4dDRfbWJfcmVsZWFzZShzYik7XG41NzcxOlx0XHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbjU3NzI6XHRmYWlsZWRfbW91bnQ1OlxuNTc3MzpcdFx0ZXh0NF9wZXJjcHVfcGFyYW1fZGVzdHJveShzYmkpO1xuNTc3NDpcdFx0ZXh0NF9leHRfcmVsZWFzZShzYik7XG41Nzc1Olx0XHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuNTc3NjpcdGZhaWxlZF9tb3VudDRhOlxuNTc3NzpcdFx0ZHB1dChzYi1cdTAwM2VzX3Jvb3QpO1xuNTc3ODpcdFx0c2ItXHUwMDNlc19yb290ID0gTlVMTDtcbjU3Nzk6XHRmYWlsZWRfbW91bnQ0OlxuNTc4MDpcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDttb3VudCBmYWlsZWRcJiMzNDspO1xuNTc4MTpcdFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuNTc4MjpcdFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG41NzgzOlx0ZmFpbGVkX21vdW50X3dxOlxuNTc4NDpcdFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbjU3ODU6XHRcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbjU3ODY6XHRcbjU3ODc6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSk7XG41Nzg4Olx0XHRzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XG41Nzg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBSZXNvdXJjZSBMZWFrYWdlIGluIGV4dDQgRmlsZXN5c3RlbSBDbGVhbnVwKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGUgYWxsb2NhdGlvbiBiaXRtYXAgcmVsZWFzZSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBleHQ0X2ZpbGxfc3VwZXJgJiMzOTtzIGVycm9yIGhhbmRsaW5nLCB0aGUgYGV4dDRfbWJfcmVsZWFzZWAgZnVuY3Rpb24gKHdoaWNoIHNob3VsZCBiZSBoYW5kbGluZyB0aGUgYWN0dWFsIGJpdG1hcCByZWxlYXNlKSwgYW5kIHRoZSBkaXNjYXJkIHdvcmsgcXVldWUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdGhyZWUgYXJlYXMgYXJlIHBsYXlpbmcgbmljZWx5IHRvZ2V0aGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBleHQ0X21iX3JlbGVhc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgY29ycmVjdGx5IGludm9rZWQgZHVyaW5nIHVubW91bnQgYW5kIGdlbmVyYWwgZmlsZXN5c3RlbSBjbGVhbnVwLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBleHQ0X3B1dF9zdXBlcmAsIGJ1dCBJJiMzOTtsbCBhbHNvIHNjYW4gZm9yIG90aGVyIGNsZWFudXAgcGF0aHMgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBjb2RlIHNlYXJjaCBmb3IgYGV4dDRfbWJfcmVsZWFzZWAgdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIGl04oCZcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgd2hlcmUgaXQgKmlzbiYjMzk7dCogYmVpbmcgdXNlZCB3aGVuIGl0IHNob3VsZCBiZS4gVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIGV2ZXJ5IGFsbG9jYXRlZCBiaXRtYXAgaXMgZnJlZWQgaW4gYWxsIHJlbGV2YW50IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X21iX3JlbGVhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzA5Mz1leHRlcm4gaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9leHQ0L2V4dDQuaDozMDk0OmV4dGVybiB2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9leHQ0L2V4dDQuaC0zMDk1LWV4dGVybiBleHQ0X2ZzYmxrX3QgZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZV90ICosXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz03Mz1zdGF0aWMgaW50IG1idF9tYl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTUtZXJyX21iX3JlbGVhc2U6XG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjExNjpcdGV4dDRfbWJfcmVsZWFzZShzYik7XG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTExNy1lcnJfb3V0OlxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9MTIzPXN0YXRpYyB2b2lkIG1idF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMjYtXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZnJlZWNsdXN0ZXJzX2NvdW50ZXIpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMjc6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMjgtXHRrZnJlZShzYi1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfcXVldWUpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTIyNjItXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcbmZzL2V4dDQvbWJhbGxvYy5jOjIyNjM6XHQgKiBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cdCAqL1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTM4ODUtXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L21iYWxsb2MuYy0zODg3LXtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00Njg3PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTQ3MjItICogY29udGV4dC4gIFdlIGRvbiYjMzk7dCBuZWVkIHRoaXMgZm9yIE1CX0dST1VQX1BBIGJlY2F1c2Ugd2Ugb25seSBjaGFuZ2VcbmZzL2V4dDQvbWJhbGxvYy5jOjQ3MjM6ICogcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpLCBidXQgb24gZmFpbHVyZSwgd2UmIzM5O3ZlIGFscmVhZHlcbmZzL2V4dDQvbWJhbGxvYy5jLTQ3MjQtICogemVyb2VkIG91dCBhYy1cdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXHUwMDNlcGFfZnJlZSBpcyBub3QgY2hhbmdlZC5cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00NzkyPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwNi1cdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcbmZzL2V4dDQvbWJhbGxvYy5jOjQ4MDc6XHQgKiBpbiBvbi1kaXNrIGJpdG1hcCAtLSBzZWUgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoKVxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwOC1cdCAqIE90aGVyIENQVXMgYXJlIHByZXZlbnRlZCBmcm9tIGFsbG9jYXRpbmcgZnJvbSB0aGlzIHBhIGJ5IGxnX211dGV4XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3OD1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01MDIxLVx0XHQgKiAgICAgIGV4dDRfbWJfbmV3X2Jsb2Nrc1xuZnMvZXh0NC9tYmFsbG9jLmM6NTAyMjpcdFx0ICogICAgICAgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHRcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMjMtXHRcdCAqICAgICAgICBleHQ0X21iX3B1dF9wYVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTM9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01Mzk3LVx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XG5mcy9leHQ0L21iYWxsb2MuYzo1Mzk4Olx0ICogYWZ0ZXIgdXBkYXRpbmcgdGhlIHBhX2ZyZWUgaW4gZXh0NF9tYl9yZWxlYXNlX2NvbnRleHRcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTktXHQgKi9cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NDE4PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQxOTpleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoc3RydWN0IGV4dDRfYnVkZHkgKmU0Yiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmgsXG5mcy9leHQ0L21iYWxsb2MuYy01NDIwLVx0XHRcdHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ3LVx0XHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XG5mcy9leHQ0L21iYWxsb2MuYzo1NDQ4Olx0XHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICYjNDM7XG5mcy9leHQ0L21iYWxsb2MuYy01NDQ5LVx0XHRcdFx0XHRcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU0NzA9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXG5mcy9leHQ0L21iYWxsb2MuYzo1NDcxOmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3Mi1cdFx0XHRcdHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NDc3LVxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ3ODpcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3OS1cdEJVR19PTihwYS1cdTAwM2VwYV9kZWxldGVkID09IDApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU1MDE9ZXh0NF9tYl9kaXNjYXJkX2dyb3VwX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4Mi1cdFx0aWYgKHBhLVx1MDAzZXBhX3R5cGUgPT0gTUJfR1JPVVBfUEEpIHtcbmZzL2V4dDQvbWJhbGxvYy5jOjU1ODM6XHRcdFx0ZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKFx1MDAyNmU0YiwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTU4NC1cdFx0XHRjYWxsX3JjdShcdTAwMjYocGEpLVx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODUtXHRcdH0gZWxzZSB7XG5mcy9leHQ0L21iYWxsb2MuYzo1NTg2Olx0XHRcdGV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTU4Ny1cdFx0XHRleHQ0X21iX3BhX2ZyZWUocGEpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU2MDk9dm9pZCBleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NzA1LVx0XHRsaXN0X2RlbChcdTAwMjZwYS1cdTAwM2VwYV9ncm91cF9saXN0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDY6XHRcdGV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTcwNy1cdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01OTM3PWV4dDRfbWJfZGlzY2FyZF9sZ19wcmVhbGxvY2F0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXHRcdGxpc3RfZGVsKFx1MDAyNnBhLVx1MDAzZXBhX2dyb3VwX2xpc3QpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMjpcdFx0ZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKFx1MDAyNmU0YiwgcGEpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNjAwMy1cdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MDIwPXN0YXRpYyB2b2lkIGV4dDRfbWJfYWRkX25fdHJpbShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYwNjctICovXG5mcy9leHQ0L21iYWxsb2MuYzo2MDY4OnN0YXRpYyB2b2lkIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG5mcy9leHQ0L21iYWxsb2MuYy02MDY5LXtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MjMxPWV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MzU1LVx0fVxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NjpcdGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KGFjKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTYzNTctXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz03Mjc5PUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2ZyZWVfZ3JvdXBfY2x1c3RlcnNfc2V0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjcyODA6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XG5mcy9leHQ0L21iYWxsb2MuYy03MjgxLUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X3JlYWRfYmxvY2tfYml0bWFwX25vd2FpdCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTMyMi1cdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XG5mcy9leHQ0L3N1cGVyLmM6MTMyMzpcdGV4dDRfbWJfcmVsZWFzZShzYik7XG5mcy9leHQ0L3N1cGVyLmMtMTMyNC1cdGV4dDRfZXh0X3JlbGVhc2Uoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjktXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG5mcy9leHQ0L3N1cGVyLmM6NTc3MDpcdGV4dDRfbWJfcmVsZWFzZShzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTc3MS1cdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD03NzA9REVGSU5FX0VWRU5UKGV4dDRfX21iX25ld19wYSwgZXh0NF9tYl9uZXdfZ3JvdXBfcGEsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTc3Ny1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDo3Nzg6VFJBQ0VfRVZFTlQoZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTc3OS1cdFRQX1BST1RPKHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtODA0LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjgwNTpUUkFDRV9FVkVOVChleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtODA2LVx0VFBfUFJPVE8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgZXh0NF9wdXRfc3VwZXJgIENvbnRleHQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGBleHQ0X3B1dF9zdXBlcmAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtIGNsZWFudXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBsaWZlY3ljbGUsIGFzIHdlbGwgYXMgdGhlIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXRzZWxmLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0uIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXkgYXQgdGhpcyBwb2ludD8gQW5kIHRoZSBwb3RlbnRpYWwgcmVwZXJjdXNzaW9ucyBpZiBpdCBmYWlscz8gSSBjYW4mIzM5O3QganVzdCBsb29rIGF0IHRoZSBmdW5jdGlvbiBpbiBpc29sYXRpb247IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGVyZSBpdCBzaXRzIGluIHRoZSBjb2RlJiMzOTtzIGhpZXJhcmNoeS4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBtb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzEwOlx0XG4xMzExOlx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuMTMxMjpcdFx0XHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuMTMxMzpcdFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuMTMxNDpcdFx0XHRpZiAoKGVyciBcdTAwM2MgMCkgXHUwMDI2XHUwMDI2ICFhYm9ydGVkKSB7XG4xMzE1Olx0XHRcdFx0ZXh0NF9hYm9ydChzYiwgLWVyciwgXCYjMzQ7Q291bGRuJiMzOTt0IGNsZWFuIHVwIHRoZSBqb3VybmFsXCYjMzQ7KTtcbjEzMTY6XHRcdFx0fVxuMTMxNzpcdFx0fSBlbHNlXG4xMzE4Olx0XHRcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuMTMxOTpcdFxuMTMyMDpcdFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4xMzIxOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuMTMyMjpcdFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbjEzMjM6XHRcdGV4dDRfbWJfcmVsZWFzZShzYik7XG4xMzI0Olx0XHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcbjEzMjU6XHRcbjEzMjY6XHRcdGlmICghZXh0NF9lbWVyZ2VuY3lfc3RhdGUoc2IpIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuMTMyNzpcdFx0XHRpZiAoIWFib3J0ZWQpIHtcbjEzMjg6XHRcdFx0XHRleHQ0X2NsZWFyX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYik7XG4xMzI5Olx0XHRcdFx0ZXh0NF9jbGVhcl9mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKTtcbjEzMzA6XHRcdFx0XHRlcy1cdTAwM2VzX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLVx1MDAzZXNfbW91bnRfc3RhdGUpO1xuMTMzMTpcdFx0XHR9XG4xMzMyOlx0XHRcdGV4dDRfY29tbWl0X3N1cGVyKHNiKTtcbjEzMzM6XHRcdH1cbjEzMzQ6XHRcbjEzMzU6XHRcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4xMzM2Olx0XHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbjEzMzc6XHRcbjEzMzg6XHRcdFdBUk5fT05fT05DRSghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0VSUk9SX0ZTKSBcdTAwMjZcdTAwMjZcbjEzMzk6XHRcdFx0ICAgICBwZXJjcHVfY291bnRlcl9zdW0oXHUwMDI2c2JpLVx1MDAzZXNfZGlydHljbHVzdGVyc19jb3VudGVyKSk7XG4xMzQwOlx0XHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XG4xMzQxOlx0I2lmZGVmIENPTkZJR19RVU9UQVxuMTM0MjpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEVYVDRfTUFYUVVPVEFTOyBpJiM0MzsmIzQzOylcbjEzNDM6XHRcdFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xuMTM0NDpcdCNlbmRpZlxuMTM0NTpcdFxuMTM0NjpcdFx0LyogRGVidWdnaW5nIGNvZGUganVzdCBpbiBjYXNlIHRoZSBpbi1tZW1vcnkgaW5vZGUgb3JwaGFuIGxpc3RcbjEzNDc6XHRcdCAqIGlzbiYjMzk7dCBlbXB0eS4gIFRoZSBvbi1kaXNrIG9uZSBjYW4gYmUgbm9uLWVtcHR5IGlmIHdlJiMzOTt2ZVxuMTM0ODpcdFx0ICogZGV0ZWN0ZWQgYW4gZXJyb3IgYW5kIHRha2VuIHRoZSBmcyByZWFkb25seSwgYnV0IHRoZVxuMTM0OTpcdFx0ICogaW4tbWVtb3J5IGxpc3QgaGFkIGJldHRlciBiZSBjbGVhbiBieSB0aGlzIHBvaW50LiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTY0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGBmcy9leHQ0L21iYWxsb2MuY2AgYW5kIGBmcy9leHQ0L3N1cGVyLmNgLiBSaWdodCBhd2F5LCB0aGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gRXh0NCBpcyBhIGNsYXNzaWMsIGEgY29yZSBMaW51eCBmaWxlc3lzdGVtLiBUaGF0IG1ha2VzIGl0IGJvdGggY3J1Y2lhbCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICplYXNpbHkqIGZ1enphYmxlIHZpYSBzdGFuZGFyZCBhdmVudWVzIGxpa2UgbW91bnRpbmcgY29ycnVwdGVkIGltYWdlcywgbG9vcCBkZXZpY2VzLCBhbmQgb2YgY291cnNlLCBzeXprYWxsZXIuIFRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLgoKRmlyc3QsIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgY2hhbmdlcy4gSXQgc2VlbXMgd2UmIzM5O3ZlIGdvdDoKCjEuICBJbiBgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYDogSSBzcG90IHRoYXQgYGRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7YCBpcyBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBgZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspO2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBzeW5jaHJvbml6YXRpb24gY2hhbmdlIGluIHRoZSBkaXNjYXJkIHdvcmsuCjIuICBBbHNvLCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgaXMgYWRkZWQgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZShzYik7YCBpbiBgZmFpbGVkX21vdW50NmAgd2l0aGluIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgbW91bnQgZmFpbHVyZSBwYXRoIC0gaW50ZXJlc3RpbmcuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb25zOiBJcyBleHQ0IGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIHNjZW5hcmlvPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIEl0JiMzOTtzIGEgY29yZSBmaWxlc3lzdGVtLiBTeXprYWxsZXIgbWFrZXMgc2hvcnQgd29yayBvZiB0cmlnZ2VyaW5nIGFsbCBzb3J0cyBvZiBleHQ0IGNvZGUgcGF0aHMuIFRoZSBzZWNvbmQgcXVlc3Rpb24sIGlzIHRoaXMgdGFyZ2V0ZWQgY29kZSBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIHZpYSBub3JtYWwgb3BlcmF0aW9uPyBBYnNvbHV0ZWx5LiBNb3VudCBmYWlsdXJlcyBhcmUgcm91dGluZSBpbiBmdXp6aW5nLCBhbmQgdGhlIHN1cGVyYmxvY2sgcmVsZWFzZSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgKGBleHQ0X21iX3JlbGVhc2VgLCBgZXh0NF9maWxsX3N1cGVyYCwgYGV4dDRfcHV0X3N1cGVyYCkgYXJlIGRpcmVjdGx5IGhpdCBieSBzeXprYWxsZXIuCgpGaW5hbGx5LCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uOiBMZXQgbWUgY2hlY2sgdGhlIGBDT05GSUdfRVhUNF9GU2AgaW4gdGhlIEtjb25maWcsIGFuZCB0aGVuIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9leHQ0L0tjb25maWdgIGl0c2VsZiB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MjUKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSBzZWUgYGV4dDRfbWJfcmVsZWFzZWAsIGBleHQ0X2ZpbGxfc3VwZXJgLCBgZXh0NF9mb3JjZV9jb21taXRgLCBhbmQgYGV4dDRfcHV0X3N1cGVyYC4gKkhtbSosIGBleHQ0X3B1dF9zdXBlcmAgaXMgbGlrZWx5IG5vdCBhcyBjcml0aWNhbCBhcyB0aGUgb3RoZXJzIGZvciB0aGlzIHB1cnBvc2UsIHNvIEkmIzM5O2xsIGV4Y2x1ZGUgaXQgZnJvbSBpbml0aWFsIGNvbnNpZGVyYXRpb24uCgpOb3csIGFyZSB0aGUgcmVtYWluaW5nIHRocmVlIGdvb2QgKkZvY3VzU3ltYm9scyo/IEkgdGhpbmsgc28sIGJlY2F1c2UgdGhleSBhcmUgZGVmaW5pdGVseSBub3QgdWJpcXVpdG91cy4gYGV4dDRfbWJfcmVsZWFzZWAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gZXh0NCBzdXBlcmJsb2NrIHRlYXJkb3duLCBtb3VudCBlcnJvciBoYW5kbGluZywgYW5kIG1iYWxsb2MgY2xlYW51cC4gYGV4dDRfZmlsbF9zdXBlcmAgaXMsIG9mIGNvdXJzZSwgY3JpdGljYWwgZm9yIGV4dDQgbW91bnRpbmcuIEZpbmFsbHksIGBleHQ0X2ZvcmNlX2NvbW1pdGAgaXMgYWxsIGFib3V0IGNvbW1pdHRpbmcgdGhlIGV4dDQgam91cm5hbC4KClRoZSAqV29ydGhGdXp6aW5nKiBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc291bmQ7IHRoaXMgcGF0Y2ggdGFyZ2V0cyBlcnJvciBoYW5kbGluZyBpbiBgZXh0NF9maWxsX3N1cGVyYCBhbmQgY2xlYW51cCBpbiBgZXh0NF9tYl9yZWxlYXNlYC4gSXQgYWxzbyBtZW50aW9ucyB0aGF0IGl0IHByZXZlbnRzIGRpc2NhcmQgd29yayByZXF1ZXVlaW5nIGR1cmluZyBqb3VybmFsIHRlYXJkb3duLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIGJlY2F1c2UgdGhlc2UgcGF0aHMgYXJlIHRyaWdnZXJlZCBkdXJpbmcgbW91bnQgZXJyb3IgdW53aW5kaW5nIGFuZCB1bm1vdW50IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuCgpTbywgbGV0JiMzOTtzIHZlcmlmeSBteSBmaW5kaW5ncy4gSSYjMzk7bGwgY29uZmlybSB0aGF0IHRoZSAqRW5hYmxlQ29uZmlncyogdmFsdWUgaXMgY29ycmVjdC4gSSBzZWUgWyYjMzQ7RVhUNF9GUyYjMzQ7XS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFRoZSAqRm9jdXNTeW1ib2xzKiBhcmUgbm9uLXViaXF1aXRvdXMsIGFuZCBzcGVjaWZpYy4gVGhleSBhbHNvIHNlZW0gdG8gcmVwcmVzZW50IGEgZ29vZCBzZXQgb2YgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlICpSZWFzb25pbmcqIGlzIGNvbmNpc2UgYW5kIGNsZWFyLiBUaGlzIGNoZWNrcyBvdXQuCgpPa2F5LCBhbGwgdGhlIGRldGFpbHMgbG9vayBnb29kLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXh0NF9mb3JjZV9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9tYl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtleHQ0X2ZvcmNlX2NvbW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IG1iYWxsb2Mgc2h1dGRvd24gbG9naWMgYW5kIG1vdW50IGZhaWx1cmUgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGFkZGluZyBleHQ0X2ZvcmNlX2NvbW1pdCBhbmQgZGlzYWJsaW5nIGRpc2NhcmQgd29yayBiZWZvcmUgcmVsZWFzaW5nIG1iYWxsb2Mgc3RydWN0dXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgZXh0NCBtb3VudC91bm1vdW50IHBhdGhzIGFuZCBtb3VudCBlcnJvciBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3JkZXJpbmcgZHVyaW5nIG1vdW50IGZhaWx1cmUgY2xlYW51cCBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgb24gc19kaXNjYXJkX3dvcmsgaW4gZXh0NF9tYl9yZWxlYXNlKCkgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgYmVmb3JlIHRlYXJpbmcgZG93biBtYmFsbG9jIHRvIHByZXZlbnQgZGlzY2FyZCB3b3JrIGZyb20gcnVubmluZyBhZnRlciBvciBkdXJpbmcgbWJhbGxvYyBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGlzc3VlcyBkdXJpbmcgZmlsZXN5c3RlbSB1bm1vdW50L2Vycm9yIHBhdGhzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBzbyB0aGVzZSByaXNrcyBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbiByYXRoZXIgdGhhbiBLTVNBTiYjMzk7cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzc3NzViOWQ5MzU3ZWYyNWEzOWI3MGYxMGM3NTNjYjVmMGFhODljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTI6NTc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGVkMWJkMDBlMTFjZDUuLjg3NGI3MTkzMWFiNmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0zODk3LDYgJiM0MzszODk3LDggQEAgdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhCiAJICovCiAJZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovCiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfbGlzdCkpOwogCiAJZ3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktJmd0O3NfZ3JvdXBfaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogZmFpbGVkX21vdW50NzoKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiBmYWlsZWRfbW91bnQ2OgomIzQzOwkvKgomIzQzOwkgKiBXZSBjYW4gaGF2ZSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gZnJvbSBvcnBoYW4gcmVwbGF5IG9yIHF1b3RhCiYjNDM7CSAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlCiYjNDM7CSAqIHdlIHNodXRkb3duIG1iYWxsb2MuCiYjNDM7CSAqLwomIzQzOwlleHQ0X2ZvcmNlX2NvbW1pdChzYik7CiAJZXh0NF9tYl9yZWxlYXNlKHNiKTsKIAlleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTsKIGZhaWxlZF9tb3VudDU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ2CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgYW5kIFN5bmNocm9uaXphdGlvbiBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcHJpbWFyaWx5IGFkZHJlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIChLTVNBTikgb3IgaWYgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiwgY2xlYW51cCwgdXNlLWFmdGVyLWZyZWUgKFVBRiksIG9yIHRlYXJkb3duIG9yZGVyaW5nIHByb2JsZW1zIChLQVNBTi9MT0NLREVQIHRlcnJpdG9yeSkuCgpSZWFkaW5nIHRoZSBwYXRjaCBpdHNlbGYgcmV2ZWFscyBzb21lIGludGVyZXN0aW5nIGFkZGl0aW9ucy4gSW4gYGZzL2V4dDQvbWJhbGxvYy5jYCwgd2Ugc2VlIGEgbmV3IGBkaXNhYmxlX3dvcmtfc3luY2AgY2FsbCBhZGRlZCB0byB0aGUgYGV4dDRfbWJfcmVsZWFzZWAgZnVuY3Rpb246CgpgYGBjCnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCnsKLi4uCgkvKgoJICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YQoJICovCglmbHVzaF93b3JrKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7CiYjNDM7CS8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi8KJiM0MzsJZGlzYWJsZV93b3JrX3N5bmMoJmFtcDtzYmktJmd0O3NfZGlzY2FyZF93b3JrKTsKCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX2xpc3QpKTsKYGBgCgpUaGUgY29tbWVudCBzdWdnZXN0cyB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgdGhlIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZS1lbnF1ZXVpbmcgZGlzY2FyZCB3b3JrLiBJbnRlcmVzdGluZy4gSXQgaW1wbGllcyBhIHNwZWNpZmljIG9yZGVyaW5nIGRlcGVuZGVuY3kgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBBbHNvIGluIGBmcy9leHQ0L3N1cGVyLmNgLCB3aXRoaW4gdGhlIGBmYWlsZWRfbW91bnRgIGxhYmVscywgdGhlcmUgaXM6CgpgYGBjCmZhaWxlZF9tb3VudDY6CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGEKJiM0MzsJICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmUKJiM0MzsJICogd2Ugc2h1dGRvd24gbWJhbGxvYy4KJiM0MzsJICovCiYjNDM7CWV4dDRfZm9yY2VfY29tbWl0KHNiKTsKCWV4dDRfbWJfcmVsZWFzZShzYik7CglleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTsKZmFpbGVkX21vdW50NToKYGBgCgpUaGlzIGFkZGl0aW9uIG9mIGBleHQ0X2ZvcmNlX2NvbW1pdChzYilgIGJlZm9yZSBgZXh0NF9tYl9yZWxlYXNlKHNiKWAgaXMgYWxzbyBjcml0aWNhbC4gSXQgZXhwbGljaXRseSBhaW1zIHRvIGVuc3VyZSB0aGF0IGRpc2NhcmQgd29yaywgd2hpY2ggaXMgcGFydCBvZiB0aGUgYG1iYWxsb2NgIHN1YnN5c3RlbSwgaXMgY29tcGxldGVkIGJlZm9yZSB0ZWFyaW5nIHRoaW5ncyBkb3duLgoKTm93LCBJIG5lZWQgdG8gem9vbSBvdXQuIEkgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGJvdGggYGZzL2V4dDQvbWJhbGxvYy5jYCBhbmQgYGZzL2V4dDQvc3VwZXIuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHBpbnBvaW50ICp3aHkqIHRoZXNlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGRpc2NhcmQgd29yaywgam91cm5hbCB0ZWFyZG93biwgYW5kIHRoZSBgbWJhbGxvY2Agc3Vic3lzdGVtIHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIHNvdW5kbmVzcyBvZiB0aGlzIHBhdGNoLiBJcyBpdCBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYmVpbmcgYWRkcmVzc2VkPyBPciBhIG1vcmUgc3VidGxlIG1lbW9yeSBzYWZldHkgaXNzdWU/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHdvcmtxdWV1ZSBpbnRlcmFjdGlvbnMgYW5kIHRyYW5zYWN0aW9uIHNlbWFudGljcyB0byBzYXkgZm9yIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4OTA6XHRcdGludCBudW1fbWV0YV9ncm91cF9pbmZvcztcbjM4OTE6XHRcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbywgKioqZ3JvdXBfaW5mbztcbjM4OTI6XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xuMzg5MzpcdFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGdldF9ncm91cGluZm9fY2FjaGUoc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG4zODk0Olx0XHRpbnQgY291bnQ7XG4zODk1Olx0XG4zODk2Olx0XHQvKlxuMzg5NzpcdFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxuMzg5ODpcdFx0ICovXG4zODk5Olx0XHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4zOTAwOlx0XHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXG4zOTAxOlx0XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuMzkwMjpcdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xuMzkwMzpcdFxuMzkwNDpcdFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXHUwMDNlc19ncm91cF9pbmZvKTtcbjM5MDU6XHRcdGlmIChncm91cF9pbmZvKSB7XG4zOTA2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncm91cHM7IGkmIzQzOyYjNDM7KSB7XG4zOTA3Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4zOTA4Olx0XHRcdFx0Z3JpbmZvID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhzYiwgaSk7XG4zOTA5Olx0XHRcdFx0aWYgKCFncmluZm8pXG4zOTEwOlx0XHRcdFx0XHRjb250aW51ZTtcbjM5MTE6XHRcdFx0XHRtYl9ncm91cF9iYl9iaXRtYXBfZnJlZShncmluZm8pO1xuMzkxMjpcdFx0XHRcdGV4dDRfbG9ja19ncm91cChzYiwgaSk7XG4zOTEzOlx0XHRcdFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcbjM5MTQ6XHRcdFx0XHRpZiAoY291bnQpXG4zOTE1Olx0XHRcdFx0XHRtYl9kZWJ1ZyhzYiwgXCYjMzQ7bWJhbGxvYzogJWQgUEFzIGxlZnRcXG5cJiMzNDssXG4zOTE2Olx0XHRcdFx0XHRcdCBjb3VudCk7XG4zOTE3Olx0XHRcdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xuMzkxODpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdyaW5mbyk7XG4zOTE5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NTA6XHRcdC8qIFJlZ2lzdGVyIHN5c2ZzIGFmdGVyIGFsbCBpbml0aWFsaXphdGlvbnMgYXJlIGNvbXBsZXRlLiAqL1xuNTc1MTpcdFx0ZXJyID0gZXh0NF9yZWdpc3Rlcl9zeXNmcyhzYik7XG41NzUyOlx0XHRpZiAoZXJyKVxuNTc1MzpcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDk7XG41NzU0Olx0XG41NzU1Olx0XHRyZXR1cm4gMDtcbjU3NTY6XHRcbjU3NTc6XHRmYWlsZWRfbW91bnQ5OlxuNTc1ODpcdFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG41NzU5Olx0ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbjU3NjA6XHRcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG41NzYxOlx0ZmFpbGVkX21vdW50NzpcbjU3NjI6XHRcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbjU3NjM6XHRmYWlsZWRfbW91bnQ2OlxuNTc2NDpcdFx0LypcbjU3NjU6XHRcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbjU3NjY6XHRcdCAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlXG41NzY3Olx0XHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxuNTc2ODpcdFx0ICovXG41NzY5Olx0XHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG41NzcwOlx0XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuNTc3MTpcdFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG41NzcyOlx0ZmFpbGVkX21vdW50NTpcbjU3NzM6XHRcdGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc2JpKTtcbjU3NzQ6XHRcdGV4dDRfZXh0X3JlbGVhc2Uoc2IpO1xuNTc3NTpcdFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbjU3NzY6XHRmYWlsZWRfbW91bnQ0YTpcbjU3Nzc6XHRcdGRwdXQoc2ItXHUwMDNlc19yb290KTtcbjU3Nzg6XHRcdHNiLVx1MDAzZXNfcm9vdCA9IE5VTEw7XG41Nzc5Olx0ZmFpbGVkX21vdW50NDpcbjU3ODA6XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXCYjMzQ7bW91bnQgZmFpbGVkXCYjMzQ7KTtcbjU3ODE6XHRcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbjU3ODI6XHRcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuNTc4MzpcdGZhaWxlZF9tb3VudF93cTpcbjU3ODQ6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTgKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBidWcgZml4LiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIG1vdW50IGVycm9yIGNsZWFudXAgYW5kIG1iYWxsb2MgdGVhcmRvd24gcHJvY2Vzcy4gVGhlIGlzc3VlIGFyaXNlcyBmcm9tIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGRpc2NhcmQgd29ya3F1ZXVlLgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBgZXh0NF9tYl9yZWxlYXNlYCBjYW4gc3RhcnQgZGlzbWFudGxpbmcgdGhlIGdyb3VwX2luZm8gYW5kIG1iYWxsb2Mgc3RydWN0dXJlcy4gSWYgdGhlIGRpc2NhcmQgd29ya3F1ZXVlIGlzIGFsbG93ZWQgdG8gZXhlY3V0ZSBlaXRoZXIgYWZ0ZXIgb3IgY29uY3VycmVudGx5IHdpdGggdGhpcyB0ZWFyZG93biBwcm9jZXNzLCBpdCByaXNrcyBhY2Nlc3NpbmcgbWVtb3J5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBmcmVlZCBvciB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZC4gVGhpcyBsZWFkcyB0byB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMgYW5kIHdvcmtxdWV1ZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB3aGljaCwgYXMgd2Uga25vdywgYXJlIG5hc3R5IHRvIGRlYnVnLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWxlZ2FudCwgZm9jdXNpbmcgb24gdHdvIGtleSBhY3Rpb25zLiBGaXJzdCwgYGRpc2FibGVfd29ya19zeW5jKCZhbXA7c2JpLSZndDtzX2Rpc2NhcmRfd29yayk7YCBwcmV2ZW50cyB0aGUgcmVxdWV1aW5nIG9mIGRpc2NhcmQgd29yayBhZnRlciBgZXh0NF9tYl9yZWxlYXNlYCBzdGFydHMsIGVuc3VyaW5nIHRoYXQgbm8gbmV3IHdvcmsgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGR1cmluZyB0aGlzIGNyaXRpY2FsIHBlcmlvZC4gU2Vjb25kLCBhbmQgY3J1Y2lhbGx5LCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgY29tbWl0cyBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGJlZm9yZSB0aGUgbWJhbGxvYyBpcyBzaHV0IGRvd24uIFRoaXMgaXMgdGhlIHNhZmVndWFyZCB0aGF0IGVuc3VyZXMgdGhlIGRpc2NhcmQgd29yayBxdWV1ZWQgKmJlZm9yZSogdGhlIGNvbW1pdCBjb21wbGV0ZXMgKmJlZm9yZSogbWJhbGxvYyBpcyBzaHV0IGRvd24uCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgbGVha3MgaW5mb3JtYXRpb24uIEFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHJlYWRzLiBUaGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8gbGVha3MsIGFuZCBubyBwYWRkaW5nIGlzc3Vlcywgbm9yIGFueSBuZXcgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSBhdCByaXNrLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIGNsZWFybHkgVUFGLCByYWNlIGNvbmRpdGlvbnMsIGFuZCB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIHByb2JsZW1zIGR1cmluZyB1bm1vdW50L2Vycm9yIHNjZW5hcmlvcywgd2hpY2ggYXJlIHRoYW5rZnVsbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBLTVNBTiwgaG93ZXZlciwgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdoaWNoIGlzbiYjMzk7dCB0aGUgZm9jdXMgaGVyZS4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7dmUgY29uZmlybWVkIHRoZSBwYXRjaCYjMzk7cyBzY29wZS4gVGhlIGZpeCBjb25zaXN0cyBvZiB0d28gcGFydHM6IHRoZSBgZGlzYWJsZV93b3JrX3N5bmNgIGNhbGwgd2l0aGluIGBleHQ0X21iX3JlbGVhc2VgIGFuZCBgZXh0NF9mb3JjZV9jb21taXRgIGluIHRoZSBgZXh0NF9maWxsX3N1cGVyYCBlcnJvciBwYXRoLiBOZWl0aGVyIG9mIHRoZXNlIHNlY3Rpb25zIGludHJvZHVjZXMsIG9yIGV2ZW4gdG91Y2hlcywgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZGlmZmVyZW50IGNhdGVnb3J5IG9mIG1lbW9yeSBzYWZldHkgaXNzdWUsIGFuZCB3aGlsZSBpbXBvcnRhbnQsIGRvZXNuJiMzOTt0IHdhcnJhbnQgS01TQU4gYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4mIzM5O3MgZG9tYWluIHJhdGhlciB0aGFuIEtNU0FOJiMzOTtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3JkZXJpbmcgZHVyaW5nIG1vdW50IGZhaWx1cmUgY2xlYW51cCBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgb24gc19kaXNjYXJkX3dvcmsgaW4gZXh0NF9tYl9yZWxlYXNlKCkgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgYmVmb3JlIHRlYXJpbmcgZG93biBtYmFsbG9jIHRvIHByZXZlbnQgZGlzY2FyZCB3b3JrIGZyb20gcnVubmluZyBhZnRlciBvciBkdXJpbmcgbWJhbGxvYyBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGlzc3VlcyBkdXJpbmcgZmlsZXN5c3RlbSB1bm1vdW50L2Vycm9yIHBhdGhzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBzbyB0aGVzZSByaXNrcyBmYWxsIHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbiByYXRoZXIgdGhhbiBLTVNBTiYjMzk7cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo0MC42NjE5MDY0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODgyMjQ4ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgICBcImV4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9mb3JjZV9jb21taXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4ncyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4ncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgbWJhbGxvYyBzaHV0ZG93biBsb2dpYyBhbmQgbW91bnQgZmFpbHVyZSBlcnJvciBoYW5kbGluZyBwYXRocywgYWRkaW5nIGV4dDRfZm9yY2VfY29tbWl0IGFuZCBkaXNhYmxpbmcgZGlzY2FyZCB3b3JrIGJlZm9yZSByZWxlYXNpbmcgbWJhbGxvYyBzdHJ1Y3R1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBleHQ0IG1vdW50L3VubW91bnQgcGF0aHMgYW5kIG1vdW50IGVycm9yIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NDAuNjYxOTEyNDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTAyNjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3Nzc1YjlkOTM1N2VmMjVhMzliNzBmMTBjNzUzY2I1ZjBhYTg5Y2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxMjo1NzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuaW5kZXggZWQxYmQwMGUxMWNkNS4uODc0YjcxOTMxYWI2ZiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuQEAgLTM4OTcsNiArMzg5Nyw4IEBAIHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdCAqIHdhaXQgdGhlIGRpc2NhcmQgd29yayB0byBkcmFpbiBhbGwgb2YgZXh0NF9mcmVlX2RhdGFcXG4gXFx0ICovXFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19kaXNjYXJkX3dvcmspO1xcbitcXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXFxuK1xcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XFxuIFxcbiBcXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cXHUwMDNlc19ncm91cF9pbmZvKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtNTc2MSw2ICs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIGZhaWxlZF9tb3VudDc6XFxuIFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG4gZmFpbGVkX21vdW50NjpcXG4rXFx0LypcXG4rXFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxcbitcXHQgKiBzZXR1cC4gQ29tbWl0IGl0IHNvIHRoYXQgZGlzY2FyZCB3b3JrIGFmdGVyIGNvbW1pdCBydW5zIGJlZm9yZVxcbitcXHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxcbitcXHQgKi9cXG4rXFx0ZXh0NF9mb3JjZV9jb21taXQoc2IpO1xcbiBcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbiBcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG4gZmFpbGVkX21vdW50NTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NDEuMjM3ODc4MjQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTg4NDQzMzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9tYl9yZWxlYXNlXCIsXG4gICAgXCJleHQ0X2ZpbGxfc3VwZXJcIixcbiAgICBcImV4dDRfZm9yY2VfY29tbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBtYmFsbG9jIHNodXRkb3duIGxvZ2ljIGFuZCBtb3VudCBmYWlsdXJlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhZGRpbmcgZXh0NF9mb3JjZV9jb21taXQgYW5kIGRpc2FibGluZyBkaXNjYXJkIHdvcmsgYmVmb3JlIHJlbGVhc2luZyBtYmFsbG9jIHN0cnVjdHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGV4dDQgbW91bnQvdW5tb3VudCBwYXRocyBhbmQgbW91bnQgZXJyb3IgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3Nzc1YjlkOTM1N2VmMjVhMzliNzBmMTBjNzUzY2I1ZjBhYTg5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjU3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggZWQxYmQwMGUxMWNkNS4uODc0YjcxOTMxYWI2ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4rKysgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTM4OTcsNiArMzg5Nyw4IEBAIHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhXG4gXHQgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF93b3JrKTtcbitcdC8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi9cbitcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG4gXG4gXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cdTAwM2VzX2dyb3VwX2luZm8pO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggNGI2MTEyZTVkNmM1OS4uMzdkYzZiNWYyMGM2MSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNTc2MSw2ICs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gZmFpbGVkX21vdW50NzpcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiBmYWlsZWRfbW91bnQ2OlxuK1x0LypcbitcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbitcdCAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlXG4rXHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxuK1x0ICovXG4rXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG4gXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuIFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50NTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU3OjQxLjIzNzg4MDI1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTk5NTQyNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbml0aWFsIFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNjb3BlLiBJdCBsb29rcyBsaWtlIHRoaXMgb25lIGlzIGZvY3VzZWQgb24gY2hhbmdlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBmcy9leHQ0L21iYWxsb2MuY2AgYW5kIGBmcy9leHQ0L3N1cGVyLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoZSBzcGVjaWZpYyBmaWxlcywgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBhcmVhczogaG93IG1pZ2h0IHRoaXMgYWZmZWN0IGJsb2NrIGFsbG9jYXRpb24sIHN1cGVyIGJsb2NrIGhhbmRsaW5nLCBvciBvdmVyYWxsIGZpbGVzeXN0ZW0gaW50ZWdyaXR5PyBUaW1lIHRvIGRpZyBpbiBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIHRvIGRvIHRoaXMgSSB3aWxsIHBlcmZvcm0gYSByZWFkLWZpbGUgYXJvdW5kIHRoZSBtb2RpZmllZCBsaW5lcy4gSSB3aWxsIGFsc28gbWFrZSBhbiBhZGRpdGlvbmFsIGdyZXBwZXIgc2VhcmNoIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzQsIk91dHB1dFRva2VucyI6NzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU3OjUxLjgzNzQyNTU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvbWJhbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4ODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4ODU6XFx0XFxuMzg4NjpcXHR2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjM4ODc6XFx0e1xcbjM4ODg6XFx0XFx0ZXh0NF9ncm91cF90IG5ncm91cHMgPSBleHQ0X2dldF9ncm91cHNfY291bnQoc2IpO1xcbjM4ODk6XFx0XFx0ZXh0NF9ncm91cF90IGk7XFxuMzg5MDpcXHRcXHRpbnQgbnVtX21ldGFfZ3JvdXBfaW5mb3M7XFxuMzg5MTpcXHRcXHRzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncmluZm8sICoqKmdyb3VwX2luZm87XFxuMzg5MjpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcXG4zODkzOlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBnZXRfZ3JvdXBpbmZvX2NhY2hlKHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcXG4zODk0OlxcdFxcdGludCBjb3VudDtcXG4zODk1OlxcdFxcbjM4OTY6XFx0XFx0LypcXG4zODk3OlxcdFxcdCAqIHdhaXQgdGhlIGRpc2NhcmQgd29yayB0byBkcmFpbiBhbGwgb2YgZXh0NF9mcmVlX2RhdGFcXG4zODk4OlxcdFxcdCAqL1xcbjM4OTk6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfd29yayk7XFxuMzkwMDpcXHRcXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXFxuMzkwMTpcXHRcXHRkaXNhYmxlX3dvcmtfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfd29yayk7XFxuMzkwMjpcXHRcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNnNiaS1cXHUwMDNlc19kaXNjYXJkX2xpc3QpKTtcXG4zOTAzOlxcdFxcbjM5MDQ6XFx0XFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXFx1MDAzZXNfZ3JvdXBfaW5mbyk7XFxuMzkwNTpcXHRcXHRpZiAoZ3JvdXBfaW5mbykge1xcbjM5MDY6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ncm91cHM7IGkrKykge1xcbjM5MDc6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMzkwODpcXHRcXHRcXHRcXHRncmluZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBpKTtcXG4zOTA5OlxcdFxcdFxcdFxcdGlmICghZ3JpbmZvKVxcbjM5MTA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzkxMTpcXHRcXHRcXHRcXHRtYl9ncm91cF9iYl9iaXRtYXBfZnJlZShncmluZm8pO1xcbjM5MTI6XFx0XFx0XFx0XFx0ZXh0NF9sb2NrX2dyb3VwKHNiLCBpKTtcXG4zOTEzOlxcdFxcdFxcdFxcdGNvdW50ID0gZXh0NF9tYl9jbGVhbnVwX3BhKGdyaW5mbyk7XFxuMzkxNDpcXHRcXHRcXHRcXHRpZiAoY291bnQpXFxuMzkxNTpcXHRcXHRcXHRcXHRcXHRtYl9kZWJ1ZyhzYiwgXFxcIm1iYWxsb2M6ICVkIFBBcyBsZWZ0XFxcXG5cXFwiLFxcbjM5MTY6XFx0XFx0XFx0XFx0XFx0XFx0IGNvdW50KTtcXG4zOTE3OlxcdFxcdFxcdFxcdGV4dDRfdW5sb2NrX2dyb3VwKHNiLCBpKTtcXG4zOTE4OlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdyaW5mbyk7XFxuMzkxOTpcXHRcXHRcXHR9XFxuMzkyMDpcXHRcXHRcXHRudW1fbWV0YV9ncm91cF9pbmZvcyA9IChuZ3JvdXBzICtcXG4zOTIxOlxcdFxcdFxcdFxcdFxcdEVYVDRfREVTQ19QRVJfQkxPQ0soc2IpIC0gMSkgXFx1MDAzZVxcdTAwM2VcXG4zOTIyOlxcdFxcdFxcdFxcdEVYVDRfREVTQ19QRVJfQkxPQ0tfQklUUyhzYik7XFxuMzkyMzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX21ldGFfZ3JvdXBfaW5mb3M7IGkrKylcXG4zOTI0OlxcdFxcdFxcdFxcdGtmcmVlKGdyb3VwX2luZm9baV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo1MS44Mzc4ODE5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTc1MDpcXHRcXHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cXG41NzUxOlxcdFxcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xcbjU3NTI6XFx0XFx0aWYgKGVycilcXG41NzUzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50OTtcXG41NzU0OlxcdFxcbjU3NTU6XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdGZhaWxlZF9tb3VudDk6XFxuNTc1ODpcXHRcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG41NzU5OlxcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuNTc2MDpcXHRcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbjU3NjE6XFx0ZmFpbGVkX21vdW50NzpcXG41NzYyOlxcdFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG41NzYzOlxcdGZhaWxlZF9tb3VudDY6XFxuNTc2NDpcXHRcXHQvKlxcbjU3NjU6XFx0XFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxcbjU3NjY6XFx0XFx0ICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmVcXG41NzY3OlxcdFxcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXFxuNTc2ODpcXHRcXHQgKi9cXG41NzY5OlxcdFxcdGV4dDRfZm9yY2VfY29tbWl0KHNiKTtcXG41NzcwOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc3MTpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzcyOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc3MzpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc3NDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzc3OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc3ODpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzc5OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4MDpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzgxOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc4MjpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3ODM6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3ODQ6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuNTc4NTpcXHRcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbjU3ODY6XFx0XFxuNTc4NzpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcXG41Nzg4OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XFxuNTc4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NTEuODM4MzM5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTYyMDExNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha2FnZSBpbiBleHQ0IEZpbGVzeXN0ZW0gQ2xlYW51cCoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoZSBhbGxvY2F0aW9uIGJpdG1hcCByZWxlYXNlIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGV4dDRfZmlsbF9zdXBlcmAncyBlcnJvciBoYW5kbGluZywgdGhlIGBleHQ0X21iX3JlbGVhc2VgIGZ1bmN0aW9uICh3aGljaCBzaG91bGQgYmUgaGFuZGxpbmcgdGhlIGFjdHVhbCBiaXRtYXAgcmVsZWFzZSksIGFuZCB0aGUgZGlzY2FyZCB3b3JrIHF1ZXVlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIHRocmVlIGFyZWFzIGFyZSBwbGF5aW5nIG5pY2VseSB0b2dldGhlci5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBleHQ0X21iX3JlbGVhc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBjb3JyZWN0bHkgaW52b2tlZCBkdXJpbmcgdW5tb3VudCBhbmQgZ2VuZXJhbCBmaWxlc3lzdGVtIGNsZWFudXAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGV4dDRfcHV0X3N1cGVyYCwgYnV0IEknbGwgYWxzbyBzY2FuIGZvciBvdGhlciBjbGVhbnVwIHBhdGhzIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEknbGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBjb2RlIHNlYXJjaCBmb3IgYGV4dDRfbWJfcmVsZWFzZWAgdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIGl04oCZcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgd2hlcmUgaXQgKmlzbid0KiBiZWluZyB1c2VkIHdoZW4gaXQgc2hvdWxkIGJlLiBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgZXZlcnkgYWxsb2NhdGVkIGJpdG1hcCBpcyBmcmVlZCBpbiBhbGwgcmVsZXZhbnQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo1NC40MDAzNTUwNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTU5MDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X21iX3JlbGVhc2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzA5Mz1leHRlcm4gaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvZXh0NC9leHQ0Lmg6MzA5NDpleHRlcm4gdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbmZzL2V4dDQvZXh0NC5oLTMwOTUtZXh0ZXJuIGV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9NzM9c3RhdGljIGludCBtYnRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTUtZXJyX21iX3JlbGVhc2U6XFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMTY6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTExNy1lcnJfb3V0Olxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz0xMjM9c3RhdGljIHZvaWQgbWJ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI2LVxcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZyZWVjbHVzdGVyc19jb3VudGVyKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjEyNzpcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI4LVxcdGtmcmVlKHNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX3F1ZXVlKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlxcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00Njg3PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiBjb250ZXh0LiAgV2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMzogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSd2ZSBhbHJlYWR5XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyNC0gKiB6ZXJvZWQgb3V0IGFjLVxcdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXFx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00NzkyPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00ODA2LVxcdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA3OlxcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwOC1cXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3OD1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMjEtXFx0XFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIyOlxcdFxcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMy1cXHRcXHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTM9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTctXFx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5ODpcXHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTktXFx0ICovXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NDE4PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTk6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MjAtXFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0Ny1cXHRcXHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0ODpcXHRcXHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICtcXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ3MD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5mcy9leHQ0L21iYWxsb2MuYzo1NDcxOmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzItXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3Ny1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc4OlxcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzktXFx0QlVHX09OKHBhLVxcdTAwM2VwYV9kZWxldGVkID09IDApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTUwMT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXFx0XFx0aWYgKHBhLVxcdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MzpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODQtXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNihwYSktXFx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy01NTg1LVxcdFxcdH0gZWxzZSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NjpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4Ny1cXHRcXHRcXHRleHQ0X21iX3BhX2ZyZWUocGEpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwOT12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwNS1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cGEtXFx1MDAzZXBhX2dyb3VwX2xpc3QpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDY6XFx0XFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFxcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDctXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTU5Mzc9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDAxLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYS1cXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMjpcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDMtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYwMjA9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDY3LSAqL1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjg6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG5mcy9leHQ0L21iYWxsb2MuYy02MDY5LXtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYyMzE9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cXHR9XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NjpcXHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1Ny1cXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzk9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjcyODA6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNzI4MS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzIyLVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTMyNC1cXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTc2OS1cXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XFxuZnMvZXh0NC9zdXBlci5jOjU3NzA6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc3MS1cXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD03NzA9REVGSU5FX0VWRU5UKGV4dDRfX21iX25ld19wYSwgZXh0NF9tYl9uZXdfZ3JvdXBfcGEsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtNzc3LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDo3Nzg6VFJBQ0VfRVZFTlQoZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC03NzktXFx0VFBfUFJPVE8oc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTgwNC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6ODA1OlRSQUNFX0VWRU5UKGV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtODA2LVxcdFRQX1BST1RPKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU3OjU2Ljg2OTk1NDkzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjgzMDIzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGV4dDRfcHV0X3N1cGVyYCBDb250ZXh0KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29kZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBgZXh0NF9wdXRfc3VwZXJgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtIGNsZWFudXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBsaWZlY3ljbGUsIGFzIHdlbGwgYXMgdGhlIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXRzZWxmLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0uIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXkgYXQgdGhpcyBwb2ludD8gQW5kIHRoZSBwb3RlbnRpYWwgcmVwZXJjdXNzaW9ucyBpZiBpdCBmYWlscz8gSSBjYW4ndCBqdXN0IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGluIGlzb2xhdGlvbjsgSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGNvZGUncyBoaWVyYXJjaHkuIExldCdzIGRpZyBpbiBhIGJpdCBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTc6NTguNzk4MjYwMTE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzEwOlxcdFxcbjEzMTE6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuMTMxMjpcXHRcXHRcXHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG4xMzEzOlxcdFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbjEzMTQ6XFx0XFx0XFx0aWYgKChlcnIgXFx1MDAzYyAwKSBcXHUwMDI2XFx1MDAyNiAhYWJvcnRlZCkge1xcbjEzMTU6XFx0XFx0XFx0XFx0ZXh0NF9hYm9ydChzYiwgLWVyciwgXFxcIkNvdWxkbid0IGNsZWFuIHVwIHRoZSBqb3VybmFsXFxcIik7XFxuMTMxNjpcXHRcXHRcXHR9XFxuMTMxNzpcXHRcXHR9IGVsc2VcXG4xMzE4OlxcdFxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19zYl91cGRfd29yayk7XFxuMTMxOTpcXHRcXG4xMzIwOlxcdFxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbjEzMjE6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbjEzMjI6XFx0XFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcXG4xMzIzOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuMTMyNDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0aWYgKCFleHQ0X2VtZXJnZW5jeV9zdGF0ZShzYikgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4xMzI3OlxcdFxcdFxcdGlmICghYWJvcnRlZCkge1xcbjEzMjg6XFx0XFx0XFx0XFx0ZXh0NF9jbGVhcl9mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpO1xcbjEzMjk6XFx0XFx0XFx0XFx0ZXh0NF9jbGVhcl9mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKTtcXG4xMzMwOlxcdFxcdFxcdFxcdGVzLVxcdTAwM2VzX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLVxcdTAwM2VzX21vdW50X3N0YXRlKTtcXG4xMzMxOlxcdFxcdFxcdH1cXG4xMzMyOlxcdFxcdFxcdGV4dDRfY29tbWl0X3N1cGVyKHNiKTtcXG4xMzMzOlxcdFxcdH1cXG4xMzM0OlxcdFxcbjEzMzU6XFx0XFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG4xMzM2OlxcdFxcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xcbjEzMzc6XFx0XFxuMTMzODpcXHRcXHRXQVJOX09OX09OQ0UoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0VSUk9SX0ZTKSBcXHUwMDI2XFx1MDAyNlxcbjEzMzk6XFx0XFx0XFx0ICAgICBwZXJjcHVfY291bnRlcl9zdW0oXFx1MDAyNnNiaS1cXHUwMDNlc19kaXJ0eWNsdXN0ZXJzX2NvdW50ZXIpKTtcXG4xMzQwOlxcdFxcdGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc2JpKTtcXG4xMzQxOlxcdCNpZmRlZiBDT05GSUdfUVVPVEFcXG4xMzQyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkrKylcXG4xMzQzOlxcdFxcdFxcdGtmcmVlKGdldF9xZl9uYW1lKHNiLCBzYmksIGkpKTtcXG4xMzQ0OlxcdCNlbmRpZlxcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHQvKiBEZWJ1Z2dpbmcgY29kZSBqdXN0IGluIGNhc2UgdGhlIGluLW1lbW9yeSBpbm9kZSBvcnBoYW4gbGlzdFxcbjEzNDc6XFx0XFx0ICogaXNuJ3QgZW1wdHkuICBUaGUgb24tZGlzayBvbmUgY2FuIGJlIG5vbi1lbXB0eSBpZiB3ZSd2ZVxcbjEzNDg6XFx0XFx0ICogZGV0ZWN0ZWQgYW4gZXJyb3IgYW5kIHRha2VuIHRoZSBmcyByZWFkb25seSwgYnV0IHRoZVxcbjEzNDk6XFx0XFx0ICogaW4tbWVtb3J5IGxpc3QgaGFkIGJldHRlciBiZSBjbGVhbiBieSB0aGlzIHBvaW50LiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1Nzo1OC43OTg1MTM2MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkxNDU5MTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZXh0NCBGaWxlc3lzdGVtKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBzZWUgd2UncmUgbG9va2luZyBhdCBgZnMvZXh0NC9tYmFsbG9jLmNgIGFuZCBgZnMvZXh0NC9zdXBlci5jYC4gUmlnaHQgYXdheSwgdGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEV4dDQgaXMgYSBjbGFzc2ljLCBhIGNvcmUgTGludXggZmlsZXN5c3RlbS4gVGhhdCBtYWtlcyBpdCBib3RoIGNydWNpYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqZWFzaWx5KiBmdXp6YWJsZSB2aWEgc3RhbmRhcmQgYXZlbnVlcyBsaWtlIG1vdW50aW5nIGNvcnJ1cHRlZCBpbWFnZXMsIGxvb3AgZGV2aWNlcywgYW5kIG9mIGNvdXJzZSwgc3l6a2FsbGVyLiBUaGUgYXR0YWNrIHN1cmZhY2UgaXMgZGVmaW5pdGVseSB0aGVyZS5cblxuRmlyc3QsIGxldCdzIHBpbnBvaW50IHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSd2ZSBnb3Q6XG5cbjEuICBJbiBgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYDogSSBzcG90IHRoYXQgYGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7YCBpcyBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBgZmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO2AuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHN5bmNocm9uaXphdGlvbiBjaGFuZ2UgaW4gdGhlIGRpc2NhcmQgd29yay5cbjIuICBBbHNvLCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgaXMgYWRkZWQgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZShzYik7YCBpbiBgZmFpbGVkX21vdW50NmAgd2l0aGluIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgbW91bnQgZmFpbHVyZSBwYXRoIC0gaW50ZXJlc3RpbmcuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbnM6IElzIGV4dDQgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIGZ1enppbmcgc2NlbmFyaW8/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gSXQncyBhIGNvcmUgZmlsZXN5c3RlbS4gU3l6a2FsbGVyIG1ha2VzIHNob3J0IHdvcmsgb2YgdHJpZ2dlcmluZyBhbGwgc29ydHMgb2YgZXh0NCBjb2RlIHBhdGhzLiBUaGUgc2Vjb25kIHF1ZXN0aW9uLCBpcyB0aGlzIHRhcmdldGVkIGNvZGUgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZCB2aWEgbm9ybWFsIG9wZXJhdGlvbj8gQWJzb2x1dGVseS4gTW91bnQgZmFpbHVyZXMgYXJlIHJvdXRpbmUgaW4gZnV6emluZywgYW5kIHRoZSBzdXBlcmJsb2NrIHJlbGVhc2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIChgZXh0NF9tYl9yZWxlYXNlYCwgYGV4dDRfZmlsbF9zdXBlcmAsIGBleHQ0X3B1dF9zdXBlcmApIGFyZSBkaXJlY3RseSBoaXQgYnkgc3l6a2FsbGVyLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uOiBMZXQgbWUgY2hlY2sgdGhlIGBDT05GSUdfRVhUNF9GU2AgaW4gdGhlIEtjb25maWcsIGFuZCB0aGVuIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9leHQ0L0tjb25maWdgIGl0c2VsZiB0byBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MDIuNzEzMTA3OTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3ODMwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODowMi44MTY4OTg3MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4NTU1OTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IHN5bWJvbHMuIEkgc2VlIGBleHQ0X21iX3JlbGVhc2VgLCBgZXh0NF9maWxsX3N1cGVyYCwgYGV4dDRfZm9yY2VfY29tbWl0YCwgYW5kIGBleHQ0X3B1dF9zdXBlcmAuICpIbW0qLCBgZXh0NF9wdXRfc3VwZXJgIGlzIGxpa2VseSBub3QgYXMgY3JpdGljYWwgYXMgdGhlIG90aGVycyBmb3IgdGhpcyBwdXJwb3NlLCBzbyBJJ2xsIGV4Y2x1ZGUgaXQgZnJvbSBpbml0aWFsIGNvbnNpZGVyYXRpb24uXG5cbk5vdywgYXJlIHRoZSByZW1haW5pbmcgdGhyZWUgZ29vZCAqRm9jdXNTeW1ib2xzKj8gSSB0aGluayBzbywgYmVjYXVzZSB0aGV5IGFyZSBkZWZpbml0ZWx5IG5vdCB1YmlxdWl0b3VzLiBgZXh0NF9tYl9yZWxlYXNlYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBleHQ0IHN1cGVyYmxvY2sgdGVhcmRvd24sIG1vdW50IGVycm9yIGhhbmRsaW5nLCBhbmQgbWJhbGxvYyBjbGVhbnVwLiBgZXh0NF9maWxsX3N1cGVyYCBpcywgb2YgY291cnNlLCBjcml0aWNhbCBmb3IgZXh0NCBtb3VudGluZy4gRmluYWxseSwgYGV4dDRfZm9yY2VfY29tbWl0YCBpcyBhbGwgYWJvdXQgY29tbWl0dGluZyB0aGUgZXh0NCBqb3VybmFsLlxuXG5UaGUgKldvcnRoRnV6emluZyogZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0LiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvdW5kOyB0aGlzIHBhdGNoIHRhcmdldHMgZXJyb3IgaGFuZGxpbmcgaW4gYGV4dDRfZmlsbF9zdXBlcmAgYW5kIGNsZWFudXAgaW4gYGV4dDRfbWJfcmVsZWFzZWAuIEl0IGFsc28gbWVudGlvbnMgdGhhdCBpdCBwcmV2ZW50cyBkaXNjYXJkIHdvcmsgcmVxdWV1ZWluZyBkdXJpbmcgam91cm5hbCB0ZWFyZG93bi4gVGhhdCdzIGEgZ29vZCBzaWduIGJlY2F1c2UgdGhlc2UgcGF0aHMgYXJlIHRyaWdnZXJlZCBkdXJpbmcgbW91bnQgZXJyb3IgdW53aW5kaW5nIGFuZCB1bm1vdW50IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuXG5cblNvLCBsZXQncyB2ZXJpZnkgbXkgZmluZGluZ3MuIEknbGwgY29uZmlybSB0aGF0IHRoZSAqRW5hYmxlQ29uZmlncyogdmFsdWUgaXMgY29ycmVjdC4gSSBzZWUgW1wiRVhUNF9GU1wiXS4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlICpGb2N1c1N5bWJvbHMqIGFyZSBub24tdWJpcXVpdG91cywgYW5kIHNwZWNpZmljLiBUaGV5IGFsc28gc2VlbSB0byByZXByZXNlbnQgYSBnb29kIHNldCBvZiBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgKlJlYXNvbmluZyogaXMgY29uY2lzZSBhbmQgY2xlYXIuIFRoaXMgY2hlY2tzIG91dC5cblxuT2theSwgYWxsIHRoZSBkZXRhaWxzIGxvb2sgZ29vZC4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTI1LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODowNy4wMDI0Njc2NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4NDA5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgICBcImV4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9mb3JjZV9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0IG1iYWxsb2Mgc2h1dGRvd24gbG9naWMgYW5kIG1vdW50IGZhaWx1cmUgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGFkZGluZyBleHQ0X2ZvcmNlX2NvbW1pdCBhbmQgZGlzYWJsaW5nIGRpc2NhcmQgd29yayBiZWZvcmUgcmVsZWFzaW5nIG1iYWxsb2Mgc3RydWN0dXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgZXh0NCBtb3VudC91bm1vdW50IHBhdGhzIGFuZCBtb3VudCBlcnJvciBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfbWJfcmVsZWFzZVwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJleHQ0X2ZvcmNlX2NvbW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgbWJhbGxvYyBzaHV0ZG93biBsb2dpYyBhbmQgbW91bnQgZmFpbHVyZSBlcnJvciBoYW5kbGluZyBwYXRocywgYWRkaW5nIGV4dDRfZm9yY2VfY29tbWl0IGFuZCBkaXNhYmxpbmcgZGlzY2FyZCB3b3JrIGJlZm9yZSByZWxlYXNpbmcgbWJhbGxvYyBzdHJ1Y3R1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBleHQ0IG1vdW50L3VubW91bnQgcGF0aHMgYW5kIG1vdW50IGVycm9yIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MDcuMTIyMzE1Nzk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyMTgxNzgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU4OjA3LjEyMjkxMzUwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNDIxMjE0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3JkZXJpbmcgZHVyaW5nIG1vdW50IGZhaWx1cmUgY2xlYW51cCBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgb24gc19kaXNjYXJkX3dvcmsgaW4gZXh0NF9tYl9yZWxlYXNlKCkgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgYmVmb3JlIHRlYXJpbmcgZG93biBtYmFsbG9jIHRvIHByZXZlbnQgZGlzY2FyZCB3b3JrIGZyb20gcnVubmluZyBhZnRlciBvciBkdXJpbmcgbWJhbGxvYyBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGlzc3VlcyBkdXJpbmcgZmlsZXN5c3RlbSB1bm1vdW50L2Vycm9yIHBhdGhzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBzbyB0aGVzZSByaXNrcyBmYWxsIHVuZGVyIEtBU0FOJ3MgZG9tYWluIHJhdGhlciB0aGFuIEtNU0FOJ3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNzc3NWI5ZDkzNTdlZjI1YTM5YjcwZjEwYzc1M2NiNWYwYWE4OWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMjo1NzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmNcbmluZGV4IGVkMWJkMDBlMTFjZDUuLjg3NGI3MTkzMWFiNmYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xuKysrIGIvZnMvZXh0NC9tYmFsbG9jLmNcbkBAIC0zODk3LDYgKzM4OTcsOCBAQCB2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxuIFx0ICovXG4gXHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4rXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xuIFxuIFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXHUwMDNlc19ncm91cF9pbmZvKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDRiNjExMmU1ZDZjNTkuLjM3ZGM2YjVmMjBjNjEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTU3NjEsNiArNTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIGZhaWxlZF9tb3VudDc6XG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4gZmFpbGVkX21vdW50NjpcbitcdC8qXG4rXHQgKiBXZSBjYW4gaGF2ZSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24gZnJvbSBvcnBoYW4gcmVwbGF5IG9yIHF1b3RhXG4rXHQgKiBzZXR1cC4gQ29tbWl0IGl0IHNvIHRoYXQgZGlzY2FyZCB3b3JrIGFmdGVyIGNvbW1pdCBydW5zIGJlZm9yZVxuK1x0ICogd2Ugc2h1dGRvd24gbWJhbGxvYy5cbitcdCAqL1xuK1x0ZXh0NF9mb3JjZV9jb21taXQoc2IpO1xuIFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbiBcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODowNy4xMjI5MTQ0NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg4MzEwNTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFBvdGVudGlhbCBNZW1vcnkgU2FmZXR5IGFuZCBTeW5jaHJvbml6YXRpb24gSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHByaW1hcmlseSBhZGRyZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyAoS01TQU4pIG9yIGlmIGl0J3MgZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiwgY2xlYW51cCwgdXNlLWFmdGVyLWZyZWUgKFVBRiksIG9yIHRlYXJkb3duIG9yZGVyaW5nIHByb2JsZW1zIChLQVNBTi9MT0NLREVQIHRlcnJpdG9yeSkuXG5cblJlYWRpbmcgdGhlIHBhdGNoIGl0c2VsZiByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgYWRkaXRpb25zLiBJbiBgZnMvZXh0NC9tYmFsbG9jLmNgLCB3ZSBzZWUgYSBuZXcgYGRpc2FibGVfd29ya19zeW5jYCBjYWxsIGFkZGVkIHRvIHRoZSBgZXh0NF9tYl9yZWxlYXNlYCBmdW5jdGlvbjpcblxuYGBgY1xudm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbntcbi4uLlxuXHQvKlxuXHQgKiB3YWl0IHRoZSBkaXNjYXJkIHdvcmsgdG8gZHJhaW4gYWxsIG9mIGV4dDRfZnJlZV9kYXRhXG5cdCAqL1xuXHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7XG4rXHQvKiBQcmV2ZW50IHRoZSBsYXRlciBqb3VybmFsIHRlYXJkb3duIGZyb20gcmVxdWV1ZWluZyBkaXNjYXJkIHdvcmsuICovXG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZGlzY2FyZF9saXN0KSk7XG5gYGBcblxuVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSBqb3VybmFsIHRlYXJkb3duIGZyb20gcmUtZW5xdWV1aW5nIGRpc2NhcmQgd29yay4gSW50ZXJlc3RpbmcuIEl0IGltcGxpZXMgYSBzcGVjaWZpYyBvcmRlcmluZyBkZXBlbmRlbmN5IG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gQWxzbyBpbiBgZnMvZXh0NC9zdXBlci5jYCwgd2l0aGluIHRoZSBgZmFpbGVkX21vdW50YCBsYWJlbHMsIHRoZXJlIGlzOlxuXG5gYGBjXG5mYWlsZWRfbW91bnQ2OlxuK1x0LypcbitcdCAqIFdlIGNhbiBoYXZlIGEgcnVubmluZyB0cmFuc2FjdGlvbiBmcm9tIG9ycGhhbiByZXBsYXkgb3IgcXVvdGFcbitcdCAqIHNldHVwLiBDb21taXQgaXQgc28gdGhhdCBkaXNjYXJkIHdvcmsgYWZ0ZXIgY29tbWl0IHJ1bnMgYmVmb3JlXG4rXHQgKiB3ZSBzaHV0ZG93biBtYmFsbG9jLlxuK1x0ICovXG4rXHRleHQ0X2ZvcmNlX2NvbW1pdChzYik7XG5cdGV4dDRfbWJfcmVsZWFzZShzYik7XG5cdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuZmFpbGVkX21vdW50NTpcbmBgYFxuXG5UaGlzIGFkZGl0aW9uIG9mIGBleHQ0X2ZvcmNlX2NvbW1pdChzYilgIGJlZm9yZSBgZXh0NF9tYl9yZWxlYXNlKHNiKWAgaXMgYWxzbyBjcml0aWNhbC4gSXQgZXhwbGljaXRseSBhaW1zIHRvIGVuc3VyZSB0aGF0IGRpc2NhcmQgd29yaywgd2hpY2ggaXMgcGFydCBvZiB0aGUgYG1iYWxsb2NgIHN1YnN5c3RlbSwgaXMgY29tcGxldGVkIGJlZm9yZSB0ZWFyaW5nIHRoaW5ncyBkb3duLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIG91dC4gSSBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCBgZnMvZXh0NC9tYmFsbG9jLmNgIGFuZCBgZnMvZXh0NC9zdXBlci5jYCB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcGlucG9pbnQgKndoeSogdGhlc2UgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgZGlzY2FyZCB3b3JrLCBqb3VybmFsIHRlYXJkb3duLCBhbmQgdGhlIGBtYmFsbG9jYCBzdWJzeXN0ZW0gd2lsbCBiZSBjcnVjaWFsIHRvIGFzc2Vzc2luZyB0aGUgc291bmRuZXNzIG9mIHRoaXMgcGF0Y2guIElzIGl0IGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBiZWluZyBhZGRyZXNzZWQ/IE9yIGEgbW9yZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSB3b3JrcXVldWUgaW50ZXJhY3Rpb25zIGFuZCB0cmFuc2FjdGlvbiBzZW1hbnRpY3MgdG8gc2F5IGZvciBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ2LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MTIuMDA2MDIyNjgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21iYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODkwOlxcdFxcdGludCBudW1fbWV0YV9ncm91cF9pbmZvcztcXG4zODkxOlxcdFxcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbywgKioqZ3JvdXBfaW5mbztcXG4zODkyOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjM4OTM6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGdldF9ncm91cGluZm9fY2FjaGUoc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbjM4OTQ6XFx0XFx0aW50IGNvdW50O1xcbjM4OTU6XFx0XFxuMzg5NjpcXHRcXHQvKlxcbjM4OTc6XFx0XFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxcbjM4OTg6XFx0XFx0ICovXFxuMzg5OTpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4zOTAwOlxcdFxcdC8qIFByZXZlbnQgdGhlIGxhdGVyIGpvdXJuYWwgdGVhcmRvd24gZnJvbSByZXF1ZXVlaW5nIGRpc2NhcmQgd29yay4gKi9cXG4zOTAxOlxcdFxcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4zOTAyOlxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xcbjM5MDM6XFx0XFxuMzkwNDpcXHRcXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cXHUwMDNlc19ncm91cF9pbmZvKTtcXG4zOTA1OlxcdFxcdGlmIChncm91cF9pbmZvKSB7XFxuMzkwNjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbmdyb3VwczsgaSsrKSB7XFxuMzkwNzpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4zOTA4OlxcdFxcdFxcdFxcdGdyaW5mbyA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpO1xcbjM5MDk6XFx0XFx0XFx0XFx0aWYgKCFncmluZm8pXFxuMzkxMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zOTExOlxcdFxcdFxcdFxcdG1iX2dyb3VwX2JiX2JpdG1hcF9mcmVlKGdyaW5mbyk7XFxuMzkxMjpcXHRcXHRcXHRcXHRleHQ0X2xvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTM6XFx0XFx0XFx0XFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcXG4zOTE0OlxcdFxcdFxcdFxcdGlmIChjb3VudClcXG4zOTE1OlxcdFxcdFxcdFxcdFxcdG1iX2RlYnVnKHNiLCBcXFwibWJhbGxvYzogJWQgUEFzIGxlZnRcXFxcblxcXCIsXFxuMzkxNjpcXHRcXHRcXHRcXHRcXHRcXHQgY291bnQpO1xcbjM5MTc6XFx0XFx0XFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTg6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ3JpbmZvKTtcXG4zOTE5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NTg6MTIuMDA2Mzk5MjQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc1MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTc1MDpcXHRcXHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cXG41NzUxOlxcdFxcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xcbjU3NTI6XFx0XFx0aWYgKGVycilcXG41NzUzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50OTtcXG41NzU0OlxcdFxcbjU3NTU6XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdGZhaWxlZF9tb3VudDk6XFxuNTc1ODpcXHRcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG41NzU5OlxcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuNTc2MDpcXHRcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbjU3NjE6XFx0ZmFpbGVkX21vdW50NzpcXG41NzYyOlxcdFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG41NzYzOlxcdGZhaWxlZF9tb3VudDY6XFxuNTc2NDpcXHRcXHQvKlxcbjU3NjU6XFx0XFx0ICogV2UgY2FuIGhhdmUgYSBydW5uaW5nIHRyYW5zYWN0aW9uIGZyb20gb3JwaGFuIHJlcGxheSBvciBxdW90YVxcbjU3NjY6XFx0XFx0ICogc2V0dXAuIENvbW1pdCBpdCBzbyB0aGF0IGRpc2NhcmQgd29yayBhZnRlciBjb21taXQgcnVucyBiZWZvcmVcXG41NzY3OlxcdFxcdCAqIHdlIHNodXRkb3duIG1iYWxsb2MuXFxuNTc2ODpcXHRcXHQgKi9cXG41NzY5OlxcdFxcdGV4dDRfZm9yY2VfY29tbWl0KHNiKTtcXG41NzcwOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc3MTpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzcyOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc3MzpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc3NDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzc3OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc3ODpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzc5OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4MDpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzgxOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc4MjpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3ODM6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3ODQ6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjU4OjEyLjAwNjc0ODgxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTM3MzQ1NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYnVnIGZpeC4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIG1vdW50IGVycm9yIGNsZWFudXAgYW5kIG1iYWxsb2MgdGVhcmRvd24gcHJvY2Vzcy4gVGhlIGlzc3VlIGFyaXNlcyBmcm9tIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGRpc2NhcmQgd29ya3F1ZXVlLlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGBleHQ0X21iX3JlbGVhc2VgIGNhbiBzdGFydCBkaXNtYW50bGluZyB0aGUgZ3JvdXBfaW5mbyBhbmQgbWJhbGxvYyBzdHJ1Y3R1cmVzLiBJZiB0aGUgZGlzY2FyZCB3b3JrcXVldWUgaXMgYWxsb3dlZCB0byBleGVjdXRlIGVpdGhlciBhZnRlciBvciBjb25jdXJyZW50bHkgd2l0aCB0aGlzIHRlYXJkb3duIHByb2Nlc3MsIGl0IHJpc2tzIGFjY2Vzc2luZyBtZW1vcnkgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGZyZWVkIG9yIHRyeWluZyB0byBvcGVyYXRlIG9uIHN0cnVjdHVyZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkLiBUaGlzIGxlYWRzIHRvIHVzZS1hZnRlci1mcmVlIGVycm9ycyBhbmQgd29ya3F1ZXVlIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgbmFzdHkgdG8gZGVidWcuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWxlZ2FudCwgZm9jdXNpbmcgb24gdHdvIGtleSBhY3Rpb25zLiBGaXJzdCwgYGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfd29yayk7YCBwcmV2ZW50cyB0aGUgcmVxdWV1aW5nIG9mIGRpc2NhcmQgd29yayBhZnRlciBgZXh0NF9tYl9yZWxlYXNlYCBzdGFydHMsIGVuc3VyaW5nIHRoYXQgbm8gbmV3IHdvcmsgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGR1cmluZyB0aGlzIGNyaXRpY2FsIHBlcmlvZC4gU2Vjb25kLCBhbmQgY3J1Y2lhbGx5LCBgZXh0NF9mb3JjZV9jb21taXQoc2IpO2AgY29tbWl0cyBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGJlZm9yZSB0aGUgbWJhbGxvYyBpcyBzaHV0IGRvd24uIFRoaXMgaXMgdGhlIHNhZmVndWFyZCB0aGF0IGVuc3VyZXMgdGhlIGRpc2NhcmQgd29yayBxdWV1ZWQgKmJlZm9yZSogdGhlIGNvbW1pdCBjb21wbGV0ZXMgKmJlZm9yZSogbWJhbGxvYyBpcyBzaHV0IGRvd24uXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zLCBvciBwZXJoYXBzIGxlYWtzIGluZm9ybWF0aW9uLiBBZnRlciBhIGNhcmVmdWwgcmV2aWV3LCBpdCdzIGNsZWFyIHRoYXQgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcmVhZHMuIFRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mbyBsZWFrcywgYW5kIG5vIHBhZGRpbmcgaXNzdWVzLCBub3IgYW55IG5ldyBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIGF0IHJpc2suIFRoZSBidWdzIGFkZHJlc3NlZCBhcmUgY2xlYXJseSBVQUYsIHJhY2UgY29uZGl0aW9ucywgYW5kIHdvcmtxdWV1ZSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMgZHVyaW5nIHVubW91bnQvZXJyb3Igc2NlbmFyaW9zLCB3aGljaCBhcmUgdGhhbmtmdWxseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIEtNU0FOLCBob3dldmVyLCBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgd2hpY2ggaXNuJ3QgdGhlIGZvY3VzIGhlcmUuXG5cblRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSd2ZSBjb25maXJtZWQgdGhlIHBhdGNoJ3Mgc2NvcGUuIFRoZSBmaXggY29uc2lzdHMgb2YgdHdvIHBhcnRzOiB0aGUgYGRpc2FibGVfd29ya19zeW5jYCBjYWxsIHdpdGhpbiBgZXh0NF9tYl9yZWxlYXNlYCBhbmQgYGV4dDRfZm9yY2VfY29tbWl0YCBpbiB0aGUgYGV4dDRfZmlsbF9zdXBlcmAgZXJyb3IgcGF0aC4gTmVpdGhlciBvZiB0aGVzZSBzZWN0aW9ucyBpbnRyb2R1Y2VzLCBvciBldmVuIHRvdWNoZXMsIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZGlmZmVyZW50IGNhdGVnb3J5IG9mIG1lbW9yeSBzYWZldHkgaXNzdWUsIGFuZCB3aGlsZSBpbXBvcnRhbnQsIGRvZXNuJ3Qgd2FycmFudCBLTVNBTiBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5OCwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo1ODoxNy41NDQwOTc1NzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4ncyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4ncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB3b3JrcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBvcmRlcmluZyBkdXJpbmcgbW91bnQgZmFpbHVyZSBjbGVhbnVwIGluIGV4dDQuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgZGlzYWJsZV93b3JrX3N5bmMoKSBvbiBzX2Rpc2NhcmRfd29yayBpbiBleHQ0X21iX3JlbGVhc2UoKSBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBiZWZvcmUgdGVhcmluZyBkb3duIG1iYWxsb2MgdG8gcHJldmVudCBkaXNjYXJkIHdvcmsgZnJvbSBydW5uaW5nIGFmdGVyIG9yIGR1cmluZyBtYmFsbG9jIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgaXNzdWVzIGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnQvZXJyb3IgcGF0aHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHRoZXNlIHJpc2tzIGZhbGwgdW5kZXIgS0FTQU4ncyBkb21haW4gcmF0aGVyIHRoYW4gS01TQU4ncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowgnbvn[1] Phase: Succeeded StartedAt: 2026-09-09 12:58:29 +0000 UTC FinishedAt: 2026-09-09 12:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 12:58:29 +0000 UTC FinishedAt: 2026-09-09 12:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2] Phase: Succeeded StartedAt: 2026-09-09 12:58:29 +0000 UTC FinishedAt: 2026-09-09 16:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 12:58:29 +0000 UTC FinishedAt: 2026-09-09 16:47:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 12:58:29 +0000 UTC FinishedAt: 2026-09-09 12:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 12:58:29 +0000 UTC FinishedAt: 2026-09-09 12:58:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgnbvn/series-workflowgnbvn-convert-artifact-3324859830/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 12:58:39 +0000 UTC FinishedAt: 2026-09-09 13:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 12:58:39 +0000 UTC FinishedAt: 2026-09-09 13:17:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3042de9b-b248-408c-b2d8-5af931e6eac0,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-workflowgnbvn/series-workflowgnbvn-convert-artifact-3324859830/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": "44bb2d43-0330-43a8-bb2f-b0fcfbd722c1", "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-workflowgnbvn/series-workflowgnbvn-build-action-3246292172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 12:58:39 +0000 UTC FinishedAt: 2026-09-09 13:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3042de9b-b248-408c-b2d8-5af931e6eac0,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-workflowgnbvn/series-workflowgnbvn-convert-artifact-3324859830/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": "44bb2d43-0330-43a8-bb2f-b0fcfbd722c1", "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-workflowgnbvn/series-workflowgnbvn-build-action-3246292172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 13:17:11 +0000 UTC FinishedAt: 2026-09-09 13:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 13:17:11 +0000 UTC FinishedAt: 2026-09-09 13:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 13:17:11 +0000 UTC FinishedAt: 2026-09-09 13:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 13:17:11 +0000 UTC FinishedAt: 2026-09-09 13:17:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgnbvn/series-workflowgnbvn-convert-artifact-2354360137/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 13:17:34 +0000 UTC FinishedAt: 2026-09-09 13:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 13:17:34 +0000 UTC FinishedAt: 2026-09-09 13:19:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*44bb2d43-0330-43a8-bb2f-b0fcfbd722c1,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-workflowgnbvn/series-workflowgnbvn-build-action-3246292172/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-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 13:19:38 +0000 UTC FinishedAt: 2026-09-09 13:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:19:38 +0000 UTC FinishedAt: 2026-09-09 13:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 13:19:38 +0000 UTC FinishedAt: 2026-09-09 13:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 13:19:38 +0000 UTC FinishedAt: 2026-09-09 13:39:37 +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:*3042de9b-b248-408c-b2d8-5af931e6eac0,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-workflowgnbvn/series-workflowgnbvn-convert-artifact-2354360137/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": "f2833fa2-480d-4ece-897a-0955d54426db", "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-workflowgnbvn/series-workflowgnbvn-build-action-4267327013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 13:19:38 +0000 UTC FinishedAt: 2026-09-09 13:39:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3042de9b-b248-408c-b2d8-5af931e6eac0,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-workflowgnbvn/series-workflowgnbvn-convert-artifact-2354360137/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": "f2833fa2-480d-4ece-897a-0955d54426db", "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-workflowgnbvn/series-workflowgnbvn-build-action-4267327013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 13:39:37 +0000 UTC FinishedAt: 2026-09-09 13:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 13:39:37 +0000 UTC FinishedAt: 2026-09-09 13:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 13:39:37 +0000 UTC FinishedAt: 2026-09-09 13:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 13:39:37 +0000 UTC FinishedAt: 2026-09-09 13:41:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2833fa2-480d-4ece-897a-0955d54426db,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-workflowgnbvn/series-workflowgnbvn-build-action-4267327013/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-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 16:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 16:47:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"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:*44bb2d43-0330-43a8-bb2f-b0fcfbd722c1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2833fa2-480d-4ece-897a-0955d54426db,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-workflowgnbvn/series-workflowgnbvn-build-action-3246292172/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-workflowgnbvn/series-workflowgnbvn-build-action-4267327013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 13:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 13:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"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-workflowgnbvn/series-workflowgnbvn-convert-artifact-895257758/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 13:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 13:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:41:33 +0000 UTC FinishedAt: 2026-09-09 13:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 13:41:45 +0000 UTC FinishedAt: 2026-09-09 16:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_fill_super","ext4_force_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"23da087d9a636d9b2046f3aa3b7470ae51b89c8a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"f780b1cb-4f06-4520-8fc4-94625f7d83e6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 13:41:45 +0000 UTC FinishedAt: 2026-09-09 16:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*44bb2d43-0330-43a8-bb2f-b0fcfbd722c1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2833fa2-480d-4ece-897a-0955d54426db,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-workflowgnbvn/series-workflowgnbvn-build-action-3246292172/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-workflowgnbvn/series-workflowgnbvn-build-action-4267327013/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-workflowgnbvn/series-workflowgnbvn-convert-artifact-895257758/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,}