Name: series-workflowf5bv4 Phase: Succeeded StartedAt: 2026-07-27 05:05:07 +0000 UTC FinishedAt: 2026-07-27 10:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[0] Phase: Succeeded StartedAt: 2026-07-27 05:05:07 +0000 UTC FinishedAt: 2026-07-27 05:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 05:05:07 +0000 UTC FinishedAt: 2026-07-27 05:34:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68210527d235e59afa54bc6aba6ecc532488a82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68210527d235e59afa54bc6aba6ecc532488a82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "cba3ed7c-005d-4785-b63e-16d17f41a522" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_load", "zswap_invalidate", "zswap_swapon", "zswap_swapoff" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfc3dhcG9uJiMzNDssCiAgICAmIzM0O3pzd2FwX3N3YXBvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgenN3YXAgbG9naWMgYnkgcmVwbGFjaW5nIHRoZSBwb29sIHBvaW50ZXIgaW4genN3YXBfZW50cnkgd2l0aCBhIHUxNiBpbmRleCBtYXBwZWQgdmlhIGFuIHhhcnJheS4gVGhpcyBhZmZlY3RzIHBvb2wgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbnRyeSBhbGxvY2F0aW9uLCBhbmQgZnJlZWluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4genN3YXAgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSB0aGUgbmV3IGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGM0M2Y1Mzc4YmI2ZDdiZTNjNDI2ZTQyMThhOTIyMDlmOTc2ODA1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDA1OjMzOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA0ZTc2YTRhODdjZGNjMC4uNmMyOTA5OGRhOGQ1ZWEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMzUsNiAmIzQzOzM1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG5AQCAtMTU3LDkgJiM0MzsxNTgsMjIgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4mIzQzO1x0dTE2IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogRW50cmllcyBzdG9yZSBhIHUxNiBwb29sIGluZGV4IGluc3RlYWQgb2YgYW4gOC1ieXRlIHBvb2wgcG9pbnRlci5cbiYjNDM7ICogSW5kaWNlcyBhcmUgYWxsb2NhdGVkIGhlcmUgYXQgcG9vbCBjcmVhdGlvbiBhbmQgcmVsZWFzZWQgYXQgZGVzdHJ1Y3Rpb24uXG4mIzQzOyAqIExpdmUgZW50cmllcyBwaW4gdGhlIHBvb2wsIHNvIGl0cyBpbmRleCBpcyBub3QgcmV1c2VkIHVuZGVyIHRoZW0uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyh6c3dhcF9wb29sc194YSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfYnlfaW5kZXgodTE2IGlkeClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBpZHgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xuIFxuQEAgLTE4Miw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcbiAgKiAgICAgICAgICAgICAgbG9naWMgaWYgcmVmZXJlbmNlZCBpcyB1bnNldC4gU2VlIGNvbW1lbnRzIGluIHRoZSBzaHJpbmtlclxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LlxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpblxuJiM0MzsgKiBwb29sX2lkeCAtIHpzd2FwX3Bvb2wgaW5kZXgsIHJlc29sdmVkIHZpYSB6c3dhcF9wb29sX2J5X2luZGV4KCkuXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXG4gICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvXG4gICogbHJ1IC0gaGFuZGxlIHRvIHRoZSBwb29sJiMzOTtzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxuQEAgLTE5MSwxMiAmIzQzOzIwNSwyMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xuIFx0Ym9vbCByZWZlcmVuY2VkO1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4mIzQzO1x0dTE2IHBvb2xfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiB9O1xuIFxuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfcG9vbF9ieV9pbmRleChlbnRyeS1cdTAwM2Vwb29sX2lkeCk7XG4mIzQzO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSghcG9vbCk7XG4mIzQzO1x0cmV0dXJuIHBvb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTcsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbiYjNDM7XHR1MzIgaWR4O1xuIFxuIFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTMyMiwxMCAmIzQzOzM0NSwxOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRcdGdvdG8gcmVmX2ZhaWw7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuIFxuJiM0MztcdHJldCA9IHhhX2FsbG9jKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBcdTAwMjZpZHgsIHBvb2wsIHhhX2xpbWl0XzE2YixcbiYjNDM7XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBpZHhfZmFpbDtcbiYjNDM7XHRwb29sLVx1MDAzZWlkeCA9IGlkeDtcbiYjNDM7XG4gXHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2NyZWF0ZWRcJiMzNDssIHBvb2wpO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gXG4mIzQzO2lkeF9mYWlsOlxuJiM0MztcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzY2LDYgJiM0MzszOTcsOCBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4gXG4gXHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2Rlc3Ryb3lpbmdcJiMzNDssIHBvb2wpO1xuIFxuJiM0MztcdHhhX2VyYXNlKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBwb29sLVx1MDAzZWlkeCk7XG4mIzQzO1xuIFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcdTAwMjZwb29sLVx1MDAzZW5vZGUpO1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbkBAIC03NjQsOSAmIzQzOzc5NywxMSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuJiM0MztcbiBcdHpzd2FwX2xydV9kZWwoXHUwMDI2enN3YXBfbGlzdF9scnUsIGVudHJ5KTtcbi1cdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuLVx0enN3YXBfcG9vbF9wdXQoZW50cnktXHUwMDNlcG9vbCk7XG4mIzQzO1x0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4mIzQzO1x0enN3YXBfcG9vbF9wdXQocG9vbCk7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpIHtcbiBcdFx0b2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS1cdTAwM2VvYmpjZywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbiBcdFx0b2JqX2Nncm91cF9wdXQoZW50cnktXHUwMDNlb2JqY2cpO1xuQEAgLTkyMyw3ICYjNDM7OTU4LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4O1xuQEAgLTk2NCw3ICYjNDM7OTk5LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCYjMzQ7RGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdHN3cF90eXBlKGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbiBcdFx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbi1cdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXRmbV9uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0NTcsNyAmIzQzOzE0OTIsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuIFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbiBcdCAqL1xuLVx0ZW50cnktXHUwMDNlcG9vbCA9IHBvb2w7XG4mIzQzO1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zd2Fwb24mIzM0OywKICAgICYjMzQ7enN3YXBfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzQzZjUzNzhiYjZkN2JlM2M0MjZlNDIxOGE5MjIwOWY5NzY4MDVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMDU6MzM6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA0ZTc2YTRhODdjZGNjMC4uNmMyOTA5OGRhOGQ1ZWEgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzUsNiAmIzQzOzM1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9scnUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvenNtYWxsb2MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtMTU3LDkgJiM0MzsxNTgsMjIgQEAgc3RydWN0IHpzd2FwX3Bvb2wgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiYjNDM7CXUxNiBpZHg7CiAJY2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIH07CiAKJiM0MzsvKgomIzQzOyAqIEVudHJpZXMgc3RvcmUgYSB1MTYgcG9vbCBpbmRleCBpbnN0ZWFkIG9mIGFuIDgtYnl0ZSBwb29sIHBvaW50ZXIuCiYjNDM7ICogSW5kaWNlcyBhcmUgYWxsb2NhdGVkIGhlcmUgYXQgcG9vbCBjcmVhdGlvbiBhbmQgcmVsZWFzZWQgYXQgZGVzdHJ1Y3Rpb24uCiYjNDM7ICogTGl2ZSBlbnRyaWVzIHBpbiB0aGUgcG9vbCwgc28gaXRzIGluZGV4IGlzIG5vdCByZXVzZWQgdW5kZXIgdGhlbS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyh6c3dhcF9wb29sc194YSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2J5X2luZGV4KHUxNiBpZHgpCiYjNDM7ewomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO3pzd2FwX3Bvb2xzX3hhLCBpZHgpOwomIzQzO30KJiM0MzsKIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7CiAKQEAgLTE4Miw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7CiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFjawogICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXIKICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LgotICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluCiYjNDM7ICogcG9vbF9pZHggLSB6c3dhcF9wb29sIGluZGV4LCByZXNvbHZlZCB2aWEgenN3YXBfcG9vbF9ieV9pbmRleCgpLgogICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhCiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG8KICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy4KQEAgLTE5MSwxMiAmIzQzOzIwNSwyMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkgewogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJYm9vbCByZWZlcmVuY2VkOwotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1MTYgcG9vbF9pZHg7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogfTsKIAomIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9wb29sX2J5X2luZGV4KGVudHJ5LSZndDtwb29sX2lkeCk7CiYjNDM7CiYjNDM7CVZNX1dBUk5fT05fT05DRSghcG9vbCk7CiYjNDM7CXJldHVybiBwb29sOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiAKQEAgLTI3NSw2ICYjNDM7Mjk3LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCWNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcMCAqLwogCWludCByZXQsIGNwdTsKJiM0MzsJdTMyIGlkeDsKIAogCWlmICghenN3YXBfaGFzX3Bvb2wgJmFtcDsmYW1wOyAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0zMjIsMTAgJiM0MzszNDUsMTggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCQlnb3RvIHJlZl9mYWlsOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiAKJiM0MzsJcmV0ID0geGFfYWxsb2MoJmFtcDt6c3dhcF9wb29sc194YSwgJmFtcDtpZHgsIHBvb2wsIHhhX2xpbWl0XzE2YiwKJiM0MzsJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gaWR4X2ZhaWw7CiYjNDM7CXBvb2wtJmd0O2lkeCA9IGlkeDsKJiM0MzsKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAogCXJldHVybiBwb29sOwogCiYjNDM7aWR4X2ZhaWw6CiYjNDM7CXBlcmNwdV9yZWZfZXhpdCgmYW1wO3Bvb2wtJmd0O3JlZik7CiByZWZfZmFpbDoKIAljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsICZhbXA7cG9vbC0mZ3Q7bm9kZSk7CiAKQEAgLTM2Niw2ICYjNDM7Mzk3LDggQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQogCiAJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O2Rlc3Ryb3lpbmcmIzM0OywgcG9vbCk7CiAKJiM0MzsJeGFfZXJhc2UoJmFtcDt6c3dhcF9wb29sc194YSwgcG9vbC0mZ3Q7aWR4KTsKJiM0MzsKIAljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsICZhbXA7cG9vbC0mZ3Q7bm9kZSk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQpAQCAtNzY0LDkgJiM0Mzs3OTcsMTEgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogICovCiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiB7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiYjNDM7CiAJenN3YXBfbHJ1X2RlbCgmYW1wO3pzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7Ci0JenNfZnJlZShlbnRyeS0mZ3Q7cG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSk7Ci0JenN3YXBfcG9vbF9wdXQoZW50cnktJmd0O3Bvb2wpOwomIzQzOwl6c19mcmVlKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwomIzQzOwl6c3dhcF9wb29sX3B1dChwb29sKTsKIAlpZiAoZW50cnktJmd0O29iamNnKSB7CiAJCW9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktJmd0O29iamNnLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKIAkJb2JqX2Nncm91cF9wdXQoZW50cnktJmd0O29iamNnKTsKQEAgLTkyMyw3ICYjNDM7OTU4LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGVudHJ5LSZndDtwb29sOwomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwogCXN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDsKIAlzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4OwpAQCAtOTY0LDcgJiM0Mzs5OTksNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcHJfYWxlcnRfcmF0ZWxpbWl0ZWQoJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS0mZ3Q7JWQpXG4mIzM0OywKIAkJCQkJCXN3cF90eXBlKGVudHJ5LSZndDtzd3BlbnRyeSksCiAJCQkJCQlzd3Bfb2Zmc2V0KGVudHJ5LSZndDtzd3BlbnRyeSksCi0JCQkJCQllbnRyeS0mZ3Q7cG9vbC0mZ3Q7dGZtX25hbWUsCiYjNDM7CQkJCQkJcG9vbC0mZ3Q7dGZtX25hbWUsCiAJCQkJCQllbnRyeS0mZ3Q7bGVuZ3RoLCBkbGVuKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDU3LDcgJiM0MzsxNDkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nCiAJICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS4KIAkgKi8KLQllbnRyeS0mZ3Q7cG9vbCA9IHBvb2w7CiYjNDM7CWVudHJ5LSZndDtwb29sX2lkeCA9IHBvb2wtJmd0O2lkeDsKIAllbnRyeS0mZ3Q7c3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5OwogCWVudHJ5LSZndDtvYmpjZyA9IG9iamNnOwogCWVudHJ5LSZndDtyZWZlcmVuY2VkID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBac3dhcCBPcHRpbWl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS96c3dhcC5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgc3dhcHBpbmcgb3V0IGEgZnVsbCA4LWJ5dGUgcG9pbnRlciwgdGhlIGBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbGAgd2l0aGluIHRoZSBgc3RydWN0IHpzd2FwX2VudHJ5YCwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGEgYHUxNiBwb29sX2lkeGAuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaXplIHJlZHVjdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZywgZXNwZWNpYWxseSBpbiB0aGUga2VybmVsLCB3aGVyZSBldmVyeSBieXRlIGNvdW50cy4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYW4geGFycmF5LCBgenN3YXBfcG9vbHNfeGFgLCB0byBoYW5kbGUgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGVzZSBgcG9vbF9pZHhgIHZhbHVlcyBhbmQgdGhlIGFjdHVhbCBgc3RydWN0IHpzd2FwX3Bvb2xgIHBvaW50ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBwYXJ0IG9mIHpzd2FwLCBub3QganVzdCBzb21lIHRyaXZpYWwgYWRqdXN0bWVudC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIFpzd2FwIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUga2VybmVsIGNvbmZpZywgb3IgaXMgaXQgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzcGVjaWZpYyBvcHRpb24gdG8gYmUgdHVybmVkIG9uPyBJJiMzOTtsbCBydW4gYGdyZXBwZXJgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgWlNXQVBgLiBUaGF0IHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IGFuZCBzY29wZSBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcHJlbGltaW5hcnkgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdCwgYXNzdW1pbmcgSSYjMzk7bSBidWlsZGluZyBhIGtlcm5lbDoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFpzd2FwIFRlc3RpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBlbnN1cmUgdGhhdCB6c3dhcCBpcyB0aG9yb3VnaGx5IHRlc3RlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJlbGV2YW50IG9wdGlvbnMgZW5hYmxlZCwgc3BlY2lmaWNhbGx5IGBDT05GSUdfWlNXQVBgLiBNYWtlcyBzZW5zZSwgb2YgY291cnNlIOKAkyB3aXRob3V0IHRoYXQsIHRoZXJlJiMzOTtzIG5vIHpzd2FwIHRvIHRlc3QuIEFuZCwgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3MgYW5kIGd1YXJhbnRlZSBpdCYjMzk7cyBhY3R1YWxseSBydW5uaW5nLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBhbHNvIGVuYWJsaW5nIGBDT05GSUdfWlNXQVBfREVGQVVMVF9PTmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGhhdmUgenN3YXAgYWN0aXZlIGJ5IGRlZmF1bHQgZHVyaW5nIGluaXRpYWwgdGVzdGluZyBhbmQgdG8gY29uZmlybSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuCgpPZiBjb3Vyc2UsIHdlJiMzOTtsbCBuZWVkIHJlZ3VsYXIgc3dhcCBzdXBwb3J0LCB3aGljaCBpcyBgQ09ORklHX1NXQVBgLiBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgZXhwbGljaXRseS4gSXQmIzM5O2QgYmUgZm9vbGlzaCB0byBvdmVybG9vayB0aGF0LgoKU28sIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLCBteSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgc3Vycm91bmRpbmcgYFpTV0FQYC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCwgb3IgdGhhdCBpbXBhY3QgaXRzIGJlaGF2aW9yLCB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmc/IFRpbWUgdG8gZ2V0IGdyYW51bGFyIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IGZlZWxpbmcgc2F5cyB0aGUgY29yZSBpcyBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpcyBwcm9iYWJseSBhcm91bmQgbGluZSAyMiDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEl0JiMzOTtzIGEgYnJvYWQgYXJlYSwgc28gemVyb2luZyBpbiBsaWtlIHRoaXMgaGVscHMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQuIEhvcGVmdWxseSwgaXQgaXMgbm90IHRvbyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxuICAxODpcdFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXG4gIDE5Olx0XHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxuICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuICA0MDpcdFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxuICA0MzpcdFx0ICBjb21tYW5kIGxpbmUgJiMzOTt6c3dhcC5lbmFibGVkPSYjMzk7IG9wdGlvbi5cbiAgNDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTIxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpzd2FwIEZvY3VzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkgc2VlIGBaU1dBUGAgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCBhcmUgaW4gcGxheSwgZ29vZC4gTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIHJlYWwgdGFyZ2V0cyBmb3IgZnV6emluZyBoZXJlPyBUaGUgcGF0Y2ggcG9pbnRzIHRvIG1vZGlmaWNhdGlvbnMgaW4gYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3Bvb2xfZGVzdHJveWAsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX3N0b3JlX3BhZ2VgLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1tL3pzd2FwLmNgLiBXZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9zZWQgYXMgQVBJIGVudHJ5IHBvaW50cyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGZvciBmdXp6aW5nIHdpbGwgbGllLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9bYS16X10mIzQzOyB6c3dhcF9bYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz03OT1zdGF0aWMgYm9vbCB6c3dhcF9wb29sX3JlYWNoZWRfZnVsbDtcbi0tXG5tbS96c3dhcC5jLTg2LVxubW0venN3YXAuYzo4NzpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xubW0venN3YXAuYy04OC1cbi0tXG5tbS96c3dhcC5jPTkxPXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6OTI6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTkzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbi0tXG5tbS96c3dhcC5jPTEwMT1zdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jOjEwMjpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbm1tL3pzd2FwLmMtMTAzLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbi0tXG5tbS96c3dhcC5jPTEyND1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XG5tbS96c3dhcC5jLTEyNS1cbm1tL3pzd2FwLmM6MTI2OmJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMjcte1xuLS1cbm1tL3pzd2FwLmMtMTMwLVxubW0venN3YXAuYzoxMzE6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMi17XG4tLVxubW0venN3YXAuYz0zNzU9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4tLVxubW0venN3YXAuYy0zOTMtXG5tbS96c3dhcC5jOjM5NDpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTM5NS17XG4tLVxubW0venN3YXAuYz00NDg9c3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4tLVxubW0venN3YXAuYy00NTYtLyogVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZS4gKi9cbm1tL3pzd2FwLmM6NDU3OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZ2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00NTgte1xuLS1cbm1tL3pzd2FwLmMtNDYxLVxubW0venN3YXAuYzo0NjI6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9wdXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ2My17XG4tLVxubW0venN3YXAuYz01Mjk9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtNTQxLVxubW0venN3YXAuYzo1NDI6c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXG5tbS96c3dhcC5jLTU0My17XG4tLVxubW0venN3YXAuYy01NjAtXG5tbS96c3dhcC5jOjU2MTpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS96c3dhcC5jLTU2Mi17XG4tLVxubW0venN3YXAuYy02NDktXG5tbS96c3dhcC5jOjY1MDpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcbm1tL3pzd2FwLmMtNjUxLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0venN3YXAuYz02OTY9c3RhdGljIGlubGluZSBpbnQgZW50cnlfdG9fbmlkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03MDAtXG5tbS96c3dhcC5jOjcwMTpzdGF0aWMgdm9pZCB6c3dhcF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbGlzdF9scnUsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTcwMi17XG4tLVxubW0venN3YXAuYy03MjMtXG5tbS96c3dhcC5jOjcyNDpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbGlzdF9scnUsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTcyNS17XG4tLVxubW0venN3YXAuYy03MzUtXG5tbS96c3dhcC5jOjczNjp2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3pzd2FwLmMtNzM3LXtcbi0tXG5tbS96c3dhcC5jLTc0MC1cbm1tL3pzd2FwLmM6NzQxOnZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTc0Mi17XG4tLVxubW0venN3YXAuYy03NjItICovXG5tbS96c3dhcC5jOjc2Mzp2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS96c3dhcC5jLTc2NC17XG4tLVxubW0venN3YXAuYz03ODA9c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxuLS1cbm1tL3pzd2FwLmMtNzg4LVxubW0venN3YXAuYzo3ODk6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03OTAte1xuLS1cbm1tL3pzd2FwLmMtNzk3LSAqL1xubW0venN3YXAuYzo3OTg6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03OTkte1xuLS1cbm1tL3pzd2FwLmMtODE3LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjgxODpzdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG5tbS96c3dhcC5jLTgxOS17XG4tLVxubW0venN3YXAuYy04NzQtXG5tbS96c3dhcC5jOjg3NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtODc2LVx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuLS1cbm1tL3pzd2FwLmMtOTU4LVxubW0venN3YXAuYzo5NTk6c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy05NjAte1xuLS1cbm1tL3pzd2FwLmMtMTAyMS0gKi9cbm1tL3pzd2FwLmM6MTAyMjpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy0xMDIzLVx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTM0Mz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS96c3dhcC5jLTE0MzItXG5tbS96c3dhcC5jOjE0MzM6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbm1tL3pzd2FwLmMtMTQzNC1cdFx0XHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS96c3dhcC5jLTE1MTItXG5tbS96c3dhcC5jOjE1MTM6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTE0LXtcbi0tXG5tbS96c3dhcC5jLTE2MTgtICovXG5tbS96c3dhcC5jOjE2MTk6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTYyMC17XG4tLVxubW0venN3YXAuYy0xNjcxLVxubW0venN3YXAuYzoxNjcyOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXG5tbS96c3dhcC5jLTE2NzMte1xuLS1cbm1tL3pzd2FwLmMtMTY4NS1cbm1tL3pzd2FwLmM6MTY4NjppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxubW0venN3YXAuYy0xNjg3LXtcbi0tXG5tbS96c3dhcC5jLTE3MDUtXG5tbS96c3dhcC5jOjE3MDY6dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxubW0venN3YXAuYy0xNzA3LXtcbi0tXG5tbS96c3dhcC5jPTE3NTA9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlc19mb3BzLFxuLS1cbm1tL3pzd2FwLmMtMTc1Mi1cbm1tL3pzd2FwLmM6MTc1MzpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxubW0venN3YXAuYy0xNzU0LXtcbi0tXG5tbS96c3dhcC5jLTE3ODYtI2Vsc2Vcbm1tL3pzd2FwLmM6MTc4NzpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxubW0venN3YXAuYy0xNzg4LXtcbi0tXG5tbS96c3dhcC5jLTE3OTUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MTc5NjpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG5tbS96c3dhcC5jLTE3OTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgWnN3YXA6IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgenN3YXAgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIFdlJiMzOTt2ZSBnb3QgdGhlIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50czogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gLCBhbmQgYHpzd2FwX3N3YXBvZmZgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcywgdGhlIG9uZXMgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGguCgpOb3csIGdsYW5jaW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3Bvb2xfZGVzdHJveWAsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX3N0b3JlX3BhZ2VgLiBUaGVzZSBzZWVtIHRvIGJlIG1vc3RseSBzdGF0aWMgaGVscGVycy4gQnV0IEkgY2FuIHNlZSB0aGUgY29ubmVjdGlvbiBub3c6IGB6c3dhcF9zdG9yZWAgaXMgY2FsbGluZyBgenN3YXBfc3RvcmVfcGFnZWAuIGB6c3dhcF9sb2FkYCByZWxpZXMgb24gYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgIGNhbGxzIGB6c3dhcF9lbnRyeV9mcmVlYC4KClRoZXJlZm9yZSwgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gZWZmZWN0aXZlIGZ1enppbmcgaXMgdG8gZm9jdXMgb24gYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgb3JjaGVzdHJhdGUgdGhlIGNvcmUgb3BlcmF0aW9ucywgYW5kIHdlIGNhbiB0ZXN0IHRoZSBpbnB1dHMgYW5kIGNvbmRpdGlvbnMgZnJvbSBvdXRzaWRlLiBUaGUgYHpzd2FwX3N3YXBvbmAgYW5kIGB6c3dhcF9zd2Fwb2ZmYCBlbnRyeSBwb2ludHMgYWxzbyBzZWVtIGxpa2UgZGVjZW50IGNob2ljZXMgdG8gaW5jbHVkZS4KCkkgd2lsbCB0YWtlIGEgbW9tZW50IHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfc3RvcmVgIGlzIGV4cG9ydGVkIGFuZCBhdmFpbGFibGUsIG9yIGRldGVybWluZSBob3cgaXQgY2FuIGJlIGFwcHJvcHJpYXRlbHkgaW52b2tlZC4gVGhpcyB3aWxsIHRoZW4gYWxsb3cgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc3RvcmVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTI3PXVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mjg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0yOS1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDA9c3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC00MS1cbmluY2x1ZGUvbGludXgvenN3YXAuaDo0MjpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvenN3YXAuaC00My17XG4tLVxubW0vcGFnZV9pby5jPTIwMz1pbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9wYWdlX2lvLmMtMjM2LVxubW0vcGFnZV9pby5jOjIzNzpcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcbm1tL3BhZ2VfaW8uYy0yMzgtXHRcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcbi0tXG5tbS96c3dhcC5jPTk1OT1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xMDE2LSAqIHRvIHRoZSBzd2FwIGRldmljZS4gIFdlIGFyZSBiYXNpY2FsbHkgcmVzdW1pbmcgdGhlIHNhbWUgc3dhcFxubW0venN3YXAuYzoxMDE3OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtMTAxOC0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cbi0tXG5tbS96c3dhcC5jPTE0MzM9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE1MTItXG5tbS96c3dhcC5jOjE1MTM6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTE0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKlpzd2FwIEZ1bmN0aW9uIENhbGxzICZhbXA7IEludmFsaWRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgbWFwIG9mIHRoZSB6c3dhcCBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBpcyBiZWluZyByZWZyZXNoZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNhbGwgZmxvdyBub3cuIFJpZ2h0LCBzbyBgenN3YXBfc3RvcmVgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcHV0dGluZyBwYWdlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGNhY2hlLCBhbmQgSSByZW1lbWJlciB0aGF0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGBzd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhcyBwYWdlcyBhcmUgd3JpdHRlbiBvdXQgdG8gdGhlIHN3YXAgcGFydGl0aW9uLCB0aGV5JiMzOTtyZSBpbnRlcmNlcHRlZCBhbmQgcG90ZW50aWFsbHkgY29tcHJlc3NlZCBpbiB6c3dhcCBmaXJzdC4gR29vZC4KCk5vdywgYHpzd2FwX2xvYWRgIGlzIG9idmlvdXNseSB0aGUgY291bnRlcnBhcnQsIHB1bGxpbmcgcGFnZXMgKmZyb20qIHpzd2FwLiBBbmQgdGhhdCwgYXMgZXhwZWN0ZWQsIGlzIGNhbGxlZCBmcm9tIGBzd2FwX3JlYWRfZm9saW9gLCBhbHNvIGluIGBtbS9wYWdlX2lvLmNgLiBUaGF0JiMzOTtzIHRoZSByZWFkIHBhdGgsIHJpZ2h0PyBXaGVuIHRoZSBzeXN0ZW0gbmVlZHMgYSBwYWdlIGZyb20gc3dhcCwgaXQgY2hlY2tzIHpzd2FwIGZpcnN0LgoKRmluYWxseSwgYHpzd2FwX2ludmFsaWRhdGVgIGlzIGNhbGxlZCB0byByZW1vdmUgb3IgY2xlYXIgYW4gZW50cnkgZnJvbSB0aGUgY29tcHJlc3NlZCBjYWNoZSwgd2hlbiBhIHBhZ2UgbmVlZHMgdG8gYmUgc3dhcHBlZCBvdXQsIGZyZWVkLCBvciBvdGhlcndpc2UgcmVtb3ZlZCBmcm9tIHRoZSBzd2FwIHBhcnRpdGlvbi4gSSBrbm93IHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gYHN3YXBfZnJlZWAgb3IgYSBzaW1pbGFyIHN3YXAtcmVsYXRlZCBmdW5jdGlvbi4gR29vZC4KClNvLCB3aGVyZSBkbyBJIHN0YXJ0IGRpZ2dpbmcgaW4gdG8gc2VlIGhvdyBpdHMgd29ya2luZz8gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHpzd2FwX2xvYWRgIGFuZCB0aGVuIGB6c3dhcF9pbnZhbGlkYXRlYCwgdG8gcmVtaW5kIG15c2VsZiBob3cgdGhvc2UgZnVuY3Rpb25zIHdvcmsuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBhbSB1cCB0byBzcGVlZCB3aXRoIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9sb2FkXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0yOD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjI5OmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTMwLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaD00Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDYtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NDc6c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTQ4LXtcbi0tXG5tbS9wYWdlX2lvLmM9NDUxPXZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy00NzgtXG5tbS9wYWdlX2lvLmM6NDc5Olx0aWYgKHpzd2FwX2xvYWQoZm9saW8pICE9IC1FTk9FTlQpXG5tbS9wYWdlX2lvLmMtNDgwLVx0XHRnb3RvIGZpbmlzaDtcbi0tXG5tbS96c3dhcC5jPTE1MTM9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTU5OS0vKipcbm1tL3pzd2FwLmM6MTYwMDogKiB6c3dhcF9sb2FkKCkgLSBsb2FkIGEgZm9saW8gZnJvbSB6c3dhcFxubW0venN3YXAuYy0xNjAxLSAqIEBmb2xpbzogZm9saW8gdG8gbG9hZFxuLS1cbm1tL3pzd2FwLmMtMTYxOC0gKi9cbm1tL3pzd2FwLmM6MTYxOTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNjIwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBgenN3YXBfaW52YWxpZGF0ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYHpzd2FwX2ludmFsaWRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc2l0dWF0ZSBpdCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHpzd2FwJiMzOTtzIG9wZXJhdGlvbiwgcGFydGljdWxhcmx5IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkYXRhIGludGVncml0eS4gSSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCBjb21wcmVzc2VkIGRhdGEgcmVzaWRpbmcgaW4genN3YXAgZG9lc24mIzM5O3QgbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMgb3IgY29ycnVwdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIG1lbW9yeS4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSBjYWNoZSwgc3dhcCBjYWNoZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcmVjbGFpbS4gSSYjMzk7bSBpbWFnaW5pbmcgc2NlbmFyaW9zIGludm9sdmluZyBwYWdlIGZhdWx0cywgd3JpdGViYWNrLCBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIHRvIGRpc2NhcmQgb3IgcmUtcmVhZCBkYXRhIHdoZW4gdGhlIHpzd2FwIGJhY2tpbmcgc3RvcmUgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuCgpJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggaXRzIGxpa2VseSByZXNwb25zaWJpbGl0aWVzOiBpbnZhbGlkYXRpbmcgenN3YXAgZW50cmllcyBmb3IgcGFnZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkIGluIHBoeXNpY2FsIG1lbW9yeSwgY2xlYW5pbmcgdXAgdGhlIGNvbXByZXNzZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHVwIHNwYWNlIHdpdGhpbiB0aGUgenN3YXAgcG9vbC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBwYXJ0aWN1bGFybHkgaG93IGl0IGFmZmVjdHMgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzIHdoZW4gcGFnZXMgZ2V0IHJlLWFjY2Vzc2VkIG9yIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgdGhlIGRlbGljYXRlIGJhbGFuY2UgYmV0d2VlbiBjb21wcmVzc2VkIGRhdGEgYmVpbmcgcHJlc2VudCBvbiBkaXNrLCBhbmQgdGhlIHVuZGVybHlpbmcgcGFnZXMgc3RpbGwgYmVpbmcgdmFsaWQuCgpJJiMzOTttIGV4cGVjdGluZyB0byBsb29rIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIOKAkyB3aGF0IGhhcHBlbnMgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgY29uY3VycmVudGx5IGFjY2Vzc2luZyB0aGUgc2FtZSBwYWdlcyBvciB0aGUgenN3YXAgcG9vbD8gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBIb3cgYXJlIHJhY2UgY29uZGl0aW9ucyBoYW5kbGVkIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uPyBXaGF0IGFib3V0IGludGVycnVwdCBoYW5kbGVycz8KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIHNhZmV0eSBjaGVja3MuIEkmIzM5O20gaG9waW5nIHRvIHNlZSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aHMgYW5kIHJvYnVzdCBtZWNoYW5pc21zIHRvIGRlYWwgd2l0aCB1bmV4cGVjdGVkIHNpdHVhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCB0aGV5IHNpZ25hbC4gQW5kIGhvdyBpdCBoYW5kbGVzIGNvbmRpdGlvbnMgbGlrZSBvdXQtb2YtbWVtb3J5IG9yIGNvcnJ1cHRpb24uIEkga25vdyB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxpa2UgdGhpcywgc28gSSB3aWxsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hhdCBoYXBwZW5zIGR1cmluZyBhIGB6c3dhcF9pbnZhbGlkYXRlYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9pbnZhbGlkYXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0yOT1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaDozMDp2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zMS1pbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDc9c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaC01MS1cbmluY2x1ZGUvbGludXgvenN3YXAuaDo1MjpzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTMtc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTMxNj1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbi0tXG5tbS9zd2FwZmlsZS5jLTEzMjMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbm1tL3N3YXBmaWxlLmM6MTMyNDpcdFx0enN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnkoc2ktXHUwMDNldHlwZSwgb2Zmc2V0ICYjNDM7IGkpKTtcbm1tL3N3YXBmaWxlLmMtMTMyNS1cbi0tXG5tbS96c3dhcC5jPTE2MTk9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE2NzEtXG5tbS96c3dhcC5jOjE2NzI6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbm1tL3pzd2FwLmMtMTY3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzA0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHpzd2FwIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHdoaWNoIHN5bWJvbHMgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kLCB0aGVyZWZvcmUsIHdoaWNoIG9uZXMgSSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHplcm9pbmcgaW4gb246IGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgenN3YXBfc3dhcG9uYCwgYW5kIGB6c3dhcF9zd2Fwb2ZmYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgaWxsdXN0cmF0ZSB0aGUgY2hhbmdlcy4KCkZ1bmN0aW9uYWxseSwgSSB1bmRlcnN0YW5kIHRoYXQgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIGhvdyB6c3dhcCBlbnRyaWVzIHN0b3JlIHRoZSBwb29sIHJlZmVyZW5jZSwgd2hpY2ggaXMgYSBrZXkgc3RydWN0dXJhbCBzaGlmdC4gUmVwbGFjaW5nIHRoZSBwb2ludGVyIHdpdGggYW4gaW5kZXggaW50byBhbiB4YXJyYXkgaXMgZGVmaW5pdGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhlIHJhbWlmaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQsIGFuZCBJIHdhbnQgdG8gZXhwb3NlIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMgaGVyZS4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gZnV6emluZywgSSB3YW50IHRvIGNvbmZpcm0gSSYjMzk7dmUgZ290IGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19aU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBfREVGQVVMVF9PTmAgYXJlIHNldCBjb3JyZWN0bHksIGFuZCB0aGF0IGBDT05GSUdfU1dBUGAsIGFzIHRoZSBwYXJlbnQgY29uZmlnLCBpcyBhbHNvIHByb3Blcmx5IGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gYmUgdGhvcm91Z2ggdXBmcm9udCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24gWlNXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0zNT1jb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTM4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbm1tL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTQ4LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbm1tL0tjb25maWctNjAtXHRwcm9tcHQgXCYjMzQ7RGVmYXVsdCBjb21wcmVzc29yXCYjMzQ7XG5tbS9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy02Mi1cdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xuLS1cbm1tL0tjb25maWc9MTE0PWNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbm1tL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTExNy0gICAgICAgZGVmYXVsdCBcJiMzNDtkZWZsYXRlXCYjMzQ7IGlmIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25jZXB0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gWlNXQVAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY29yZSBvZiB0aGlzLiBXaGVuIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHpzd2FwLCB0aGUgdHdvIGJpZyBwbGF5ZXJzIHRoYXQgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kIGFyZSBgWlNXQVBgIGl0c2VsZiBhbmQgYFpTV0FQX0RFRkFVTFRfT05gLiBUaG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGZsYWdzIHRoYXQgY29udHJvbCBpdHMgYmVoYXZpb3IsIHRoZSBtYWluIGxldmVycyB3ZSBoYXZlIHRvIHB1bGwuCgpOb3csIHdoZXJlIGRvIHRob3NlIGxldmVycyBjb25uZWN0PyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggenN3YXAuIEkmIzM5O2QgYmV0dGVyIGNoZWNrIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBlbmRwb2ludHMg4oCTIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIHRoZSBvbi9vZmYgc3dpdGNoZXMgdGhhdCBtYWtlIHpzd2FwIGFjdGl2ZSBvciBpbmFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yaywgaG93IHRoZXkmIzM5O3JlIGltcGxlbWVudGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBLbm93aW5nIHRoZSBjb250cm9sIHBvaW50cyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgYXJjaGl0ZWN0dXJlLiBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBaU1dBUCBhbmQgY29uc2lkZXIgdGhlIHdpZGVyIHN5c3RlbSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9zd2Fwb25cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTMwPXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjMxOmludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTMyLXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTUyPXN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCkge31cbmluY2x1ZGUvbGludXgvenN3YXAuaDo1MzpzdGF0aWMgaW5saW5lIGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTQte1xuLS1cbm1tL3N3YXBmaWxlLmM9MzYwNj1TWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzc1OC1cbm1tL3N3YXBmaWxlLmM6Mzc1OTpcdGVycm9yID0genN3YXBfc3dhcG9uKHNpLVx1MDAzZXR5cGUsIG1heHBhZ2VzKTtcbm1tL3N3YXBmaWxlLmMtMzc2MC1cdGlmIChlcnJvcilcbi0tXG5tbS96c3dhcC5jPTE2NzI9dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbi0tXG5tbS96c3dhcC5jLTE2ODUtXG5tbS96c3dhcC5jOjE2ODY6aW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL3pzd2FwLmMtMTY4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjgwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFpzd2FwIFBhdGNoIEZvY3VzKioKCk9rYXksIHNvIHRoZSB0ZXh0IGlzIGd1aWRpbmcgbWUgdG93YXJkcyBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgb24gc3BlY2lmaWMgenN3YXAgZnVuY3Rpb25zLCBhbmQgSSB1bmRlcnN0YW5kIHdoeS4gVGhlIGNvbnRleHQgdGVsbHMgbWUgdGhhdCBgc3dhcG9uYCBhbmQgYHN3YXBvZmZgIHN5c2NhbGxzIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuIFRoaXMgcG9pbnRzIG1lIHRvIGtleSBzeW1ib2xzOiBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3N3YXBvbmAsIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBwb2ludHMgd2hlcmUgdGhlIG1vZGlmaWVkIGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBpdHMgbGlmZXRpbWUgbWFuYWdlbWVudCB3b3VsZCBiZSBtb3N0IGxpa2VseSB0byBleHBvc2UgYnVncy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgY2hhbmdpbmcgaG93IHRoZSB6c3dhcCBlbnRyeSwgc3BlY2lmaWNhbGx5IHRoZSBwb29sIHBvaW50ZXIsIGlzIGhhbmRsZWQuIE5vdywgaXQmIzM5O3MgYW4gYHUxNmAgaW5kZXggbWFwcGVkIHVzaW5nIGFuIHhhcnJheS4gVGhpcyBjaGFuZ2UgZnVuZGFtZW50YWxseSBpbXBhY3RzIGhvdyBwb29scyBhcmUgY3JlYXRlZCwgZGVzdHJveWVkLCBhbmQgaG93IGVudHJpZXMgd2l0aGluIHRoZSBwb29sIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBUaGUgcHJvdmlkZWQgcmVhc29uaW5nIG1ha2VzIHBlcmZlY3Qgc2Vuc2U6IGZ1enppbmcgdGhlc2UgbWFpbiBlbnRyeSBwb2ludHPigJR0aGUgY3JpdGljYWwgcGF0aCBmdW5jdGlvbnPigJRpcyBwYXJhbW91bnQgdG8gZW5zdXJlIHRoZSBuZXcgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgb3BlcmF0ZSBjb3JyZWN0bHkuCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfcG9vbF9jcmVhdGVgIGFuZCBgenN3YXBfcG9vbF9kZXN0cm95YCBhcmUgaW5kZWVkIHJlYWNoYWJsZSBmcm9tIHRoZSBmdW5jdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQgbm93LiBgenN3YXBfcG9vbF9jcmVhdGVgLCBmb3IgaW5zdGFuY2UsIGlzIGxpa2VseSBjYWxsZWQgd2hlbiBhIG5ldyBwb29sIGlzIG5lZWRlZCwgcGVyaGFwcyB3aGVuIHRoZSBjb21wcmVzc29yIGFsZ29yaXRobSBjaGFuZ2VzIG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGNsb3NlIGxvb2sgYXQgYHpzd2FwX3Bvb2xfY3JlYXRlYCB0byBjb25maXJtIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBjb3JlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfcG9vbF9jcmVhdGVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0yNjc9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcbi0tXG5tbS96c3dhcC5jLTI5NC1cbm1tL3pzd2FwLmM6Mjk1OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3Nvcilcbm1tL3pzd2FwLmMtMjk2LXtcbi0tXG5tbS96c3dhcC5jPTM3NT1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbi0tXG5tbS96c3dhcC5jLTM5MC1cbm1tL3pzd2FwLmM6MzkxOlx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYy0zOTItfVxuLS1cbm1tL3pzd2FwLmM9NTYxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTYwMy1cdGlmICghcG9vbClcbm1tL3pzd2FwLmM6NjA0Olx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTYwNS1cdGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyMwoJCQkJCQkJb3V0cHV0OiAxNTIKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWnN3YXAgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSB6c3dhcCBmdW5jdGlvbmFsaXR5LiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uIGlzIGtleS4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBtZW1vcnkgcG9vbCBmb3IgenN3YXAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBjcnVjaWFsbHksIGl0JiMzOTtzIGNhbGxlZCBpbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBzY2VuYXJpb3MuIEZpcnN0LCBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBzb21lb25lIGNoYW5nZXMgdGhlIGNvbXByZXNzb3IgdmlhIHN5c2ZzIHVzaW5nIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAuIFNlY29uZCwgYW5kIHByb2JhYmx5IG1vcmUgZnJlcXVlbnRseSwgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2tgIGlmIHRoZSBwb29sIGRvZXNuJiMzOTt0IGFscmVhZHkgZXhpc3QgYW5kIHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gc3RvcmUgYSBzd2FwIGVudHJ5IHZpYSBgenN3YXBfc3RvcmVgLgoKVGhpcyB0ZWxscyBtZSBmdXp6aW5nIGB6c3dhcF9zdG9yZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyaWdnZXIgYHpzd2FwX3Bvb2xfY3JlYXRlYC4gSXQmIzM5O3MgYSBkaXJlY3QgcGF0aCB0byBleGVyY2lzaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gY29kZS4gQW5kLCBhcyBhIHNlY29uZGFyeSBlbnRyeXBvaW50LCBJIGNhbiB1c2UgdGhlIHN5c2ZzIGNhbGxiYWNrIG1lY2hhbmlzbSBvZiBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgIGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3pzd2FwL3BhcmFtZXRlcnMvY29tcHJlc3NvcmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYW5vdGhlciwgc29tZXdoYXQgY29udHJvbGxlZCwgd2F5IHRvIGNhbGwgdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KClRoZXJlZm9yZSwgbXkgaW5pdGlhbCBmdXp6ZXIgc2V0dXAgd2lsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYHpzd2FwX3N0b3JlYC4gSSB3aWxsIGFsc28gaW5jb3Jwb3JhdGUgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXNlIGFyZSB0aGUgY29yZSB6c3dhcCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZGF0YSBtb3ZlbWVudCBhbmQgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHN3YXAgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSwgYXMgYHpzd2FwX3N0b3JlYCBkb2VzbiYjMzk7dCBleGlzdCBpbiBpc29sYXRpb247IGl0IGhhcyB0byBiZSBwYWlyZWQgd2l0aCBgenN3YXBfbG9hZGAgKG9yIGF0IGxlYXN0IHVzZWQgdG8gc2V0dXAgc3RhdGUgdG8gdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMpLgoKVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHNldC1yZXN1bHRzIGFwcHJvYWNoLCB3aGVyZSBJIGNhbiBtb25pdG9yIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIGFuZCBzZWUgaWYgYW55dGhpbmcgaXMgYW1pc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O3pzd2FwX3N3YXBvbiYjMzQ7LAogICAgJiMzNDt6c3dhcF9zd2Fwb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHpzd2FwIGxvZ2ljIGJ5IHJlcGxhY2luZyB0aGUgcG9vbCBwb2ludGVyIGluIHpzd2FwX2VudHJ5IHdpdGggYSB1MTYgaW5kZXggbWFwcGVkIHZpYSBhbiB4YXJyYXkuIFRoaXMgYWZmZWN0cyBwb29sIGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgZW50cnkgYWxsb2NhdGlvbiwgYW5kIGZyZWVpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIHpzd2FwIGVudHJ5IHBvaW50cyB0byBlbnN1cmUgdGhlIG5ldyBpbmRleC1iYXNlZCBwb29sIGxvb2t1cCBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zd2Fwb24mIzM0OywKICAgICYjMzQ7enN3YXBfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzowNS4zNTE1MDA1MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE4NTgwNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb25cIixcbiAgICBcInpzd2FwX3N3YXBvZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjA1LjM1MTUwNTMzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MzEwNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGM0M2Y1Mzc4YmI2ZDdiZTNjNDI2ZTQyMThhOTIyMDlmOTc2ODA1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNTozMzowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDRlNzZhNGE4N2NkY2MwLi42YzI5MDk4ZGE4ZDVlYSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0zNSw2ICszNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXJyYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbkBAIC0xNTcsOSArMTU4LDIyIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xcbitcXHR1MTYgaWR4O1xcbiBcXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xcbiB9O1xcbiBcXG4rLypcXG4rICogRW50cmllcyBzdG9yZSBhIHUxNiBwb29sIGluZGV4IGluc3RlYWQgb2YgYW4gOC1ieXRlIHBvb2wgcG9pbnRlci5cXG4rICogSW5kaWNlcyBhcmUgYWxsb2NhdGVkIGhlcmUgYXQgcG9vbCBjcmVhdGlvbiBhbmQgcmVsZWFzZWQgYXQgZGVzdHJ1Y3Rpb24uXFxuKyAqIExpdmUgZW50cmllcyBwaW4gdGhlIHBvb2wsIHNvIGl0cyBpbmRleCBpcyBub3QgcmV1c2VkIHVuZGVyIHRoZW0uXFxuKyAqL1xcbitzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyh6c3dhcF9wb29sc194YSk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfYnlfaW5kZXgodTE2IGlkeClcXG4re1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2enN3YXBfcG9vbHNfeGEsIGlkeCk7XFxuK31cXG4rXFxuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcXG4gXFxuQEAgLTE4Miw3ICsxOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcXG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXFxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXFxuKyAqIHBvb2xfaWR4IC0genN3YXBfcG9vbCBpbmRleCwgcmVzb2x2ZWQgdmlhIHpzd2FwX3Bvb2xfYnlfaW5kZXgoKS5cXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXFxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xcbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cXG5AQCAtMTkxLDEyICsyMDUsMjAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcXG4gXFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuIFxcdGJvb2wgcmVmZXJlbmNlZDtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuK1xcdHUxNiBwb29sX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XFxuIH07XFxuIFxcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX3Bvb2xfYnlfaW5kZXgoZW50cnktXFx1MDAzZXBvb2xfaWR4KTtcXG4rXFxuK1xcdFZNX1dBUk5fT05fT05DRSghcG9vbCk7XFxuK1xcdHJldHVybiBwb29sO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XFxuIFxcbkBAIC0yNzUsNiArMjk3LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbiBcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4gXFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFxcXDAgKi9cXG4gXFx0aW50IHJldCwgY3B1O1xcbitcXHR1MzIgaWR4O1xcbiBcXG4gXFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuQEAgLTMyMiwxMCArMzQ1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4gXFx0XFx0Z290byByZWZfZmFpbDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbiBcXG4rXFx0cmV0ID0geGFfYWxsb2MoXFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBcXHUwMDI2aWR4LCBwb29sLCB4YV9saW1pdF8xNmIsXFxuK1xcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBpZHhfZmFpbDtcXG4rXFx0cG9vbC1cXHUwMDNlaWR4ID0gaWR4O1xcbitcXG4gXFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiY3JlYXRlZFxcXCIsIHBvb2wpO1xcbiBcXG4gXFx0cmV0dXJuIHBvb2w7XFxuIFxcbitpZHhfZmFpbDpcXG4rXFx0cGVyY3B1X3JlZl9leGl0KFxcdTAwMjZwb29sLVxcdTAwM2VyZWYpO1xcbiByZWZfZmFpbDpcXG4gXFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcXHUwMDI2cG9vbC1cXHUwMDNlbm9kZSk7XFxuIFxcbkBAIC0zNjYsNiArMzk3LDggQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiBcXG4gXFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiZGVzdHJveWluZ1xcXCIsIHBvb2wpO1xcbiBcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBwb29sLVxcdTAwM2VpZHgpO1xcbitcXG4gXFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcXHUwMDI2cG9vbC1cXHUwMDNlbm9kZSk7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbkBAIC03NjQsOSArNzk3LDExIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4gICovXFxuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4ge1xcbitcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xcbitcXG4gXFx0enN3YXBfbHJ1X2RlbChcXHUwMDI2enN3YXBfbGlzdF9scnUsIGVudHJ5KTtcXG4tXFx0enNfZnJlZShlbnRyeS1cXHUwMDNlcG9vbC1cXHUwMDNlenNfcG9vbCwgZW50cnktXFx1MDAzZWhhbmRsZSk7XFxuLVxcdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVxcdTAwM2Vwb29sKTtcXG4rXFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XFxuIFxcdGlmIChlbnRyeS1cXHUwMDNlb2JqY2cpIHtcXG4gXFx0XFx0b2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS1cXHUwMDNlb2JqY2csIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbiBcXHRcXHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cXHUwMDNlb2JqY2cpO1xcbkBAIC05MjMsNyArOTU4LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cXHUwMDNlcG9vbDtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcXG4gXFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG5AQCAtOTY0LDcgKzk5OSw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXFxcIkRlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LVxcdTAwM2UlZClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF90eXBlKGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF9vZmZzZXQoZW50cnktXFx1MDAzZXN3cGVudHJ5KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZXBvb2wtXFx1MDAzZXRmbV9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwb29sLVxcdTAwM2V0Zm1fbmFtZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZWxlbmd0aCwgZGxlbik7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xNDU3LDcgKzE0OTIsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXFxuIFxcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXFxuIFxcdCAqL1xcbi1cXHRlbnRyeS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuK1xcdGVudHJ5LVxcdTAwM2Vwb29sX2lkeCA9IHBvb2wtXFx1MDAzZWlkeDtcXG4gXFx0ZW50cnktXFx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcXG4gXFx0ZW50cnktXFx1MDAzZW9iamNnID0gb2JqY2c7XFxuIFxcdGVudHJ5LVxcdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MDYuMDIwNjU5NDk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1MTY2MzUxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfc3dhcG9uXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgenN3YXAgbG9naWMgYnkgcmVwbGFjaW5nIHRoZSBwb29sIHBvaW50ZXIgaW4genN3YXBfZW50cnkgd2l0aCBhIHUxNiBpbmRleCBtYXBwZWQgdmlhIGFuIHhhcnJheS4gVGhpcyBhZmZlY3RzIHBvb2wgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbnRyeSBhbGxvY2F0aW9uLCBhbmQgZnJlZWluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4genN3YXAgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSB0aGUgbmV3IGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzQzZjUzNzhiYjZkN2JlM2M0MjZlNDIxOGE5MjIwOWY5NzY4MDVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDU6MzM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNGU3NmE0YTg3Y2RjYzAuLjZjMjkwOThkYThkNWVhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTM1LDYgKzM1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG5AQCAtMTU3LDkgKzE1OCwyMiBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHUxNiBpZHg7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4rLypcbisgKiBFbnRyaWVzIHN0b3JlIGEgdTE2IHBvb2wgaW5kZXggaW5zdGVhZCBvZiBhbiA4LWJ5dGUgcG9vbCBwb2ludGVyLlxuKyAqIEluZGljZXMgYXJlIGFsbG9jYXRlZCBoZXJlIGF0IHBvb2wgY3JlYXRpb24gYW5kIHJlbGVhc2VkIGF0IGRlc3RydWN0aW9uLlxuKyAqIExpdmUgZW50cmllcyBwaW4gdGhlIHBvb2wsIHNvIGl0cyBpbmRleCBpcyBub3QgcmV1c2VkIHVuZGVyIHRoZW0uXG4rICovXG4rc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoenN3YXBfcG9vbHNfeGEpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9ieV9pbmRleCh1MTYgaWR4KVxuK3tcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBpZHgpO1xuK31cbitcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xODIsNyArMTk2LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcbiAgKiAgICAgICAgICAgICAgbG9naWMgaWYgcmVmZXJlbmNlZCBpcyB1bnNldC4gU2VlIGNvbW1lbnRzIGluIHRoZSBzaHJpbmtlclxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LlxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXG4rICogcG9vbF9pZHggLSB6c3dhcF9wb29sIGluZGV4LCByZXNvbHZlZCB2aWEgenN3YXBfcG9vbF9ieV9pbmRleCgpLlxuICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YVxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCdzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxuQEAgLTE5MSwxMiArMjA1LDIwIEBAIHN0cnVjdCB6c3dhcF9lbnRyeSB7XG4gXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbiBcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gXHRib29sIHJlZmVyZW5jZWQ7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbitcdHUxNiBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbit7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX3Bvb2xfYnlfaW5kZXgoZW50cnktXHUwMDNlcG9vbF9pZHgpO1xuK1xuK1x0Vk1fV0FSTl9PTl9PTkNFKCFwb29sKTtcbitcdHJldHVybiBwb29sO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBcbkBAIC0yNzUsNiArMjk3LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHRjaGFyIG5hbWVbMzhdOyAvKiAnenN3YXAnICsgMzIgY2hhciAobWF4KSBudW0gKyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbitcdHUzMiBpZHg7XG4gXG4gXHRpZiAoIXpzd2FwX2hhc19wb29sIFx1MDAyNlx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMzIyLDEwICszNDUsMTggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiBcbitcdHJldCA9IHhhX2FsbG9jKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBcdTAwMjZpZHgsIHBvb2wsIHhhX2xpbWl0XzE2YixcbitcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBpZHhfZmFpbDtcbitcdHBvb2wtXHUwMDNlaWR4ID0gaWR4O1xuK1xuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcImNyZWF0ZWRcIiwgcG9vbCk7XG4gXG4gXHRyZXR1cm4gcG9vbDtcbiBcbitpZHhfZmFpbDpcbitcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzY2LDYgKzM5Nyw4IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJkZXN0cm95aW5nXCIsIHBvb2wpO1xuIFxuK1x0eGFfZXJhc2UoXHUwMDI2enN3YXBfcG9vbHNfeGEsIHBvb2wtXHUwMDNlaWR4KTtcbitcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG5AQCAtNzY0LDkgKzc5NywxMSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4rXG4gXHR6c3dhcF9scnVfZGVsKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuK1x0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4rXHR6c3dhcF9wb29sX3B1dChwb29sKTtcbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZykge1xuIFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVx1MDAzZW9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuIFx0XHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cdTAwM2VvYmpjZyk7XG5AQCAtOTIzLDcgKzk1OCw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGVudHJ5LVx1MDAzZXBvb2w7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4O1xuQEAgLTk2NCw3ICs5OTksNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRwcl9hbGVydF9yYXRlbGltaXRlZChcIkRlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LVx1MDAzZSVkKVxcblwiLFxuIFx0XHRcdFx0XHRcdHN3cF90eXBlKGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbiBcdFx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbi1cdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXRmbV9uYW1lLFxuK1x0XHRcdFx0XHRcdHBvb2wtXHUwMDNldGZtX25hbWUsXG4gXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlbGVuZ3RoLCBkbGVuKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTQ1Nyw3ICsxNDkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdCAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmdcbiBcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXG4gXHQgKi9cbi1cdGVudHJ5LVx1MDAzZXBvb2wgPSBwb29sO1xuK1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjA2LjAyMDY2MDkyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Njg3OTE1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWnN3YXAgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3pzd2FwLmNgLiBJdCdzIGEgcHJldHR5IGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4gRXNzZW50aWFsbHksIHRoZXkncmUgc3dhcHBpbmcgb3V0IGEgZnVsbCA4LWJ5dGUgcG9pbnRlciwgdGhlIGBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbGAgd2l0aGluIHRoZSBgc3RydWN0IHpzd2FwX2VudHJ5YCwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGEgYHUxNiBwb29sX2lkeGAuIFRoYXQncyBhIHNpZ25pZmljYW50IHNpemUgcmVkdWN0aW9uLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwsIHdoZXJlIGV2ZXJ5IGJ5dGUgY291bnRzLiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBhbiB4YXJyYXksIGB6c3dhcF9wb29sc194YWAsIHRvIGhhbmRsZSB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZXNlIGBwb29sX2lkeGAgdmFsdWVzIGFuZCB0aGUgYWN0dWFsIGBzdHJ1Y3QgenN3YXBfcG9vbGAgcG9pbnRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIHBhcnQgb2YgenN3YXAsIG5vdCBqdXN0IHNvbWUgdHJpdmlhbCBhZGp1c3RtZW50LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBac3dhcCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGtlcm5lbCBjb25maWcsIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGEgc3BlY2lmaWMgb3B0aW9uIHRvIGJlIHR1cm5lZCBvbj8gSSdsbCBydW4gYGdyZXBwZXJgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgWlNXQVBgLiBUaGF0IHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IGFuZCBzY29wZSBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjcyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MDkuODg5NDU1NTk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODUxMDUzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjEyLjY3NDU2NjM3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzY3NDQ4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QsIGFzc3VtaW5nIEknbSBidWlsZGluZyBhIGtlcm5lbDpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgWnN3YXAgVGVzdGluZyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBlbnN1cmUgdGhhdCB6c3dhcCBpcyB0aG9yb3VnaGx5IHRlc3RlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBlbmFibGVkLCBzcGVjaWZpY2FsbHkgYENPTkZJR19aU1dBUGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2Ug4oCTIHdpdGhvdXQgdGhhdCwgdGhlcmUncyBubyB6c3dhcCB0byB0ZXN0LiBBbmQsIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIGFuZCBndWFyYW50ZWUgaXQncyBhY3R1YWxseSBydW5uaW5nLCBJJ20gbGVhbmluZyB0b3dhcmRzIGFsc28gZW5hYmxpbmcgYENPTkZJR19aU1dBUF9ERUZBVUxUX09OYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gaGF2ZSB6c3dhcCBhY3RpdmUgYnkgZGVmYXVsdCBkdXJpbmcgaW5pdGlhbCB0ZXN0aW5nIGFuZCB0byBjb25maXJtIHRoZSBleHBlY3RlZCBiZWhhdmlvci5cblxuT2YgY291cnNlLCB3ZSdsbCBuZWVkIHJlZ3VsYXIgc3dhcCBzdXBwb3J0LCB3aGljaCBpcyBgQ09ORklHX1NXQVBgLiBJdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCBleHBsaWNpdGx5LiBJdCdkIGJlIGZvb2xpc2ggdG8gb3Zlcmxvb2sgdGhhdC5cblxuU28sIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcsIG15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyBgWlNXQVBgLiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkLCBvciB0aGF0IGltcGFjdCBpdHMgYmVoYXZpb3IsIHRoYXQgSSdtIG92ZXJsb29raW5nPyBUaW1lIHRvIGdldCBncmFudWxhciB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYyMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjE2LjUxMTMxNDExMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyNzY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MTYuNjMwNTk0OTY4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNzExMDMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IGZlZWxpbmcgc2F5cyB0aGUgY29yZSBpcyBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IGFyb3VuZCBsaW5lIDIyIOKAkyB0aGF0J3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLiBJdCdzIGEgYnJvYWQgYXJlYSwgc28gemVyb2luZyBpbiBsaWtlIHRoaXMgaGVscHMuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZC4gSG9wZWZ1bGx5LCBpdCBpcyBub3QgdG9vIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzoxOS4zMzc3MDY2OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MTkuMzM3ODE1NTkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NjkxMDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipac3dhcCBGb2N1cyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBaU1dBUGAgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCBhcmUgaW4gcGxheSwgZ29vZC4gTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgcmVhbCB0YXJnZXRzIGZvciBmdXp6aW5nIGhlcmU/IFRoZSBwYXRjaCBwb2ludHMgdG8gbW9kaWZpY2F0aW9ucyBpbiBgenN3YXBfcG9vbF9jcmVhdGVgLCBgenN3YXBfcG9vbF9kZXN0cm95YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBgenN3YXBfc3RvcmVfcGFnZWAuXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS96c3dhcC5jYC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvc2VkIGFzIEFQSSBlbnRyeSBwb2ludHMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgZm9yIGZ1enppbmcgd2lsbCBsaWUuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzoyMy4wOTQ3Mjg5OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE0NzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP1thLXpfXSsgenN3YXBfW2Etel9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz03OT1zdGF0aWMgYm9vbCB6c3dhcF9wb29sX3JlYWNoZWRfZnVsbDtcXG4tLVxcbm1tL3pzd2FwLmMtODYtXFxubW0venN3YXAuYzo4NzpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xcbm1tL3pzd2FwLmMtODgtXFxuLS1cXG5tbS96c3dhcC5jPTkxPXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jOjkyOnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbm1tL3pzd2FwLmMtOTMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTAxPXN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5tbS96c3dhcC5jOjEwMjpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcXG5tbS96c3dhcC5jLTEwMy1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopO1xcbi0tXFxubW0venN3YXAuYz0xMjQ9bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcbm1tL3pzd2FwLmMtMTI1LVxcbm1tL3pzd2FwLmM6MTI2OmJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTI3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTMwLVxcbm1tL3pzd2FwLmM6MTMxOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMyLXtcXG4tLVxcbm1tL3pzd2FwLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0zOTMtXFxubW0venN3YXAuYzozOTQ6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtMzk1LXtcXG4tLVxcbm1tL3pzd2FwLmM9NDQ4PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbi0tXFxubW0venN3YXAuYy00NTYtLyogVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZS4gKi9cXG5tbS96c3dhcC5jOjQ1NzpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2dldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5tbS96c3dhcC5jLTQ1OC17XFxuLS1cXG5tbS96c3dhcC5jLTQ2MS1cXG5tbS96c3dhcC5jOjQ2MjpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX3B1dChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5tbS96c3dhcC5jLTQ2My17XFxuLS1cXG5tbS96c3dhcC5jPTUyOT11bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTU0MS1cXG5tbS96c3dhcC5jOjU0MjpzdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcXG5tbS96c3dhcC5jLTU0My17XFxuLS1cXG5tbS96c3dhcC5jLTU2MC1cXG5tbS96c3dhcC5jOjU2MTpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxubW0venN3YXAuYy01NjIte1xcbi0tXFxubW0venN3YXAuYy02NDktXFxubW0venN3YXAuYzo2NTA6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXFxubW0venN3YXAuYy02NTEtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS96c3dhcC5jPTY5Nj1zdGF0aWMgaW5saW5lIGludCBlbnRyeV90b19uaWQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtNzAwLVxcbm1tL3pzd2FwLmM6NzAxOnN0YXRpYyB2b2lkIHpzd2FwX2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpsaXN0X2xydSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTcwMi17XFxuLS1cXG5tbS96c3dhcC5jLTcyMy1cXG5tbS96c3dhcC5jOjcyNDpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbGlzdF9scnUsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03MjUte1xcbi0tXFxubW0venN3YXAuYy03MzUtXFxubW0venN3YXAuYzo3MzY6dm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0venN3YXAuYy03Mzcte1xcbi0tXFxubW0venN3YXAuYy03NDAtXFxubW0venN3YXAuYzo3NDE6dm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTc0Mi17XFxuLS1cXG5tbS96c3dhcC5jLTc2Mi0gKi9cXG5tbS96c3dhcC5jOjc2Mzp2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0venN3YXAuYy03NjQte1xcbi0tXFxubW0venN3YXAuYz03ODA9c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxcbi0tXFxubW0venN3YXAuYy03ODgtXFxubW0venN3YXAuYzo3ODk6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbm1tL3pzd2FwLmMtNzkwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNzk3LSAqL1xcbm1tL3pzd2FwLmM6Nzk4OnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc5OS17XFxuLS1cXG5tbS96c3dhcC5jLTgxNy0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6ODE4OnN0YXRpYyBpbnQgenN3YXBfY3B1X2NvbXBfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSlcXG5tbS96c3dhcC5jLTgxOS17XFxuLS1cXG5tbS96c3dhcC5jLTg3NC1cXG5tbS96c3dhcC5jOjg3NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTg3Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4tLVxcbm1tL3pzd2FwLmMtOTU4LVxcbm1tL3pzd2FwLmM6OTU5OnN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTk2MC17XFxuLS1cXG5tbS96c3dhcC5jLTEwMjEtICovXFxubW0venN3YXAuYzoxMDIyOnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy0xMDIzLVxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmM9MTM0Mz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL3pzd2FwLmMtMTQzMi1cXG5tbS96c3dhcC5jOjE0MzM6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS96c3dhcC5jLTE0MzQtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS96c3dhcC5jLTE1MTItXFxubW0venN3YXAuYzoxNTEzOmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTE1MTQte1xcbi0tXFxubW0venN3YXAuYy0xNjE4LSAqL1xcbm1tL3pzd2FwLmM6MTYxOTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTYyMC17XFxuLS1cXG5tbS96c3dhcC5jLTE2NzEtXFxubW0venN3YXAuYzoxNjcyOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0xNjczLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTY4NS1cXG5tbS96c3dhcC5jOjE2ODY6aW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5tbS96c3dhcC5jLTE2ODcte1xcbi0tXFxubW0venN3YXAuYy0xNzA1LVxcbm1tL3pzd2FwLmM6MTcwNjp2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpXFxubW0venN3YXAuYy0xNzA3LXtcXG4tLVxcbm1tL3pzd2FwLmM9MTc1MD1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzX2ZvcHMsXFxuLS1cXG5tbS96c3dhcC5jLTE3NTItXFxubW0venN3YXAuYzoxNzUzOnN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxubW0venN3YXAuYy0xNzU0LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTc4Ni0jZWxzZVxcbm1tL3pzd2FwLmM6MTc4NzpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc4OC17XFxuLS1cXG5tbS96c3dhcC5jLTE3OTUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjE3OTY6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjIzLjIzMjg4MDk3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ3OTA5OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgWnN3YXA6IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHpzd2FwIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBXZSd2ZSBnb3QgdGhlIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50czogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gLCBhbmQgYHpzd2FwX3N3YXBvZmZgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcywgdGhlIG9uZXMgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGguXG5cbk5vdywgZ2xhbmNpbmcgYXQgdGhlIHBhdGNoLCBpdCBzZWVtcyB0byBiZSB0b3VjaGluZyBmdW5jdGlvbnMgbGlrZSBgenN3YXBfcG9vbF9jcmVhdGVgLCBgenN3YXBfcG9vbF9kZXN0cm95YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBgenN3YXBfc3RvcmVfcGFnZWAuIFRoZXNlIHNlZW0gdG8gYmUgbW9zdGx5IHN0YXRpYyBoZWxwZXJzLiBCdXQgSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIG5vdzogYHpzd2FwX3N0b3JlYCBpcyBjYWxsaW5nIGB6c3dhcF9zdG9yZV9wYWdlYC4gYHpzd2FwX2xvYWRgIHJlbGllcyBvbiBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBgenN3YXBfaW52YWxpZGF0ZWAgY2FsbHMgYHpzd2FwX2VudHJ5X2ZyZWVgLlxuXG5UaGVyZWZvcmUsIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIGVmZmVjdGl2ZSBmdXp6aW5nIGlzIHRvIGZvY3VzIG9uIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYW5kIGB6c3dhcF9pbnZhbGlkYXRlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IG9yY2hlc3RyYXRlIHRoZSBjb3JlIG9wZXJhdGlvbnMsIGFuZCB3ZSBjYW4gdGVzdCB0aGUgaW5wdXRzIGFuZCBjb25kaXRpb25zIGZyb20gb3V0c2lkZS4gVGhlIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAgZW50cnkgcG9pbnRzIGFsc28gc2VlbSBsaWtlIGRlY2VudCBjaG9pY2VzIHRvIGluY2x1ZGUuXG5cbkkgd2lsbCB0YWtlIGEgbW9tZW50IHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfc3RvcmVgIGlzIGV4cG9ydGVkIGFuZCBhdmFpbGFibGUsIG9yIGRldGVybWluZSBob3cgaXQgY2FuIGJlIGFwcHJvcHJpYXRlbHkgaW52b2tlZC4gVGhpcyB3aWxsIHRoZW4gYWxsb3cgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU2NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzoyOC44ODA3OTk0NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzUxNTMxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc3RvcmVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mjc9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mjg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMjktaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDA9c3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDEtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjQyOnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC00My17XFxuLS1cXG5tbS9wYWdlX2lvLmM9MjAzPWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTIzNi1cXG5tbS9wYWdlX2lvLmM6MjM3OlxcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcXG5tbS9wYWdlX2lvLmMtMjM4LVxcdFxcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTU5PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTAxNi0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjEwMTc6ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxcbm1tL3pzd2FwLmMtMTAxOC0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cXG4tLVxcbm1tL3pzd2FwLmM9MTQzMz1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNTEyLVxcbm1tL3pzd2FwLmM6MTUxMzpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MzEuNTE1OTU3OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NTM3MzMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqWnN3YXAgRnVuY3Rpb24gQ2FsbHMgXHUwMDI2IEludmFsaWRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgbXkgbWVudGFsIG1hcCBvZiB0aGUgenN3YXAgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgaXMgYmVpbmcgcmVmcmVzaGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNhbGwgZmxvdyBub3cuIFJpZ2h0LCBzbyBgenN3YXBfc3RvcmVgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcHV0dGluZyBwYWdlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGNhY2hlLCBhbmQgSSByZW1lbWJlciB0aGF0J3MgdHJpZ2dlcmVkIGZyb20gYHN3YXBfd3JpdGVvdXRgIGluIGBtbS9wYWdlX2lvLmNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGFzIHBhZ2VzIGFyZSB3cml0dGVuIG91dCB0byB0aGUgc3dhcCBwYXJ0aXRpb24sIHRoZXkncmUgaW50ZXJjZXB0ZWQgYW5kIHBvdGVudGlhbGx5IGNvbXByZXNzZWQgaW4genN3YXAgZmlyc3QuIEdvb2QuXG5cbk5vdywgYHpzd2FwX2xvYWRgIGlzIG9idmlvdXNseSB0aGUgY291bnRlcnBhcnQsIHB1bGxpbmcgcGFnZXMgKmZyb20qIHpzd2FwLiBBbmQgdGhhdCwgYXMgZXhwZWN0ZWQsIGlzIGNhbGxlZCBmcm9tIGBzd2FwX3JlYWRfZm9saW9gLCBhbHNvIGluIGBtbS9wYWdlX2lvLmNgLiBUaGF0J3MgdGhlIHJlYWQgcGF0aCwgcmlnaHQ/IFdoZW4gdGhlIHN5c3RlbSBuZWVkcyBhIHBhZ2UgZnJvbSBzd2FwLCBpdCBjaGVja3MgenN3YXAgZmlyc3QuXG5cbkZpbmFsbHksIGB6c3dhcF9pbnZhbGlkYXRlYCBpcyBjYWxsZWQgdG8gcmVtb3ZlIG9yIGNsZWFyIGFuIGVudHJ5IGZyb20gdGhlIGNvbXByZXNzZWQgY2FjaGUsIHdoZW4gYSBwYWdlIG5lZWRzIHRvIGJlIHN3YXBwZWQgb3V0LCBmcmVlZCwgb3Igb3RoZXJ3aXNlIHJlbW92ZWQgZnJvbSB0aGUgc3dhcCBwYXJ0aXRpb24uIEkga25vdyB0aGF0J3MgdHJpZ2dlcmVkIGZyb20gYHN3YXBfZnJlZWAgb3IgYSBzaW1pbGFyIHN3YXAtcmVsYXRlZCBmdW5jdGlvbi4gR29vZC5cblxuU28sIHdoZXJlIGRvIEkgc3RhcnQgZGlnZ2luZyBpbiB0byBzZWUgaG93IGl0cyB3b3JraW5nPyBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGB6c3dhcF9sb2FkYCBhbmQgdGhlbiBgenN3YXBfaW52YWxpZGF0ZWAsIHRvIHJlbWluZCBteXNlbGYgaG93IHRob3NlIGZ1bmN0aW9ucyB3b3JrLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgYW0gdXAgdG8gc3BlZWQgd2l0aCBhbnkgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjM1LjY3MTMzNDUwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDIwNzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9sb2FkXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTI4PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjI5OmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zMC12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD00Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC00Ni1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NDc6c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC00OC17XFxuLS1cXG5tbS9wYWdlX2lvLmM9NDUxPXZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTQ3OC1cXG5tbS9wYWdlX2lvLmM6NDc5OlxcdGlmICh6c3dhcF9sb2FkKGZvbGlvKSAhPSAtRU5PRU5UKVxcbm1tL3BhZ2VfaW8uYy00ODAtXFx0XFx0Z290byBmaW5pc2g7XFxuLS1cXG5tbS96c3dhcC5jPTE1MTM9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTk5LS8qKlxcbm1tL3pzd2FwLmM6MTYwMDogKiB6c3dhcF9sb2FkKCkgLSBsb2FkIGEgZm9saW8gZnJvbSB6c3dhcFxcbm1tL3pzd2FwLmMtMTYwMS0gKiBAZm9saW86IGZvbGlvIHRvIGxvYWRcXG4tLVxcbm1tL3pzd2FwLmMtMTYxOC0gKi9cXG5tbS96c3dhcC5jOjE2MTk6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTE2MjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzozOC4wOTU1NDc0NjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzODcwNzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGB6c3dhcF9pbnZhbGlkYXRlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGUgYHpzd2FwX2ludmFsaWRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc2l0dWF0ZSBpdCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHpzd2FwJ3Mgb3BlcmF0aW9uLCBwYXJ0aWN1bGFybHkgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgaW50ZWdyaXR5LiBJIGtub3cgdGhpcyBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyB0aGF0IGNvbXByZXNzZWQgZGF0YSByZXNpZGluZyBpbiB6c3dhcCBkb2Vzbid0IGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzIG9yIGNvcnJ1cHRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBtZW1vcnkuIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHN3YXAgY2FjaGUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHJlY2xhaW0uIEknbSBpbWFnaW5pbmcgc2NlbmFyaW9zIGludm9sdmluZyBwYWdlIGZhdWx0cywgd3JpdGViYWNrLCBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIHRvIGRpc2NhcmQgb3IgcmUtcmVhZCBkYXRhIHdoZW4gdGhlIHpzd2FwIGJhY2tpbmcgc3RvcmUgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGl0cyBsaWtlbHkgcmVzcG9uc2liaWxpdGllczogaW52YWxpZGF0aW5nIHpzd2FwIGVudHJpZXMgZm9yIHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBpbiBwaHlzaWNhbCBtZW1vcnksIGNsZWFuaW5nIHVwIHRoZSBjb21wcmVzc2VkIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyB1cCBzcGFjZSB3aXRoaW4gdGhlIHpzd2FwIHBvb2wuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBwYXJ0aWN1bGFybHkgaG93IGl0IGFmZmVjdHMgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzIHdoZW4gcGFnZXMgZ2V0IHJlLWFjY2Vzc2VkIG9yIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgdGhlIGRlbGljYXRlIGJhbGFuY2UgYmV0d2VlbiBjb21wcmVzc2VkIGRhdGEgYmVpbmcgcHJlc2VudCBvbiBkaXNrLCBhbmQgdGhlIHVuZGVybHlpbmcgcGFnZXMgc3RpbGwgYmVpbmcgdmFsaWQuXG5cbkknbSBleHBlY3RpbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyDigJMgd2hhdCBoYXBwZW5zIHdpdGggbXVsdGlwbGUgcHJvY2Vzc2VzIGNvbmN1cnJlbnRseSBhY2Nlc3NpbmcgdGhlIHNhbWUgcGFnZXMgb3IgdGhlIHpzd2FwIHBvb2w/IEFyZSB0aGVyZSBsb2NrcyBpbnZvbHZlZD8gSG93IGFyZSByYWNlIGNvbmRpdGlvbnMgaGFuZGxlZCB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbj8gV2hhdCBhYm91dCBpbnRlcnJ1cHQgaGFuZGxlcnM/XG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3Igc2FmZXR5IGNoZWNrcy4gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGVycm9yIHBhdGhzIGFuZCByb2J1c3QgbWVjaGFuaXNtcyB0byBkZWFsIHdpdGggdW5leHBlY3RlZCBzaXR1YXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCB0aGV5IHNpZ25hbC4gQW5kIGhvdyBpdCBoYW5kbGVzIGNvbmRpdGlvbnMgbGlrZSBvdXQtb2YtbWVtb3J5IG9yIGNvcnJ1cHRpb24uIEkga25vdyB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxpa2UgdGhpcywgc28gSSB3aWxsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hhdCBoYXBwZW5zIGR1cmluZyBhIGB6c3dhcF9pbnZhbGlkYXRlYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6NDIuMjM0MjU3MTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMDgyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ludmFsaWRhdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mjk9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjMwOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zMS1pbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD00Nz1zdGF0aWMgaW5saW5lIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTEtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjUyOnN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCkge31cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTMtc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vc3dhcGZpbGUuYz0xMzE2PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzIzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxubW0vc3dhcGZpbGUuYzoxMzI0OlxcdFxcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKSk7XFxubW0vc3dhcGZpbGUuYy0xMzI1LVxcbi0tXFxubW0venN3YXAuYz0xNjE5PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE2NzEtXFxubW0venN3YXAuYzoxNjcyOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0xNjczLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6NDQuNjQ1MzQ0MzAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDgzMzQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHpzd2FwIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHdoaWNoIHN5bWJvbHMgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kLCB0aGVyZWZvcmUsIHdoaWNoIG9uZXMgSSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gemVyb2luZyBpbiBvbjogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gLCBhbmQgYHpzd2FwX3N3YXBvZmZgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBpbGx1c3RyYXRlIHRoZSBjaGFuZ2VzLlxuXG5GdW5jdGlvbmFsbHksIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBwYXRjaCBpcyBhbHRlcmluZyBob3cgenN3YXAgZW50cmllcyBzdG9yZSB0aGUgcG9vbCByZWZlcmVuY2UsIHdoaWNoIGlzIGEga2V5IHN0cnVjdHVyYWwgc2hpZnQuIFJlcGxhY2luZyB0aGUgcG9pbnRlciB3aXRoIGFuIGluZGV4IGludG8gYW4geGFycmF5IGlzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSByYW1pZmljYXRpb25zIGNvdWxkIGJlIHNpZ25pZmljYW50LCBhbmQgSSB3YW50IHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgdnVsbmVyYWJpbGl0aWVzIGhlcmUuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gZnV6emluZywgSSB3YW50IHRvIGNvbmZpcm0gSSd2ZSBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgcGF0Y2guIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1pTV0FQYCBhbmQgYENPTkZJR19aU1dBUF9ERUZBVUxUX09OYCBhcmUgc2V0IGNvcnJlY3RseSwgYW5kIHRoYXQgYENPTkZJR19TV0FQYCwgYXMgdGhlIHBhcmVudCBjb25maWcsIGlzIGFsc28gcHJvcGVybHkgZW5hYmxlZC4gQXJlIHRoZXJlIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaCB1cGZyb250IHRvIGF2b2lkIHdhc3RpbmcgdGltZSBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6NDguOTUzNjg1MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDY4ODAyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbiBaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjM3OlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxubW0vS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIFpTV0FQXFxubW0vS2NvbmZpZy00OC1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxubW0vS2NvbmZpZy02MC1cXHRwcm9tcHQgXFxcIkRlZmF1bHQgY29tcHJlc3NvclxcXCJcXG5tbS9LY29uZmlnOjYxOlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTYyLVxcdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbi0tXFxubW0vS2NvbmZpZz0xMTQ9Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5tbS9LY29uZmlnOjExNjogICAgICAgZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctMTE3LSAgICAgICBkZWZhdWx0IFxcXCJkZWZsYXRlXFxcIiBpZiBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzo1MS4xMDA1NzMwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1NDAzMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25jZXB0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBaU1dBUCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byB0aGUgY29yZSBvZiB0aGlzLiBXaGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgenN3YXAsIHRoZSB0d28gYmlnIHBsYXllcnMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQgYXJlIGBaU1dBUGAgaXRzZWxmIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAuIFRob3NlIGFyZSB0aGUgZnVuZGFtZW50YWwgZmxhZ3MgdGhhdCBjb250cm9sIGl0cyBiZWhhdmlvciwgdGhlIG1haW4gbGV2ZXJzIHdlIGhhdmUgdG8gcHVsbC5cblxuTm93LCB3aGVyZSBkbyB0aG9zZSBsZXZlcnMgY29ubmVjdD8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSAqZG8qIHNvbWV0aGluZyB3aXRoIHpzd2FwLiBJJ2QgYmV0dGVyIGNoZWNrIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGVuZHBvaW50cyDigJMgdGhlIGVudHJ5IGFuZCBleGl0IHBvaW50cywgdGhlIG9uL29mZiBzd2l0Y2hlcyB0aGF0IG1ha2UgenN3YXAgYWN0aXZlIG9yIGluYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrLCBob3cgdGhleSdyZSBpbXBsZW1lbnRlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gS25vd2luZyB0aGUgY29udHJvbCBwb2ludHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGFyY2hpdGVjdHVyZS4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgWlNXQVAgYW5kIGNvbnNpZGVyIHRoZSB3aWRlciBzeXN0ZW0gZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzo1NC45MTU5NzkyNzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDQ1NTU1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc3dhcG9uXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTMwPXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaDozMTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzItdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD01Mj1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjUzOnN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTQte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNjA2PVNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM3NTgtXFxubW0vc3dhcGZpbGUuYzozNzU5OlxcdGVycm9yID0genN3YXBfc3dhcG9uKHNpLVxcdTAwM2V0eXBlLCBtYXhwYWdlcyk7XFxubW0vc3dhcGZpbGUuYy0zNzYwLVxcdGlmIChlcnJvcilcXG4tLVxcbm1tL3pzd2FwLmM9MTY3Mj12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxcbi0tXFxubW0venN3YXAuYy0xNjg1LVxcbm1tL3pzd2FwLmM6MTY4NjppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3pzd2FwLmMtMTY4Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjU3LjQ2MDU0MDk0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODkyNzQ1NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFpzd2FwIFBhdGNoIEZvY3VzKipcblxuT2theSwgc28gdGhlIHRleHQgaXMgZ3VpZGluZyBtZSB0b3dhcmRzIGZvY3VzaW5nIG15IGZ1enppbmcgZWZmb3J0cyBvbiBzcGVjaWZpYyB6c3dhcCBmdW5jdGlvbnMsIGFuZCBJIHVuZGVyc3RhbmQgd2h5LiBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGF0IGBzd2Fwb25gIGFuZCBgc3dhcG9mZmAgc3lzY2FsbHMgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyB0byBjb25zaWRlci4gVGhpcyBwb2ludHMgbWUgdG8ga2V5IHN5bWJvbHM6IGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgenN3YXBfc3dhcG9uYCwgYW5kIGB6c3dhcF9zd2Fwb2ZmYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHBvaW50cyB3aGVyZSB0aGUgbW9kaWZpZWQgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGl0cyBsaWZldGltZSBtYW5hZ2VtZW50IHdvdWxkIGJlIG1vc3QgbGlrZWx5IHRvIGV4cG9zZSBidWdzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGNoYW5naW5nIGhvdyB0aGUgenN3YXAgZW50cnksIHNwZWNpZmljYWxseSB0aGUgcG9vbCBwb2ludGVyLCBpcyBoYW5kbGVkLiBOb3csIGl0J3MgYW4gYHUxNmAgaW5kZXggbWFwcGVkIHVzaW5nIGFuIHhhcnJheS4gVGhpcyBjaGFuZ2UgZnVuZGFtZW50YWxseSBpbXBhY3RzIGhvdyBwb29scyBhcmUgY3JlYXRlZCwgZGVzdHJveWVkLCBhbmQgaG93IGVudHJpZXMgd2l0aGluIHRoZSBwb29sIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBUaGUgcHJvdmlkZWQgcmVhc29uaW5nIG1ha2VzIHBlcmZlY3Qgc2Vuc2U6IGZ1enppbmcgdGhlc2UgbWFpbiBlbnRyeSBwb2ludHPigJR0aGUgY3JpdGljYWwgcGF0aCBmdW5jdGlvbnPigJRpcyBwYXJhbW91bnQgdG8gZW5zdXJlIHRoZSBuZXcgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgb3BlcmF0ZSBjb3JyZWN0bHkuXG5cbkknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHpzd2FwX3Bvb2xfY3JlYXRlYCBhbmQgYHpzd2FwX3Bvb2xfZGVzdHJveWAgYXJlIGluZGVlZCByZWFjaGFibGUgZnJvbSB0aGUgZnVuY3Rpb25zLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgbm93LiBgenN3YXBfcG9vbF9jcmVhdGVgLCBmb3IgaW5zdGFuY2UsIGlzIGxpa2VseSBjYWxsZWQgd2hlbiBhIG5ldyBwb29sIGlzIG5lZWRlZCwgcGVyaGFwcyB3aGVuIHRoZSBjb21wcmVzc29yIGFsZ29yaXRobSBjaGFuZ2VzIG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSdsbCB0YWtlIGEgY2xvc2UgbG9vayBhdCBgenN3YXBfcG9vbF9jcmVhdGVgIHRvIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtb3JlIGNvcmUgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY4MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozNDowMi4zNTMyODkyMzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTEyNzQ2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfcG9vbF9jcmVhdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTI2Nz1zdGF0aWMgdm9pZCBhY29tcF9jdHhfZnJlZShzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4KVxcbi0tXFxubW0venN3YXAuYy0yOTQtXFxubW0venN3YXAuYzoyOTU6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbm1tL3pzd2FwLmMtMjk2LXtcXG4tLVxcbm1tL3pzd2FwLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0zOTAtXFxubW0venN3YXAuYzozOTE6XFx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmMtMzkyLX1cXG4tLVxcbm1tL3pzd2FwLmM9NTYxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNjAzLVxcdGlmICghcG9vbClcXG5tbS96c3dhcC5jOjYwNDpcXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxubW0venN3YXAuYy02MDUtXFx0ZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjM0OjA0LjcwNDU2OTMwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI0OTExNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFpzd2FwIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIHpzd2FwIGZ1bmN0aW9uYWxpdHkuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYHpzd2FwX3Bvb2xfY3JlYXRlYCBmdW5jdGlvbiBpcyBrZXkuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHRoZSBtZW1vcnkgcG9vbCBmb3IgenN3YXAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBjcnVjaWFsbHksIGl0J3MgY2FsbGVkIGluIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHNjZW5hcmlvcy4gRmlyc3QsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gc29tZW9uZSBjaGFuZ2VzIHRoZSBjb21wcmVzc29yIHZpYSBzeXNmcyB1c2luZyBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLiBTZWNvbmQsIGFuZCBwcm9iYWJseSBtb3JlIGZyZXF1ZW50bHksIGl0J3MgY2FsbGVkIHRocm91Z2ggYF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2tgIGlmIHRoZSBwb29sIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBhbmQgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBzdG9yZSBhIHN3YXAgZW50cnkgdmlhIGB6c3dhcF9zdG9yZWAuXG5cblRoaXMgdGVsbHMgbWUgZnV6emluZyBgenN3YXBfc3RvcmVgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmlnZ2VyIGB6c3dhcF9wb29sX2NyZWF0ZWAuIEl0J3MgYSBkaXJlY3QgcGF0aCB0byBleGVyY2lzaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gY29kZS4gQW5kLCBhcyBhIHNlY29uZGFyeSBlbnRyeXBvaW50LCBJIGNhbiB1c2UgdGhlIHN5c2ZzIGNhbGxiYWNrIG1lY2hhbmlzbSBvZiBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgIGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3pzd2FwL3BhcmFtZXRlcnMvY29tcHJlc3NvcmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYW5vdGhlciwgc29tZXdoYXQgY29udHJvbGxlZCwgd2F5IHRvIGNhbGwgdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIGZ1enplciBzZXR1cCB3aWxsIGRlZmluaXRlbHkgaW5jbHVkZSBgenN3YXBfc3RvcmVgLiBJIHdpbGwgYWxzbyBpbmNvcnBvcmF0ZSBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3N3YXBvbmAgYW5kIGB6c3dhcF9zd2Fwb2ZmYC4gVGhlc2UgYXJlIHRoZSBjb3JlIHpzd2FwIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBkYXRhIG1vdmVtZW50IGFuZCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3dhcCBzcGFjZS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UsIGFzIGB6c3dhcF9zdG9yZWAgZG9lc24ndCBleGlzdCBpbiBpc29sYXRpb247IGl0IGhhcyB0byBiZSBwYWlyZWQgd2l0aCBgenN3YXBfbG9hZGAgKG9yIGF0IGxlYXN0IHVzZWQgdG8gc2V0dXAgc3RhdGUgdG8gdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMpLlxuXG5VbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBzZXQtcmVzdWx0cyBhcHByb2FjaCwgd2hlcmUgSSBjYW4gbW9uaXRvciB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSBhbmQgc2VlIGlmIGFueXRoaW5nIGlzIGFtaXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUyMywiT3V0cHV0VG9rZW5zIjoxNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzQ6MTAuNDI5NDg0MDM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3ODA3Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb25cIixcbiAgICBcInpzd2FwX3N3YXBvZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfc3dhcG9uXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgenN3YXAgbG9naWMgYnkgcmVwbGFjaW5nIHRoZSBwb29sIHBvaW50ZXIgaW4genN3YXBfZW50cnkgd2l0aCBhIHUxNiBpbmRleCBtYXBwZWQgdmlhIGFuIHhhcnJheS4gVGhpcyBhZmZlY3RzIHBvb2wgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbnRyeSBhbGxvY2F0aW9uLCBhbmQgZnJlZWluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4genN3YXAgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSB0aGUgbmV3IGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowf5bv4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 05:05:07 +0000 UTC FinishedAt: 2026-07-27 05:34:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68210527d235e59afa54bc6aba6ecc532488a82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68210527d235e59afa54bc6aba6ecc532488a82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "cba3ed7c-005d-4785-b63e-16d17f41a522" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_load", "zswap_invalidate", "zswap_swapon", "zswap_swapoff" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfc3dhcG9uJiMzNDssCiAgICAmIzM0O3pzd2FwX3N3YXBvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgenN3YXAgbG9naWMgYnkgcmVwbGFjaW5nIHRoZSBwb29sIHBvaW50ZXIgaW4genN3YXBfZW50cnkgd2l0aCBhIHUxNiBpbmRleCBtYXBwZWQgdmlhIGFuIHhhcnJheS4gVGhpcyBhZmZlY3RzIHBvb2wgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbnRyeSBhbGxvY2F0aW9uLCBhbmQgZnJlZWluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4genN3YXAgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSB0aGUgbmV3IGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGM0M2Y1Mzc4YmI2ZDdiZTNjNDI2ZTQyMThhOTIyMDlmOTc2ODA1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDA1OjMzOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA0ZTc2YTRhODdjZGNjMC4uNmMyOTA5OGRhOGQ1ZWEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMzUsNiAmIzQzOzM1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG5AQCAtMTU3LDkgJiM0MzsxNTgsMjIgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4mIzQzO1x0dTE2IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogRW50cmllcyBzdG9yZSBhIHUxNiBwb29sIGluZGV4IGluc3RlYWQgb2YgYW4gOC1ieXRlIHBvb2wgcG9pbnRlci5cbiYjNDM7ICogSW5kaWNlcyBhcmUgYWxsb2NhdGVkIGhlcmUgYXQgcG9vbCBjcmVhdGlvbiBhbmQgcmVsZWFzZWQgYXQgZGVzdHJ1Y3Rpb24uXG4mIzQzOyAqIExpdmUgZW50cmllcyBwaW4gdGhlIHBvb2wsIHNvIGl0cyBpbmRleCBpcyBub3QgcmV1c2VkIHVuZGVyIHRoZW0uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyh6c3dhcF9wb29sc194YSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfYnlfaW5kZXgodTE2IGlkeClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBpZHgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xuIFxuQEAgLTE4Miw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcbiAgKiAgICAgICAgICAgICAgbG9naWMgaWYgcmVmZXJlbmNlZCBpcyB1bnNldC4gU2VlIGNvbW1lbnRzIGluIHRoZSBzaHJpbmtlclxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LlxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpblxuJiM0MzsgKiBwb29sX2lkeCAtIHpzd2FwX3Bvb2wgaW5kZXgsIHJlc29sdmVkIHZpYSB6c3dhcF9wb29sX2J5X2luZGV4KCkuXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXG4gICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvXG4gICogbHJ1IC0gaGFuZGxlIHRvIHRoZSBwb29sJiMzOTtzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxuQEAgLTE5MSwxMiAmIzQzOzIwNSwyMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xuIFx0Ym9vbCByZWZlcmVuY2VkO1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4mIzQzO1x0dTE2IHBvb2xfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiB9O1xuIFxuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfcG9vbF9ieV9pbmRleChlbnRyeS1cdTAwM2Vwb29sX2lkeCk7XG4mIzQzO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSghcG9vbCk7XG4mIzQzO1x0cmV0dXJuIHBvb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTcsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbiYjNDM7XHR1MzIgaWR4O1xuIFxuIFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTMyMiwxMCAmIzQzOzM0NSwxOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRcdGdvdG8gcmVmX2ZhaWw7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuIFxuJiM0MztcdHJldCA9IHhhX2FsbG9jKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBcdTAwMjZpZHgsIHBvb2wsIHhhX2xpbWl0XzE2YixcbiYjNDM7XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBpZHhfZmFpbDtcbiYjNDM7XHRwb29sLVx1MDAzZWlkeCA9IGlkeDtcbiYjNDM7XG4gXHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2NyZWF0ZWRcJiMzNDssIHBvb2wpO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gXG4mIzQzO2lkeF9mYWlsOlxuJiM0MztcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzY2LDYgJiM0MzszOTcsOCBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4gXG4gXHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2Rlc3Ryb3lpbmdcJiMzNDssIHBvb2wpO1xuIFxuJiM0MztcdHhhX2VyYXNlKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBwb29sLVx1MDAzZWlkeCk7XG4mIzQzO1xuIFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcdTAwMjZwb29sLVx1MDAzZW5vZGUpO1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbkBAIC03NjQsOSAmIzQzOzc5NywxMSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuJiM0MztcbiBcdHpzd2FwX2xydV9kZWwoXHUwMDI2enN3YXBfbGlzdF9scnUsIGVudHJ5KTtcbi1cdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuLVx0enN3YXBfcG9vbF9wdXQoZW50cnktXHUwMDNlcG9vbCk7XG4mIzQzO1x0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4mIzQzO1x0enN3YXBfcG9vbF9wdXQocG9vbCk7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpIHtcbiBcdFx0b2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS1cdTAwM2VvYmpjZywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbiBcdFx0b2JqX2Nncm91cF9wdXQoZW50cnktXHUwMDNlb2JqY2cpO1xuQEAgLTkyMyw3ICYjNDM7OTU4LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4O1xuQEAgLTk2NCw3ICYjNDM7OTk5LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCYjMzQ7RGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdHN3cF90eXBlKGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbiBcdFx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbi1cdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXRmbV9uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0NTcsNyAmIzQzOzE0OTIsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuIFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbiBcdCAqL1xuLVx0ZW50cnktXHUwMDNlcG9vbCA9IHBvb2w7XG4mIzQzO1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zd2Fwb24mIzM0OywKICAgICYjMzQ7enN3YXBfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzQzZjUzNzhiYjZkN2JlM2M0MjZlNDIxOGE5MjIwOWY5NzY4MDVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMDU6MzM6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA0ZTc2YTRhODdjZGNjMC4uNmMyOTA5OGRhOGQ1ZWEgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzUsNiAmIzQzOzM1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9scnUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvenNtYWxsb2MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtMTU3LDkgJiM0MzsxNTgsMjIgQEAgc3RydWN0IHpzd2FwX3Bvb2wgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiYjNDM7CXUxNiBpZHg7CiAJY2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIH07CiAKJiM0MzsvKgomIzQzOyAqIEVudHJpZXMgc3RvcmUgYSB1MTYgcG9vbCBpbmRleCBpbnN0ZWFkIG9mIGFuIDgtYnl0ZSBwb29sIHBvaW50ZXIuCiYjNDM7ICogSW5kaWNlcyBhcmUgYWxsb2NhdGVkIGhlcmUgYXQgcG9vbCBjcmVhdGlvbiBhbmQgcmVsZWFzZWQgYXQgZGVzdHJ1Y3Rpb24uCiYjNDM7ICogTGl2ZSBlbnRyaWVzIHBpbiB0aGUgcG9vbCwgc28gaXRzIGluZGV4IGlzIG5vdCByZXVzZWQgdW5kZXIgdGhlbS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyh6c3dhcF9wb29sc194YSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2J5X2luZGV4KHUxNiBpZHgpCiYjNDM7ewomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO3pzd2FwX3Bvb2xzX3hhLCBpZHgpOwomIzQzO30KJiM0MzsKIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7CiAKQEAgLTE4Miw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7CiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFjawogICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXIKICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LgotICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluCiYjNDM7ICogcG9vbF9pZHggLSB6c3dhcF9wb29sIGluZGV4LCByZXNvbHZlZCB2aWEgenN3YXBfcG9vbF9ieV9pbmRleCgpLgogICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhCiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG8KICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy4KQEAgLTE5MSwxMiAmIzQzOzIwNSwyMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkgewogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJYm9vbCByZWZlcmVuY2VkOwotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1MTYgcG9vbF9pZHg7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogfTsKIAomIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9wb29sX2J5X2luZGV4KGVudHJ5LSZndDtwb29sX2lkeCk7CiYjNDM7CiYjNDM7CVZNX1dBUk5fT05fT05DRSghcG9vbCk7CiYjNDM7CXJldHVybiBwb29sOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiAKQEAgLTI3NSw2ICYjNDM7Mjk3LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCWNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcMCAqLwogCWludCByZXQsIGNwdTsKJiM0MzsJdTMyIGlkeDsKIAogCWlmICghenN3YXBfaGFzX3Bvb2wgJmFtcDsmYW1wOyAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0zMjIsMTAgJiM0MzszNDUsMTggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCQlnb3RvIHJlZl9mYWlsOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiAKJiM0MzsJcmV0ID0geGFfYWxsb2MoJmFtcDt6c3dhcF9wb29sc194YSwgJmFtcDtpZHgsIHBvb2wsIHhhX2xpbWl0XzE2YiwKJiM0MzsJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gaWR4X2ZhaWw7CiYjNDM7CXBvb2wtJmd0O2lkeCA9IGlkeDsKJiM0MzsKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAogCXJldHVybiBwb29sOwogCiYjNDM7aWR4X2ZhaWw6CiYjNDM7CXBlcmNwdV9yZWZfZXhpdCgmYW1wO3Bvb2wtJmd0O3JlZik7CiByZWZfZmFpbDoKIAljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsICZhbXA7cG9vbC0mZ3Q7bm9kZSk7CiAKQEAgLTM2Niw2ICYjNDM7Mzk3LDggQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQogCiAJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O2Rlc3Ryb3lpbmcmIzM0OywgcG9vbCk7CiAKJiM0MzsJeGFfZXJhc2UoJmFtcDt6c3dhcF9wb29sc194YSwgcG9vbC0mZ3Q7aWR4KTsKJiM0MzsKIAljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsICZhbXA7cG9vbC0mZ3Q7bm9kZSk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQpAQCAtNzY0LDkgJiM0Mzs3OTcsMTEgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogICovCiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiB7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiYjNDM7CiAJenN3YXBfbHJ1X2RlbCgmYW1wO3pzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7Ci0JenNfZnJlZShlbnRyeS0mZ3Q7cG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSk7Ci0JenN3YXBfcG9vbF9wdXQoZW50cnktJmd0O3Bvb2wpOwomIzQzOwl6c19mcmVlKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwomIzQzOwl6c3dhcF9wb29sX3B1dChwb29sKTsKIAlpZiAoZW50cnktJmd0O29iamNnKSB7CiAJCW9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktJmd0O29iamNnLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKIAkJb2JqX2Nncm91cF9wdXQoZW50cnktJmd0O29iamNnKTsKQEAgLTkyMyw3ICYjNDM7OTU4LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGVudHJ5LSZndDtwb29sOwomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwogCXN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDsKIAlzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4OwpAQCAtOTY0LDcgJiM0Mzs5OTksNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcHJfYWxlcnRfcmF0ZWxpbWl0ZWQoJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS0mZ3Q7JWQpXG4mIzM0OywKIAkJCQkJCXN3cF90eXBlKGVudHJ5LSZndDtzd3BlbnRyeSksCiAJCQkJCQlzd3Bfb2Zmc2V0KGVudHJ5LSZndDtzd3BlbnRyeSksCi0JCQkJCQllbnRyeS0mZ3Q7cG9vbC0mZ3Q7dGZtX25hbWUsCiYjNDM7CQkJCQkJcG9vbC0mZ3Q7dGZtX25hbWUsCiAJCQkJCQllbnRyeS0mZ3Q7bGVuZ3RoLCBkbGVuKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDU3LDcgJiM0MzsxNDkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nCiAJICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS4KIAkgKi8KLQllbnRyeS0mZ3Q7cG9vbCA9IHBvb2w7CiYjNDM7CWVudHJ5LSZndDtwb29sX2lkeCA9IHBvb2wtJmd0O2lkeDsKIAllbnRyeS0mZ3Q7c3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5OwogCWVudHJ5LSZndDtvYmpjZyA9IG9iamNnOwogCWVudHJ5LSZndDtyZWZlcmVuY2VkID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBac3dhcCBPcHRpbWl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS96c3dhcC5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgc3dhcHBpbmcgb3V0IGEgZnVsbCA4LWJ5dGUgcG9pbnRlciwgdGhlIGBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbGAgd2l0aGluIHRoZSBgc3RydWN0IHpzd2FwX2VudHJ5YCwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGEgYHUxNiBwb29sX2lkeGAuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaXplIHJlZHVjdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZywgZXNwZWNpYWxseSBpbiB0aGUga2VybmVsLCB3aGVyZSBldmVyeSBieXRlIGNvdW50cy4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYW4geGFycmF5LCBgenN3YXBfcG9vbHNfeGFgLCB0byBoYW5kbGUgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGVzZSBgcG9vbF9pZHhgIHZhbHVlcyBhbmQgdGhlIGFjdHVhbCBgc3RydWN0IHpzd2FwX3Bvb2xgIHBvaW50ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBwYXJ0IG9mIHpzd2FwLCBub3QganVzdCBzb21lIHRyaXZpYWwgYWRqdXN0bWVudC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIFpzd2FwIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUga2VybmVsIGNvbmZpZywgb3IgaXMgaXQgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzcGVjaWZpYyBvcHRpb24gdG8gYmUgdHVybmVkIG9uPyBJJiMzOTtsbCBydW4gYGdyZXBwZXJgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgWlNXQVBgLiBUaGF0IHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IGFuZCBzY29wZSBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcHJlbGltaW5hcnkgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdCwgYXNzdW1pbmcgSSYjMzk7bSBidWlsZGluZyBhIGtlcm5lbDoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFpzd2FwIFRlc3RpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBlbnN1cmUgdGhhdCB6c3dhcCBpcyB0aG9yb3VnaGx5IHRlc3RlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJlbGV2YW50IG9wdGlvbnMgZW5hYmxlZCwgc3BlY2lmaWNhbGx5IGBDT05GSUdfWlNXQVBgLiBNYWtlcyBzZW5zZSwgb2YgY291cnNlIOKAkyB3aXRob3V0IHRoYXQsIHRoZXJlJiMzOTtzIG5vIHpzd2FwIHRvIHRlc3QuIEFuZCwgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3MgYW5kIGd1YXJhbnRlZSBpdCYjMzk7cyBhY3R1YWxseSBydW5uaW5nLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBhbHNvIGVuYWJsaW5nIGBDT05GSUdfWlNXQVBfREVGQVVMVF9PTmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGhhdmUgenN3YXAgYWN0aXZlIGJ5IGRlZmF1bHQgZHVyaW5nIGluaXRpYWwgdGVzdGluZyBhbmQgdG8gY29uZmlybSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuCgpPZiBjb3Vyc2UsIHdlJiMzOTtsbCBuZWVkIHJlZ3VsYXIgc3dhcCBzdXBwb3J0LCB3aGljaCBpcyBgQ09ORklHX1NXQVBgLiBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgZXhwbGljaXRseS4gSXQmIzM5O2QgYmUgZm9vbGlzaCB0byBvdmVybG9vayB0aGF0LgoKU28sIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLCBteSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgc3Vycm91bmRpbmcgYFpTV0FQYC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCwgb3IgdGhhdCBpbXBhY3QgaXRzIGJlaGF2aW9yLCB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmc/IFRpbWUgdG8gZ2V0IGdyYW51bGFyIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IGZlZWxpbmcgc2F5cyB0aGUgY29yZSBpcyBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpcyBwcm9iYWJseSBhcm91bmQgbGluZSAyMiDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEl0JiMzOTtzIGEgYnJvYWQgYXJlYSwgc28gemVyb2luZyBpbiBsaWtlIHRoaXMgaGVscHMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQuIEhvcGVmdWxseSwgaXQgaXMgbm90IHRvbyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxuICAxODpcdFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXG4gIDE5Olx0XHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxuICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuICA0MDpcdFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxuICA0MzpcdFx0ICBjb21tYW5kIGxpbmUgJiMzOTt6c3dhcC5lbmFibGVkPSYjMzk7IG9wdGlvbi5cbiAgNDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTIxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpzd2FwIEZvY3VzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkgc2VlIGBaU1dBUGAgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCBhcmUgaW4gcGxheSwgZ29vZC4gTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIHJlYWwgdGFyZ2V0cyBmb3IgZnV6emluZyBoZXJlPyBUaGUgcGF0Y2ggcG9pbnRzIHRvIG1vZGlmaWNhdGlvbnMgaW4gYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3Bvb2xfZGVzdHJveWAsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX3N0b3JlX3BhZ2VgLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1tL3pzd2FwLmNgLiBXZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9zZWQgYXMgQVBJIGVudHJ5IHBvaW50cyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGZvciBmdXp6aW5nIHdpbGwgbGllLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9bYS16X10mIzQzOyB6c3dhcF9bYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz03OT1zdGF0aWMgYm9vbCB6c3dhcF9wb29sX3JlYWNoZWRfZnVsbDtcbi0tXG5tbS96c3dhcC5jLTg2LVxubW0venN3YXAuYzo4NzpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xubW0venN3YXAuYy04OC1cbi0tXG5tbS96c3dhcC5jPTkxPXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6OTI6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTkzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbi0tXG5tbS96c3dhcC5jPTEwMT1zdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jOjEwMjpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbm1tL3pzd2FwLmMtMTAzLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbi0tXG5tbS96c3dhcC5jPTEyND1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XG5tbS96c3dhcC5jLTEyNS1cbm1tL3pzd2FwLmM6MTI2OmJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMjcte1xuLS1cbm1tL3pzd2FwLmMtMTMwLVxubW0venN3YXAuYzoxMzE6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMi17XG4tLVxubW0venN3YXAuYz0zNzU9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4tLVxubW0venN3YXAuYy0zOTMtXG5tbS96c3dhcC5jOjM5NDpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTM5NS17XG4tLVxubW0venN3YXAuYz00NDg9c3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4tLVxubW0venN3YXAuYy00NTYtLyogVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZS4gKi9cbm1tL3pzd2FwLmM6NDU3OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZ2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00NTgte1xuLS1cbm1tL3pzd2FwLmMtNDYxLVxubW0venN3YXAuYzo0NjI6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9wdXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ2My17XG4tLVxubW0venN3YXAuYz01Mjk9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtNTQxLVxubW0venN3YXAuYzo1NDI6c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXG5tbS96c3dhcC5jLTU0My17XG4tLVxubW0venN3YXAuYy01NjAtXG5tbS96c3dhcC5jOjU2MTpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS96c3dhcC5jLTU2Mi17XG4tLVxubW0venN3YXAuYy02NDktXG5tbS96c3dhcC5jOjY1MDpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcbm1tL3pzd2FwLmMtNjUxLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0venN3YXAuYz02OTY9c3RhdGljIGlubGluZSBpbnQgZW50cnlfdG9fbmlkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03MDAtXG5tbS96c3dhcC5jOjcwMTpzdGF0aWMgdm9pZCB6c3dhcF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbGlzdF9scnUsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTcwMi17XG4tLVxubW0venN3YXAuYy03MjMtXG5tbS96c3dhcC5jOjcyNDpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbGlzdF9scnUsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTcyNS17XG4tLVxubW0venN3YXAuYy03MzUtXG5tbS96c3dhcC5jOjczNjp2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3pzd2FwLmMtNzM3LXtcbi0tXG5tbS96c3dhcC5jLTc0MC1cbm1tL3pzd2FwLmM6NzQxOnZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTc0Mi17XG4tLVxubW0venN3YXAuYy03NjItICovXG5tbS96c3dhcC5jOjc2Mzp2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS96c3dhcC5jLTc2NC17XG4tLVxubW0venN3YXAuYz03ODA9c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxuLS1cbm1tL3pzd2FwLmMtNzg4LVxubW0venN3YXAuYzo3ODk6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03OTAte1xuLS1cbm1tL3pzd2FwLmMtNzk3LSAqL1xubW0venN3YXAuYzo3OTg6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03OTkte1xuLS1cbm1tL3pzd2FwLmMtODE3LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjgxODpzdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG5tbS96c3dhcC5jLTgxOS17XG4tLVxubW0venN3YXAuYy04NzQtXG5tbS96c3dhcC5jOjg3NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtODc2LVx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuLS1cbm1tL3pzd2FwLmMtOTU4LVxubW0venN3YXAuYzo5NTk6c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy05NjAte1xuLS1cbm1tL3pzd2FwLmMtMTAyMS0gKi9cbm1tL3pzd2FwLmM6MTAyMjpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy0xMDIzLVx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTM0Mz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS96c3dhcC5jLTE0MzItXG5tbS96c3dhcC5jOjE0MzM6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbm1tL3pzd2FwLmMtMTQzNC1cdFx0XHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS96c3dhcC5jLTE1MTItXG5tbS96c3dhcC5jOjE1MTM6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTE0LXtcbi0tXG5tbS96c3dhcC5jLTE2MTgtICovXG5tbS96c3dhcC5jOjE2MTk6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTYyMC17XG4tLVxubW0venN3YXAuYy0xNjcxLVxubW0venN3YXAuYzoxNjcyOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXG5tbS96c3dhcC5jLTE2NzMte1xuLS1cbm1tL3pzd2FwLmMtMTY4NS1cbm1tL3pzd2FwLmM6MTY4NjppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxubW0venN3YXAuYy0xNjg3LXtcbi0tXG5tbS96c3dhcC5jLTE3MDUtXG5tbS96c3dhcC5jOjE3MDY6dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxubW0venN3YXAuYy0xNzA3LXtcbi0tXG5tbS96c3dhcC5jPTE3NTA9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlc19mb3BzLFxuLS1cbm1tL3pzd2FwLmMtMTc1Mi1cbm1tL3pzd2FwLmM6MTc1MzpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxubW0venN3YXAuYy0xNzU0LXtcbi0tXG5tbS96c3dhcC5jLTE3ODYtI2Vsc2Vcbm1tL3pzd2FwLmM6MTc4NzpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxubW0venN3YXAuYy0xNzg4LXtcbi0tXG5tbS96c3dhcC5jLTE3OTUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MTc5NjpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG5tbS96c3dhcC5jLTE3OTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgWnN3YXA6IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgenN3YXAgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIFdlJiMzOTt2ZSBnb3QgdGhlIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50czogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gLCBhbmQgYHpzd2FwX3N3YXBvZmZgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcywgdGhlIG9uZXMgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGguCgpOb3csIGdsYW5jaW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3Bvb2xfZGVzdHJveWAsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX3N0b3JlX3BhZ2VgLiBUaGVzZSBzZWVtIHRvIGJlIG1vc3RseSBzdGF0aWMgaGVscGVycy4gQnV0IEkgY2FuIHNlZSB0aGUgY29ubmVjdGlvbiBub3c6IGB6c3dhcF9zdG9yZWAgaXMgY2FsbGluZyBgenN3YXBfc3RvcmVfcGFnZWAuIGB6c3dhcF9sb2FkYCByZWxpZXMgb24gYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgIGNhbGxzIGB6c3dhcF9lbnRyeV9mcmVlYC4KClRoZXJlZm9yZSwgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gZWZmZWN0aXZlIGZ1enppbmcgaXMgdG8gZm9jdXMgb24gYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgb3JjaGVzdHJhdGUgdGhlIGNvcmUgb3BlcmF0aW9ucywgYW5kIHdlIGNhbiB0ZXN0IHRoZSBpbnB1dHMgYW5kIGNvbmRpdGlvbnMgZnJvbSBvdXRzaWRlLiBUaGUgYHpzd2FwX3N3YXBvbmAgYW5kIGB6c3dhcF9zd2Fwb2ZmYCBlbnRyeSBwb2ludHMgYWxzbyBzZWVtIGxpa2UgZGVjZW50IGNob2ljZXMgdG8gaW5jbHVkZS4KCkkgd2lsbCB0YWtlIGEgbW9tZW50IHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfc3RvcmVgIGlzIGV4cG9ydGVkIGFuZCBhdmFpbGFibGUsIG9yIGRldGVybWluZSBob3cgaXQgY2FuIGJlIGFwcHJvcHJpYXRlbHkgaW52b2tlZC4gVGhpcyB3aWxsIHRoZW4gYWxsb3cgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc3RvcmVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTI3PXVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mjg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0yOS1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDA9c3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC00MS1cbmluY2x1ZGUvbGludXgvenN3YXAuaDo0MjpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvenN3YXAuaC00My17XG4tLVxubW0vcGFnZV9pby5jPTIwMz1pbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9wYWdlX2lvLmMtMjM2LVxubW0vcGFnZV9pby5jOjIzNzpcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcbm1tL3BhZ2VfaW8uYy0yMzgtXHRcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcbi0tXG5tbS96c3dhcC5jPTk1OT1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xMDE2LSAqIHRvIHRoZSBzd2FwIGRldmljZS4gIFdlIGFyZSBiYXNpY2FsbHkgcmVzdW1pbmcgdGhlIHNhbWUgc3dhcFxubW0venN3YXAuYzoxMDE3OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtMTAxOC0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cbi0tXG5tbS96c3dhcC5jPTE0MzM9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE1MTItXG5tbS96c3dhcC5jOjE1MTM6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTE0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKlpzd2FwIEZ1bmN0aW9uIENhbGxzICZhbXA7IEludmFsaWRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgbWFwIG9mIHRoZSB6c3dhcCBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBpcyBiZWluZyByZWZyZXNoZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNhbGwgZmxvdyBub3cuIFJpZ2h0LCBzbyBgenN3YXBfc3RvcmVgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcHV0dGluZyBwYWdlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGNhY2hlLCBhbmQgSSByZW1lbWJlciB0aGF0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGBzd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhcyBwYWdlcyBhcmUgd3JpdHRlbiBvdXQgdG8gdGhlIHN3YXAgcGFydGl0aW9uLCB0aGV5JiMzOTtyZSBpbnRlcmNlcHRlZCBhbmQgcG90ZW50aWFsbHkgY29tcHJlc3NlZCBpbiB6c3dhcCBmaXJzdC4gR29vZC4KCk5vdywgYHpzd2FwX2xvYWRgIGlzIG9idmlvdXNseSB0aGUgY291bnRlcnBhcnQsIHB1bGxpbmcgcGFnZXMgKmZyb20qIHpzd2FwLiBBbmQgdGhhdCwgYXMgZXhwZWN0ZWQsIGlzIGNhbGxlZCBmcm9tIGBzd2FwX3JlYWRfZm9saW9gLCBhbHNvIGluIGBtbS9wYWdlX2lvLmNgLiBUaGF0JiMzOTtzIHRoZSByZWFkIHBhdGgsIHJpZ2h0PyBXaGVuIHRoZSBzeXN0ZW0gbmVlZHMgYSBwYWdlIGZyb20gc3dhcCwgaXQgY2hlY2tzIHpzd2FwIGZpcnN0LgoKRmluYWxseSwgYHpzd2FwX2ludmFsaWRhdGVgIGlzIGNhbGxlZCB0byByZW1vdmUgb3IgY2xlYXIgYW4gZW50cnkgZnJvbSB0aGUgY29tcHJlc3NlZCBjYWNoZSwgd2hlbiBhIHBhZ2UgbmVlZHMgdG8gYmUgc3dhcHBlZCBvdXQsIGZyZWVkLCBvciBvdGhlcndpc2UgcmVtb3ZlZCBmcm9tIHRoZSBzd2FwIHBhcnRpdGlvbi4gSSBrbm93IHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gYHN3YXBfZnJlZWAgb3IgYSBzaW1pbGFyIHN3YXAtcmVsYXRlZCBmdW5jdGlvbi4gR29vZC4KClNvLCB3aGVyZSBkbyBJIHN0YXJ0IGRpZ2dpbmcgaW4gdG8gc2VlIGhvdyBpdHMgd29ya2luZz8gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHpzd2FwX2xvYWRgIGFuZCB0aGVuIGB6c3dhcF9pbnZhbGlkYXRlYCwgdG8gcmVtaW5kIG15c2VsZiBob3cgdGhvc2UgZnVuY3Rpb25zIHdvcmsuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBhbSB1cCB0byBzcGVlZCB3aXRoIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9sb2FkXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0yOD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjI5OmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTMwLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaD00Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDYtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NDc6c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTQ4LXtcbi0tXG5tbS9wYWdlX2lvLmM9NDUxPXZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy00NzgtXG5tbS9wYWdlX2lvLmM6NDc5Olx0aWYgKHpzd2FwX2xvYWQoZm9saW8pICE9IC1FTk9FTlQpXG5tbS9wYWdlX2lvLmMtNDgwLVx0XHRnb3RvIGZpbmlzaDtcbi0tXG5tbS96c3dhcC5jPTE1MTM9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTU5OS0vKipcbm1tL3pzd2FwLmM6MTYwMDogKiB6c3dhcF9sb2FkKCkgLSBsb2FkIGEgZm9saW8gZnJvbSB6c3dhcFxubW0venN3YXAuYy0xNjAxLSAqIEBmb2xpbzogZm9saW8gdG8gbG9hZFxuLS1cbm1tL3pzd2FwLmMtMTYxOC0gKi9cbm1tL3pzd2FwLmM6MTYxOTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNjIwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBgenN3YXBfaW52YWxpZGF0ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYHpzd2FwX2ludmFsaWRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc2l0dWF0ZSBpdCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHpzd2FwJiMzOTtzIG9wZXJhdGlvbiwgcGFydGljdWxhcmx5IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkYXRhIGludGVncml0eS4gSSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCBjb21wcmVzc2VkIGRhdGEgcmVzaWRpbmcgaW4genN3YXAgZG9lc24mIzM5O3QgbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMgb3IgY29ycnVwdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIG1lbW9yeS4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSBjYWNoZSwgc3dhcCBjYWNoZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcmVjbGFpbS4gSSYjMzk7bSBpbWFnaW5pbmcgc2NlbmFyaW9zIGludm9sdmluZyBwYWdlIGZhdWx0cywgd3JpdGViYWNrLCBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIHRvIGRpc2NhcmQgb3IgcmUtcmVhZCBkYXRhIHdoZW4gdGhlIHpzd2FwIGJhY2tpbmcgc3RvcmUgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuCgpJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggaXRzIGxpa2VseSByZXNwb25zaWJpbGl0aWVzOiBpbnZhbGlkYXRpbmcgenN3YXAgZW50cmllcyBmb3IgcGFnZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkIGluIHBoeXNpY2FsIG1lbW9yeSwgY2xlYW5pbmcgdXAgdGhlIGNvbXByZXNzZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHVwIHNwYWNlIHdpdGhpbiB0aGUgenN3YXAgcG9vbC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBwYXJ0aWN1bGFybHkgaG93IGl0IGFmZmVjdHMgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzIHdoZW4gcGFnZXMgZ2V0IHJlLWFjY2Vzc2VkIG9yIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgdGhlIGRlbGljYXRlIGJhbGFuY2UgYmV0d2VlbiBjb21wcmVzc2VkIGRhdGEgYmVpbmcgcHJlc2VudCBvbiBkaXNrLCBhbmQgdGhlIHVuZGVybHlpbmcgcGFnZXMgc3RpbGwgYmVpbmcgdmFsaWQuCgpJJiMzOTttIGV4cGVjdGluZyB0byBsb29rIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIOKAkyB3aGF0IGhhcHBlbnMgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgY29uY3VycmVudGx5IGFjY2Vzc2luZyB0aGUgc2FtZSBwYWdlcyBvciB0aGUgenN3YXAgcG9vbD8gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBIb3cgYXJlIHJhY2UgY29uZGl0aW9ucyBoYW5kbGVkIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uPyBXaGF0IGFib3V0IGludGVycnVwdCBoYW5kbGVycz8KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIHNhZmV0eSBjaGVja3MuIEkmIzM5O20gaG9waW5nIHRvIHNlZSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aHMgYW5kIHJvYnVzdCBtZWNoYW5pc21zIHRvIGRlYWwgd2l0aCB1bmV4cGVjdGVkIHNpdHVhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCB0aGV5IHNpZ25hbC4gQW5kIGhvdyBpdCBoYW5kbGVzIGNvbmRpdGlvbnMgbGlrZSBvdXQtb2YtbWVtb3J5IG9yIGNvcnJ1cHRpb24uIEkga25vdyB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxpa2UgdGhpcywgc28gSSB3aWxsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hhdCBoYXBwZW5zIGR1cmluZyBhIGB6c3dhcF9pbnZhbGlkYXRlYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9pbnZhbGlkYXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0yOT1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaDozMDp2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zMS1pbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDc9c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaC01MS1cbmluY2x1ZGUvbGludXgvenN3YXAuaDo1MjpzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTMtc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTMxNj1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbi0tXG5tbS9zd2FwZmlsZS5jLTEzMjMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbm1tL3N3YXBmaWxlLmM6MTMyNDpcdFx0enN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnkoc2ktXHUwMDNldHlwZSwgb2Zmc2V0ICYjNDM7IGkpKTtcbm1tL3N3YXBmaWxlLmMtMTMyNS1cbi0tXG5tbS96c3dhcC5jPTE2MTk9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE2NzEtXG5tbS96c3dhcC5jOjE2NzI6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbm1tL3pzd2FwLmMtMTY3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzA0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHpzd2FwIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHdoaWNoIHN5bWJvbHMgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kLCB0aGVyZWZvcmUsIHdoaWNoIG9uZXMgSSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHplcm9pbmcgaW4gb246IGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgenN3YXBfc3dhcG9uYCwgYW5kIGB6c3dhcF9zd2Fwb2ZmYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgaWxsdXN0cmF0ZSB0aGUgY2hhbmdlcy4KCkZ1bmN0aW9uYWxseSwgSSB1bmRlcnN0YW5kIHRoYXQgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIGhvdyB6c3dhcCBlbnRyaWVzIHN0b3JlIHRoZSBwb29sIHJlZmVyZW5jZSwgd2hpY2ggaXMgYSBrZXkgc3RydWN0dXJhbCBzaGlmdC4gUmVwbGFjaW5nIHRoZSBwb2ludGVyIHdpdGggYW4gaW5kZXggaW50byBhbiB4YXJyYXkgaXMgZGVmaW5pdGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhlIHJhbWlmaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQsIGFuZCBJIHdhbnQgdG8gZXhwb3NlIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMgaGVyZS4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gZnV6emluZywgSSB3YW50IHRvIGNvbmZpcm0gSSYjMzk7dmUgZ290IGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19aU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBfREVGQVVMVF9PTmAgYXJlIHNldCBjb3JyZWN0bHksIGFuZCB0aGF0IGBDT05GSUdfU1dBUGAsIGFzIHRoZSBwYXJlbnQgY29uZmlnLCBpcyBhbHNvIHByb3Blcmx5IGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gYmUgdGhvcm91Z2ggdXBmcm9udCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24gWlNXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0zNT1jb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTM4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbm1tL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTQ4LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbm1tL0tjb25maWctNjAtXHRwcm9tcHQgXCYjMzQ7RGVmYXVsdCBjb21wcmVzc29yXCYjMzQ7XG5tbS9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy02Mi1cdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xuLS1cbm1tL0tjb25maWc9MTE0PWNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbm1tL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTExNy0gICAgICAgZGVmYXVsdCBcJiMzNDtkZWZsYXRlXCYjMzQ7IGlmIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25jZXB0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gWlNXQVAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY29yZSBvZiB0aGlzLiBXaGVuIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHpzd2FwLCB0aGUgdHdvIGJpZyBwbGF5ZXJzIHRoYXQgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kIGFyZSBgWlNXQVBgIGl0c2VsZiBhbmQgYFpTV0FQX0RFRkFVTFRfT05gLiBUaG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGZsYWdzIHRoYXQgY29udHJvbCBpdHMgYmVoYXZpb3IsIHRoZSBtYWluIGxldmVycyB3ZSBoYXZlIHRvIHB1bGwuCgpOb3csIHdoZXJlIGRvIHRob3NlIGxldmVycyBjb25uZWN0PyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggenN3YXAuIEkmIzM5O2QgYmV0dGVyIGNoZWNrIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBlbmRwb2ludHMg4oCTIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIHRoZSBvbi9vZmYgc3dpdGNoZXMgdGhhdCBtYWtlIHpzd2FwIGFjdGl2ZSBvciBpbmFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yaywgaG93IHRoZXkmIzM5O3JlIGltcGxlbWVudGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBLbm93aW5nIHRoZSBjb250cm9sIHBvaW50cyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgYXJjaGl0ZWN0dXJlLiBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBaU1dBUCBhbmQgY29uc2lkZXIgdGhlIHdpZGVyIHN5c3RlbSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9zd2Fwb25cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTMwPXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjMxOmludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTMyLXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTUyPXN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCkge31cbmluY2x1ZGUvbGludXgvenN3YXAuaDo1MzpzdGF0aWMgaW5saW5lIGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTQte1xuLS1cbm1tL3N3YXBmaWxlLmM9MzYwNj1TWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzc1OC1cbm1tL3N3YXBmaWxlLmM6Mzc1OTpcdGVycm9yID0genN3YXBfc3dhcG9uKHNpLVx1MDAzZXR5cGUsIG1heHBhZ2VzKTtcbm1tL3N3YXBmaWxlLmMtMzc2MC1cdGlmIChlcnJvcilcbi0tXG5tbS96c3dhcC5jPTE2NzI9dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbi0tXG5tbS96c3dhcC5jLTE2ODUtXG5tbS96c3dhcC5jOjE2ODY6aW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL3pzd2FwLmMtMTY4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjgwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFpzd2FwIFBhdGNoIEZvY3VzKioKCk9rYXksIHNvIHRoZSB0ZXh0IGlzIGd1aWRpbmcgbWUgdG93YXJkcyBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgb24gc3BlY2lmaWMgenN3YXAgZnVuY3Rpb25zLCBhbmQgSSB1bmRlcnN0YW5kIHdoeS4gVGhlIGNvbnRleHQgdGVsbHMgbWUgdGhhdCBgc3dhcG9uYCBhbmQgYHN3YXBvZmZgIHN5c2NhbGxzIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuIFRoaXMgcG9pbnRzIG1lIHRvIGtleSBzeW1ib2xzOiBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3N3YXBvbmAsIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBwb2ludHMgd2hlcmUgdGhlIG1vZGlmaWVkIGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBpdHMgbGlmZXRpbWUgbWFuYWdlbWVudCB3b3VsZCBiZSBtb3N0IGxpa2VseSB0byBleHBvc2UgYnVncy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgY2hhbmdpbmcgaG93IHRoZSB6c3dhcCBlbnRyeSwgc3BlY2lmaWNhbGx5IHRoZSBwb29sIHBvaW50ZXIsIGlzIGhhbmRsZWQuIE5vdywgaXQmIzM5O3MgYW4gYHUxNmAgaW5kZXggbWFwcGVkIHVzaW5nIGFuIHhhcnJheS4gVGhpcyBjaGFuZ2UgZnVuZGFtZW50YWxseSBpbXBhY3RzIGhvdyBwb29scyBhcmUgY3JlYXRlZCwgZGVzdHJveWVkLCBhbmQgaG93IGVudHJpZXMgd2l0aGluIHRoZSBwb29sIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBUaGUgcHJvdmlkZWQgcmVhc29uaW5nIG1ha2VzIHBlcmZlY3Qgc2Vuc2U6IGZ1enppbmcgdGhlc2UgbWFpbiBlbnRyeSBwb2ludHPigJR0aGUgY3JpdGljYWwgcGF0aCBmdW5jdGlvbnPigJRpcyBwYXJhbW91bnQgdG8gZW5zdXJlIHRoZSBuZXcgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgb3BlcmF0ZSBjb3JyZWN0bHkuCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfcG9vbF9jcmVhdGVgIGFuZCBgenN3YXBfcG9vbF9kZXN0cm95YCBhcmUgaW5kZWVkIHJlYWNoYWJsZSBmcm9tIHRoZSBmdW5jdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQgbm93LiBgenN3YXBfcG9vbF9jcmVhdGVgLCBmb3IgaW5zdGFuY2UsIGlzIGxpa2VseSBjYWxsZWQgd2hlbiBhIG5ldyBwb29sIGlzIG5lZWRlZCwgcGVyaGFwcyB3aGVuIHRoZSBjb21wcmVzc29yIGFsZ29yaXRobSBjaGFuZ2VzIG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGNsb3NlIGxvb2sgYXQgYHpzd2FwX3Bvb2xfY3JlYXRlYCB0byBjb25maXJtIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBjb3JlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfcG9vbF9jcmVhdGVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0yNjc9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcbi0tXG5tbS96c3dhcC5jLTI5NC1cbm1tL3pzd2FwLmM6Mjk1OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3Nvcilcbm1tL3pzd2FwLmMtMjk2LXtcbi0tXG5tbS96c3dhcC5jPTM3NT1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbi0tXG5tbS96c3dhcC5jLTM5MC1cbm1tL3pzd2FwLmM6MzkxOlx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYy0zOTItfVxuLS1cbm1tL3pzd2FwLmM9NTYxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTYwMy1cdGlmICghcG9vbClcbm1tL3pzd2FwLmM6NjA0Olx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTYwNS1cdGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyMwoJCQkJCQkJb3V0cHV0OiAxNTIKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWnN3YXAgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSB6c3dhcCBmdW5jdGlvbmFsaXR5LiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uIGlzIGtleS4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBtZW1vcnkgcG9vbCBmb3IgenN3YXAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBjcnVjaWFsbHksIGl0JiMzOTtzIGNhbGxlZCBpbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBzY2VuYXJpb3MuIEZpcnN0LCBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBzb21lb25lIGNoYW5nZXMgdGhlIGNvbXByZXNzb3IgdmlhIHN5c2ZzIHVzaW5nIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAuIFNlY29uZCwgYW5kIHByb2JhYmx5IG1vcmUgZnJlcXVlbnRseSwgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2tgIGlmIHRoZSBwb29sIGRvZXNuJiMzOTt0IGFscmVhZHkgZXhpc3QgYW5kIHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gc3RvcmUgYSBzd2FwIGVudHJ5IHZpYSBgenN3YXBfc3RvcmVgLgoKVGhpcyB0ZWxscyBtZSBmdXp6aW5nIGB6c3dhcF9zdG9yZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyaWdnZXIgYHpzd2FwX3Bvb2xfY3JlYXRlYC4gSXQmIzM5O3MgYSBkaXJlY3QgcGF0aCB0byBleGVyY2lzaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gY29kZS4gQW5kLCBhcyBhIHNlY29uZGFyeSBlbnRyeXBvaW50LCBJIGNhbiB1c2UgdGhlIHN5c2ZzIGNhbGxiYWNrIG1lY2hhbmlzbSBvZiBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgIGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3pzd2FwL3BhcmFtZXRlcnMvY29tcHJlc3NvcmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYW5vdGhlciwgc29tZXdoYXQgY29udHJvbGxlZCwgd2F5IHRvIGNhbGwgdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KClRoZXJlZm9yZSwgbXkgaW5pdGlhbCBmdXp6ZXIgc2V0dXAgd2lsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYHpzd2FwX3N0b3JlYC4gSSB3aWxsIGFsc28gaW5jb3Jwb3JhdGUgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXNlIGFyZSB0aGUgY29yZSB6c3dhcCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZGF0YSBtb3ZlbWVudCBhbmQgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHN3YXAgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSwgYXMgYHpzd2FwX3N0b3JlYCBkb2VzbiYjMzk7dCBleGlzdCBpbiBpc29sYXRpb247IGl0IGhhcyB0byBiZSBwYWlyZWQgd2l0aCBgenN3YXBfbG9hZGAgKG9yIGF0IGxlYXN0IHVzZWQgdG8gc2V0dXAgc3RhdGUgdG8gdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMpLgoKVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHNldC1yZXN1bHRzIGFwcHJvYWNoLCB3aGVyZSBJIGNhbiBtb25pdG9yIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIGFuZCBzZWUgaWYgYW55dGhpbmcgaXMgYW1pc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O3pzd2FwX3N3YXBvbiYjMzQ7LAogICAgJiMzNDt6c3dhcF9zd2Fwb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHpzd2FwIGxvZ2ljIGJ5IHJlcGxhY2luZyB0aGUgcG9vbCBwb2ludGVyIGluIHpzd2FwX2VudHJ5IHdpdGggYSB1MTYgaW5kZXggbWFwcGVkIHZpYSBhbiB4YXJyYXkuIFRoaXMgYWZmZWN0cyBwb29sIGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgZW50cnkgYWxsb2NhdGlvbiwgYW5kIGZyZWVpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIHpzd2FwIGVudHJ5IHBvaW50cyB0byBlbnN1cmUgdGhlIG5ldyBpbmRleC1iYXNlZCBwb29sIGxvb2t1cCBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zd2Fwb24mIzM0OywKICAgICYjMzQ7enN3YXBfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzowNS4zNTE1MDA1MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE4NTgwNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb25cIixcbiAgICBcInpzd2FwX3N3YXBvZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjA1LjM1MTUwNTMzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MzEwNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGM0M2Y1Mzc4YmI2ZDdiZTNjNDI2ZTQyMThhOTIyMDlmOTc2ODA1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNTozMzowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDRlNzZhNGE4N2NkY2MwLi42YzI5MDk4ZGE4ZDVlYSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0zNSw2ICszNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXJyYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbkBAIC0xNTcsOSArMTU4LDIyIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xcbitcXHR1MTYgaWR4O1xcbiBcXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xcbiB9O1xcbiBcXG4rLypcXG4rICogRW50cmllcyBzdG9yZSBhIHUxNiBwb29sIGluZGV4IGluc3RlYWQgb2YgYW4gOC1ieXRlIHBvb2wgcG9pbnRlci5cXG4rICogSW5kaWNlcyBhcmUgYWxsb2NhdGVkIGhlcmUgYXQgcG9vbCBjcmVhdGlvbiBhbmQgcmVsZWFzZWQgYXQgZGVzdHJ1Y3Rpb24uXFxuKyAqIExpdmUgZW50cmllcyBwaW4gdGhlIHBvb2wsIHNvIGl0cyBpbmRleCBpcyBub3QgcmV1c2VkIHVuZGVyIHRoZW0uXFxuKyAqL1xcbitzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyh6c3dhcF9wb29sc194YSk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfYnlfaW5kZXgodTE2IGlkeClcXG4re1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2enN3YXBfcG9vbHNfeGEsIGlkeCk7XFxuK31cXG4rXFxuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcXG4gXFxuQEAgLTE4Miw3ICsxOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcXG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXFxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXFxuKyAqIHBvb2xfaWR4IC0genN3YXBfcG9vbCBpbmRleCwgcmVzb2x2ZWQgdmlhIHpzd2FwX3Bvb2xfYnlfaW5kZXgoKS5cXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXFxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xcbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cXG5AQCAtMTkxLDEyICsyMDUsMjAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcXG4gXFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuIFxcdGJvb2wgcmVmZXJlbmNlZDtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuK1xcdHUxNiBwb29sX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XFxuIH07XFxuIFxcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX3Bvb2xfYnlfaW5kZXgoZW50cnktXFx1MDAzZXBvb2xfaWR4KTtcXG4rXFxuK1xcdFZNX1dBUk5fT05fT05DRSghcG9vbCk7XFxuK1xcdHJldHVybiBwb29sO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XFxuIFxcbkBAIC0yNzUsNiArMjk3LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbiBcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4gXFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFxcXDAgKi9cXG4gXFx0aW50IHJldCwgY3B1O1xcbitcXHR1MzIgaWR4O1xcbiBcXG4gXFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuQEAgLTMyMiwxMCArMzQ1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4gXFx0XFx0Z290byByZWZfZmFpbDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbiBcXG4rXFx0cmV0ID0geGFfYWxsb2MoXFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBcXHUwMDI2aWR4LCBwb29sLCB4YV9saW1pdF8xNmIsXFxuK1xcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBpZHhfZmFpbDtcXG4rXFx0cG9vbC1cXHUwMDNlaWR4ID0gaWR4O1xcbitcXG4gXFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiY3JlYXRlZFxcXCIsIHBvb2wpO1xcbiBcXG4gXFx0cmV0dXJuIHBvb2w7XFxuIFxcbitpZHhfZmFpbDpcXG4rXFx0cGVyY3B1X3JlZl9leGl0KFxcdTAwMjZwb29sLVxcdTAwM2VyZWYpO1xcbiByZWZfZmFpbDpcXG4gXFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcXHUwMDI2cG9vbC1cXHUwMDNlbm9kZSk7XFxuIFxcbkBAIC0zNjYsNiArMzk3LDggQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiBcXG4gXFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiZGVzdHJveWluZ1xcXCIsIHBvb2wpO1xcbiBcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBwb29sLVxcdTAwM2VpZHgpO1xcbitcXG4gXFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcXHUwMDI2cG9vbC1cXHUwMDNlbm9kZSk7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbkBAIC03NjQsOSArNzk3LDExIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4gICovXFxuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4ge1xcbitcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xcbitcXG4gXFx0enN3YXBfbHJ1X2RlbChcXHUwMDI2enN3YXBfbGlzdF9scnUsIGVudHJ5KTtcXG4tXFx0enNfZnJlZShlbnRyeS1cXHUwMDNlcG9vbC1cXHUwMDNlenNfcG9vbCwgZW50cnktXFx1MDAzZWhhbmRsZSk7XFxuLVxcdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVxcdTAwM2Vwb29sKTtcXG4rXFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XFxuIFxcdGlmIChlbnRyeS1cXHUwMDNlb2JqY2cpIHtcXG4gXFx0XFx0b2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS1cXHUwMDNlb2JqY2csIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbiBcXHRcXHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cXHUwMDNlb2JqY2cpO1xcbkBAIC05MjMsNyArOTU4LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cXHUwMDNlcG9vbDtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcXG4gXFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG5AQCAtOTY0LDcgKzk5OSw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXFxcIkRlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LVxcdTAwM2UlZClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF90eXBlKGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF9vZmZzZXQoZW50cnktXFx1MDAzZXN3cGVudHJ5KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZXBvb2wtXFx1MDAzZXRmbV9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwb29sLVxcdTAwM2V0Zm1fbmFtZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZWxlbmd0aCwgZGxlbik7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xNDU3LDcgKzE0OTIsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXFxuIFxcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXFxuIFxcdCAqL1xcbi1cXHRlbnRyeS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuK1xcdGVudHJ5LVxcdTAwM2Vwb29sX2lkeCA9IHBvb2wtXFx1MDAzZWlkeDtcXG4gXFx0ZW50cnktXFx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcXG4gXFx0ZW50cnktXFx1MDAzZW9iamNnID0gb2JqY2c7XFxuIFxcdGVudHJ5LVxcdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MDYuMDIwNjU5NDk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1MTY2MzUxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfc3dhcG9uXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgenN3YXAgbG9naWMgYnkgcmVwbGFjaW5nIHRoZSBwb29sIHBvaW50ZXIgaW4genN3YXBfZW50cnkgd2l0aCBhIHUxNiBpbmRleCBtYXBwZWQgdmlhIGFuIHhhcnJheS4gVGhpcyBhZmZlY3RzIHBvb2wgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbnRyeSBhbGxvY2F0aW9uLCBhbmQgZnJlZWluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4genN3YXAgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSB0aGUgbmV3IGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzQzZjUzNzhiYjZkN2JlM2M0MjZlNDIxOGE5MjIwOWY5NzY4MDVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDU6MzM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNGU3NmE0YTg3Y2RjYzAuLjZjMjkwOThkYThkNWVhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTM1LDYgKzM1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG5AQCAtMTU3LDkgKzE1OCwyMiBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHUxNiBpZHg7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4rLypcbisgKiBFbnRyaWVzIHN0b3JlIGEgdTE2IHBvb2wgaW5kZXggaW5zdGVhZCBvZiBhbiA4LWJ5dGUgcG9vbCBwb2ludGVyLlxuKyAqIEluZGljZXMgYXJlIGFsbG9jYXRlZCBoZXJlIGF0IHBvb2wgY3JlYXRpb24gYW5kIHJlbGVhc2VkIGF0IGRlc3RydWN0aW9uLlxuKyAqIExpdmUgZW50cmllcyBwaW4gdGhlIHBvb2wsIHNvIGl0cyBpbmRleCBpcyBub3QgcmV1c2VkIHVuZGVyIHRoZW0uXG4rICovXG4rc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MoenN3YXBfcG9vbHNfeGEpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9ieV9pbmRleCh1MTYgaWR4KVxuK3tcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBpZHgpO1xuK31cbitcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xODIsNyArMTk2LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcbiAgKiAgICAgICAgICAgICAgbG9naWMgaWYgcmVmZXJlbmNlZCBpcyB1bnNldC4gU2VlIGNvbW1lbnRzIGluIHRoZSBzaHJpbmtlclxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LlxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXG4rICogcG9vbF9pZHggLSB6c3dhcF9wb29sIGluZGV4LCByZXNvbHZlZCB2aWEgenN3YXBfcG9vbF9ieV9pbmRleCgpLlxuICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YVxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCdzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxuQEAgLTE5MSwxMiArMjA1LDIwIEBAIHN0cnVjdCB6c3dhcF9lbnRyeSB7XG4gXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbiBcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gXHRib29sIHJlZmVyZW5jZWQ7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbitcdHUxNiBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbit7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX3Bvb2xfYnlfaW5kZXgoZW50cnktXHUwMDNlcG9vbF9pZHgpO1xuK1xuK1x0Vk1fV0FSTl9PTl9PTkNFKCFwb29sKTtcbitcdHJldHVybiBwb29sO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBcbkBAIC0yNzUsNiArMjk3LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHRjaGFyIG5hbWVbMzhdOyAvKiAnenN3YXAnICsgMzIgY2hhciAobWF4KSBudW0gKyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbitcdHUzMiBpZHg7XG4gXG4gXHRpZiAoIXpzd2FwX2hhc19wb29sIFx1MDAyNlx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMzIyLDEwICszNDUsMTggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiBcbitcdHJldCA9IHhhX2FsbG9jKFx1MDAyNnpzd2FwX3Bvb2xzX3hhLCBcdTAwMjZpZHgsIHBvb2wsIHhhX2xpbWl0XzE2YixcbitcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBpZHhfZmFpbDtcbitcdHBvb2wtXHUwMDNlaWR4ID0gaWR4O1xuK1xuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcImNyZWF0ZWRcIiwgcG9vbCk7XG4gXG4gXHRyZXR1cm4gcG9vbDtcbiBcbitpZHhfZmFpbDpcbitcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzY2LDYgKzM5Nyw4IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJkZXN0cm95aW5nXCIsIHBvb2wpO1xuIFxuK1x0eGFfZXJhc2UoXHUwMDI2enN3YXBfcG9vbHNfeGEsIHBvb2wtXHUwMDNlaWR4KTtcbitcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG5AQCAtNzY0LDkgKzc5NywxMSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4rXG4gXHR6c3dhcF9scnVfZGVsKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuK1x0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4rXHR6c3dhcF9wb29sX3B1dChwb29sKTtcbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZykge1xuIFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVx1MDAzZW9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuIFx0XHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cdTAwM2VvYmpjZyk7XG5AQCAtOTIzLDcgKzk1OCw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGVudHJ5LVx1MDAzZXBvb2w7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4O1xuQEAgLTk2NCw3ICs5OTksNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRwcl9hbGVydF9yYXRlbGltaXRlZChcIkRlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LVx1MDAzZSVkKVxcblwiLFxuIFx0XHRcdFx0XHRcdHN3cF90eXBlKGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbiBcdFx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbi1cdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXRmbV9uYW1lLFxuK1x0XHRcdFx0XHRcdHBvb2wtXHUwMDNldGZtX25hbWUsXG4gXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlbGVuZ3RoLCBkbGVuKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTQ1Nyw3ICsxNDkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdCAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmdcbiBcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXG4gXHQgKi9cbi1cdGVudHJ5LVx1MDAzZXBvb2wgPSBwb29sO1xuK1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjA2LjAyMDY2MDkyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Njg3OTE1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWnN3YXAgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3pzd2FwLmNgLiBJdCdzIGEgcHJldHR5IGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4gRXNzZW50aWFsbHksIHRoZXkncmUgc3dhcHBpbmcgb3V0IGEgZnVsbCA4LWJ5dGUgcG9pbnRlciwgdGhlIGBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbGAgd2l0aGluIHRoZSBgc3RydWN0IHpzd2FwX2VudHJ5YCwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGEgYHUxNiBwb29sX2lkeGAuIFRoYXQncyBhIHNpZ25pZmljYW50IHNpemUgcmVkdWN0aW9uLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwsIHdoZXJlIGV2ZXJ5IGJ5dGUgY291bnRzLiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBhbiB4YXJyYXksIGB6c3dhcF9wb29sc194YWAsIHRvIGhhbmRsZSB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZXNlIGBwb29sX2lkeGAgdmFsdWVzIGFuZCB0aGUgYWN0dWFsIGBzdHJ1Y3QgenN3YXBfcG9vbGAgcG9pbnRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIHBhcnQgb2YgenN3YXAsIG5vdCBqdXN0IHNvbWUgdHJpdmlhbCBhZGp1c3RtZW50LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBac3dhcCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGtlcm5lbCBjb25maWcsIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGEgc3BlY2lmaWMgb3B0aW9uIHRvIGJlIHR1cm5lZCBvbj8gSSdsbCBydW4gYGdyZXBwZXJgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgWlNXQVBgLiBUaGF0IHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IGFuZCBzY29wZSBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjcyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MDkuODg5NDU1NTk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODUxMDUzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjEyLjY3NDU2NjM3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzY3NDQ4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QsIGFzc3VtaW5nIEknbSBidWlsZGluZyBhIGtlcm5lbDpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgWnN3YXAgVGVzdGluZyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBlbnN1cmUgdGhhdCB6c3dhcCBpcyB0aG9yb3VnaGx5IHRlc3RlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBlbmFibGVkLCBzcGVjaWZpY2FsbHkgYENPTkZJR19aU1dBUGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2Ug4oCTIHdpdGhvdXQgdGhhdCwgdGhlcmUncyBubyB6c3dhcCB0byB0ZXN0LiBBbmQsIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIGFuZCBndWFyYW50ZWUgaXQncyBhY3R1YWxseSBydW5uaW5nLCBJJ20gbGVhbmluZyB0b3dhcmRzIGFsc28gZW5hYmxpbmcgYENPTkZJR19aU1dBUF9ERUZBVUxUX09OYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gaGF2ZSB6c3dhcCBhY3RpdmUgYnkgZGVmYXVsdCBkdXJpbmcgaW5pdGlhbCB0ZXN0aW5nIGFuZCB0byBjb25maXJtIHRoZSBleHBlY3RlZCBiZWhhdmlvci5cblxuT2YgY291cnNlLCB3ZSdsbCBuZWVkIHJlZ3VsYXIgc3dhcCBzdXBwb3J0LCB3aGljaCBpcyBgQ09ORklHX1NXQVBgLiBJdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCBleHBsaWNpdGx5LiBJdCdkIGJlIGZvb2xpc2ggdG8gb3Zlcmxvb2sgdGhhdC5cblxuU28sIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcsIG15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyBgWlNXQVBgLiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkLCBvciB0aGF0IGltcGFjdCBpdHMgYmVoYXZpb3IsIHRoYXQgSSdtIG92ZXJsb29raW5nPyBUaW1lIHRvIGdldCBncmFudWxhciB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYyMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjE2LjUxMTMxNDExMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyNzY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MTYuNjMwNTk0OTY4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNzExMDMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IGZlZWxpbmcgc2F5cyB0aGUgY29yZSBpcyBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IGFyb3VuZCBsaW5lIDIyIOKAkyB0aGF0J3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLiBJdCdzIGEgYnJvYWQgYXJlYSwgc28gemVyb2luZyBpbiBsaWtlIHRoaXMgaGVscHMuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZC4gSG9wZWZ1bGx5LCBpdCBpcyBub3QgdG9vIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzoxOS4zMzc3MDY2OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MTkuMzM3ODE1NTkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NjkxMDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipac3dhcCBGb2N1cyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBaU1dBUGAgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCBhcmUgaW4gcGxheSwgZ29vZC4gTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgcmVhbCB0YXJnZXRzIGZvciBmdXp6aW5nIGhlcmU/IFRoZSBwYXRjaCBwb2ludHMgdG8gbW9kaWZpY2F0aW9ucyBpbiBgenN3YXBfcG9vbF9jcmVhdGVgLCBgenN3YXBfcG9vbF9kZXN0cm95YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBgenN3YXBfc3RvcmVfcGFnZWAuXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS96c3dhcC5jYC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvc2VkIGFzIEFQSSBlbnRyeSBwb2ludHMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgZm9yIGZ1enppbmcgd2lsbCBsaWUuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzoyMy4wOTQ3Mjg5OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE0NzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP1thLXpfXSsgenN3YXBfW2Etel9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz03OT1zdGF0aWMgYm9vbCB6c3dhcF9wb29sX3JlYWNoZWRfZnVsbDtcXG4tLVxcbm1tL3pzd2FwLmMtODYtXFxubW0venN3YXAuYzo4NzpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xcbm1tL3pzd2FwLmMtODgtXFxuLS1cXG5tbS96c3dhcC5jPTkxPXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jOjkyOnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbm1tL3pzd2FwLmMtOTMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTAxPXN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5tbS96c3dhcC5jOjEwMjpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcXG5tbS96c3dhcC5jLTEwMy1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopO1xcbi0tXFxubW0venN3YXAuYz0xMjQ9bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcbm1tL3pzd2FwLmMtMTI1LVxcbm1tL3pzd2FwLmM6MTI2OmJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTI3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTMwLVxcbm1tL3pzd2FwLmM6MTMxOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMyLXtcXG4tLVxcbm1tL3pzd2FwLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0zOTMtXFxubW0venN3YXAuYzozOTQ6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtMzk1LXtcXG4tLVxcbm1tL3pzd2FwLmM9NDQ4PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbi0tXFxubW0venN3YXAuYy00NTYtLyogVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZS4gKi9cXG5tbS96c3dhcC5jOjQ1NzpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2dldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5tbS96c3dhcC5jLTQ1OC17XFxuLS1cXG5tbS96c3dhcC5jLTQ2MS1cXG5tbS96c3dhcC5jOjQ2MjpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX3B1dChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5tbS96c3dhcC5jLTQ2My17XFxuLS1cXG5tbS96c3dhcC5jPTUyOT11bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTU0MS1cXG5tbS96c3dhcC5jOjU0MjpzdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcXG5tbS96c3dhcC5jLTU0My17XFxuLS1cXG5tbS96c3dhcC5jLTU2MC1cXG5tbS96c3dhcC5jOjU2MTpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxubW0venN3YXAuYy01NjIte1xcbi0tXFxubW0venN3YXAuYy02NDktXFxubW0venN3YXAuYzo2NTA6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXFxubW0venN3YXAuYy02NTEtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS96c3dhcC5jPTY5Nj1zdGF0aWMgaW5saW5lIGludCBlbnRyeV90b19uaWQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtNzAwLVxcbm1tL3pzd2FwLmM6NzAxOnN0YXRpYyB2b2lkIHpzd2FwX2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpsaXN0X2xydSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTcwMi17XFxuLS1cXG5tbS96c3dhcC5jLTcyMy1cXG5tbS96c3dhcC5jOjcyNDpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbGlzdF9scnUsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03MjUte1xcbi0tXFxubW0venN3YXAuYy03MzUtXFxubW0venN3YXAuYzo3MzY6dm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0venN3YXAuYy03Mzcte1xcbi0tXFxubW0venN3YXAuYy03NDAtXFxubW0venN3YXAuYzo3NDE6dm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTc0Mi17XFxuLS1cXG5tbS96c3dhcC5jLTc2Mi0gKi9cXG5tbS96c3dhcC5jOjc2Mzp2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0venN3YXAuYy03NjQte1xcbi0tXFxubW0venN3YXAuYz03ODA9c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxcbi0tXFxubW0venN3YXAuYy03ODgtXFxubW0venN3YXAuYzo3ODk6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbm1tL3pzd2FwLmMtNzkwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNzk3LSAqL1xcbm1tL3pzd2FwLmM6Nzk4OnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc5OS17XFxuLS1cXG5tbS96c3dhcC5jLTgxNy0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6ODE4OnN0YXRpYyBpbnQgenN3YXBfY3B1X2NvbXBfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSlcXG5tbS96c3dhcC5jLTgxOS17XFxuLS1cXG5tbS96c3dhcC5jLTg3NC1cXG5tbS96c3dhcC5jOjg3NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTg3Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4tLVxcbm1tL3pzd2FwLmMtOTU4LVxcbm1tL3pzd2FwLmM6OTU5OnN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTk2MC17XFxuLS1cXG5tbS96c3dhcC5jLTEwMjEtICovXFxubW0venN3YXAuYzoxMDIyOnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy0xMDIzLVxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmM9MTM0Mz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL3pzd2FwLmMtMTQzMi1cXG5tbS96c3dhcC5jOjE0MzM6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS96c3dhcC5jLTE0MzQtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS96c3dhcC5jLTE1MTItXFxubW0venN3YXAuYzoxNTEzOmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTE1MTQte1xcbi0tXFxubW0venN3YXAuYy0xNjE4LSAqL1xcbm1tL3pzd2FwLmM6MTYxOTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTYyMC17XFxuLS1cXG5tbS96c3dhcC5jLTE2NzEtXFxubW0venN3YXAuYzoxNjcyOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0xNjczLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTY4NS1cXG5tbS96c3dhcC5jOjE2ODY6aW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5tbS96c3dhcC5jLTE2ODcte1xcbi0tXFxubW0venN3YXAuYy0xNzA1LVxcbm1tL3pzd2FwLmM6MTcwNjp2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpXFxubW0venN3YXAuYy0xNzA3LXtcXG4tLVxcbm1tL3pzd2FwLmM9MTc1MD1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzX2ZvcHMsXFxuLS1cXG5tbS96c3dhcC5jLTE3NTItXFxubW0venN3YXAuYzoxNzUzOnN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxubW0venN3YXAuYy0xNzU0LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTc4Ni0jZWxzZVxcbm1tL3pzd2FwLmM6MTc4NzpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc4OC17XFxuLS1cXG5tbS96c3dhcC5jLTE3OTUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjE3OTY6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjIzLjIzMjg4MDk3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ3OTA5OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgWnN3YXA6IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHpzd2FwIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBXZSd2ZSBnb3QgdGhlIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50czogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gLCBhbmQgYHpzd2FwX3N3YXBvZmZgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcywgdGhlIG9uZXMgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGguXG5cbk5vdywgZ2xhbmNpbmcgYXQgdGhlIHBhdGNoLCBpdCBzZWVtcyB0byBiZSB0b3VjaGluZyBmdW5jdGlvbnMgbGlrZSBgenN3YXBfcG9vbF9jcmVhdGVgLCBgenN3YXBfcG9vbF9kZXN0cm95YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBgenN3YXBfc3RvcmVfcGFnZWAuIFRoZXNlIHNlZW0gdG8gYmUgbW9zdGx5IHN0YXRpYyBoZWxwZXJzLiBCdXQgSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIG5vdzogYHpzd2FwX3N0b3JlYCBpcyBjYWxsaW5nIGB6c3dhcF9zdG9yZV9wYWdlYC4gYHpzd2FwX2xvYWRgIHJlbGllcyBvbiBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBgenN3YXBfaW52YWxpZGF0ZWAgY2FsbHMgYHpzd2FwX2VudHJ5X2ZyZWVgLlxuXG5UaGVyZWZvcmUsIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIGVmZmVjdGl2ZSBmdXp6aW5nIGlzIHRvIGZvY3VzIG9uIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYW5kIGB6c3dhcF9pbnZhbGlkYXRlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IG9yY2hlc3RyYXRlIHRoZSBjb3JlIG9wZXJhdGlvbnMsIGFuZCB3ZSBjYW4gdGVzdCB0aGUgaW5wdXRzIGFuZCBjb25kaXRpb25zIGZyb20gb3V0c2lkZS4gVGhlIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAgZW50cnkgcG9pbnRzIGFsc28gc2VlbSBsaWtlIGRlY2VudCBjaG9pY2VzIHRvIGluY2x1ZGUuXG5cbkkgd2lsbCB0YWtlIGEgbW9tZW50IHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfc3RvcmVgIGlzIGV4cG9ydGVkIGFuZCBhdmFpbGFibGUsIG9yIGRldGVybWluZSBob3cgaXQgY2FuIGJlIGFwcHJvcHJpYXRlbHkgaW52b2tlZC4gVGhpcyB3aWxsIHRoZW4gYWxsb3cgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU2NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzoyOC44ODA3OTk0NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzUxNTMxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc3RvcmVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mjc9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mjg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMjktaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDA9c3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDEtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjQyOnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC00My17XFxuLS1cXG5tbS9wYWdlX2lvLmM9MjAzPWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTIzNi1cXG5tbS9wYWdlX2lvLmM6MjM3OlxcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcXG5tbS9wYWdlX2lvLmMtMjM4LVxcdFxcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTU5PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTAxNi0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjEwMTc6ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxcbm1tL3pzd2FwLmMtMTAxOC0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cXG4tLVxcbm1tL3pzd2FwLmM9MTQzMz1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNTEyLVxcbm1tL3pzd2FwLmM6MTUxMzpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6MzEuNTE1OTU3OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NTM3MzMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqWnN3YXAgRnVuY3Rpb24gQ2FsbHMgXHUwMDI2IEludmFsaWRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgbXkgbWVudGFsIG1hcCBvZiB0aGUgenN3YXAgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgaXMgYmVpbmcgcmVmcmVzaGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNhbGwgZmxvdyBub3cuIFJpZ2h0LCBzbyBgenN3YXBfc3RvcmVgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcHV0dGluZyBwYWdlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGNhY2hlLCBhbmQgSSByZW1lbWJlciB0aGF0J3MgdHJpZ2dlcmVkIGZyb20gYHN3YXBfd3JpdGVvdXRgIGluIGBtbS9wYWdlX2lvLmNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGFzIHBhZ2VzIGFyZSB3cml0dGVuIG91dCB0byB0aGUgc3dhcCBwYXJ0aXRpb24sIHRoZXkncmUgaW50ZXJjZXB0ZWQgYW5kIHBvdGVudGlhbGx5IGNvbXByZXNzZWQgaW4genN3YXAgZmlyc3QuIEdvb2QuXG5cbk5vdywgYHpzd2FwX2xvYWRgIGlzIG9idmlvdXNseSB0aGUgY291bnRlcnBhcnQsIHB1bGxpbmcgcGFnZXMgKmZyb20qIHpzd2FwLiBBbmQgdGhhdCwgYXMgZXhwZWN0ZWQsIGlzIGNhbGxlZCBmcm9tIGBzd2FwX3JlYWRfZm9saW9gLCBhbHNvIGluIGBtbS9wYWdlX2lvLmNgLiBUaGF0J3MgdGhlIHJlYWQgcGF0aCwgcmlnaHQ/IFdoZW4gdGhlIHN5c3RlbSBuZWVkcyBhIHBhZ2UgZnJvbSBzd2FwLCBpdCBjaGVja3MgenN3YXAgZmlyc3QuXG5cbkZpbmFsbHksIGB6c3dhcF9pbnZhbGlkYXRlYCBpcyBjYWxsZWQgdG8gcmVtb3ZlIG9yIGNsZWFyIGFuIGVudHJ5IGZyb20gdGhlIGNvbXByZXNzZWQgY2FjaGUsIHdoZW4gYSBwYWdlIG5lZWRzIHRvIGJlIHN3YXBwZWQgb3V0LCBmcmVlZCwgb3Igb3RoZXJ3aXNlIHJlbW92ZWQgZnJvbSB0aGUgc3dhcCBwYXJ0aXRpb24uIEkga25vdyB0aGF0J3MgdHJpZ2dlcmVkIGZyb20gYHN3YXBfZnJlZWAgb3IgYSBzaW1pbGFyIHN3YXAtcmVsYXRlZCBmdW5jdGlvbi4gR29vZC5cblxuU28sIHdoZXJlIGRvIEkgc3RhcnQgZGlnZ2luZyBpbiB0byBzZWUgaG93IGl0cyB3b3JraW5nPyBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGB6c3dhcF9sb2FkYCBhbmQgdGhlbiBgenN3YXBfaW52YWxpZGF0ZWAsIHRvIHJlbWluZCBteXNlbGYgaG93IHRob3NlIGZ1bmN0aW9ucyB3b3JrLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgYW0gdXAgdG8gc3BlZWQgd2l0aCBhbnkgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjM1LjY3MTMzNDUwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDIwNzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9sb2FkXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTI4PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjI5OmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zMC12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD00Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC00Ni1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NDc6c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC00OC17XFxuLS1cXG5tbS9wYWdlX2lvLmM9NDUxPXZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTQ3OC1cXG5tbS9wYWdlX2lvLmM6NDc5OlxcdGlmICh6c3dhcF9sb2FkKGZvbGlvKSAhPSAtRU5PRU5UKVxcbm1tL3BhZ2VfaW8uYy00ODAtXFx0XFx0Z290byBmaW5pc2g7XFxuLS1cXG5tbS96c3dhcC5jPTE1MTM9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTk5LS8qKlxcbm1tL3pzd2FwLmM6MTYwMDogKiB6c3dhcF9sb2FkKCkgLSBsb2FkIGEgZm9saW8gZnJvbSB6c3dhcFxcbm1tL3pzd2FwLmMtMTYwMS0gKiBAZm9saW86IGZvbGlvIHRvIGxvYWRcXG4tLVxcbm1tL3pzd2FwLmMtMTYxOC0gKi9cXG5tbS96c3dhcC5jOjE2MTk6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTE2MjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzozOC4wOTU1NDc0NjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzODcwNzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGB6c3dhcF9pbnZhbGlkYXRlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGUgYHpzd2FwX2ludmFsaWRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc2l0dWF0ZSBpdCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHpzd2FwJ3Mgb3BlcmF0aW9uLCBwYXJ0aWN1bGFybHkgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgaW50ZWdyaXR5LiBJIGtub3cgdGhpcyBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyB0aGF0IGNvbXByZXNzZWQgZGF0YSByZXNpZGluZyBpbiB6c3dhcCBkb2Vzbid0IGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzIG9yIGNvcnJ1cHRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBtZW1vcnkuIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHN3YXAgY2FjaGUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHJlY2xhaW0uIEknbSBpbWFnaW5pbmcgc2NlbmFyaW9zIGludm9sdmluZyBwYWdlIGZhdWx0cywgd3JpdGViYWNrLCBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIHRvIGRpc2NhcmQgb3IgcmUtcmVhZCBkYXRhIHdoZW4gdGhlIHpzd2FwIGJhY2tpbmcgc3RvcmUgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGl0cyBsaWtlbHkgcmVzcG9uc2liaWxpdGllczogaW52YWxpZGF0aW5nIHpzd2FwIGVudHJpZXMgZm9yIHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBpbiBwaHlzaWNhbCBtZW1vcnksIGNsZWFuaW5nIHVwIHRoZSBjb21wcmVzc2VkIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyB1cCBzcGFjZSB3aXRoaW4gdGhlIHpzd2FwIHBvb2wuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBwYXJ0aWN1bGFybHkgaG93IGl0IGFmZmVjdHMgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzIHdoZW4gcGFnZXMgZ2V0IHJlLWFjY2Vzc2VkIG9yIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgdGhlIGRlbGljYXRlIGJhbGFuY2UgYmV0d2VlbiBjb21wcmVzc2VkIGRhdGEgYmVpbmcgcHJlc2VudCBvbiBkaXNrLCBhbmQgdGhlIHVuZGVybHlpbmcgcGFnZXMgc3RpbGwgYmVpbmcgdmFsaWQuXG5cbkknbSBleHBlY3RpbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyDigJMgd2hhdCBoYXBwZW5zIHdpdGggbXVsdGlwbGUgcHJvY2Vzc2VzIGNvbmN1cnJlbnRseSBhY2Nlc3NpbmcgdGhlIHNhbWUgcGFnZXMgb3IgdGhlIHpzd2FwIHBvb2w/IEFyZSB0aGVyZSBsb2NrcyBpbnZvbHZlZD8gSG93IGFyZSByYWNlIGNvbmRpdGlvbnMgaGFuZGxlZCB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbj8gV2hhdCBhYm91dCBpbnRlcnJ1cHQgaGFuZGxlcnM/XG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3Igc2FmZXR5IGNoZWNrcy4gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGVycm9yIHBhdGhzIGFuZCByb2J1c3QgbWVjaGFuaXNtcyB0byBkZWFsIHdpdGggdW5leHBlY3RlZCBzaXR1YXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCB0aGV5IHNpZ25hbC4gQW5kIGhvdyBpdCBoYW5kbGVzIGNvbmRpdGlvbnMgbGlrZSBvdXQtb2YtbWVtb3J5IG9yIGNvcnJ1cHRpb24uIEkga25vdyB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxpa2UgdGhpcywgc28gSSB3aWxsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hhdCBoYXBwZW5zIGR1cmluZyBhIGB6c3dhcF9pbnZhbGlkYXRlYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6NDIuMjM0MjU3MTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMDgyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ludmFsaWRhdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mjk9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjMwOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zMS1pbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD00Nz1zdGF0aWMgaW5saW5lIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTEtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjUyOnN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCkge31cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTMtc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vc3dhcGZpbGUuYz0xMzE2PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzIzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxubW0vc3dhcGZpbGUuYzoxMzI0OlxcdFxcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKSk7XFxubW0vc3dhcGZpbGUuYy0xMzI1LVxcbi0tXFxubW0venN3YXAuYz0xNjE5PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE2NzEtXFxubW0venN3YXAuYzoxNjcyOnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0xNjczLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6NDQuNjQ1MzQ0MzAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDgzMzQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHpzd2FwIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHdoaWNoIHN5bWJvbHMgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kLCB0aGVyZWZvcmUsIHdoaWNoIG9uZXMgSSBuZWVkIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gemVyb2luZyBpbiBvbjogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF9zd2Fwb25gLCBhbmQgYHpzd2FwX3N3YXBvZmZgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBpbGx1c3RyYXRlIHRoZSBjaGFuZ2VzLlxuXG5GdW5jdGlvbmFsbHksIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBwYXRjaCBpcyBhbHRlcmluZyBob3cgenN3YXAgZW50cmllcyBzdG9yZSB0aGUgcG9vbCByZWZlcmVuY2UsIHdoaWNoIGlzIGEga2V5IHN0cnVjdHVyYWwgc2hpZnQuIFJlcGxhY2luZyB0aGUgcG9pbnRlciB3aXRoIGFuIGluZGV4IGludG8gYW4geGFycmF5IGlzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSByYW1pZmljYXRpb25zIGNvdWxkIGJlIHNpZ25pZmljYW50LCBhbmQgSSB3YW50IHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgdnVsbmVyYWJpbGl0aWVzIGhlcmUuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gZnV6emluZywgSSB3YW50IHRvIGNvbmZpcm0gSSd2ZSBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgcGF0Y2guIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1pTV0FQYCBhbmQgYENPTkZJR19aU1dBUF9ERUZBVUxUX09OYCBhcmUgc2V0IGNvcnJlY3RseSwgYW5kIHRoYXQgYENPTkZJR19TV0FQYCwgYXMgdGhlIHBhcmVudCBjb25maWcsIGlzIGFsc28gcHJvcGVybHkgZW5hYmxlZC4gQXJlIHRoZXJlIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaCB1cGZyb250IHRvIGF2b2lkIHdhc3RpbmcgdGltZSBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzM6NDguOTUzNjg1MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDY4ODAyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbiBaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjM3OlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxubW0vS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIFpTV0FQXFxubW0vS2NvbmZpZy00OC1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxubW0vS2NvbmZpZy02MC1cXHRwcm9tcHQgXFxcIkRlZmF1bHQgY29tcHJlc3NvclxcXCJcXG5tbS9LY29uZmlnOjYxOlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTYyLVxcdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbi0tXFxubW0vS2NvbmZpZz0xMTQ9Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5tbS9LY29uZmlnOjExNjogICAgICAgZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctMTE3LSAgICAgICBkZWZhdWx0IFxcXCJkZWZsYXRlXFxcIiBpZiBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzo1MS4xMDA1NzMwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1NDAzMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25jZXB0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBaU1dBUCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byB0aGUgY29yZSBvZiB0aGlzLiBXaGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgenN3YXAsIHRoZSB0d28gYmlnIHBsYXllcnMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQgYXJlIGBaU1dBUGAgaXRzZWxmIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAuIFRob3NlIGFyZSB0aGUgZnVuZGFtZW50YWwgZmxhZ3MgdGhhdCBjb250cm9sIGl0cyBiZWhhdmlvciwgdGhlIG1haW4gbGV2ZXJzIHdlIGhhdmUgdG8gcHVsbC5cblxuTm93LCB3aGVyZSBkbyB0aG9zZSBsZXZlcnMgY29ubmVjdD8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSAqZG8qIHNvbWV0aGluZyB3aXRoIHpzd2FwLiBJJ2QgYmV0dGVyIGNoZWNrIGB6c3dhcF9zd2Fwb25gIGFuZCBgenN3YXBfc3dhcG9mZmAuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGVuZHBvaW50cyDigJMgdGhlIGVudHJ5IGFuZCBleGl0IHBvaW50cywgdGhlIG9uL29mZiBzd2l0Y2hlcyB0aGF0IG1ha2UgenN3YXAgYWN0aXZlIG9yIGluYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrLCBob3cgdGhleSdyZSBpbXBsZW1lbnRlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gS25vd2luZyB0aGUgY29udHJvbCBwb2ludHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGFyY2hpdGVjdHVyZS4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgWlNXQVAgYW5kIGNvbnNpZGVyIHRoZSB3aWRlciBzeXN0ZW0gZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozMzo1NC45MTU5NzkyNzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDQ1NTU1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc3dhcG9uXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTMwPXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaDozMTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzItdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD01Mj1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjUzOnN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTQte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNjA2PVNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM3NTgtXFxubW0vc3dhcGZpbGUuYzozNzU5OlxcdGVycm9yID0genN3YXBfc3dhcG9uKHNpLVxcdTAwM2V0eXBlLCBtYXhwYWdlcyk7XFxubW0vc3dhcGZpbGUuYy0zNzYwLVxcdGlmIChlcnJvcilcXG4tLVxcbm1tL3pzd2FwLmM9MTY3Mj12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxcbi0tXFxubW0venN3YXAuYy0xNjg1LVxcbm1tL3pzd2FwLmM6MTY4NjppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3pzd2FwLmMtMTY4Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjMzOjU3LjQ2MDU0MDk0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODkyNzQ1NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFpzd2FwIFBhdGNoIEZvY3VzKipcblxuT2theSwgc28gdGhlIHRleHQgaXMgZ3VpZGluZyBtZSB0b3dhcmRzIGZvY3VzaW5nIG15IGZ1enppbmcgZWZmb3J0cyBvbiBzcGVjaWZpYyB6c3dhcCBmdW5jdGlvbnMsIGFuZCBJIHVuZGVyc3RhbmQgd2h5LiBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGF0IGBzd2Fwb25gIGFuZCBgc3dhcG9mZmAgc3lzY2FsbHMgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyB0byBjb25zaWRlci4gVGhpcyBwb2ludHMgbWUgdG8ga2V5IHN5bWJvbHM6IGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgenN3YXBfc3dhcG9uYCwgYW5kIGB6c3dhcF9zd2Fwb2ZmYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHBvaW50cyB3aGVyZSB0aGUgbW9kaWZpZWQgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGl0cyBsaWZldGltZSBtYW5hZ2VtZW50IHdvdWxkIGJlIG1vc3QgbGlrZWx5IHRvIGV4cG9zZSBidWdzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGNoYW5naW5nIGhvdyB0aGUgenN3YXAgZW50cnksIHNwZWNpZmljYWxseSB0aGUgcG9vbCBwb2ludGVyLCBpcyBoYW5kbGVkLiBOb3csIGl0J3MgYW4gYHUxNmAgaW5kZXggbWFwcGVkIHVzaW5nIGFuIHhhcnJheS4gVGhpcyBjaGFuZ2UgZnVuZGFtZW50YWxseSBpbXBhY3RzIGhvdyBwb29scyBhcmUgY3JlYXRlZCwgZGVzdHJveWVkLCBhbmQgaG93IGVudHJpZXMgd2l0aGluIHRoZSBwb29sIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBUaGUgcHJvdmlkZWQgcmVhc29uaW5nIG1ha2VzIHBlcmZlY3Qgc2Vuc2U6IGZ1enppbmcgdGhlc2UgbWFpbiBlbnRyeSBwb2ludHPigJR0aGUgY3JpdGljYWwgcGF0aCBmdW5jdGlvbnPigJRpcyBwYXJhbW91bnQgdG8gZW5zdXJlIHRoZSBuZXcgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgb3BlcmF0ZSBjb3JyZWN0bHkuXG5cbkknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHpzd2FwX3Bvb2xfY3JlYXRlYCBhbmQgYHpzd2FwX3Bvb2xfZGVzdHJveWAgYXJlIGluZGVlZCByZWFjaGFibGUgZnJvbSB0aGUgZnVuY3Rpb25zLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgbm93LiBgenN3YXBfcG9vbF9jcmVhdGVgLCBmb3IgaW5zdGFuY2UsIGlzIGxpa2VseSBjYWxsZWQgd2hlbiBhIG5ldyBwb29sIGlzIG5lZWRlZCwgcGVyaGFwcyB3aGVuIHRoZSBjb21wcmVzc29yIGFsZ29yaXRobSBjaGFuZ2VzIG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSdsbCB0YWtlIGEgY2xvc2UgbG9vayBhdCBgenN3YXBfcG9vbF9jcmVhdGVgIHRvIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtb3JlIGNvcmUgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY4MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNTozNDowMi4zNTMyODkyMzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTEyNzQ2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfcG9vbF9jcmVhdGVcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTI2Nz1zdGF0aWMgdm9pZCBhY29tcF9jdHhfZnJlZShzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4KVxcbi0tXFxubW0venN3YXAuYy0yOTQtXFxubW0venN3YXAuYzoyOTU6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbm1tL3pzd2FwLmMtMjk2LXtcXG4tLVxcbm1tL3pzd2FwLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0zOTAtXFxubW0venN3YXAuYzozOTE6XFx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmMtMzkyLX1cXG4tLVxcbm1tL3pzd2FwLmM9NTYxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNjAzLVxcdGlmICghcG9vbClcXG5tbS96c3dhcC5jOjYwNDpcXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxubW0venN3YXAuYy02MDUtXFx0ZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA1OjM0OjA0LjcwNDU2OTMwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI0OTExNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFpzd2FwIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIHpzd2FwIGZ1bmN0aW9uYWxpdHkuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYHpzd2FwX3Bvb2xfY3JlYXRlYCBmdW5jdGlvbiBpcyBrZXkuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHRoZSBtZW1vcnkgcG9vbCBmb3IgenN3YXAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBjcnVjaWFsbHksIGl0J3MgY2FsbGVkIGluIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHNjZW5hcmlvcy4gRmlyc3QsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gc29tZW9uZSBjaGFuZ2VzIHRoZSBjb21wcmVzc29yIHZpYSBzeXNmcyB1c2luZyBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLiBTZWNvbmQsIGFuZCBwcm9iYWJseSBtb3JlIGZyZXF1ZW50bHksIGl0J3MgY2FsbGVkIHRocm91Z2ggYF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2tgIGlmIHRoZSBwb29sIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBhbmQgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBzdG9yZSBhIHN3YXAgZW50cnkgdmlhIGB6c3dhcF9zdG9yZWAuXG5cblRoaXMgdGVsbHMgbWUgZnV6emluZyBgenN3YXBfc3RvcmVgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmlnZ2VyIGB6c3dhcF9wb29sX2NyZWF0ZWAuIEl0J3MgYSBkaXJlY3QgcGF0aCB0byBleGVyY2lzaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gY29kZS4gQW5kLCBhcyBhIHNlY29uZGFyeSBlbnRyeXBvaW50LCBJIGNhbiB1c2UgdGhlIHN5c2ZzIGNhbGxiYWNrIG1lY2hhbmlzbSBvZiBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgIGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3pzd2FwL3BhcmFtZXRlcnMvY29tcHJlc3NvcmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYW5vdGhlciwgc29tZXdoYXQgY29udHJvbGxlZCwgd2F5IHRvIGNhbGwgdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIGZ1enplciBzZXR1cCB3aWxsIGRlZmluaXRlbHkgaW5jbHVkZSBgenN3YXBfc3RvcmVgLiBJIHdpbGwgYWxzbyBpbmNvcnBvcmF0ZSBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3N3YXBvbmAgYW5kIGB6c3dhcF9zd2Fwb2ZmYC4gVGhlc2UgYXJlIHRoZSBjb3JlIHpzd2FwIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBkYXRhIG1vdmVtZW50IGFuZCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3dhcCBzcGFjZS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UsIGFzIGB6c3dhcF9zdG9yZWAgZG9lc24ndCBleGlzdCBpbiBpc29sYXRpb247IGl0IGhhcyB0byBiZSBwYWlyZWQgd2l0aCBgenN3YXBfbG9hZGAgKG9yIGF0IGxlYXN0IHVzZWQgdG8gc2V0dXAgc3RhdGUgdG8gdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMpLlxuXG5VbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBzZXQtcmVzdWx0cyBhcHByb2FjaCwgd2hlcmUgSSBjYW4gbW9uaXRvciB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSBhbmQgc2VlIGlmIGFueXRoaW5nIGlzIGFtaXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUyMywiT3V0cHV0VG9rZW5zIjoxNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDU6MzQ6MTAuNDI5NDg0MDM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3ODA3Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb25cIixcbiAgICBcInpzd2FwX3N3YXBvZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB6c3dhcCBsb2dpYyBieSByZXBsYWNpbmcgdGhlIHBvb2wgcG9pbnRlciBpbiB6c3dhcF9lbnRyeSB3aXRoIGEgdTE2IGluZGV4IG1hcHBlZCB2aWEgYW4geGFycmF5LiBUaGlzIGFmZmVjdHMgcG9vbCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVudHJ5IGFsbG9jYXRpb24sIGFuZCBmcmVlaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludHMgdG8gZW5zdXJlIHRoZSBuZXcgaW5kZXgtYmFzZWQgcG9vbCBsb29rdXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfc3dhcG9uXCIsXG4gICAgXCJ6c3dhcF9zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgenN3YXAgbG9naWMgYnkgcmVwbGFjaW5nIHRoZSBwb29sIHBvaW50ZXIgaW4genN3YXBfZW50cnkgd2l0aCBhIHUxNiBpbmRleCBtYXBwZWQgdmlhIGFuIHhhcnJheS4gVGhpcyBhZmZlY3RzIHBvb2wgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbnRyeSBhbGxvY2F0aW9uLCBhbmQgZnJlZWluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1haW4genN3YXAgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSB0aGUgbmV3IGluZGV4LWJhc2VkIHBvb2wgbG9va3VwIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowf5bv4[1] Phase: Succeeded StartedAt: 2026-07-27 05:34:22 +0000 UTC FinishedAt: 2026-07-27 05:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 05:34:22 +0000 UTC FinishedAt: 2026-07-27 05:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2] Phase: Succeeded StartedAt: 2026-07-27 05:34:22 +0000 UTC FinishedAt: 2026-07-27 10:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 05:34:22 +0000 UTC FinishedAt: 2026-07-27 10:07:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 05:34:22 +0000 UTC FinishedAt: 2026-07-27 05:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 05:34:22 +0000 UTC FinishedAt: 2026-07-27 05:34:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf5bv4/series-workflowf5bv4-convert-artifact-3152793985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 05:34:32 +0000 UTC FinishedAt: 2026-07-27 06:26:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 05:34:32 +0000 UTC FinishedAt: 2026-07-27 06:26:27 +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:*2eb49b02-8b24-48bf-8231-e3c9c598986e,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-workflowf5bv4/series-workflowf5bv4-convert-artifact-3152793985/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": "d777e6e3-d52f-4cde-b55c-3e0332c0a2b6", "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-workflowf5bv4/series-workflowf5bv4-build-action-843263663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 05:34:32 +0000 UTC FinishedAt: 2026-07-27 06:26:17 +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:*2eb49b02-8b24-48bf-8231-e3c9c598986e,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-workflowf5bv4/series-workflowf5bv4-convert-artifact-3152793985/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": "d777e6e3-d52f-4cde-b55c-3e0332c0a2b6", "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-workflowf5bv4/series-workflowf5bv4-build-action-843263663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 06:26:27 +0000 UTC FinishedAt: 2026-07-27 06:26:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 06:26:27 +0000 UTC FinishedAt: 2026-07-27 06:26:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 06:26:27 +0000 UTC FinishedAt: 2026-07-27 06:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 06:26:27 +0000 UTC FinishedAt: 2026-07-27 06:26:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf5bv4/series-workflowf5bv4-convert-artifact-186911316/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 06:26:47 +0000 UTC FinishedAt: 2026-07-27 06:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 06:26:47 +0000 UTC FinishedAt: 2026-07-27 06:28:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d777e6e3-d52f-4cde-b55c-3e0332c0a2b6,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-workflowf5bv4/series-workflowf5bv4-build-action-843263663/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-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 06:29:02 +0000 UTC FinishedAt: 2026-07-27 06:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 06:29:02 +0000 UTC FinishedAt: 2026-07-27 06:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 06:29:02 +0000 UTC FinishedAt: 2026-07-27 06:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 06:29:02 +0000 UTC FinishedAt: 2026-07-27 06:57:41 +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:*2eb49b02-8b24-48bf-8231-e3c9c598986e,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-workflowf5bv4/series-workflowf5bv4-convert-artifact-186911316/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": "e50a130b-d2b3-47a3-82df-e5481a6ce598", "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-workflowf5bv4/series-workflowf5bv4-build-action-4105993760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 06:29:02 +0000 UTC FinishedAt: 2026-07-27 06:57:31 +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:*2eb49b02-8b24-48bf-8231-e3c9c598986e,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-workflowf5bv4/series-workflowf5bv4-convert-artifact-186911316/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": "e50a130b-d2b3-47a3-82df-e5481a6ce598", "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-workflowf5bv4/series-workflowf5bv4-build-action-4105993760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 06:57:41 +0000 UTC FinishedAt: 2026-07-27 06:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 06:57:41 +0000 UTC FinishedAt: 2026-07-27 06:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 06:57:41 +0000 UTC FinishedAt: 2026-07-27 06:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 06:57:41 +0000 UTC FinishedAt: 2026-07-27 06:59:25 +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:*e50a130b-d2b3-47a3-82df-e5481a6ce598,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-workflowf5bv4/series-workflowf5bv4-build-action-4105993760/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-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 10:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 10:07:20 +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":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"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:*d777e6e3-d52f-4cde-b55c-3e0332c0a2b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e50a130b-d2b3-47a3-82df-e5481a6ce598,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-workflowf5bv4/series-workflowf5bv4-build-action-843263663/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-workflowf5bv4/series-workflowf5bv4-build-action-4105993760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 06:59:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 06:59:41 +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":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"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-workflowf5bv4/series-workflowf5bv4-convert-artifact-2968135549/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 06:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 06:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 06:59:35 +0000 UTC FinishedAt: 2026-07-27 06:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 06:59:45 +0000 UTC FinishedAt: 2026-07-27 10:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5bv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_swapon","zswap_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68210527d235e59afa54bc6aba6ecc532488a82","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"cba3ed7c-005d-4785-b63e-16d17f41a522","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 06:59:45 +0000 UTC FinishedAt: 2026-07-27 10:07:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d777e6e3-d52f-4cde-b55c-3e0332c0a2b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e50a130b-d2b3-47a3-82df-e5481a6ce598,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-workflowf5bv4/series-workflowf5bv4-build-action-843263663/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-workflowf5bv4/series-workflowf5bv4-build-action-4105993760/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-workflowf5bv4/series-workflowf5bv4-convert-artifact-2968135549/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,}