Name: series-workflowqjfgd Phase: Succeeded StartedAt: 2026-08-24 09:26:09 +0000 UTC FinishedAt: 2026-08-24 13:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[0] Phase: Succeeded StartedAt: 2026-08-24 09:26:09 +0000 UTC FinishedAt: 2026-08-24 09:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 09:26:09 +0000 UTC FinishedAt: 2026-08-24 09:46:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "50bdc70c-6584-4ed8-930a-efe2f71b6cca" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "count_shadow_nodes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXHUwMDNlbnJfcGFnZXNgIGFycmF5cyBhbmQgc3VtcyB1cCB0aGUgcGFnZSBjb3VudHMuIFRoaXMgY2hhbmdlIGlzIHB1cmVseSByZWxhdGVkIHRvIGludGVybmFsIGtlcm5lbCBhY2NvdW50aW5nIGFuZCBsb2dpYyBmb3IgdGhlIHNoYWRvdyBub2RlIHNocmlua2VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjE4ZGEzZjJiNGZjN2MzNjAxZDA4ZDA1ZTc2OWIwNmMxNGE5N2ExNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA5OjQzOjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uZGEyMDAzNGQyOGZjNiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNjUzLDYgJiM0Mzs2NTMsMzcgQEAgdm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxuIFx0fVxuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ29cbiYjNDM7ICogdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hpbGUgYmF0Y2hlZCB1cGRhdGVzIGFyZSBwZW5kaW5nLCBzbyBjbGFtcFxuJiM0MzsgKiB0aGUgc3VtIGF0IHplcm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdGxvbmcgbnJfcGFnZXMgPSAwO1xuJiM0MztcdGludCBnZW4sIHR5cGUsIHpvbmU7XG4mIzQzO1xuJiM0MztcdGlmICghbHJ1Z2VuLVx1MDAzZWVuYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4mIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRsb25nICpjbnQgPSBscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0bnJfcGFnZXMgJiM0Mzs9IFJFQURfT05DRShjbnRbem9uZV0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJfcGFnZXM7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuIHtcbkBAIC02OTcsNiAmIzQzOzcyOCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxuIFx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW5cbiYjNDM7XHRcdCAqIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tdIGluc3RlYWQgb2YgbXotXHUwMDNlbHJ1X3pvbmVfc2l6ZSwgd2hpY2hcbiYjNDM7XHRcdCAqIGxydXZlY19scnVfc2l6ZSgpIHJlYWRzLCBzbyB0aGUgbG9vcCBhYm92ZSBtaXNzZXMgdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cGFnZXMgJiM0Mzs9IGNvdW50X2xydV9nZW5fcGFnZXMobHJ1dmVjKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyIHRvIGFjY291bnQgZm9yIHBhZ2VzIGluIHRoZSBtdWx0aS1nZW4gTFJVIChNR0xSVSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gbG9naWMsIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBwcmVzc3VyZSB0cmlnZ2VycyBzaHJpbmtlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMThkYTNmMmI0ZmM3YzM2MDFkMDhkMDVlNzY5YjA2YzE0YTk3YTE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDk6NDM6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggZjM1MTc5OGU3MjNhYy4uZGEyMDAzNGQyOGZjNiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNjUzLDYgJiM0Mzs2NTMsMzcgQEAgdm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKQogCX0KIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOy8qCiYjNDM7ICogVGhlIHBlci1nZW5lcmF0aW9uIGNvdW50ZXJzIGFyZSBldmVudHVhbGx5IGNvbnNpc3RlbnQgYW5kIG1heSBnbwomIzQzOyAqIHRyYW5zaWVudGx5IG5lZ2F0aXZlIHdoaWxlIGJhdGNoZWQgdXBkYXRlcyBhcmUgcGVuZGluZywgc28gY2xhbXAKJiM0MzsgKiB0aGUgc3VtIGF0IHplcm8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfbHJ1X2dlbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJbG9uZyBucl9wYWdlcyA9IDA7CiYjNDM7CWludCBnZW4sIHR5cGUsIHpvbmU7CiYjNDM7CiYjNDM7CWlmICghbHJ1Z2VuLSZndDtlbmFibGVkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAoZ2VuID0gMDsgZ2VuICZsdDsgTUFYX05SX0dFTlM7IGdlbiYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykgewomIzQzOwkJCWxvbmcgKmNudCA9IGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXTsKJiM0MzsKJiM0MzsJCQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCQkJbnJfcGFnZXMgJiM0Mzs9IFJFQURfT05DRShjbnRbem9uZV0pOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlcyAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBucl9wYWdlczsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAkJCQkJc3RydWN0IHNocmlua19jb250cm9sICpzYykKIHsKQEAgLTY5Nyw2ICYjNDM7NzI4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCQlmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQogCQkJcGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpOwogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7CQkvKgomIzQzOwkJICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW4KJiM0MzsJCSAqIGxydWdlbi0mZ3Q7bnJfcGFnZXNbXSBpbnN0ZWFkIG9mIG16LSZndDtscnVfem9uZV9zaXplLCB3aGljaAomIzQzOwkJICogbHJ1dmVjX2xydV9zaXplKCkgcmVhZHMsIHNvIHRoZSBsb29wIGFib3ZlIG1pc3NlcyB0aGVtLgomIzQzOwkJICovCiYjNDM7CQlwYWdlcyAmIzQzOz0gY291bnRfbHJ1X2dlbl9wYWdlcyhscnV2ZWMpOwomIzQzOyNlbmRpZgomIzQzOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCiAJCQlscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3dvcmtpbmdzZXQuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIHRoaXMgbmV3IGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBmdW5jdGlvbiwgYnV0IG9ubHkgaWYgYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkIOKAkyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbHJpZ2h0LiBBbmQgdGhlbiBpdCYjMzk7cyB0d2Vha2luZyBgY291bnRfc2hhZG93X25vZGVzYCB0byAqY2FsbCogdGhhdCBuZXcgZnVuY3Rpb24gd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQuIFRoYXQgaW1wbGllcyBhIGRlcGVuZGVuY3kgb3IgYSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gcGF0aCwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHNoYWRvdyBub2RlcyBpbnRlcmFjdCB3aXRoIHRoZSBMUlUgZ2VuZXJhdGlvbi4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGNvdW50X3NoYWRvd19ub2Rlc2AgZml0cyBpbnRvIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJdCYjMzk7cyBhIHNocmlua2VyIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IHJlY2xhbWF0aW9uIG1lY2hhbmlzbXMuIEdvb2QuIEFuZCBgd29ya2luZ3NldF91cGRhdGVfbm9kZWAgaXMgYWxzbyBpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzZXQgY29kZSBhbmQgdGhlIHNocmlua2VyIHJlZ2lzdHJhdGlvbi4gVGhlIHNocmlua2VyIGlzIGluaXRpYWxpemVkIGluIGB3b3JraW5nc2V0X2luaXRgLCByaWdodD8gT2theSwgc28gdGhhdCBnaXZlcyBtZSB0aGUgY29udGV4dC4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR19MUlVfR0VOYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIG9wdGlvbiBmb3IgYExSVV9HRU5gLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guIElzIGl0IGFib3V0IGdlbmVyYXRpb25hbCBMUlUgZm9yIHBhZ2UgcmVjbGFtYXRpb24/IE9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHRvIHNoYWRvdyBub2Rlcz8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOS1cbm1tL0tjb25maWc6MTQxMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE1LVxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNC1cbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgY291bnRfbHJ1X2dlbl9wYWdlc2Agd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgaXQmIzM5O3MgY2xlYXJseSByZWxhdGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbiBmZWF0dXJlLiBUaGUgY29yZSBsb2dpYyBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50ZWdyYXRpbmcgdGhpcyBuZXcgZnVuY3Rpb24gaW50byBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgcHJvYmFibHkgY2FsY3VsYXRpbmcgcGFnZXMgZm9yIHRoZSBuZXcgTFJVIGdlbiB3aXRoaW4gdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIuIEdpdmVuIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gc2hyaW5raW5nLCB0aGlzIGlzICp2ZXJ5KiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBXZSBhcmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSByZWNsYW1hdGlvbiBzdHJhdGVnaWVzLCBhbmQgaG93IHRvIGJhbGFuY2UgdGhlbSB3aXRoIHRoZSBuZXcgTFJVIGdlbmVyYXRpb24gYWxnb3JpdGhtLgoKSSBuZWVkIHRvIGNvbmZpcm0gYGNvdW50X3NoYWRvd19ub2Rlc2AmIzM5OyByZWFjaGFiaWxpdHk7IGl0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYywgc28gYSBxdWljayBjaGVjayBmb3Igd2hlcmUgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBhIHNocmlua2VyIGNhbGxiYWNrIGlzIGluIG9yZGVyLiBJdCBoYXMgdG8gYmUgcmVnaXN0ZXJlZCBzb21ld2hlcmUgdG8gYmUgaW52b2tlZCBieSB0aGUga2VybmVsLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTY2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS93b3JraW5nc2V0LmMtNjg2LVxubW0vd29ya2luZ3NldC5jOjY4NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbm1tL3dvcmtpbmdzZXQuYy02ODgtXHRcdFx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4tLVxubW0vd29ya2luZ3NldC5jPTgzOD1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcbi0tXG5tbS93b3JraW5nc2V0LmMtODc0LVxubW0vd29ya2luZ3NldC5jOjg3NTpcdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBjb3VudF9zaGFkb3dfbm9kZXM7XG5tbS93b3JraW5nc2V0LmMtODc2LVx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gc2Nhbl9zaGFkb3dfbm9kZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgd29ya2luZ3NldCBhbmQgYSBzaHJpbmtlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYGNvdW50X2xydV9nZW5fcGFnZXMoKWAgaW5zaWRlIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayB3aXRoaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoaXMgaXMgYSBjbGFzc2ljIExSVS1yZWxhdGVkIGFkZGl0aW9uLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBub3RlIGZvciBsYXRlciBhbmFseXNpcy4KClRoZSBuZXh0IHRoaW5nIGlzIHRoYXQgYGNvdW50X3NoYWRvd19ub2RlcygpYCBpcyBiZWluZyBtb2RpZmllZCB0byBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhhdCBuZXcgZnVuY3Rpb24sIGJ1dCAqb25seSogd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQuIFRoaXMgbW9kaWZpY2F0aW9uIGdvZXMgaW50byB0aGUgYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzYCBwb2ludGVyLiBUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb24gdGhlIHNocmlua2VyIGJlaGF2aW9yLiBJIGNhbiBhbHJlYWR5IHRlbGwgdGhhdCB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6eiBsYXRlciBzaW5jZSBpdCBjb3VsZCB1bmNvdmVyIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB1bmRlciBzdHJlc3MuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNlZSB3aGF0IHN5bWJvbHMgSSBjYW4gZm9jdXMgb24gd2hpbGUgZnV6emluZywgYnV0IHRoZW4gSSBoYWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgaWYgdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCB3ZXJlIHN0YXRpYy4gKlNob290KiwgYm90aCBgY291bnRfc2hhZG93X25vZGVzYCBhbmQgYGNvdW50X2xydV9nZW5fcGFnZXNgIGFyZSBzdGF0aWMuIEkgaGFkIHRvIGNsYXJpZnkgdGhhdCBzaW5jZSB0aGUgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgcGFydCBvZiBhIHNocmlua2VyIGNhbGxiYWNrLCBidXQgaXQgaXMgc3RhdGljLiBTbywgbm8gbHVjayBvbiBkaXJlY3QgZnV6emluZyB0YXJnZXRzIHdpdGhpbiB0aGUgcGF0Y2ggaXRzZWxmLCBhdCBsZWFzdCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIFNvIEkgdGhlbiBjaGVjayBgbW0vd29ya2luZ3NldC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHNocmlua2VyIGluaXRpYWxpemF0aW9uLiBJIGJyaWVmbHkgcmVtZW1iZXIgdGhhdCBgd29ya2luZ3NldF9pbml0YCByZWdpc3RlcnMgdGhlIHNocmlua2VyLCBhbmQgdGhlIHNocmlua2VyIGlzIHVsdGltYXRlbHkgY2FsbGVkIGJ5IHRoZSBWTSBzY2FubmVyLgoKSSYjMzk7bSB0aGlua2luZyBJIGNhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgZWl0aGVyIGZ1bmN0aW9uLCBidXQgbWF5YmUgSSYjMzk7bSBvdmVydGhpbmtpbmcgaXQuIEl0JiMzOTtzIGEgY2FsbGJhY2ssIGFmdGVyIGFsbCwgYW5kIHRoZSBzaHJpbmtlciBpcyByZWdpc3RlcmVkIGFuZCBtYW5hZ2VkIGVsc2V3aGVyZS4gU28sIGxlYXZpbmcgYEZvY3VzU3ltYm9sc2AgZW1wdHkgbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZSwgb3IgcGVyaGFwcyBJIGNvdWxkIGNvbnNpZGVyIHRoZSBzaHJpbmtlciBjYWxsYmFjayBpdHNlbGYuIFRoZSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY2hhbmdlIGlzIGBMUlVfR0VOYCwgc28gSSYjMzk7bGwgYWxzbyBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IGNvbmRpdGlvbnMgbWlnaHQgYWN0aXZhdGUgdGhpcyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOS1cbm1tL0tjb25maWc6MTQxMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE1LVxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNC1cbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgUmVjbGFpbSB3aXRoIE1HTFJVKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBjb3VudF9zaGFkb3dfbm9kZXNgIGluIGBtbS93b3JraW5nc2V0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHVwZGF0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYWNjb3VudCBmb3IgcGFnZXMgdHJhY2tlZCBieSBNR0xSVSB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZC4gQSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgaXMgYWxzbyBpbnRyb2R1Y2VkLCB3aGljaCBzaW1wbHkgcmVhZHMgYGxydWdlbi0mZ3Q7bnJfcGFnZXNgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBgY291bnRfc2hhZG93X25vZGVzYCBpcyB1c2VkIGFzIHRoZSBgY291bnRfb2JqZWN0c2AgY2FsbGJhY2sgZm9yIGB3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlcmAuIFRoaXMgc2hyaW5rZXIsIGluIHR1cm4sIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGB3b3JraW5nc2V0X2luaXRgIGFuZCBnZXRzIGludm9rZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyB0aGUgbG9naWMgd2l0aGluIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBhbmQgdGhhdCBkaXJlY3RseSBpbmZsdWVuY2VzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLiBUaGUgZmFjdCB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIHN0YXRpYyBpbml0aWFsbHkgbWFkZSBtZSBwYXVzZS4gSSBrbm93IHdlIGdlbmVyYWxseSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuIEJ1dCBpdCYjMzk7cyBjYWxsZWQgdmlhIHRoZSBzaHJpbmtlciBpbnRlcmZhY2UuIFRoYXQgc2hyaW5rZXImIzM5O3MgaW52b2tlZCBmcm9tIGBkb19zaHJpbmtfc2xhYmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBzaHJpbmtfc2xhYmAuIFNvIHdlJiMzOTtyZSByZWFsbHkgbG9va2luZyBhdCBhIGNoYWluIG9mIGZ1bmN0aW9ucy4KCkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGNvdW50X3NoYWRvd19ub2Rlc2AgYXMgdGhlIGZvY3VzIGJlY2F1c2UgaXQgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGNvbmNlcm5lZCBtZS4gSG93ZXZlciwgaXQmIzM5O3MgKmNhbGxlZCogYXMgYSBjYWxsYmFjayB2aWEgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIG1lYW5zIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQuIFNvLCBpdCYjMzk7cyBhY3R1YWxseSBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjb3VudF9zaGFkb3dfbm9kZXNgIGFuZCBgY291bnRfbHJ1X2dlbl9wYWdlc2AgYnV0IHRoZSBvbmx5IG5vbi1zdGF0aWMgaXMgYHNocmlua19zbGFiYC4KClNpbmNlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIHN0YXRpYywgSSBjYW4gc3RpbGwgdXNlIGl0LiBJJiMzOTtsbCBmb2N1cyBvbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgYExSVV9HRU5gLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDE6XHRjb25maWcgTFJVX0dFTlxuMTQwMjpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAzOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNDpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA1Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDY6XHRcdGhlbHBcbjE0MDc6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA4Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDk6XHRcbjE0MTA6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDExOlx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDEyOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTM6XHRcdGhlbHBcbjE0MTQ6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxNTpcdFxuMTQxNjpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE3Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxODpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTMKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiA4MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS93b3JraW5nc2V0LmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgYWRkaW5nIGEgbmV3IGZ1bmN0aW9uLCBgY291bnRfbHJ1X2dlbl9wYWdlc2AsIGFuZCBpbnRlZ3JhdGluZyBpdCBpbnRvIGBjb3VudF9zaGFkb3dfbm9kZXNgLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgYSBzaHJpbmtlciBjYWxsYmFjayAoYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzYCksIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwcm9jZXNzLgoKVGhpcyBjaGFuZ2UgaXMgZ2F0ZWQgYmVoaW5kIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLCBzbyBlbmFibGluZyB0aGlzIGZlYXR1cmUgaXMgYSBwcmVyZXF1aXNpdGUuIFdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBhbHNvIGBMUlVfR0VOX0VOQUJMRURgLiBUaGlzIGxpa2VseSBpbmZsdWVuY2VzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBvciBpdCBtaWdodCBiZSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdHdlYWtlZCBhdCBydW50aW1lLgoKTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBob3cgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGVzIGludGVyYWN0IHdpdGggdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBtZWFucyBpdCYjMzk7cyByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUga2lja3MgaW4gYW5kIHRyaWdnZXJzIHRoZSBzaHJpbmtlciBtZWNoYW5pc20uCgpMZXQmIzM5O3MgZm9jdXMgb24gdGhlIGtleSBlbGVtZW50cy4gVGhlIHByaW1hcnkgJiMzNDtlbnRyeXBvaW50JiMzNDsgZm9yIHRoaXMgY2hhbmdlIGlzIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIEl0JiMzOTtzIGEgY2FsbGJhY2sgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBub3QgaW5saW5lZC4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczoKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7XWAKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0O11gCiogICAqKlJlYXNvbmluZyoqOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjE4ZGEzZjJiNGZjN2MzNjAxZDA4ZDA1ZTc2OWIwNmMxNGE5N2ExNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDA5OjQzOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWMuLmRhMjAwMzRkMjhmYzYgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTY1Myw2ICYjNDM7NjUzLDM3IEBAIHZvaWQgd29ya2luZ3NldF91cGRhdGVfbm9kZShzdHJ1Y3QgeGFfbm9kZSAqbm9kZSkKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsvKgomIzQzOyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ28KJiM0MzsgKiB0cmFuc2llbnRseSBuZWdhdGl2ZSB3aGlsZSBiYXRjaGVkIHVwZGF0ZXMgYXJlIHBlbmRpbmcsIHNvIGNsYW1wCiYjNDM7ICogdGhlIHN1bSBhdCB6ZXJvLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2xydV9nZW5fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQomIzQzO3sKJiM0MzsJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CWxvbmcgbnJfcGFnZXMgPSAwOwomIzQzOwlpbnQgZ2VuLCB0eXBlLCB6b25lOwomIzQzOwomIzQzOwlpZiAoIWxydWdlbi0mZ3Q7ZW5hYmxlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKGdlbiA9IDA7IGdlbiAmbHQ7IE1BWF9OUl9HRU5TOyBnZW4mIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKHR5cGUgPSAwOyB0eXBlICZsdDsgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspIHsKJiM0MzsJCQlsb25nICpjbnQgPSBscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV07CiYjNDM7CiYjNDM7CQkJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspCiYjNDM7CQkJCW5yX3BhZ2VzICYjNDM7PSBSRUFEX09OQ0UoY250W3pvbmVdKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfcGFnZXMgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gbnJfcGFnZXM7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAJCQkJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB7CkBAIC02OTcsNiAmIzQzOzcyOCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAkJZm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpICZsdDsgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOykKIAkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOwkJLyoKJiM0MzsJCSAqIE1HTFJVIGFjY291bnRzIGZvciB0aGUgZXZpY3RhYmxlIHBhZ2VzIGluCiYjNDM7CQkgKiBscnVnZW4tJmd0O25yX3BhZ2VzW10gaW5zdGVhZCBvZiBtei0mZ3Q7bHJ1X3pvbmVfc2l6ZSwgd2hpY2gKJiM0MzsJCSAqIGxydXZlY19scnVfc2l6ZSgpIHJlYWRzLCBzbyB0aGUgbG9vcCBhYm92ZSBtaXNzZXMgdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJcGFnZXMgJiM0Mzs9IGNvdW50X2xydV9nZW5fcGFnZXMobHJ1dmVjKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAogCQkJbHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgQWNjb3VudGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgd2l0aGluIGBtbS93b3JraW5nc2V0LmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIHNvbGUgcHVycG9zZSBpcyB0byBjb3VudCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggTFJVIGdlbmVyYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVhZGluZyB0aGUgYGxydWdlbi0mZ3Q7bnJfcGFnZXNgIGNvdW50ZXJzLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGVzZSBjb3VudGVycyBhcmUgYWNjZXNzZWQgdXNpbmcgYFJFQURfT05DRWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGZvciB0aGlzIHNjZW5hcmlvLgoKVGhlIGNoYW5nZSB0aGVuIGluY29ycG9yYXRlcyB0aGlzIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBjYWxsIGludG8gYGNvdW50X3NoYWRvd19ub2Rlc2AgdG8gYWNjdXJhdGVseSByZWZsZWN0IE1HTFJVIGFjY291bnRpbmcgd2l0aGluIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gVGhlIGdvYWwgaXMgYSBjb3JyZWN0aW9uLCBzbyB3ZSBjYW4gZXhwZWN0IGltcHJvdmVtZW50cy4KCk5vdywgbXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIG9mIHRoZSBjb2RlLCB0aGlzIHBhdGNoIHNob3VsZCBiZSBjbGVhbi4gSXQmIzM5O3MganVzdCBzdW1taW5nIHVwIGNvdW50ZXJzLiBUaGVzZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBgbHJ1dmVjYCBpbml0aWFsaXphdGlvbiwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSwgd2hpY2gga2VlcHMgdGhlIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MgbG93LgoKVGhlIGNvZGUgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5lc3RlZCBsb29wcyBpdGVyYXRlIHRocm91Z2ggZ2VuZXJhdGlvbnMsIHR5cGVzIChhbm9ueW1vdXMgYW5kIGZpbGUpLCBhbmQgem9uZXMuIEluc2lkZSB0aGUgbG9vcHMsIGl0IHN1bXMgdXAgdGhlIGNvdW50ZXIgdmFsdWVzIHRoYXQgYXJlIGJlaW5nIGFjY2Vzc2VkLgoKYGBgYwpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKewoJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Cglsb25nIG5yX3BhZ2VzID0gMDsKCWludCBnZW4sIHR5cGUsIHpvbmU7CgoJaWYgKCFscnVnZW4tJmd0O2VuYWJsZWQpCgkJcmV0dXJuIDA7CgoJZm9yIChnZW4gPSAwOyBnZW4gJmx0OyBNQVhfTlJfR0VOUzsgZ2VuJiM0MzsmIzQzOykgewoJCWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykgewoJCQlsb25nICpjbnQgPSBscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV07CgoJCQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKCQkJCW5yX3BhZ2VzICYjNDM7PSBSRUFEX09OQ0UoY250W3pvbmVdKTsKCQl9Cgl9CgoJaWYgKG5yX3BhZ2VzICZsdDs9IDApCgkJcmV0dXJuIDA7CgoJcmV0dXJuIG5yX3BhZ2VzOwp9CmBgYAoKVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlIGFyZSBsaW1pdGVkIHRvIGxvZ2ljIGVycm9ycyAoaW5jb3JyZWN0IGNvdW50aW5nKSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKGJ1dCB0aGUgaW5kaWNlcyBhcmUgYm91bmRlZCBieSBjb25zdGFudHM6IGBNQVhfTlJfR0VOU2AsIGBBTk9OX0FORF9GSUxFYCwgYW5kIGBNQVhfTlJfWk9ORVNgKSwgb3IgdXNlLWFmdGVyLWZyZWUgKGlmIHRoZSBgbHJ1dmVjYCB3ZXJlIHNvbWVob3cgZnJlZWQgcHJlbWF0dXJlbHksIHdoaWNoIEtBU0FOIHdvdWxkIGRldGVjdCkuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYWNjb3VudGluZyBhbmQgc2hvdWxkIGJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDM6MzQuNjYxNDE4Nzk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NzAyNzgzMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0MzozNC42NjE0MjMzMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjcwNTMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxOGRhM2YyYjRmYzdjMzYwMWQwOGQwNWU3NjliMDZjMTRhOTdhMTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDk6NDM6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggZjM1MTc5OGU3MjNhYy4uZGEyMDAzNGQyOGZjNiAxMDA2NDRcXG4tLS0gYS9tbS93b3JraW5nc2V0LmNcXG4rKysgYi9tbS93b3JraW5nc2V0LmNcXG5AQCAtNjUzLDYgKzY1MywzNyBAQCB2b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXFxuIFxcdH1cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuKy8qXFxuKyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ29cXG4rICogdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hpbGUgYmF0Y2hlZCB1cGRhdGVzIGFyZSBwZW5kaW5nLCBzbyBjbGFtcFxcbisgKiB0aGUgc3VtIGF0IHplcm8uXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4re1xcbitcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRsb25nIG5yX3BhZ2VzID0gMDtcXG4rXFx0aW50IGdlbiwgdHlwZSwgem9uZTtcXG4rXFxuK1xcdGlmICghbHJ1Z2VuLVxcdTAwM2VlbmFibGVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoZ2VuID0gMDsgZ2VuIFxcdTAwM2MgTUFYX05SX0dFTlM7IGdlbisrKSB7XFxuK1xcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHtcXG4rXFx0XFx0XFx0bG9uZyAqY250ID0gbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdO1xcbitcXG4rXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbitcXHRcXHRcXHRcXHRucl9wYWdlcyArPSBSRUFEX09OQ0UoY250W3pvbmVdKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gbnJfcGFnZXM7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4ge1xcbkBAIC02OTcsNiArNzI4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbiBcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gXFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW5cXG4rXFx0XFx0ICogbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tdIGluc3RlYWQgb2YgbXotXFx1MDAzZWxydV96b25lX3NpemUsIHdoaWNoXFxuK1xcdFxcdCAqIGxydXZlY19scnVfc2l6ZSgpIHJlYWRzLCBzbyB0aGUgbG9vcCBhYm92ZSBtaXNzZXMgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBhZ2VzICs9IGNvdW50X2xydV9nZW5fcGFnZXMobHJ1dmVjKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRcXHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcXG4gXFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0MzozNS4wMzg5MDI0MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDY2NzI1MjkxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIgdG8gYWNjb3VudCBmb3IgcGFnZXMgaW4gdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBsb2dpYywgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIHRyaWdnZXJzIHNocmlua2Vycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjE4ZGEzZjJiNGZjN2MzNjAxZDA4ZDA1ZTc2OWIwNmMxNGE5N2ExNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA5OjQzOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi5kYTIwMDM0ZDI4ZmM2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02NTMsNiArNjUzLDM3IEBAIHZvaWQgd29ya2luZ3NldF91cGRhdGVfbm9kZShzdHJ1Y3QgeGFfbm9kZSAqbm9kZSlcbiBcdH1cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXG4rLypcbisgKiBUaGUgcGVyLWdlbmVyYXRpb24gY291bnRlcnMgYXJlIGV2ZW50dWFsbHkgY29uc2lzdGVudCBhbmQgbWF5IGdvXG4rICogdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hpbGUgYmF0Y2hlZCB1cGRhdGVzIGFyZSBwZW5kaW5nLCBzbyBjbGFtcFxuKyAqIHRoZSBzdW0gYXQgemVyby5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbit7XG4rXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdGxvbmcgbnJfcGFnZXMgPSAwO1xuK1x0aW50IGdlbiwgdHlwZSwgem9uZTtcbitcbitcdGlmICghbHJ1Z2VuLVx1MDAzZWVuYWJsZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4rKykge1xuK1x0XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHtcbitcdFx0XHRsb25nICpjbnQgPSBscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXTtcbitcbitcdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbitcdFx0XHRcdG5yX3BhZ2VzICs9IFJFQURfT05DRShjbnRbem9uZV0pO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rI2VuZGlmXG4rXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdFx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuQEAgLTY5Nyw2ICs3MjgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpKyspXG4gXHRcdFx0cGFnZXMgKz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XG4gXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXG4rXHRcdC8qXG4rXHRcdCAqIE1HTFJVIGFjY291bnRzIGZvciB0aGUgZXZpY3RhYmxlIHBhZ2VzIGluXG4rXHRcdCAqIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tdIGluc3RlYWQgb2YgbXotXHUwMDNlbHJ1X3pvbmVfc2l6ZSwgd2hpY2hcbitcdFx0ICogbHJ1dmVjX2xydV9zaXplKCkgcmVhZHMsIHNvIHRoZSBsb29wIGFib3ZlIG1pc3NlcyB0aGVtLlxuK1x0XHQgKi9cbitcdFx0cGFnZXMgKz0gY291bnRfbHJ1X2dlbl9wYWdlcyhscnV2ZWMpO1xuKyNlbmRpZlxuK1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDM6MzUuMDM4OTA0MzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODkwNzI0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS93b3JraW5nc2V0LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHRoaXMgbmV3IGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBmdW5jdGlvbiwgYnV0IG9ubHkgaWYgYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkIOKAkyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbHJpZ2h0LiBBbmQgdGhlbiBpdCdzIHR3ZWFraW5nIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvICpjYWxsKiB0aGF0IG5ldyBmdW5jdGlvbiB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZGVmaW5lZC4gVGhhdCBpbXBsaWVzIGEgZGVwZW5kZW5jeSBvciBhIHNwZWNpZmljIG9wdGltaXphdGlvbiBwYXRoLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgc2hhZG93IG5vZGVzIGludGVyYWN0IHdpdGggdGhlIExSVSBnZW5lcmF0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGZpdHMgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSXQncyBhIHNocmlua2VyIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSByZWNsYW1hdGlvbiBtZWNoYW5pc21zLiBHb29kLiBBbmQgYHdvcmtpbmdzZXRfdXBkYXRlX25vZGVgIGlzIGFsc28gaW4gdGhlIHNhbWUgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5nc2V0IGNvZGUgYW5kIHRoZSBzaHJpbmtlciByZWdpc3RyYXRpb24uIFRoZSBzaHJpbmtlciBpcyBpbml0aWFsaXplZCBpbiBgd29ya2luZ3NldF9pbml0YCwgcmlnaHQ/IE9rYXksIHNvIHRoYXQgZ2l2ZXMgbWUgdGhlIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR19MUlVfR0VOYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIG9wdGlvbiBmb3IgYExSVV9HRU5gLiBJJ20gZ3Vlc3NpbmcgdGhhdCB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaC4gSXMgaXQgYWJvdXQgZ2VuZXJhdGlvbmFsIExSVSBmb3IgcGFnZSByZWNsYW1hdGlvbj8gT3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gc2hhZG93IG5vZGVzPyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA5OjQzOjQ2LjQyNzk3OTc3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyMzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDAtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDItXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwOS1cXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNS1cXG5tbS9LY29uZmlnOjE0MTY6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTctXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI0LVxcbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjYtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0Mzo0Ni40ODczMTAxNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI3OTEyOTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgY291bnRfbHJ1X2dlbl9wYWdlc2Agd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpdCdzIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgTFJVIGdlbmVyYXRpb24gZmVhdHVyZS4gVGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGludGVncmF0aW5nIHRoaXMgbmV3IGZ1bmN0aW9uIGludG8gYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQgc3VnZ2VzdHMgd2UncmUgcHJvYmFibHkgY2FsY3VsYXRpbmcgcGFnZXMgZm9yIHRoZSBuZXcgTFJVIGdlbiB3aXRoaW4gdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIuIEdpdmVuIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gc2hyaW5raW5nLCB0aGlzIGlzICp2ZXJ5KiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBXZSBhcmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSByZWNsYW1hdGlvbiBzdHJhdGVnaWVzLCBhbmQgaG93IHRvIGJhbGFuY2UgdGhlbSB3aXRoIHRoZSBuZXcgTFJVIGdlbmVyYXRpb24gYWxnb3JpdGhtLlxuXG5JIG5lZWQgdG8gY29uZmlybSBgY291bnRfc2hhZG93X25vZGVzYCcgcmVhY2hhYmlsaXR5OyBpdCdzIGRlY2xhcmVkIHN0YXRpYywgc28gYSBxdWljayBjaGVjayBmb3Igd2hlcmUgaXQncyByZWdpc3RlcmVkIGFzIGEgc2hyaW5rZXIgY2FsbGJhY2sgaXMgaW4gb3JkZXIuIEl0IGhhcyB0byBiZSByZWdpc3RlcmVkIHNvbWV3aGVyZSB0byBiZSBpbnZva2VkIGJ5IHRoZSBrZXJuZWwuIExldCdzIHRyYWNlIGJhY2sgdGhlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDM6NTguNzY2NDQxMzEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjY0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS93b3JraW5nc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vd29ya2luZ3NldC5jPTY2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02ODYtXFxubW0vd29ya2luZ3NldC5jOjY4NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS93b3JraW5nc2V0LmMtNjg4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9ODM4PXN0YXRpYyBpbnQgX19pbml0IHdvcmtpbmdzZXRfaW5pdCh2b2lkKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTg3NC1cXG5tbS93b3JraW5nc2V0LmM6ODc1OlxcdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xcbm1tL3dvcmtpbmdzZXQuYy04NzYtXFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0Mzo1OC44NTc3MTA0NDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTczMDMzNjUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgd29ya2luZ3NldCBhbmQgYSBzaHJpbmtlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYGNvdW50X2xydV9nZW5fcGFnZXMoKWAgaW5zaWRlIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayB3aXRoaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoaXMgaXMgYSBjbGFzc2ljIExSVS1yZWxhdGVkIGFkZGl0aW9uLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIG5vdGUgZm9yIGxhdGVyIGFuYWx5c2lzLlxuXG5UaGUgbmV4dCB0aGluZyBpcyB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gaW5jbHVkZSB0aGUgb3V0cHV0IG9mIHRoYXQgbmV3IGZ1bmN0aW9uLCBidXQgKm9ubHkqIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkLiBUaGlzIG1vZGlmaWNhdGlvbiBnb2VzIGludG8gdGhlIGB3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzYCBwb2ludGVyLiBUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb24gdGhlIHNocmlua2VyIGJlaGF2aW9yLiBJIGNhbiBhbHJlYWR5IHRlbGwgdGhhdCB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6eiBsYXRlciBzaW5jZSBpdCBjb3VsZCB1bmNvdmVyIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB1bmRlciBzdHJlc3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIHdoYXQgc3ltYm9scyBJIGNhbiBmb2N1cyBvbiB3aGlsZSBmdXp6aW5nLCBidXQgdGhlbiBJIGhhZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkIHdlcmUgc3RhdGljLiAqU2hvb3QqLCBib3RoIGBjb3VudF9zaGFkb3dfbm9kZXNgIGFuZCBgY291bnRfbHJ1X2dlbl9wYWdlc2AgYXJlIHN0YXRpYy4gSSBoYWQgdG8gY2xhcmlmeSB0aGF0IHNpbmNlIHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBpcyBwYXJ0IG9mIGEgc2hyaW5rZXIgY2FsbGJhY2ssIGJ1dCBpdCBpcyBzdGF0aWMuIFNvLCBubyBsdWNrIG9uIGRpcmVjdCBmdXp6aW5nIHRhcmdldHMgd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYsIGF0IGxlYXN0IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4gU28gSSB0aGVuIGNoZWNrIGBtbS93b3JraW5nc2V0LmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgc2hyaW5rZXIgaW5pdGlhbGl6YXRpb24uIEkgYnJpZWZseSByZW1lbWJlciB0aGF0IGB3b3JraW5nc2V0X2luaXRgIHJlZ2lzdGVycyB0aGUgc2hyaW5rZXIsIGFuZCB0aGUgc2hyaW5rZXIgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgdGhlIFZNIHNjYW5uZXIuXG5cbkknbSB0aGlua2luZyBJIGNhbid0IGRpcmVjdGx5IHRhcmdldCBlaXRoZXIgZnVuY3Rpb24sIGJ1dCBtYXliZSBJJ20gb3ZlcnRoaW5raW5nIGl0LiBJdCdzIGEgY2FsbGJhY2ssIGFmdGVyIGFsbCwgYW5kIHRoZSBzaHJpbmtlciBpcyByZWdpc3RlcmVkIGFuZCBtYW5hZ2VkIGVsc2V3aGVyZS4gU28sIGxlYXZpbmcgYEZvY3VzU3ltYm9sc2AgZW1wdHkgbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZSwgb3IgcGVyaGFwcyBJIGNvdWxkIGNvbnNpZGVyIHRoZSBzaHJpbmtlciBjYWxsYmFjayBpdHNlbGYuIFRoZSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY2hhbmdlIGlzIGBMUlVfR0VOYCwgc28gSSdsbCBhbHNvIGNoZWNrIGBtbS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgY29uZGl0aW9ucyBtaWdodCBhY3RpdmF0ZSB0aGlzIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0NDoxNC41ODgwNDk1OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NzA4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTA9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDAxOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDktXFxubW0vS2NvbmZpZzoxNDEwOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTUtXFxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE3LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNC1cXG5tbS9LY29uZmlnOjE0MjU6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI2LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDQ6MTQuNjM2NzI0OTQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkzNDk5MzI3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBSZWNsYWltIHdpdGggTUdMUlUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgY291bnRfc2hhZG93X25vZGVzYCBpbiBgbW0vd29ya2luZ3NldC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIHVwZGF0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYWNjb3VudCBmb3IgcGFnZXMgdHJhY2tlZCBieSBNR0xSVSB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZC4gQSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgaXMgYWxzbyBpbnRyb2R1Y2VkLCB3aGljaCBzaW1wbHkgcmVhZHMgYGxydWdlbi1cdTAwM2Vucl9wYWdlc2AuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIHVzZWQgYXMgdGhlIGBjb3VudF9vYmplY3RzYCBjYWxsYmFjayBmb3IgYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyYC4gVGhpcyBzaHJpbmtlciwgaW4gdHVybiwgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgYHdvcmtpbmdzZXRfaW5pdGAgYW5kIGdldHMgaW52b2tlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgdGhlIGxvZ2ljIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYCwgYW5kIHRoYXQgZGlyZWN0bHkgaW5mbHVlbmNlcyBtZW1vcnkgcmVjbGFpbSBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCBgY291bnRfc2hhZG93X25vZGVzYCBpcyBzdGF0aWMgaW5pdGlhbGx5IG1hZGUgbWUgcGF1c2UuIEkga25vdyB3ZSBnZW5lcmFsbHkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBCdXQgaXQncyBjYWxsZWQgdmlhIHRoZSBzaHJpbmtlciBpbnRlcmZhY2UuIFRoYXQgc2hyaW5rZXIncyBpbnZva2VkIGZyb20gYGRvX3Nocmlua19zbGFiYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHNocmlua19zbGFiYC4gU28gd2UncmUgcmVhbGx5IGxvb2tpbmcgYXQgYSBjaGFpbiBvZiBmdW5jdGlvbnMuXG5cbkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGNvdW50X3NoYWRvd19ub2Rlc2AgYXMgdGhlIGZvY3VzIGJlY2F1c2UgaXQgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gY29uY2VybmVkIG1lLiBIb3dldmVyLCBpdCdzICpjYWxsZWQqIGFzIGEgY2FsbGJhY2sgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyBpdCAqd29uJ3QqIGJlIGlubGluZWQgYW5kICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQuIFNvLCBpdCdzIGFjdHVhbGx5IHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIG1lYW5zIGl0IHdpbGwgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvdW50X3NoYWRvd19ub2Rlc2AgYW5kIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBidXQgdGhlIG9ubHkgbm9uLXN0YXRpYyBpcyBgc2hyaW5rX3NsYWJgLlxuXG5TaW5jZSBgY291bnRfc2hhZG93X25vZGVzYCBpcyBzdGF0aWMsIEkgY2FuIHN0aWxsIHVzZSBpdC4gSSdsbCBmb2N1cyBvbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgYExSVV9HRU5gLiBJJ2xsIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjM2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA5OjQ1OjQzLjk4NjY2MDExNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDAxOlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwMjpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDM6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDA0OlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDA1OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDY6XFx0XFx0aGVscFxcbjE0MDc6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MDk6XFx0XFxuMTQxMDpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQxMTpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDEyOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTM6XFx0XFx0aGVscFxcbjE0MTQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxNTpcXHRcXG4xNDE2OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQxNzpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQxODpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDU6NDMuOTg2NzU2MjY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjQ0NTIzNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS93b3JraW5nc2V0LmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgYW5kIGludGVncmF0aW5nIGl0IGludG8gYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBgY291bnRfc2hhZG93X25vZGVzYCBpcyBhIHNocmlua2VyIGNhbGxiYWNrIChgd29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0cyA9IGNvdW50X3NoYWRvd19ub2Rlc2ApLCB3aGljaCBtZWFucyBpdCdzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwcm9jZXNzLlxuXG5UaGlzIGNoYW5nZSBpcyBnYXRlZCBiZWhpbmQgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAsIHNvIGVuYWJsaW5nIHRoaXMgZmVhdHVyZSBpcyBhIHByZXJlcXVpc2l0ZS4gV2UnbGwgbmVlZCB0byBlbmFibGUgYExSVV9HRU5gLCBhbmQgcG90ZW50aWFsbHkgYWxzbyBgTFJVX0dFTl9FTkFCTEVEYC4gVGhpcyBsaWtlbHkgaW5mbHVlbmNlcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwgb3IgaXQgbWlnaHQgYmUgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHR3ZWFrZWQgYXQgcnVudGltZS5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZXMgaW50ZXJhY3Qgd2l0aCB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIG1lYW5zIGl0J3MgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIGtpY2tzIGluIGFuZCB0cmlnZ2VycyB0aGUgc2hyaW5rZXIgbWVjaGFuaXNtLlxuXG5MZXQncyBmb2N1cyBvbiB0aGUga2V5IGVsZW1lbnRzLiBUaGUgcHJpbWFyeSBcImVudHJ5cG9pbnRcIiBmb3IgdGhpcyBjaGFuZ2UgaXMgYGNvdW50X3NoYWRvd19ub2Rlc2AsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLiBJdCdzIGEgY2FsbGJhY2sgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBub3QgaW5saW5lZC5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXCJMUlVfR0VOXCIsIFwiTFJVX0dFTl9FTkFCTEVEXCJdYFxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJjb3VudF9zaGFkb3dfbm9kZXNcIl1gXG4qICAgKipSZWFzb25pbmcqKjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIgdG8gYWNjb3VudCBmb3IgcGFnZXMgaW4gdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBsb2dpYywgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIHRyaWdnZXJzIHNocmlua2Vycy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEzLCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDY6MDEuNjMxMjgyODEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNDUyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyIHRvIGFjY291bnQgZm9yIHBhZ2VzIGluIHRoZSBtdWx0aS1nZW4gTFJVIChNR0xSVSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gbG9naWMsIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBwcmVzc3VyZSB0cmlnZ2VycyBzaHJpbmtlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIgdG8gYWNjb3VudCBmb3IgcGFnZXMgaW4gdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBsb2dpYywgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIHRyaWdnZXJzIHNocmlua2Vycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDY6MDEuNzExNDM1NDcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1Mjc1NTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA5OjQ2OjAxLjcxMTkwNTA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDY1MjI4MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMThkYTNmMmI0ZmM3YzM2MDFkMDhkMDVlNzY5YjA2YzE0YTk3YTE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDk6NDM6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWMuLmRhMjAwMzRkMjhmYzYgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY1Myw2ICs2NTMsMzcgQEAgdm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxuIFx0fVxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKlxuKyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ29cbisgKiB0cmFuc2llbnRseSBuZWdhdGl2ZSB3aGlsZSBiYXRjaGVkIHVwZGF0ZXMgYXJlIHBlbmRpbmcsIHNvIGNsYW1wXG4rICogdGhlIHN1bSBhdCB6ZXJvLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2xydV9nZW5fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuK3tcbitcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0bG9uZyBucl9wYWdlcyA9IDA7XG4rXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1xuK1x0aWYgKCFscnVnZW4tXHUwMDNlZW5hYmxlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGdlbiA9IDA7IGdlbiBcdTAwM2MgTUFYX05SX0dFTlM7IGdlbisrKSB7XG4rXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xuK1x0XHRcdGxvbmcgKmNudCA9IGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdO1xuK1xuK1x0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuK1x0XHRcdFx0bnJfcGFnZXMgKz0gUkVBRF9PTkNFKGNudFt6b25lXSk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChucl9wYWdlcyBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG5yX3BhZ2VzO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdFx0XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG5AQCAtNjk3LDYgKzcyOCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcbiBcdFx0XHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbitcdFx0LypcbitcdFx0ICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW5cbitcdFx0ICogbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW10gaW5zdGVhZCBvZiBtei1cdTAwM2VscnVfem9uZV9zaXplLCB3aGljaFxuK1x0XHQgKiBscnV2ZWNfbHJ1X3NpemUoKSByZWFkcywgc28gdGhlIGxvb3AgYWJvdmUgbWlzc2VzIHRoZW0uXG4rXHRcdCAqL1xuK1x0XHRwYWdlcyArPSBjb3VudF9scnVfZ2VuX3BhZ2VzKGxydXZlYyk7XG4rI2VuZGlmXG4rXG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIFx0XHRcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0NjowMS43MTE5MDY4MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTIyNTM5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgd2l0aGluIGBtbS93b3JraW5nc2V0LmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIHNvbGUgcHVycG9zZSBpcyB0byBjb3VudCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggTFJVIGdlbmVyYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVhZGluZyB0aGUgYGxydWdlbi1cdTAwM2Vucl9wYWdlc2AgY291bnRlcnMuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZXNlIGNvdW50ZXJzIGFyZSBhY2Nlc3NlZCB1c2luZyBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIHRoaXMgc2NlbmFyaW8uXG5cblRoZSBjaGFuZ2UgdGhlbiBpbmNvcnBvcmF0ZXMgdGhpcyBgY291bnRfbHJ1X2dlbl9wYWdlc2AgY2FsbCBpbnRvIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCBNR0xSVSBhY2NvdW50aW5nIHdpdGhpbiB0aGUgc2hhZG93IG5vZGUgc2hyaW5rZXIuIFRoZSBnb2FsIGlzIGEgY29ycmVjdGlvbiwgc28gd2UgY2FuIGV4cGVjdCBpbXByb3ZlbWVudHMuXG5cbk5vdywgbXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIG9mIHRoZSBjb2RlLCB0aGlzIHBhdGNoIHNob3VsZCBiZSBjbGVhbi4gSXQncyBqdXN0IHN1bW1pbmcgdXAgY291bnRlcnMuIFRoZXNlIGNvdW50ZXJzIGFyZSBpbml0aWFsaXplZCBkdXJpbmcgdGhlIGBscnV2ZWNgIGluaXRpYWxpemF0aW9uLCBzbyB0aGVyZSdzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEuIEZ1cnRoZXJtb3JlLCB0aGVyZSBpcyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UsIHdoaWNoIGtlZXBzIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzIGxvdy5cblxuVGhlIGNvZGUgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5lc3RlZCBsb29wcyBpdGVyYXRlIHRocm91Z2ggZ2VuZXJhdGlvbnMsIHR5cGVzIChhbm9ueW1vdXMgYW5kIGZpbGUpLCBhbmQgem9uZXMuIEluc2lkZSB0aGUgbG9vcHMsIGl0IHN1bXMgdXAgdGhlIGNvdW50ZXIgdmFsdWVzIHRoYXQgYXJlIGJlaW5nIGFjY2Vzc2VkLlxuXG5gYGBjXG5zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbntcblx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5cdGxvbmcgbnJfcGFnZXMgPSAwO1xuXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuXG5cdGlmICghbHJ1Z2VuLVx1MDAzZWVuYWJsZWQpXG5cdFx0cmV0dXJuIDA7XG5cblx0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4rKykge1xuXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xuXHRcdFx0bG9uZyAqY250ID0gbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV07XG5cblx0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuXHRcdFx0XHRucl9wYWdlcyArPSBSRUFEX09OQ0UoY250W3pvbmVdKTtcblx0XHR9XG5cdH1cblxuXHRpZiAobnJfcGFnZXMgXHUwMDNjPSAwKVxuXHRcdHJldHVybiAwO1xuXG5cdHJldHVybiBucl9wYWdlcztcbn1cbmBgYFxuXG5UaGUgcG90ZW50aWFsIHByb2JsZW1zIGhlcmUgYXJlIGxpbWl0ZWQgdG8gbG9naWMgZXJyb3JzIChpbmNvcnJlY3QgY291bnRpbmcpLCBvdXQtb2YtYm91bmRzIGFjY2VzcyAoYnV0IHRoZSBpbmRpY2VzIGFyZSBib3VuZGVkIGJ5IGNvbnN0YW50czogYE1BWF9OUl9HRU5TYCwgYEFOT05fQU5EX0ZJTEVgLCBhbmQgYE1BWF9OUl9aT05FU2ApLCBvciB1c2UtYWZ0ZXItZnJlZSAoaWYgdGhlIGBscnV2ZWNgIHdlcmUgc29tZWhvdyBmcmVlZCBwcmVtYXR1cmVseSwgd2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0KS4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBhY2NvdW50aW5nIGFuZCBzaG91bGQgYmUgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OSwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0NjoxMi4zNjQxNjM2OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc2AgYXJyYXlzIGFuZCBzdW1zIHVwIHRoZSBwYWdlIGNvdW50cy4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IHJlbGF0ZWQgdG8gaW50ZXJuYWwga2VybmVsIGFjY291bnRpbmcgYW5kIGxvZ2ljIGZvciB0aGUgc2hhZG93IG5vZGUgc2hyaW5rZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 09:26:09 +0000 UTC FinishedAt: 2026-08-24 09:46:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "50bdc70c-6584-4ed8-930a-efe2f71b6cca" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "count_shadow_nodes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXHUwMDNlbnJfcGFnZXNgIGFycmF5cyBhbmQgc3VtcyB1cCB0aGUgcGFnZSBjb3VudHMuIFRoaXMgY2hhbmdlIGlzIHB1cmVseSByZWxhdGVkIHRvIGludGVybmFsIGtlcm5lbCBhY2NvdW50aW5nIGFuZCBsb2dpYyBmb3IgdGhlIHNoYWRvdyBub2RlIHNocmlua2VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjE4ZGEzZjJiNGZjN2MzNjAxZDA4ZDA1ZTc2OWIwNmMxNGE5N2ExNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA5OjQzOjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uZGEyMDAzNGQyOGZjNiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNjUzLDYgJiM0Mzs2NTMsMzcgQEAgdm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxuIFx0fVxuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ29cbiYjNDM7ICogdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hpbGUgYmF0Y2hlZCB1cGRhdGVzIGFyZSBwZW5kaW5nLCBzbyBjbGFtcFxuJiM0MzsgKiB0aGUgc3VtIGF0IHplcm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdGxvbmcgbnJfcGFnZXMgPSAwO1xuJiM0MztcdGludCBnZW4sIHR5cGUsIHpvbmU7XG4mIzQzO1xuJiM0MztcdGlmICghbHJ1Z2VuLVx1MDAzZWVuYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4mIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRsb25nICpjbnQgPSBscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0bnJfcGFnZXMgJiM0Mzs9IFJFQURfT05DRShjbnRbem9uZV0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJfcGFnZXM7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuIHtcbkBAIC02OTcsNiAmIzQzOzcyOCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxuIFx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW5cbiYjNDM7XHRcdCAqIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tdIGluc3RlYWQgb2YgbXotXHUwMDNlbHJ1X3pvbmVfc2l6ZSwgd2hpY2hcbiYjNDM7XHRcdCAqIGxydXZlY19scnVfc2l6ZSgpIHJlYWRzLCBzbyB0aGUgbG9vcCBhYm92ZSBtaXNzZXMgdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cGFnZXMgJiM0Mzs9IGNvdW50X2xydV9nZW5fcGFnZXMobHJ1dmVjKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyIHRvIGFjY291bnQgZm9yIHBhZ2VzIGluIHRoZSBtdWx0aS1nZW4gTFJVIChNR0xSVSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gbG9naWMsIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBwcmVzc3VyZSB0cmlnZ2VycyBzaHJpbmtlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMThkYTNmMmI0ZmM3YzM2MDFkMDhkMDVlNzY5YjA2YzE0YTk3YTE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDk6NDM6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggZjM1MTc5OGU3MjNhYy4uZGEyMDAzNGQyOGZjNiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNjUzLDYgJiM0Mzs2NTMsMzcgQEAgdm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKQogCX0KIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOy8qCiYjNDM7ICogVGhlIHBlci1nZW5lcmF0aW9uIGNvdW50ZXJzIGFyZSBldmVudHVhbGx5IGNvbnNpc3RlbnQgYW5kIG1heSBnbwomIzQzOyAqIHRyYW5zaWVudGx5IG5lZ2F0aXZlIHdoaWxlIGJhdGNoZWQgdXBkYXRlcyBhcmUgcGVuZGluZywgc28gY2xhbXAKJiM0MzsgKiB0aGUgc3VtIGF0IHplcm8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfbHJ1X2dlbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJbG9uZyBucl9wYWdlcyA9IDA7CiYjNDM7CWludCBnZW4sIHR5cGUsIHpvbmU7CiYjNDM7CiYjNDM7CWlmICghbHJ1Z2VuLSZndDtlbmFibGVkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAoZ2VuID0gMDsgZ2VuICZsdDsgTUFYX05SX0dFTlM7IGdlbiYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykgewomIzQzOwkJCWxvbmcgKmNudCA9IGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXTsKJiM0MzsKJiM0MzsJCQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCQkJbnJfcGFnZXMgJiM0Mzs9IFJFQURfT05DRShjbnRbem9uZV0pOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlcyAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBucl9wYWdlczsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAkJCQkJc3RydWN0IHNocmlua19jb250cm9sICpzYykKIHsKQEAgLTY5Nyw2ICYjNDM7NzI4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCQlmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQogCQkJcGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpOwogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7CQkvKgomIzQzOwkJICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW4KJiM0MzsJCSAqIGxydWdlbi0mZ3Q7bnJfcGFnZXNbXSBpbnN0ZWFkIG9mIG16LSZndDtscnVfem9uZV9zaXplLCB3aGljaAomIzQzOwkJICogbHJ1dmVjX2xydV9zaXplKCkgcmVhZHMsIHNvIHRoZSBsb29wIGFib3ZlIG1pc3NlcyB0aGVtLgomIzQzOwkJICovCiYjNDM7CQlwYWdlcyAmIzQzOz0gY291bnRfbHJ1X2dlbl9wYWdlcyhscnV2ZWMpOwomIzQzOyNlbmRpZgomIzQzOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCiAJCQlscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3dvcmtpbmdzZXQuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIHRoaXMgbmV3IGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBmdW5jdGlvbiwgYnV0IG9ubHkgaWYgYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkIOKAkyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbHJpZ2h0LiBBbmQgdGhlbiBpdCYjMzk7cyB0d2Vha2luZyBgY291bnRfc2hhZG93X25vZGVzYCB0byAqY2FsbCogdGhhdCBuZXcgZnVuY3Rpb24gd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQuIFRoYXQgaW1wbGllcyBhIGRlcGVuZGVuY3kgb3IgYSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gcGF0aCwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHNoYWRvdyBub2RlcyBpbnRlcmFjdCB3aXRoIHRoZSBMUlUgZ2VuZXJhdGlvbi4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGNvdW50X3NoYWRvd19ub2Rlc2AgZml0cyBpbnRvIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJdCYjMzk7cyBhIHNocmlua2VyIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IHJlY2xhbWF0aW9uIG1lY2hhbmlzbXMuIEdvb2QuIEFuZCBgd29ya2luZ3NldF91cGRhdGVfbm9kZWAgaXMgYWxzbyBpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzZXQgY29kZSBhbmQgdGhlIHNocmlua2VyIHJlZ2lzdHJhdGlvbi4gVGhlIHNocmlua2VyIGlzIGluaXRpYWxpemVkIGluIGB3b3JraW5nc2V0X2luaXRgLCByaWdodD8gT2theSwgc28gdGhhdCBnaXZlcyBtZSB0aGUgY29udGV4dC4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR19MUlVfR0VOYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIG9wdGlvbiBmb3IgYExSVV9HRU5gLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guIElzIGl0IGFib3V0IGdlbmVyYXRpb25hbCBMUlUgZm9yIHBhZ2UgcmVjbGFtYXRpb24/IE9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHRvIHNoYWRvdyBub2Rlcz8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOS1cbm1tL0tjb25maWc6MTQxMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE1LVxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNC1cbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgY291bnRfbHJ1X2dlbl9wYWdlc2Agd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgaXQmIzM5O3MgY2xlYXJseSByZWxhdGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbiBmZWF0dXJlLiBUaGUgY29yZSBsb2dpYyBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50ZWdyYXRpbmcgdGhpcyBuZXcgZnVuY3Rpb24gaW50byBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgcHJvYmFibHkgY2FsY3VsYXRpbmcgcGFnZXMgZm9yIHRoZSBuZXcgTFJVIGdlbiB3aXRoaW4gdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIuIEdpdmVuIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gc2hyaW5raW5nLCB0aGlzIGlzICp2ZXJ5KiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBXZSBhcmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSByZWNsYW1hdGlvbiBzdHJhdGVnaWVzLCBhbmQgaG93IHRvIGJhbGFuY2UgdGhlbSB3aXRoIHRoZSBuZXcgTFJVIGdlbmVyYXRpb24gYWxnb3JpdGhtLgoKSSBuZWVkIHRvIGNvbmZpcm0gYGNvdW50X3NoYWRvd19ub2Rlc2AmIzM5OyByZWFjaGFiaWxpdHk7IGl0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYywgc28gYSBxdWljayBjaGVjayBmb3Igd2hlcmUgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBhIHNocmlua2VyIGNhbGxiYWNrIGlzIGluIG9yZGVyLiBJdCBoYXMgdG8gYmUgcmVnaXN0ZXJlZCBzb21ld2hlcmUgdG8gYmUgaW52b2tlZCBieSB0aGUga2VybmVsLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTY2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS93b3JraW5nc2V0LmMtNjg2LVxubW0vd29ya2luZ3NldC5jOjY4NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbm1tL3dvcmtpbmdzZXQuYy02ODgtXHRcdFx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4tLVxubW0vd29ya2luZ3NldC5jPTgzOD1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcbi0tXG5tbS93b3JraW5nc2V0LmMtODc0LVxubW0vd29ya2luZ3NldC5jOjg3NTpcdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBjb3VudF9zaGFkb3dfbm9kZXM7XG5tbS93b3JraW5nc2V0LmMtODc2LVx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gc2Nhbl9zaGFkb3dfbm9kZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgd29ya2luZ3NldCBhbmQgYSBzaHJpbmtlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYGNvdW50X2xydV9nZW5fcGFnZXMoKWAgaW5zaWRlIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayB3aXRoaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoaXMgaXMgYSBjbGFzc2ljIExSVS1yZWxhdGVkIGFkZGl0aW9uLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBub3RlIGZvciBsYXRlciBhbmFseXNpcy4KClRoZSBuZXh0IHRoaW5nIGlzIHRoYXQgYGNvdW50X3NoYWRvd19ub2RlcygpYCBpcyBiZWluZyBtb2RpZmllZCB0byBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhhdCBuZXcgZnVuY3Rpb24sIGJ1dCAqb25seSogd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQuIFRoaXMgbW9kaWZpY2F0aW9uIGdvZXMgaW50byB0aGUgYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzYCBwb2ludGVyLiBUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb24gdGhlIHNocmlua2VyIGJlaGF2aW9yLiBJIGNhbiBhbHJlYWR5IHRlbGwgdGhhdCB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6eiBsYXRlciBzaW5jZSBpdCBjb3VsZCB1bmNvdmVyIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB1bmRlciBzdHJlc3MuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNlZSB3aGF0IHN5bWJvbHMgSSBjYW4gZm9jdXMgb24gd2hpbGUgZnV6emluZywgYnV0IHRoZW4gSSBoYWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgaWYgdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCB3ZXJlIHN0YXRpYy4gKlNob290KiwgYm90aCBgY291bnRfc2hhZG93X25vZGVzYCBhbmQgYGNvdW50X2xydV9nZW5fcGFnZXNgIGFyZSBzdGF0aWMuIEkgaGFkIHRvIGNsYXJpZnkgdGhhdCBzaW5jZSB0aGUgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgcGFydCBvZiBhIHNocmlua2VyIGNhbGxiYWNrLCBidXQgaXQgaXMgc3RhdGljLiBTbywgbm8gbHVjayBvbiBkaXJlY3QgZnV6emluZyB0YXJnZXRzIHdpdGhpbiB0aGUgcGF0Y2ggaXRzZWxmLCBhdCBsZWFzdCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIFNvIEkgdGhlbiBjaGVjayBgbW0vd29ya2luZ3NldC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHNocmlua2VyIGluaXRpYWxpemF0aW9uLiBJIGJyaWVmbHkgcmVtZW1iZXIgdGhhdCBgd29ya2luZ3NldF9pbml0YCByZWdpc3RlcnMgdGhlIHNocmlua2VyLCBhbmQgdGhlIHNocmlua2VyIGlzIHVsdGltYXRlbHkgY2FsbGVkIGJ5IHRoZSBWTSBzY2FubmVyLgoKSSYjMzk7bSB0aGlua2luZyBJIGNhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgZWl0aGVyIGZ1bmN0aW9uLCBidXQgbWF5YmUgSSYjMzk7bSBvdmVydGhpbmtpbmcgaXQuIEl0JiMzOTtzIGEgY2FsbGJhY2ssIGFmdGVyIGFsbCwgYW5kIHRoZSBzaHJpbmtlciBpcyByZWdpc3RlcmVkIGFuZCBtYW5hZ2VkIGVsc2V3aGVyZS4gU28sIGxlYXZpbmcgYEZvY3VzU3ltYm9sc2AgZW1wdHkgbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZSwgb3IgcGVyaGFwcyBJIGNvdWxkIGNvbnNpZGVyIHRoZSBzaHJpbmtlciBjYWxsYmFjayBpdHNlbGYuIFRoZSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY2hhbmdlIGlzIGBMUlVfR0VOYCwgc28gSSYjMzk7bGwgYWxzbyBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IGNvbmRpdGlvbnMgbWlnaHQgYWN0aXZhdGUgdGhpcyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOS1cbm1tL0tjb25maWc6MTQxMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE1LVxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNC1cbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgUmVjbGFpbSB3aXRoIE1HTFJVKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBjb3VudF9zaGFkb3dfbm9kZXNgIGluIGBtbS93b3JraW5nc2V0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHVwZGF0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYWNjb3VudCBmb3IgcGFnZXMgdHJhY2tlZCBieSBNR0xSVSB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZC4gQSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgaXMgYWxzbyBpbnRyb2R1Y2VkLCB3aGljaCBzaW1wbHkgcmVhZHMgYGxydWdlbi0mZ3Q7bnJfcGFnZXNgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBgY291bnRfc2hhZG93X25vZGVzYCBpcyB1c2VkIGFzIHRoZSBgY291bnRfb2JqZWN0c2AgY2FsbGJhY2sgZm9yIGB3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlcmAuIFRoaXMgc2hyaW5rZXIsIGluIHR1cm4sIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGB3b3JraW5nc2V0X2luaXRgIGFuZCBnZXRzIGludm9rZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyB0aGUgbG9naWMgd2l0aGluIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBhbmQgdGhhdCBkaXJlY3RseSBpbmZsdWVuY2VzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLiBUaGUgZmFjdCB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIHN0YXRpYyBpbml0aWFsbHkgbWFkZSBtZSBwYXVzZS4gSSBrbm93IHdlIGdlbmVyYWxseSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuIEJ1dCBpdCYjMzk7cyBjYWxsZWQgdmlhIHRoZSBzaHJpbmtlciBpbnRlcmZhY2UuIFRoYXQgc2hyaW5rZXImIzM5O3MgaW52b2tlZCBmcm9tIGBkb19zaHJpbmtfc2xhYmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBzaHJpbmtfc2xhYmAuIFNvIHdlJiMzOTtyZSByZWFsbHkgbG9va2luZyBhdCBhIGNoYWluIG9mIGZ1bmN0aW9ucy4KCkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGNvdW50X3NoYWRvd19ub2Rlc2AgYXMgdGhlIGZvY3VzIGJlY2F1c2UgaXQgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGNvbmNlcm5lZCBtZS4gSG93ZXZlciwgaXQmIzM5O3MgKmNhbGxlZCogYXMgYSBjYWxsYmFjayB2aWEgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIG1lYW5zIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQuIFNvLCBpdCYjMzk7cyBhY3R1YWxseSBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjb3VudF9zaGFkb3dfbm9kZXNgIGFuZCBgY291bnRfbHJ1X2dlbl9wYWdlc2AgYnV0IHRoZSBvbmx5IG5vbi1zdGF0aWMgaXMgYHNocmlua19zbGFiYC4KClNpbmNlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIHN0YXRpYywgSSBjYW4gc3RpbGwgdXNlIGl0LiBJJiMzOTtsbCBmb2N1cyBvbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgYExSVV9HRU5gLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDE6XHRjb25maWcgTFJVX0dFTlxuMTQwMjpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAzOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNDpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA1Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDY6XHRcdGhlbHBcbjE0MDc6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA4Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDk6XHRcbjE0MTA6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDExOlx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDEyOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTM6XHRcdGhlbHBcbjE0MTQ6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxNTpcdFxuMTQxNjpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE3Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxODpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTMKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiA4MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS93b3JraW5nc2V0LmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgYWRkaW5nIGEgbmV3IGZ1bmN0aW9uLCBgY291bnRfbHJ1X2dlbl9wYWdlc2AsIGFuZCBpbnRlZ3JhdGluZyBpdCBpbnRvIGBjb3VudF9zaGFkb3dfbm9kZXNgLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgYSBzaHJpbmtlciBjYWxsYmFjayAoYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzYCksIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwcm9jZXNzLgoKVGhpcyBjaGFuZ2UgaXMgZ2F0ZWQgYmVoaW5kIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLCBzbyBlbmFibGluZyB0aGlzIGZlYXR1cmUgaXMgYSBwcmVyZXF1aXNpdGUuIFdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBhbHNvIGBMUlVfR0VOX0VOQUJMRURgLiBUaGlzIGxpa2VseSBpbmZsdWVuY2VzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBvciBpdCBtaWdodCBiZSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdHdlYWtlZCBhdCBydW50aW1lLgoKTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBob3cgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGVzIGludGVyYWN0IHdpdGggdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBtZWFucyBpdCYjMzk7cyByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUga2lja3MgaW4gYW5kIHRyaWdnZXJzIHRoZSBzaHJpbmtlciBtZWNoYW5pc20uCgpMZXQmIzM5O3MgZm9jdXMgb24gdGhlIGtleSBlbGVtZW50cy4gVGhlIHByaW1hcnkgJiMzNDtlbnRyeXBvaW50JiMzNDsgZm9yIHRoaXMgY2hhbmdlIGlzIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIEl0JiMzOTtzIGEgY2FsbGJhY2sgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBub3QgaW5saW5lZC4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczoKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7XWAKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0O11gCiogICAqKlJlYXNvbmluZyoqOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjE4ZGEzZjJiNGZjN2MzNjAxZDA4ZDA1ZTc2OWIwNmMxNGE5N2ExNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDA5OjQzOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWMuLmRhMjAwMzRkMjhmYzYgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTY1Myw2ICYjNDM7NjUzLDM3IEBAIHZvaWQgd29ya2luZ3NldF91cGRhdGVfbm9kZShzdHJ1Y3QgeGFfbm9kZSAqbm9kZSkKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsvKgomIzQzOyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ28KJiM0MzsgKiB0cmFuc2llbnRseSBuZWdhdGl2ZSB3aGlsZSBiYXRjaGVkIHVwZGF0ZXMgYXJlIHBlbmRpbmcsIHNvIGNsYW1wCiYjNDM7ICogdGhlIHN1bSBhdCB6ZXJvLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2xydV9nZW5fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQomIzQzO3sKJiM0MzsJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CWxvbmcgbnJfcGFnZXMgPSAwOwomIzQzOwlpbnQgZ2VuLCB0eXBlLCB6b25lOwomIzQzOwomIzQzOwlpZiAoIWxydWdlbi0mZ3Q7ZW5hYmxlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKGdlbiA9IDA7IGdlbiAmbHQ7IE1BWF9OUl9HRU5TOyBnZW4mIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKHR5cGUgPSAwOyB0eXBlICZsdDsgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspIHsKJiM0MzsJCQlsb25nICpjbnQgPSBscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV07CiYjNDM7CiYjNDM7CQkJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspCiYjNDM7CQkJCW5yX3BhZ2VzICYjNDM7PSBSRUFEX09OQ0UoY250W3pvbmVdKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfcGFnZXMgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gbnJfcGFnZXM7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAJCQkJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB7CkBAIC02OTcsNiAmIzQzOzcyOCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAkJZm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpICZsdDsgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOykKIAkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOwkJLyoKJiM0MzsJCSAqIE1HTFJVIGFjY291bnRzIGZvciB0aGUgZXZpY3RhYmxlIHBhZ2VzIGluCiYjNDM7CQkgKiBscnVnZW4tJmd0O25yX3BhZ2VzW10gaW5zdGVhZCBvZiBtei0mZ3Q7bHJ1X3pvbmVfc2l6ZSwgd2hpY2gKJiM0MzsJCSAqIGxydXZlY19scnVfc2l6ZSgpIHJlYWRzLCBzbyB0aGUgbG9vcCBhYm92ZSBtaXNzZXMgdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJcGFnZXMgJiM0Mzs9IGNvdW50X2xydV9nZW5fcGFnZXMobHJ1dmVjKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAogCQkJbHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgQWNjb3VudGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgd2l0aGluIGBtbS93b3JraW5nc2V0LmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIHNvbGUgcHVycG9zZSBpcyB0byBjb3VudCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggTFJVIGdlbmVyYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVhZGluZyB0aGUgYGxydWdlbi0mZ3Q7bnJfcGFnZXNgIGNvdW50ZXJzLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGVzZSBjb3VudGVycyBhcmUgYWNjZXNzZWQgdXNpbmcgYFJFQURfT05DRWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGZvciB0aGlzIHNjZW5hcmlvLgoKVGhlIGNoYW5nZSB0aGVuIGluY29ycG9yYXRlcyB0aGlzIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBjYWxsIGludG8gYGNvdW50X3NoYWRvd19ub2Rlc2AgdG8gYWNjdXJhdGVseSByZWZsZWN0IE1HTFJVIGFjY291bnRpbmcgd2l0aGluIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gVGhlIGdvYWwgaXMgYSBjb3JyZWN0aW9uLCBzbyB3ZSBjYW4gZXhwZWN0IGltcHJvdmVtZW50cy4KCk5vdywgbXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIG9mIHRoZSBjb2RlLCB0aGlzIHBhdGNoIHNob3VsZCBiZSBjbGVhbi4gSXQmIzM5O3MganVzdCBzdW1taW5nIHVwIGNvdW50ZXJzLiBUaGVzZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBgbHJ1dmVjYCBpbml0aWFsaXphdGlvbiwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSwgd2hpY2gga2VlcHMgdGhlIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MgbG93LgoKVGhlIGNvZGUgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5lc3RlZCBsb29wcyBpdGVyYXRlIHRocm91Z2ggZ2VuZXJhdGlvbnMsIHR5cGVzIChhbm9ueW1vdXMgYW5kIGZpbGUpLCBhbmQgem9uZXMuIEluc2lkZSB0aGUgbG9vcHMsIGl0IHN1bXMgdXAgdGhlIGNvdW50ZXIgdmFsdWVzIHRoYXQgYXJlIGJlaW5nIGFjY2Vzc2VkLgoKYGBgYwpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKewoJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Cglsb25nIG5yX3BhZ2VzID0gMDsKCWludCBnZW4sIHR5cGUsIHpvbmU7CgoJaWYgKCFscnVnZW4tJmd0O2VuYWJsZWQpCgkJcmV0dXJuIDA7CgoJZm9yIChnZW4gPSAwOyBnZW4gJmx0OyBNQVhfTlJfR0VOUzsgZ2VuJiM0MzsmIzQzOykgewoJCWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykgewoJCQlsb25nICpjbnQgPSBscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV07CgoJCQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKCQkJCW5yX3BhZ2VzICYjNDM7PSBSRUFEX09OQ0UoY250W3pvbmVdKTsKCQl9Cgl9CgoJaWYgKG5yX3BhZ2VzICZsdDs9IDApCgkJcmV0dXJuIDA7CgoJcmV0dXJuIG5yX3BhZ2VzOwp9CmBgYAoKVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlIGFyZSBsaW1pdGVkIHRvIGxvZ2ljIGVycm9ycyAoaW5jb3JyZWN0IGNvdW50aW5nKSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKGJ1dCB0aGUgaW5kaWNlcyBhcmUgYm91bmRlZCBieSBjb25zdGFudHM6IGBNQVhfTlJfR0VOU2AsIGBBTk9OX0FORF9GSUxFYCwgYW5kIGBNQVhfTlJfWk9ORVNgKSwgb3IgdXNlLWFmdGVyLWZyZWUgKGlmIHRoZSBgbHJ1dmVjYCB3ZXJlIHNvbWVob3cgZnJlZWQgcHJlbWF0dXJlbHksIHdoaWNoIEtBU0FOIHdvdWxkIGRldGVjdCkuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYWNjb3VudGluZyBhbmQgc2hvdWxkIGJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDM6MzQuNjYxNDE4Nzk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NzAyNzgzMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBzaHJpbmtlciB0byBhY2NvdW50IGZvciBwYWdlcyBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIGxvZ2ljLCByZWFjaGFibGUgd2hlbiBtZW1vcnkgcHJlc3N1cmUgdHJpZ2dlcnMgc2hyaW5rZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0MzozNC42NjE0MjMzMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjcwNTMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxOGRhM2YyYjRmYzdjMzYwMWQwOGQwNWU3NjliMDZjMTRhOTdhMTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDk6NDM6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggZjM1MTc5OGU3MjNhYy4uZGEyMDAzNGQyOGZjNiAxMDA2NDRcXG4tLS0gYS9tbS93b3JraW5nc2V0LmNcXG4rKysgYi9tbS93b3JraW5nc2V0LmNcXG5AQCAtNjUzLDYgKzY1MywzNyBAQCB2b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXFxuIFxcdH1cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuKy8qXFxuKyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ29cXG4rICogdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hpbGUgYmF0Y2hlZCB1cGRhdGVzIGFyZSBwZW5kaW5nLCBzbyBjbGFtcFxcbisgKiB0aGUgc3VtIGF0IHplcm8uXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4re1xcbitcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRsb25nIG5yX3BhZ2VzID0gMDtcXG4rXFx0aW50IGdlbiwgdHlwZSwgem9uZTtcXG4rXFxuK1xcdGlmICghbHJ1Z2VuLVxcdTAwM2VlbmFibGVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoZ2VuID0gMDsgZ2VuIFxcdTAwM2MgTUFYX05SX0dFTlM7IGdlbisrKSB7XFxuK1xcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHtcXG4rXFx0XFx0XFx0bG9uZyAqY250ID0gbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdO1xcbitcXG4rXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbitcXHRcXHRcXHRcXHRucl9wYWdlcyArPSBSRUFEX09OQ0UoY250W3pvbmVdKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gbnJfcGFnZXM7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4ge1xcbkBAIC02OTcsNiArNzI4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbiBcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gXFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW5cXG4rXFx0XFx0ICogbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tdIGluc3RlYWQgb2YgbXotXFx1MDAzZWxydV96b25lX3NpemUsIHdoaWNoXFxuK1xcdFxcdCAqIGxydXZlY19scnVfc2l6ZSgpIHJlYWRzLCBzbyB0aGUgbG9vcCBhYm92ZSBtaXNzZXMgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBhZ2VzICs9IGNvdW50X2xydV9nZW5fcGFnZXMobHJ1dmVjKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRcXHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcXG4gXFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0MzozNS4wMzg5MDI0MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDY2NzI1MjkxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIgdG8gYWNjb3VudCBmb3IgcGFnZXMgaW4gdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBsb2dpYywgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIHRyaWdnZXJzIHNocmlua2Vycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjE4ZGEzZjJiNGZjN2MzNjAxZDA4ZDA1ZTc2OWIwNmMxNGE5N2ExNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA5OjQzOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi5kYTIwMDM0ZDI4ZmM2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02NTMsNiArNjUzLDM3IEBAIHZvaWQgd29ya2luZ3NldF91cGRhdGVfbm9kZShzdHJ1Y3QgeGFfbm9kZSAqbm9kZSlcbiBcdH1cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXG4rLypcbisgKiBUaGUgcGVyLWdlbmVyYXRpb24gY291bnRlcnMgYXJlIGV2ZW50dWFsbHkgY29uc2lzdGVudCBhbmQgbWF5IGdvXG4rICogdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hpbGUgYmF0Y2hlZCB1cGRhdGVzIGFyZSBwZW5kaW5nLCBzbyBjbGFtcFxuKyAqIHRoZSBzdW0gYXQgemVyby5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbit7XG4rXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdGxvbmcgbnJfcGFnZXMgPSAwO1xuK1x0aW50IGdlbiwgdHlwZSwgem9uZTtcbitcbitcdGlmICghbHJ1Z2VuLVx1MDAzZWVuYWJsZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4rKykge1xuK1x0XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHtcbitcdFx0XHRsb25nICpjbnQgPSBscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXTtcbitcbitcdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbitcdFx0XHRcdG5yX3BhZ2VzICs9IFJFQURfT05DRShjbnRbem9uZV0pO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAobnJfcGFnZXMgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBucl9wYWdlcztcbit9XG4rI2VuZGlmXG4rXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdFx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuQEAgLTY5Nyw2ICs3MjgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpKyspXG4gXHRcdFx0cGFnZXMgKz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XG4gXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXG4rXHRcdC8qXG4rXHRcdCAqIE1HTFJVIGFjY291bnRzIGZvciB0aGUgZXZpY3RhYmxlIHBhZ2VzIGluXG4rXHRcdCAqIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tdIGluc3RlYWQgb2YgbXotXHUwMDNlbHJ1X3pvbmVfc2l6ZSwgd2hpY2hcbitcdFx0ICogbHJ1dmVjX2xydV9zaXplKCkgcmVhZHMsIHNvIHRoZSBsb29wIGFib3ZlIG1pc3NlcyB0aGVtLlxuK1x0XHQgKi9cbitcdFx0cGFnZXMgKz0gY291bnRfbHJ1X2dlbl9wYWdlcyhscnV2ZWMpO1xuKyNlbmRpZlxuK1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDM6MzUuMDM4OTA0MzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODkwNzI0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS93b3JraW5nc2V0LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHRoaXMgbmV3IGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBmdW5jdGlvbiwgYnV0IG9ubHkgaWYgYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkIOKAkyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbHJpZ2h0LiBBbmQgdGhlbiBpdCdzIHR3ZWFraW5nIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvICpjYWxsKiB0aGF0IG5ldyBmdW5jdGlvbiB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZGVmaW5lZC4gVGhhdCBpbXBsaWVzIGEgZGVwZW5kZW5jeSBvciBhIHNwZWNpZmljIG9wdGltaXphdGlvbiBwYXRoLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgc2hhZG93IG5vZGVzIGludGVyYWN0IHdpdGggdGhlIExSVSBnZW5lcmF0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGZpdHMgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSXQncyBhIHNocmlua2VyIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSByZWNsYW1hdGlvbiBtZWNoYW5pc21zLiBHb29kLiBBbmQgYHdvcmtpbmdzZXRfdXBkYXRlX25vZGVgIGlzIGFsc28gaW4gdGhlIHNhbWUgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5nc2V0IGNvZGUgYW5kIHRoZSBzaHJpbmtlciByZWdpc3RyYXRpb24uIFRoZSBzaHJpbmtlciBpcyBpbml0aWFsaXplZCBpbiBgd29ya2luZ3NldF9pbml0YCwgcmlnaHQ/IE9rYXksIHNvIHRoYXQgZ2l2ZXMgbWUgdGhlIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR19MUlVfR0VOYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIG9wdGlvbiBmb3IgYExSVV9HRU5gLiBJJ20gZ3Vlc3NpbmcgdGhhdCB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaC4gSXMgaXQgYWJvdXQgZ2VuZXJhdGlvbmFsIExSVSBmb3IgcGFnZSByZWNsYW1hdGlvbj8gT3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gc2hhZG93IG5vZGVzPyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA5OjQzOjQ2LjQyNzk3OTc3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyMzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDAtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDItXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwOS1cXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNS1cXG5tbS9LY29uZmlnOjE0MTY6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTctXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI0LVxcbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjYtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0Mzo0Ni40ODczMTAxNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI3OTEyOTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgY291bnRfbHJ1X2dlbl9wYWdlc2Agd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpdCdzIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgTFJVIGdlbmVyYXRpb24gZmVhdHVyZS4gVGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGludGVncmF0aW5nIHRoaXMgbmV3IGZ1bmN0aW9uIGludG8gYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQgc3VnZ2VzdHMgd2UncmUgcHJvYmFibHkgY2FsY3VsYXRpbmcgcGFnZXMgZm9yIHRoZSBuZXcgTFJVIGdlbiB3aXRoaW4gdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIuIEdpdmVuIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gc2hyaW5raW5nLCB0aGlzIGlzICp2ZXJ5KiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBXZSBhcmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIG1lbW9yeSByZWNsYW1hdGlvbiBzdHJhdGVnaWVzLCBhbmQgaG93IHRvIGJhbGFuY2UgdGhlbSB3aXRoIHRoZSBuZXcgTFJVIGdlbmVyYXRpb24gYWxnb3JpdGhtLlxuXG5JIG5lZWQgdG8gY29uZmlybSBgY291bnRfc2hhZG93X25vZGVzYCcgcmVhY2hhYmlsaXR5OyBpdCdzIGRlY2xhcmVkIHN0YXRpYywgc28gYSBxdWljayBjaGVjayBmb3Igd2hlcmUgaXQncyByZWdpc3RlcmVkIGFzIGEgc2hyaW5rZXIgY2FsbGJhY2sgaXMgaW4gb3JkZXIuIEl0IGhhcyB0byBiZSByZWdpc3RlcmVkIHNvbWV3aGVyZSB0byBiZSBpbnZva2VkIGJ5IHRoZSBrZXJuZWwuIExldCdzIHRyYWNlIGJhY2sgdGhlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDM6NTguNzY2NDQxMzEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjY0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS93b3JraW5nc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vd29ya2luZ3NldC5jPTY2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02ODYtXFxubW0vd29ya2luZ3NldC5jOjY4NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS93b3JraW5nc2V0LmMtNjg4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9ODM4PXN0YXRpYyBpbnQgX19pbml0IHdvcmtpbmdzZXRfaW5pdCh2b2lkKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTg3NC1cXG5tbS93b3JraW5nc2V0LmM6ODc1OlxcdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xcbm1tL3dvcmtpbmdzZXQuYy04NzYtXFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0Mzo1OC44NTc3MTA0NDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTczMDMzNjUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgd29ya2luZ3NldCBhbmQgYSBzaHJpbmtlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYGNvdW50X2xydV9nZW5fcGFnZXMoKWAgaW5zaWRlIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayB3aXRoaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoaXMgaXMgYSBjbGFzc2ljIExSVS1yZWxhdGVkIGFkZGl0aW9uLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIG5vdGUgZm9yIGxhdGVyIGFuYWx5c2lzLlxuXG5UaGUgbmV4dCB0aGluZyBpcyB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gaW5jbHVkZSB0aGUgb3V0cHV0IG9mIHRoYXQgbmV3IGZ1bmN0aW9uLCBidXQgKm9ubHkqIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkLiBUaGlzIG1vZGlmaWNhdGlvbiBnb2VzIGludG8gdGhlIGB3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzYCBwb2ludGVyLiBUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb24gdGhlIHNocmlua2VyIGJlaGF2aW9yLiBJIGNhbiBhbHJlYWR5IHRlbGwgdGhhdCB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6eiBsYXRlciBzaW5jZSBpdCBjb3VsZCB1bmNvdmVyIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB1bmRlciBzdHJlc3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIHdoYXQgc3ltYm9scyBJIGNhbiBmb2N1cyBvbiB3aGlsZSBmdXp6aW5nLCBidXQgdGhlbiBJIGhhZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkIHdlcmUgc3RhdGljLiAqU2hvb3QqLCBib3RoIGBjb3VudF9zaGFkb3dfbm9kZXNgIGFuZCBgY291bnRfbHJ1X2dlbl9wYWdlc2AgYXJlIHN0YXRpYy4gSSBoYWQgdG8gY2xhcmlmeSB0aGF0IHNpbmNlIHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBpcyBwYXJ0IG9mIGEgc2hyaW5rZXIgY2FsbGJhY2ssIGJ1dCBpdCBpcyBzdGF0aWMuIFNvLCBubyBsdWNrIG9uIGRpcmVjdCBmdXp6aW5nIHRhcmdldHMgd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYsIGF0IGxlYXN0IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4gU28gSSB0aGVuIGNoZWNrIGBtbS93b3JraW5nc2V0LmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgc2hyaW5rZXIgaW5pdGlhbGl6YXRpb24uIEkgYnJpZWZseSByZW1lbWJlciB0aGF0IGB3b3JraW5nc2V0X2luaXRgIHJlZ2lzdGVycyB0aGUgc2hyaW5rZXIsIGFuZCB0aGUgc2hyaW5rZXIgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgdGhlIFZNIHNjYW5uZXIuXG5cbkknbSB0aGlua2luZyBJIGNhbid0IGRpcmVjdGx5IHRhcmdldCBlaXRoZXIgZnVuY3Rpb24sIGJ1dCBtYXliZSBJJ20gb3ZlcnRoaW5raW5nIGl0LiBJdCdzIGEgY2FsbGJhY2ssIGFmdGVyIGFsbCwgYW5kIHRoZSBzaHJpbmtlciBpcyByZWdpc3RlcmVkIGFuZCBtYW5hZ2VkIGVsc2V3aGVyZS4gU28sIGxlYXZpbmcgYEZvY3VzU3ltYm9sc2AgZW1wdHkgbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZSwgb3IgcGVyaGFwcyBJIGNvdWxkIGNvbnNpZGVyIHRoZSBzaHJpbmtlciBjYWxsYmFjayBpdHNlbGYuIFRoZSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY2hhbmdlIGlzIGBMUlVfR0VOYCwgc28gSSdsbCBhbHNvIGNoZWNrIGBtbS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgY29uZGl0aW9ucyBtaWdodCBhY3RpdmF0ZSB0aGlzIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0NDoxNC41ODgwNDk1OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NzA4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTA9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDAxOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDktXFxubW0vS2NvbmZpZzoxNDEwOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTUtXFxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE3LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNC1cXG5tbS9LY29uZmlnOjE0MjU6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI2LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDQ6MTQuNjM2NzI0OTQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkzNDk5MzI3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBSZWNsYWltIHdpdGggTUdMUlUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgY291bnRfc2hhZG93X25vZGVzYCBpbiBgbW0vd29ya2luZ3NldC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIHVwZGF0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYWNjb3VudCBmb3IgcGFnZXMgdHJhY2tlZCBieSBNR0xSVSB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZC4gQSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgaXMgYWxzbyBpbnRyb2R1Y2VkLCB3aGljaCBzaW1wbHkgcmVhZHMgYGxydWdlbi1cdTAwM2Vucl9wYWdlc2AuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIHVzZWQgYXMgdGhlIGBjb3VudF9vYmplY3RzYCBjYWxsYmFjayBmb3IgYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyYC4gVGhpcyBzaHJpbmtlciwgaW4gdHVybiwgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgYHdvcmtpbmdzZXRfaW5pdGAgYW5kIGdldHMgaW52b2tlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgdGhlIGxvZ2ljIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYCwgYW5kIHRoYXQgZGlyZWN0bHkgaW5mbHVlbmNlcyBtZW1vcnkgcmVjbGFpbSBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCBgY291bnRfc2hhZG93X25vZGVzYCBpcyBzdGF0aWMgaW5pdGlhbGx5IG1hZGUgbWUgcGF1c2UuIEkga25vdyB3ZSBnZW5lcmFsbHkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBCdXQgaXQncyBjYWxsZWQgdmlhIHRoZSBzaHJpbmtlciBpbnRlcmZhY2UuIFRoYXQgc2hyaW5rZXIncyBpbnZva2VkIGZyb20gYGRvX3Nocmlua19zbGFiYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHNocmlua19zbGFiYC4gU28gd2UncmUgcmVhbGx5IGxvb2tpbmcgYXQgYSBjaGFpbiBvZiBmdW5jdGlvbnMuXG5cbkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGNvdW50X3NoYWRvd19ub2Rlc2AgYXMgdGhlIGZvY3VzIGJlY2F1c2UgaXQgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gY29uY2VybmVkIG1lLiBIb3dldmVyLCBpdCdzICpjYWxsZWQqIGFzIGEgY2FsbGJhY2sgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyBpdCAqd29uJ3QqIGJlIGlubGluZWQgYW5kICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQuIFNvLCBpdCdzIGFjdHVhbGx5IHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIG1lYW5zIGl0IHdpbGwgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvdW50X3NoYWRvd19ub2Rlc2AgYW5kIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCBidXQgdGhlIG9ubHkgbm9uLXN0YXRpYyBpcyBgc2hyaW5rX3NsYWJgLlxuXG5TaW5jZSBgY291bnRfc2hhZG93X25vZGVzYCBpcyBzdGF0aWMsIEkgY2FuIHN0aWxsIHVzZSBpdC4gSSdsbCBmb2N1cyBvbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgYExSVV9HRU5gLiBJJ2xsIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjM2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA5OjQ1OjQzLjk4NjY2MDExNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDAxOlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwMjpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDM6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDA0OlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDA1OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDY6XFx0XFx0aGVscFxcbjE0MDc6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MDk6XFx0XFxuMTQxMDpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQxMTpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDEyOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTM6XFx0XFx0aGVscFxcbjE0MTQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxNTpcXHRcXG4xNDE2OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQxNzpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQxODpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDU6NDMuOTg2NzU2MjY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjQ0NTIzNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS93b3JraW5nc2V0LmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgYW5kIGludGVncmF0aW5nIGl0IGludG8gYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBgY291bnRfc2hhZG93X25vZGVzYCBpcyBhIHNocmlua2VyIGNhbGxiYWNrIChgd29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0cyA9IGNvdW50X3NoYWRvd19ub2Rlc2ApLCB3aGljaCBtZWFucyBpdCdzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwcm9jZXNzLlxuXG5UaGlzIGNoYW5nZSBpcyBnYXRlZCBiZWhpbmQgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAsIHNvIGVuYWJsaW5nIHRoaXMgZmVhdHVyZSBpcyBhIHByZXJlcXVpc2l0ZS4gV2UnbGwgbmVlZCB0byBlbmFibGUgYExSVV9HRU5gLCBhbmQgcG90ZW50aWFsbHkgYWxzbyBgTFJVX0dFTl9FTkFCTEVEYC4gVGhpcyBsaWtlbHkgaW5mbHVlbmNlcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwgb3IgaXQgbWlnaHQgYmUgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHR3ZWFrZWQgYXQgcnVudGltZS5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgaW1wYWN0LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgd29ya2luZ3NldCBzaGFkb3cgbm9kZXMgaW50ZXJhY3Qgd2l0aCB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpLiBUaGlzIG1lYW5zIGl0J3MgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIGtpY2tzIGluIGFuZCB0cmlnZ2VycyB0aGUgc2hyaW5rZXIgbWVjaGFuaXNtLlxuXG5MZXQncyBmb2N1cyBvbiB0aGUga2V5IGVsZW1lbnRzLiBUaGUgcHJpbWFyeSBcImVudHJ5cG9pbnRcIiBmb3IgdGhpcyBjaGFuZ2UgaXMgYGNvdW50X3NoYWRvd19ub2Rlc2AsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLiBJdCdzIGEgY2FsbGJhY2sgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBJdCBpcyBub3QgaW5saW5lZC5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXCJMUlVfR0VOXCIsIFwiTFJVX0dFTl9FTkFCTEVEXCJdYFxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJjb3VudF9zaGFkb3dfbm9kZXNcIl1gXG4qICAgKipSZWFzb25pbmcqKjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIgdG8gYWNjb3VudCBmb3IgcGFnZXMgaW4gdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBsb2dpYywgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIHRyaWdnZXJzIHNocmlua2Vycy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEzLCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDY6MDEuNjMxMjgyODEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNDUyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyIHRvIGFjY291bnQgZm9yIHBhZ2VzIGluIHRoZSBtdWx0aS1nZW4gTFJVIChNR0xSVSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gbG9naWMsIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBwcmVzc3VyZSB0cmlnZ2VycyBzaHJpbmtlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgc2hyaW5rZXIgdG8gYWNjb3VudCBmb3IgcGFnZXMgaW4gdGhlIG11bHRpLWdlbiBMUlUgKE1HTFJVKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBsb2dpYywgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IHByZXNzdXJlIHRyaWdnZXJzIHNocmlua2Vycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDk6NDY6MDEuNzExNDM1NDcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1Mjc1NTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA5OjQ2OjAxLjcxMTkwNTA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDY1MjI4MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMThkYTNmMmI0ZmM3YzM2MDFkMDhkMDVlNzY5YjA2YzE0YTk3YTE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDk6NDM6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWMuLmRhMjAwMzRkMjhmYzYgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY1Myw2ICs2NTMsMzcgQEAgdm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxuIFx0fVxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKlxuKyAqIFRoZSBwZXItZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCBtYXkgZ29cbisgKiB0cmFuc2llbnRseSBuZWdhdGl2ZSB3aGlsZSBiYXRjaGVkIHVwZGF0ZXMgYXJlIHBlbmRpbmcsIHNvIGNsYW1wXG4rICogdGhlIHN1bSBhdCB6ZXJvLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2xydV9nZW5fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuK3tcbitcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0bG9uZyBucl9wYWdlcyA9IDA7XG4rXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1xuK1x0aWYgKCFscnVnZW4tXHUwMDNlZW5hYmxlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGdlbiA9IDA7IGdlbiBcdTAwM2MgTUFYX05SX0dFTlM7IGdlbisrKSB7XG4rXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xuK1x0XHRcdGxvbmcgKmNudCA9IGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdO1xuK1xuK1x0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuK1x0XHRcdFx0bnJfcGFnZXMgKz0gUkVBRF9PTkNFKGNudFt6b25lXSk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChucl9wYWdlcyBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG5yX3BhZ2VzO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdFx0XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG5AQCAtNjk3LDYgKzcyOCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcbiBcdFx0XHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbitcdFx0LypcbitcdFx0ICogTUdMUlUgYWNjb3VudHMgZm9yIHRoZSBldmljdGFibGUgcGFnZXMgaW5cbitcdFx0ICogbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW10gaW5zdGVhZCBvZiBtei1cdTAwM2VscnVfem9uZV9zaXplLCB3aGljaFxuK1x0XHQgKiBscnV2ZWNfbHJ1X3NpemUoKSByZWFkcywgc28gdGhlIGxvb3AgYWJvdmUgbWlzc2VzIHRoZW0uXG4rXHRcdCAqL1xuK1x0XHRwYWdlcyArPSBjb3VudF9scnVfZ2VuX3BhZ2VzKGxydXZlYyk7XG4rI2VuZGlmXG4rXG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIFx0XHRcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0NjowMS43MTE5MDY4MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTIyNTM5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBjb3VudF9scnVfZ2VuX3BhZ2VzYCwgd2l0aGluIGBtbS93b3JraW5nc2V0LmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIHNvbGUgcHVycG9zZSBpcyB0byBjb3VudCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggTFJVIGdlbmVyYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVhZGluZyB0aGUgYGxydWdlbi1cdTAwM2Vucl9wYWdlc2AgY291bnRlcnMuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZXNlIGNvdW50ZXJzIGFyZSBhY2Nlc3NlZCB1c2luZyBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIHRoaXMgc2NlbmFyaW8uXG5cblRoZSBjaGFuZ2UgdGhlbiBpbmNvcnBvcmF0ZXMgdGhpcyBgY291bnRfbHJ1X2dlbl9wYWdlc2AgY2FsbCBpbnRvIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCBNR0xSVSBhY2NvdW50aW5nIHdpdGhpbiB0aGUgc2hhZG93IG5vZGUgc2hyaW5rZXIuIFRoZSBnb2FsIGlzIGEgY29ycmVjdGlvbiwgc28gd2UgY2FuIGV4cGVjdCBpbXByb3ZlbWVudHMuXG5cbk5vdywgbXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIG9mIHRoZSBjb2RlLCB0aGlzIHBhdGNoIHNob3VsZCBiZSBjbGVhbi4gSXQncyBqdXN0IHN1bW1pbmcgdXAgY291bnRlcnMuIFRoZXNlIGNvdW50ZXJzIGFyZSBpbml0aWFsaXplZCBkdXJpbmcgdGhlIGBscnV2ZWNgIGluaXRpYWxpemF0aW9uLCBzbyB0aGVyZSdzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEuIEZ1cnRoZXJtb3JlLCB0aGVyZSBpcyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UsIHdoaWNoIGtlZXBzIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzIGxvdy5cblxuVGhlIGNvZGUgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5lc3RlZCBsb29wcyBpdGVyYXRlIHRocm91Z2ggZ2VuZXJhdGlvbnMsIHR5cGVzIChhbm9ueW1vdXMgYW5kIGZpbGUpLCBhbmQgem9uZXMuIEluc2lkZSB0aGUgbG9vcHMsIGl0IHN1bXMgdXAgdGhlIGNvdW50ZXIgdmFsdWVzIHRoYXQgYXJlIGJlaW5nIGFjY2Vzc2VkLlxuXG5gYGBjXG5zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfZ2VuX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbntcblx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5cdGxvbmcgbnJfcGFnZXMgPSAwO1xuXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuXG5cdGlmICghbHJ1Z2VuLVx1MDAzZWVuYWJsZWQpXG5cdFx0cmV0dXJuIDA7XG5cblx0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4rKykge1xuXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xuXHRcdFx0bG9uZyAqY250ID0gbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV07XG5cblx0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuXHRcdFx0XHRucl9wYWdlcyArPSBSRUFEX09OQ0UoY250W3pvbmVdKTtcblx0XHR9XG5cdH1cblxuXHRpZiAobnJfcGFnZXMgXHUwMDNjPSAwKVxuXHRcdHJldHVybiAwO1xuXG5cdHJldHVybiBucl9wYWdlcztcbn1cbmBgYFxuXG5UaGUgcG90ZW50aWFsIHByb2JsZW1zIGhlcmUgYXJlIGxpbWl0ZWQgdG8gbG9naWMgZXJyb3JzIChpbmNvcnJlY3QgY291bnRpbmcpLCBvdXQtb2YtYm91bmRzIGFjY2VzcyAoYnV0IHRoZSBpbmRpY2VzIGFyZSBib3VuZGVkIGJ5IGNvbnN0YW50czogYE1BWF9OUl9HRU5TYCwgYEFOT05fQU5EX0ZJTEVgLCBhbmQgYE1BWF9OUl9aT05FU2ApLCBvciB1c2UtYWZ0ZXItZnJlZSAoaWYgdGhlIGBscnV2ZWNgIHdlcmUgc29tZWhvdyBmcmVlZCBwcmVtYXR1cmVseSwgd2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0KS4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBhY2NvdW50aW5nIGFuZCBzaG91bGQgYmUgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OSwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwOTo0NjoxMi4zNjQxNjM2OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGNvdW50X2xydV9nZW5fcGFnZXNgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBldmljdGFibGUgcGFnZXMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBJdCBpdGVyYXRlcyBvdmVyIHRoZSBgbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc2AgYXJyYXlzIGFuZCBzdW1zIHVwIHRoZSBwYWdlIGNvdW50cy4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IHJlbGF0ZWQgdG8gaW50ZXJuYWwga2VybmVsIGFjY291bnRpbmcgYW5kIGxvZ2ljIGZvciB0aGUgc2hhZG93IG5vZGUgc2hyaW5rZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgY291bnRfbHJ1X2dlbl9wYWdlc2AgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGV2aWN0YWJsZSBwYWdlcyB3aGVuIE1HTFJVIGlzIGVuYWJsZWQuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzYCBhcnJheXMgYW5kIHN1bXMgdXAgdGhlIHBhZ2UgY291bnRzLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byBpbnRlcm5hbCBrZXJuZWwgYWNjb3VudGluZyBhbmQgbG9naWMgZm9yIHRoZSBzaGFkb3cgbm9kZSBzaHJpbmtlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[1] Phase: Succeeded StartedAt: 2026-08-24 09:46:23 +0000 UTC FinishedAt: 2026-08-24 09:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 09:46:23 +0000 UTC FinishedAt: 2026-08-24 09:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2] Phase: Succeeded StartedAt: 2026-08-24 09:46:23 +0000 UTC FinishedAt: 2026-08-24 13:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 09:46:23 +0000 UTC FinishedAt: 2026-08-24 13:35:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 09:46:23 +0000 UTC FinishedAt: 2026-08-24 09:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 09:46:23 +0000 UTC FinishedAt: 2026-08-24 09:46:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqjfgd/series-workflowqjfgd-convert-artifact-111217995/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 09:46:33 +0000 UTC FinishedAt: 2026-08-24 10:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 09:46:33 +0000 UTC FinishedAt: 2026-08-24 10:02:42 +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:*dcea736f-e2e5-40bb-b248-472b98d5c92f,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-workflowqjfgd/series-workflowqjfgd-convert-artifact-111217995/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": "8c9fe8af-f996-4544-9494-badcd7878bd7", "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-workflowqjfgd/series-workflowqjfgd-build-action-3882124361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 09:46:33 +0000 UTC FinishedAt: 2026-08-24 10:02:32 +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:*dcea736f-e2e5-40bb-b248-472b98d5c92f,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-workflowqjfgd/series-workflowqjfgd-convert-artifact-111217995/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": "8c9fe8af-f996-4544-9494-badcd7878bd7", "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-workflowqjfgd/series-workflowqjfgd-build-action-3882124361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 10:02:42 +0000 UTC FinishedAt: 2026-08-24 10:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 10:02:42 +0000 UTC FinishedAt: 2026-08-24 10:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 10:02:42 +0000 UTC FinishedAt: 2026-08-24 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 10:02:42 +0000 UTC FinishedAt: 2026-08-24 10:02:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqjfgd/series-workflowqjfgd-convert-artifact-882810018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 10:02:52 +0000 UTC FinishedAt: 2026-08-24 10:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 10:02:52 +0000 UTC FinishedAt: 2026-08-24 10:04:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c9fe8af-f996-4544-9494-badcd7878bd7,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-workflowqjfgd/series-workflowqjfgd-build-action-3882124361/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-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 10:05:00 +0000 UTC FinishedAt: 2026-08-24 10:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 10:05:00 +0000 UTC FinishedAt: 2026-08-24 10:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 10:05:00 +0000 UTC FinishedAt: 2026-08-24 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 10:05:00 +0000 UTC FinishedAt: 2026-08-24 10:23:49 +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:*dcea736f-e2e5-40bb-b248-472b98d5c92f,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-workflowqjfgd/series-workflowqjfgd-convert-artifact-882810018/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": "6b03f9a9-1de2-469a-a546-f7eef4315cd6", "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-workflowqjfgd/series-workflowqjfgd-build-action-3262635254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 10:05:00 +0000 UTC FinishedAt: 2026-08-24 10:23:39 +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:*dcea736f-e2e5-40bb-b248-472b98d5c92f,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-workflowqjfgd/series-workflowqjfgd-convert-artifact-882810018/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": "6b03f9a9-1de2-469a-a546-f7eef4315cd6", "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-workflowqjfgd/series-workflowqjfgd-build-action-3262635254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 10:23:49 +0000 UTC FinishedAt: 2026-08-24 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 10:23:49 +0000 UTC FinishedAt: 2026-08-24 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 10:23:49 +0000 UTC FinishedAt: 2026-08-24 10:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 10:23:49 +0000 UTC FinishedAt: 2026-08-24 10:25:52 +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:*6b03f9a9-1de2-469a-a546-f7eef4315cd6,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-workflowqjfgd/series-workflowqjfgd-build-action-3262635254/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-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 13:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 13:35:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},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:*8c9fe8af-f996-4544-9494-badcd7878bd7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b03f9a9-1de2-469a-a546-f7eef4315cd6,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-workflowqjfgd/series-workflowqjfgd-build-action-3882124361/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-workflowqjfgd/series-workflowqjfgd-build-action-3262635254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 10:26:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 10:26:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},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-workflowqjfgd/series-workflowqjfgd-convert-artifact-4285391319/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 10:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 10:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 10:26:01 +0000 UTC FinishedAt: 2026-08-24 10:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 10:26:23 +0000 UTC FinishedAt: 2026-08-24 13:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjfgd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68f50de6d3ec5b49ed08c53d0cd5b2c9f883fa72","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"50bdc70c-6584-4ed8-930a-efe2f71b6cca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 10:26:23 +0000 UTC FinishedAt: 2026-08-24 13:35:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c9fe8af-f996-4544-9494-badcd7878bd7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b03f9a9-1de2-469a-a546-f7eef4315cd6,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-workflowqjfgd/series-workflowqjfgd-build-action-3882124361/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-workflowqjfgd/series-workflowqjfgd-build-action-3262635254/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-workflowqjfgd/series-workflowqjfgd-convert-artifact-4285391319/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,}