Name: series-workflowwdtb2 Phase: Succeeded StartedAt: 2026-08-13 03:56:17 +0000 UTC FinishedAt: 2026-08-13 07:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[0] Phase: Succeeded StartedAt: 2026-08-13 03:56:17 +0000 UTC FinishedAt: 2026-08-13 03:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 03:56:17 +0000 UTC FinishedAt: 2026-08-13 03:59:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_SYSFS" ], "series_id": "e339fa60-04ae-4de8-99e8-483552bdf652" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_new_ctx", "damon_call" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCBiZWZvcmUgdGhlIGNvbnRleHQgd2FzIGZ1bGx5IGluaXRpYWxpemVkIG9yIGFmdGVyIGl0IHdhcyBzdG9wcGVkLiBJdCByZXBsYWNlcyBtb2R1bGUtbGV2ZWwgYm9vbGVhbiBmbGFncyB3aXRoIGEgY29udGV4dC1zcGVjaWZpYyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgZmxhZyBhbmQgYWRkcyBhIE5VTEwgY2hlY2sgZm9yIHRoZSBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbiBidWdzIChlLmcuLCBpbmRlZmluaXRlIHdhaXRzIG9yIGludmFsaWQgYWNjZXNzZXMpLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24mIzM5O3QgYmVlbiBzdGFydGVkIHlldC4gSXQgYWRkcyBhIE5VTEwgY2hlY2sgaW4gYGRhbW9uX2NhbGwoKWAgYW5kIGluaXRpYWxpemVzIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBpbiBgZGFtb25fbmV3X2N0eCgpYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIG1vZHVsZXMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MDQwYWYxYWI3ZDhhMDQzOWVhOTkyNGU0Y2U0OGYwZmIxYzA0MmJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDM6NTc6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC04NjQsNiAmIzQzOzg2NCw3IEBAIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VzY2hlbWVzKTtcbiBcbiYjNDM7XHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7XG4gXHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LVx1MDAzZXJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4gXG4gXHRyZXR1cm4gY3R4O1xuQEAgLTIwOTUsMTYgJiM0MzsyMDk2LDE0IEBAIGludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gICogc3luY2hyb25pemF0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gd2lsbCBiZSBzYXZlZCBpblxuICAqIFx1MDAyNmRhbW9uX2NhbGxfY29udHJvbC1cdTAwM2VyZXR1cm5fY29kZS5cbiAgKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG4tICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tICogd2FpdC5cbi0gKlxuICAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbiBpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4ge1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuIFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbiBcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDYsOCAmIzQzOzM0Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG4gXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDtcbi1cbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG5AQCAtMzY4LDEwICYjNDM7MzY2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiBcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xuLVx0aWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTtcbkBAIC00MjIsOCAmIzQzOzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLVx0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDggJiM0MzsyNzEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG4gXHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQ7XG4tXG4gc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0yOTMsMTAgJiM0MzsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTtcbkBAIC0zNDMsOCAmIzQzOzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbmV3X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIGNvcmUgKGBkYW1vbl9uZXdfY3R4YCwgYGRhbW9uX2NhbGxgKSBhbmQgREFNT04gbW9kdWxlcyAoYGRhbW9uX2xydV9zb3J0YCwgYGRhbW9uX3JlY2xhaW1gKSB0byBmaXggYSBidWcgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGBjdHhgIGlmIHRoZSBtb2R1bGUgaGFzbiYjMzk7dCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNDBhZjFhYjdkOGEwNDM5ZWE5OTI0ZTRjZTQ4ZjBmYjFjMDQyYmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzo1Nzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC04NjQsNiAmIzQzOzg2NCw3IEBAIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZCkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3NjaGVtZXMpOwogCiYjNDM7CWN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7CiAJcHJhbmRvbV9zZWVkX3N0YXRlKCZhbXA7Y3R4LSZndDtybmRfc3RhdGUsIGdldF9yYW5kb21fdTY0KCkpOwogCiAJcmV0dXJuIGN0eDsKQEAgLTIwOTUsMTYgJiM0MzsyMDk2LDE0IEBAIGludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluCiAgKiAmYW1wO2RhbW9uX2NhbGxfY29udHJvbC0mZ3Q7cmV0dXJuX2NvZGUuCiAgKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGUKLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZQotICogd2FpdC4KLSAqCiAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZmFpbGVkLCB0aGUgQGN0eCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogICovCiBpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpCiB7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFjb250cm9sLSZndDtyZXBlYXQpCiAJCWluaXRfY29tcGxldGlvbigmYW1wO2NvbnRyb2wtJmd0O2NvbXBsZXRpb24pOwogCWNvbnRyb2wtJmd0O2NhbmNlbGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBiZDg0NzgyOWE5OTA3Li5mMjVlZTczMjZlODdjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmMKQEAgLTM0Niw4ICYjNDM7MzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZykKIAlyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDsKLQogc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKIAkJCQkJICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0zNjgsMTAgJiM0MzszNjYsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLAogCWlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KQogCQlyZXR1cm4gMDsKIAotCS8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqLwotCWlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gZGFtb25fY2FsbChjdHgsICZhbXA7Y29udHJvbCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTsKQEAgLTQyMiw4ICYjNDM7NDE2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCkKLQkJZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlOwogCXJldHVybiBkYW1vbl9jYWxsKGN0eCwgJmFtcDtjYWxsX2NvbnRyb2wpOwogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uYwpAQCAtMjcxLDggJiM0MzsyNzEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpCiAJcmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkOwotCiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yOTMsMTAgJiM0MzsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJaWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JLyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovCi0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7CkBAIC0zNDMsOCAmIzQzOzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIFBhdGNoIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgREFNT04gZmlsZXM6IGBjb3JlLmNgLCBgbHJ1X3NvcnQuY2AsIGFuZCBgcmVjbGFpbS5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSByZW1vdmFsIG9mIHRob3NlIGBfaGFzX3N0YXJ0ZWRgIHZhcmlhYmxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBjaGVja3MuIFRoYXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyBvZiB0aGUgREFNT04gaW5pdGlhbGl6YXRpb24gZmxvdywgbGlrZWx5IHNpbXBsaWZ5aW5nIHRoaW5ncyBieSByZW1vdmluZyB0aG9zZSBzcGVjaWZpYyBnYXRla2VlcGluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTtyZSByZW1vdmluZyB0aGVtOyB3aGF0JiMzOTtzIHRoZSBuZXcgYXBwcm9hY2g/IElzIGl0IGNsZWFuZXIsIG1vcmUgcm9idXN0LCBvciBqdXN0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPwoKVGhlIGFkZGVkIGAtRUlOVkFMYCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBpcyBnb29kIGh5Z2llbmUuIEV4cGxpY2l0IG51bGwgY2hlY2tzIGFyZSBhbHdheXMgd2VsY29tZSwgZXNwZWNpYWxseSBpbiBhIGNvbXBsZXggc3Vic3lzdGVtIGxpa2UgREFNT04gd2hlcmUgY29udGV4dCBtYW5hZ2VtZW50IGNhbiBiZSB0cmlja3kuIEl0JiMzOTtzIGEgcHJldmVudGF0aXZlIG1lYXN1cmUgYWdhaW5zdCBhIGNvbW1vbiBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy4gSG93ZXZlciwgSSBuZWVkIHRvIGxvb2sgaW50byB3aGVuIGBjdHhgIHdvdWxkIGJlIG51bGwuIElzIHRoaXMgYSBuZXcgZmFpbHVyZSBjYXNlLCBvciBhbiBleGlzdGluZyBvbmUgdGhhdCYjMzk7cyBqdXN0IGJlaW5nIGNhdWdodCBlYXJsaWVyPwoKRmluYWxseSwgc2V0dGluZyBgY3R4LSZndDtjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gdHJ1ZTtgIGluIGBkYW1vbl9uZXdfY3R4KClgIGlzIGludGVyZXN0aW5nLiAmIzM0O09ic29sZXRlJiMzNDsgaXMgYSBzdHJvbmcgd29yZC4gSXQgc2lnbmFscyBhIHNoaWZ0IGluIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgZGFtb25fY2FsbCgpYCwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIGluIGhvdyBEQU1PTiYjMzk7cyBvcGVyYXRpb25zIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgZmxhZyBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERBTU9OIGV4ZWN1dGlvbiBwYXRoLiBXaGF0IGV4YWN0bHkgaXMgY29uc2lkZXJlZCAmIzM0O29ic29sZXRlJiMzNDsgbm93PyBJcyB0aGlzIHJlbGF0ZWQgdG8gdGhlIHJlbW92ZWQgYF9oYXNfc3RhcnRlZGAgdmFyaWFibGVzPwoKVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8ga25vdyB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIERBTU9OLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBhbmQgc2ltaWxhciBmaWxlcyB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgaW52b2x2ZWQuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzIG9uIHZhcmlvdXMgREFNT04gdXNlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY2hhbmdlczoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCYjMzk7cyBTY29wZSoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIGhpdHRpbmcgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZlYXR1cmVzIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgTFJVIHNvcnRpbmcgYW5kIHJlY2xhaW0gY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGNvbnRleHQgaW4gbWluZC4gTm93LCBnaXZlbiB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkLiBMb29rcyBsaWtlIGBEQU1PTmAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fUkVDTEFJTWAgYXJlIGdvaW5nIHRvIGJlIGtleS4gTGV0IG1lIHF1aWNrbHkgZ28gb3ZlciB0aGUgZGVwZW5kZW5jaWVzIGZvciBgREFNT05fTFJVX1NPUlRgIGFuZCBgREFNT05fUkVDTEFJTWAsIGp1c3QgdG8gZ2V0IGEgZnVsbGVyIHBpY3R1cmUgb2YgdGhlIGltcGFjdC4gSSB3YW50IHRvIGVuc3VyZSBJJiMzOTttIGF3YXJlIG9mIGFueSBvdGhlciBwb3RlbnRpYWwgYXJlYXMgb3IgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fTFJVX1NPUlR8Y29uZmlnIERBTU9OX1JFQ0xBSU18ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0xNT1jb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gREFNT05cbm1tL2RhbW9uL0tjb25maWctMTgtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZz0yNj1jb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWc9Mzg9Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNDEtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbi0tXG5tbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy01MC1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuLS1cbm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNTktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWc9Njg9Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZy03MS1cdGRlZmF1bHQgREFNT05cbi0tXG5tbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo3ODpcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNzktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctOTEtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMDMtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWc9MTE2PWNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTExOS1cdGRlZmF1bHQgREFNT05fU1RBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gUmVmYWN0b3JpbmcgVGhvdWdodHMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIERBTU9OIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgY2hlY2sgYGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpYCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGAqX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSB3b25kZXIgd2h5IHRoYXQgY2hlY2sgaXMgYmVpbmcgcmVtb3ZlZCAtIGlzIGl0IG5vIGxvbmdlciBuZWNlc3NhcnksIG9yIGlzIGl0IGJlaW5nIGhhbmRsZWQgZWxzZXdoZXJlIG5vdz8KClRoZSBhZGRpdGlvbiBvZiBgaWYgKCFjdHgpIHJldHVybiAtRUlOVkFMO2AgdG8gYGRhbW9uX2NhbGwoKWAgaXMgYSBnb29kIHNhZmV0eSBjaGVjaywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiBhIHBvdGVudGlhbGx5IGNvbXBsZXggc3lzdGVtIGxpa2UgREFNT04uIEFsd2F5cyBnb29kIHRvIHZhbGlkYXRlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGNvbnRleHQuIE92ZXJhbGwsIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBpdHMgbW9kdWxlcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCk5vdywgSSBuZWVkIHRvIHRyYWNlIHRoZSByZWFjaGFiaWxpdHkgb2YgYGRhbW9uX2NhbGwoKWAgYW5kIHRoaW5rIGFib3V0IGhvdyB0byBmdXp6IGl0LiBJIHNlZSB0aGF0IGBkYW1vbl9jYWxsKClgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLiBBbHNvLCBgZGFtb25fbmV3X2N0eGAgaXMgbW9kaWZpZWQsIHdoaWNoIEkgc2hvdWxkIGFsc28gZXhhbWluZS4gT2theSwgc28gdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGxlcnMgb2YgYGRhbW9uX2NhbGxgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fY2FsbFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTAxND1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDQwLSAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDItICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG4tLVxubW0vZGFtb24vY29yZS5jPTExNDA9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjAtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG5tbS9kYW1vbi9jb3JlLmM6MTE2MTogKiBkYW1vbl9jYWxsKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE2Mi0gKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgxMD1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgzNi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2Vcbm1tL2RhbW9uL2NvcmUuYzoxODM3OiAqIGRhbW9uX2NhbGwoKS5cbm1tL2RhbW9uL2NvcmUuYy0xODM4LSAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDcxPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODItLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA4MzogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cbm1tL2RhbW9uL2NvcmUuYy0yMDg0LSAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTAzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTA0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzY1Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM2NjItICogSWYgdGhlcmUgYXJlIFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxubW0vZGFtb24vY29yZS5jOjM2NjM6ICogXHUwMDI2ZGFtb25fY2FsbCgpIG9uIEBjdHgsIGRvIG9yIGNhbmNlbCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZGVwZW5kaW5nXG5tbS9kYW1vbi9jb3JlLmMtMzY2NC0gKiBvbiBAY2FuY2VsLiAgQGNhbmNlbCBpcyBzZXQgd2hlbiB0aGUga2RhbW9uZCBpcyBhbHJlYWR5IG91dCBvZiB0aGUgbWFpbiBsb29wXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NTE9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4MzItXHRcdFx0a2RhbW9uZF91c2xlZXAoY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XG5tbS9kYW1vbi9jb3JlLmM6MzgzMzpcdFx0XHQvKiBhbGxvdyBjYWxsZXIgdW5zZXQgcGF1c2UgdmlhIGRhbW9uX2NhbGwoKSAqL1xubW0vZGFtb24vY29yZS5jLTM4MzQtXHRcdFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2OTpcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcdTAwMjZjb250cm9sKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcwLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAzPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE4LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTk6XHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMC19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTI3ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI5My1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyOTQ6XHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjk1LVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMjQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM5LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vcmVjbGFpbS5jOjM0MDpcdHJldHVybiBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDEtfVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIyMS1cdGNhbGxfY29udHJvbC5kYXRhID0gZGFtb25fc3RhdF9jb250ZXh0O1xubW0vZGFtb24vc3RhdC5jOjIyMjpcdHJldHVybiBkYW1vbl9jYWxsKGRhbW9uX3N0YXRfY29udGV4dCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3N0YXQuYy0yMjMtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjgyLVx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XG5tbS9kYW1vbi9zeXNmcy5jOjIyODM6XHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxubW0vZGFtb24vc3lzZnMuYy0yMjg0LVx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODg9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDAtXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDE6c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMi1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzEwLVx0Y2FsbF9jb250cm9sLmRhdGEgPSBrZGFtb25kO1xubW0vZGFtb24vc3lzZnMuYzoyMzExOlx0ZXJyID0gZGFtb25fY2FsbChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMi1cdHJldHVybiBlcnIgPyBlcnIgOiBjYWxsX2NvbnRyb2wucmV0dXJuX2NvZGU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzY0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzc1LVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUOlxubW0vZGFtb24vc3lzZnMuYzoyMzc2Olx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Ny1cdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNzgtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3OTpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODAtXHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19TVEFUUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4MzpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODQtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzkyLVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5MzpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTQtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM5Ni1cdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XG5tbS9kYW1vbi9zeXNmcy5jOjIzOTc6XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxubW0vZGFtb24vc3lzZnMuYy0yMzk4LVx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscywga2RhbW9uZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgdGhlIERBTU9OIEJ1ZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBuYXN0eSBidWcuIEl0IHNlZW1zIHRoYXQgYGRhbW9uX2NhbGwoKWAgaXMgZ2V0dGluZyBpbnZva2VkIHdpdGggYSBgTlVMTGAgY29udGV4dCAoYGN0eGApIGluIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucy4gVGhlIGN1bHByaXQ/IEl0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpYCBvciBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYCBoYXNuJiMzOTt0IGJlZW4gY2FsbGVkLCBtZWFuaW5nIHRoYXQgdGhlIGNydWNpYWwgYGN0eGAgaXNuJiMzOTt0IGluaXRpYWxpemVkIHlldC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHRoZSBjb250ZXh0IG5lZWRzIHRvIGJlIHNldCB1cCBiZWZvcmUgaXQmIzM5O3MgdXNlZC4KCk5vdywgYSBxdWljayByZW1pbmRlcjogYGN0eGAgaXMgYSBnbG9iYWwgdmFyaWFibGUgd2l0aGluIGJvdGggYGxydV9zb3J0LmNgIGFuZCBgcmVjbGFpbS5jYCwgd2hpY2ggbWFrZXMgdGhpcyBldmVuIG1vcmUgY3JpdGljYWwuIEdvdHRhIGJlIGNhcmVmdWwgd2l0aCB0aG9zZSBnbG9iYWwgdmFyaWFibGVzISBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIG15IHN1c3BpY2lvbiBieSB0aG9yb3VnaGx5IGNoZWNraW5nIGBscnVfc29ydC5jYCBhbmQgYHJlY2xhaW0uY2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZml4IGFjdHVhbGx5IGhhbmRsZXMgdGhlIGNvbnRleHQgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4IFxcKmN0eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTE3Mz1zdGF0aWMgc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIGRhbW9uX2xydV9zb3J0X3N0dWJfcGF0dGVybiA9IHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTE4NC1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTg1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE4Ni1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0O1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjE9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTYzLVxubW0vZGFtb24vcmVjbGFpbS5jOjE2NDpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xubW0vZGFtb24vcmVjbGFpbS5jLTE2NS1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29udGV4dCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYGN0eGAgaXMgaW5kZWVkIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZ2V0cyBjYWxsZWQgYmVmb3JlIGBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpYCwgYGN0eGAgd2lsbCBiZSBOVUxMLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGluaXRpYWxpemF0aW9uIGlzIGtleSwgYW5kIGlmIHRoZSBzZXR1cCBpc24mIzM5O3QgZG9uZSwgeW91JiMzOTtyZSBnb2luZyB0byBoYXZlIHByb2JsZW1zLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgZ2V0cyByaWQgb2YgdGhlIGBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZGAgY2hlY2ssIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNhbGwgdG8gc2ltcGxpZnkgdGhpbmdzLiBJbnN0ZWFkLCBpdCBhZGRzIGEgbW9yZSBkaXJlY3QgYGlmICghY3R4KSByZXR1cm4gLUVJTlZBTDtgIGNoZWNrIGluc2lkZSBgZGFtb25fY2FsbCgpYC4gU21hcnQuIFRoaXMgZGlyZWN0bHkgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBkYW1vbl9jYWxsKClgLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIGJlIGEgbmFzdHkgYnVnIHRvIHRyYWNrIGRvd24sIGVzcGVjaWFsbHkgaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdWJzeXN0ZW0gbGlrZSBEQU1PTi4gU2FmZXR5IGZpcnN0IQoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIHRoZSBsaW5lIGBjdHgtJmd0O2NhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO2Agd2l0aGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGlzIGZlZWxzIGxpa2UgYSBjb250cm9sIGZsb3cgc2V0dGluZywgYSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSBpbnNpZGUgYGRhbW9uX25ld19jdHgoKWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IHVzYWdlIG9mIGBjdHgtJmd0O2NhbGxfY29udHJvbHNfb2Jzb2xldGVgLCBidXQgSSBoYXZlIGEgcHJldHR5IGdvb2QgaWRlYSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIG5vdzsgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fbmV3X2N0eCgpYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz04Mjc9dW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODMxLVxubW0vZGFtb24vY29yZS5jOjgzMjpzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgxMD1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgxNC1cbm1tL2RhbW9uL2NvcmUuYzoxODE1Olx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi9jb3JlLmMtMTgxNi1cdGlmICghdGVzdF9jdHgpXG4tLVxubW0vZGFtb24vY29yZS5jPTE5NzU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5ODItXG5tbS9kYW1vbi9jb3JlLmM6MTk4MzpcdFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi9jb3JlLmMtMTk4NC1cdFx0aWYgKCF0ZXN0X2N0eClcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jPTE1PWludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjAtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjIxOlx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yMi1cdGlmICghY3R4KVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE1Ny1cbm1tL2RhbW9uL3N0YXQuYzoxNTg6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi9zdGF0LmMtMTU5LVx0aWYgKCFjdHgpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIzOT1zdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9zdG9yZShcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjUzLVx0XHQgKiBwcm9iYWJseSBjYWxsZWQgZnJvbSBjb21tYW5kIGxpbmUgcGFyc2luZyAocGFyc2VfYXJncygpKS5cbm1tL2RhbW9uL3N0YXQuYzoyNTQ6XHRcdCAqIENhbm5vdCBjYWxsIGRhbW9uX25ld19jdHgoKS4gIExldCBkYW1vbl9zdGF0X2luaXQoKSBoYW5kbGUuXG5tbS9kYW1vbi9zdGF0LmMtMjU1LVx0XHQgKi9cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyMDA9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDIte1xubW0vZGFtb24vc3lzZnMuYzoyMjAzOlx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vc3lzZnMuYy0yMjA0LVx0aW50IGVycjtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NTI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF90YXJnZXQoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTUzLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1NDpcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTUtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4Olx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg5LVx0dW5zaWduZWQgbG9uZyBzYWRkcltdWzNdID0ge3sxMCwgMjAsIDMwfSwgezUsIDQyLCA0OX0sIHsxMywgMzMsIDU1fSB9O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMzI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ0LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI0NTpcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNDYtXHRpZiAoIWN0eClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjgwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI4OC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyODk6XHRjID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI5MC1cdGlmICghYylcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzU0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzYzLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2NDpcdGMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY1LVx0aWYgKCFjKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD00MTE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MTIte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQxMzpcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDE0LVx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NTk1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjA0LVx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDU6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjA2LVx0aWYgKCFjdHgpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NjM2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02Mzcte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjYzODpcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjM5LVx0c3RydWN0IGRhbW9uX2F0dHJzIHZhbGlkX2F0dHJzID0ge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02OTY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTcwNS1cdH07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzA2Olx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDctXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzA5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxMzpcdHNyYyA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzE0LVx0aWYgKCFzcmMpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMxNS1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtzcmMgYWxsb2MgZmFpbFwmIzM0Oyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxNjpcdGRzdCA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzE3LVx0aWYgKCFkc3QpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTUyMT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MzEtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUzMjpcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTMzLVx0aWYgKCFjdHgpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2MDE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjA2LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2MDc6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwOC1cdGlmICghY3R4KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC03Mi1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6NzM6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTc0LVx0aWYgKCFjdHgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhpcyBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBieSBzZXR0aW5nIGBjdHgtJmd0O2NhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO2Agd2l0aGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBmdXp6LXdvcnRoeS4gR2l2ZW4gdGhlIGNvcmUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGl04oCZcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGV4YW1pbmF0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbXBhY3RzOgoKKiAgIGBkYW1vbl9uZXdfY3R4YAoqICAgYGRhbW9uX2NhbGxgCiogICBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAKKiAgIGBkYW1vbl9scnVfc29ydF90dXJuYAoqICAgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAKKiAgIGBkYW1vbl9yZWNsYWltX3R1cm5gCgpOb3csIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gbXkgdW5kZXJzdGFuZGluZywgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCBhcmUgc3lzZnMgc3RvcmUgY2FsbGJhY2tzLCBhbmQgYGRhbW9uX2xydV9zb3J0X3R1cm5gIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHksIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBmb3IgdGhlIGxhdHRlciB0d28gYXJlIGxvdy4gQnV0IGJlY2F1c2UgdGhleSBhcmUgbGlua2VkIHRvIHRoZSBmb3JtZXIgdHdvLCB0aGVzZSBtYXkgbmVlZCB0byBiZSBhc3Nlc3NlZCBhcyB3ZWxsLiBgZGFtb25fbmV3X2N0eGAgYW5kIGBkYW1vbl9jYWxsYCBhcmUgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cy4gVGhvc2UgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QgZm9yIGNsb3NlIHNjcnV0aW55LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgaWYgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGlzIGluZGVlZCByZWFjaGFibGUgdmlhIHN5c2ZzLiBJZiBzbywgdGhhdCByZXByZXNlbnRzIGEgZGlyZWN0IGF2ZW51ZSBmb3IgZnV6emluZywgYW5kIEnigJlsbCBkZXNpZ24gdGVzdCBjYXNlcyBhcm91bmQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTM0ND1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgY29tbWl0X2lucHV0c19wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM3NS1cdC5mbGFncyA9IEtFUk5FTF9QQVJBTV9PUFNfRkxfTk9BUkcsXG5tbS9kYW1vbi9scnVfc29ydC5jOjM3NjpcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzctXHQuZ2V0ID0gcGFyYW1fZ2V0X2Jvb2wsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTAxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXJhbWV0ZXIgU3RvcmUgRnVuY3Rpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHRocm91Z2ggYC9zeXMvbW9kdWxlL2RhbW9uX2xydV9zb3J0L3BhcmFtZXRlcnMvY29tbWl0X2lucHV0c2AuIFRoZSBzYW1lIGFwcGxpZXMgdG8gYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25zOiBgZGFtb25fbmV3X2N0eGAgYW5kIGBkYW1vbl9jYWxsYC4gSG93ZXZlciwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHJvYWQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc2NvcGUgdGhhdCBkZXNlcnZlIGF0dGVudGlvbi4KCkFoLCBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFyZSBzdGF0aWMsIGJ1dCBhY3QgYXMgZW50cnkgcG9pbnRzIGZyb20gc3lzZnMuIFRoZSBmbHkgaW4gdGhlIG9pbnRtZW50IGhlcmUgaXMgdGhhdCBTeXprYWxsZXIgbWlnaHQgaGF2ZSBpc3N1ZXMgcmVzb2x2aW5nIHN0YXRpYyBmdW5jdGlvbnMuIFdhaXQuLi4gdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIElmIHRoZSBkZWJ1ZyBpbmZvIGlzIHByZXNlbnQsIFN5emthbGxlciAqY2FuKiByZXNvbHZlIHN0YXRpYyBmdW5jdGlvbnMuIFN0aWxsLCBpdCYjMzk7cyBiZXR0ZXIsIGdlbmVyYWxseSwgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgb25lcyBmb3IgbW9yZSBkaXJlY3QgaW50ZWdyYXRpb24uCgpTbywgYGRhbW9uX2NhbGxgIGFuZCBgZGFtb25fbmV3X2N0eGAgKmFyZSogbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBkYW1vbl9jYWxsXFwofHN0cnVjdCBkYW1vbl9jdHggXFwqZGFtb25fbmV3X2N0eFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODI3PXVuc2lnbmVkIGludCBkYW1vbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTgzMS1cbm1tL2RhbW9uL2NvcmUuYzo4MzI6c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTgzMy17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwNzE9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTAzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTA0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyB0aGUgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG5vbi1zdGF0aWMsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgY2hhbmdlLiBOb3csIGdpdmVuIHRoYXQgY29udGV4dCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBob3cgKmRhbW9uX3N0YXJ0KiBjb25uZWN0cyB0byAqZGFtb25fY2FsbCogYW5kICpkYW1vbl9uZXdfY3R4Ki4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvbnNpZGVyaW5nIGFsbCByZWxhdGVkIGZhY3RvcnMuIFRoZSByZWxhdGlvbnNoaXBzIGhlcmUgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBXZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGF0IHN0YXJ0IHByb2Nlc3MsIGdpdmVuIGl0cyByZWxhdGlvbiB0byB0aGUgY2FsbCBhbmQgbmV3IGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBkYW1vbl9zdGFydFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTk1OD1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzQtICovXG5tbS9kYW1vbi9jb3JlLmM6MTk3NTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0xOTc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDIKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZGFtb25fc3RhcnRgLCB3aGljaCBJIHNlZSBpcyBhbHNvICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBlYXNpZXIgdG8gdGFyZ2V0LiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgY29yZSByZXF1aXJlbWVudHMgaGluZ2Ugb24gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBwb3NzaWJseSBgREFNT05fU1lTRlNgIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlLgoKSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IGp1c3QgYERBTU9OX0xSVV9TT1JUYCBhbmQgYERBTU9OX1JFQ0xBSU1gIHdlcmUgdGhlIHJlbGV2YW50IG1vZHVsZXMsIGFuZCBub3cgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQuIE1ha2VzIHNlbnNlLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUgZmlsZXMgbW9kaWZpZWQuCgpUaGVyZWZvcmUsIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O2xsIHByb3ZpZGUgd2lsbCBiZSBleGFjdGx5IGFzIGluZGljYXRlZCBhYm92ZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NZU0ZTYC4KCkkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGEgY291cGxlIG9mIGtleSBzeW1ib2xzIGhlcmU6IGBkYW1vbl9uZXdfY3R4YCBhbmQgYGRhbW9uX2NhbGxgLiBJIG5lZWQgdG8gdmVyaWZ5IHJlYWNoYWJpbGl0eS4gVGhlIGZpbGUgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIHNlZW1zIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBhcyBpdCBpcyBhIG1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgbW9kaWZpZWQgdmlhIHN5c2ZzLiBTaW5jZSBTeXprYWxsZXIgaGFzIGEgc3lzZnMgZnV6emVyLCB0aGF0IGxvb2tzIHByb21pc2luZyBmb3IgdGFyZ2V0ZWQgZnV6emluZy4KCk15IHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCB3aXRoIGEgTlVMTCBjb250ZXh0IChgY3R4YCkgaWYgdGhlIG1vZHVsZSBoYWRuJiMzOTt0IGJlZW4gaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgTlVMTCBjaGVjayB3aXRoaW4gYGRhbW9uX2NhbGwoKWAsIGFuZCBpbml0aWFsaXplcyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgaW4gYGRhbW9uX25ld19jdHgoKWAuIENyaXRpY2FsbHksIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCB0aGV5IGltcGFjdCB0aGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbG9uZyB3aXRoIG1vZHVsZSBjb2RlLiBUaGF0IG1ha2VzIGl0IGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCkkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIExldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24mIzM5O3QgYmVlbiBzdGFydGVkIHlldC4gSXQgYWRkcyBhIE5VTEwgY2hlY2sgaW4gYGRhbW9uX2NhbGwoKWAgYW5kIGluaXRpYWxpemVzIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBpbiBgZGFtb25fbmV3X2N0eCgpYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIG1vZHVsZXMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gY29yZSAoYGRhbW9uX25ld19jdHhgLCBgZGFtb25fY2FsbGApIGFuZCBEQU1PTiBtb2R1bGVzIChgZGFtb25fbHJ1X3NvcnRgLCBgZGFtb25fcmVjbGFpbWApIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZGFtb25fY2FsbCgpYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgYGN0eGAgaWYgdGhlIG1vZHVsZSBoYXNuJiMzOTt0IGJlZW4gc3RhcnRlZCB5ZXQuIEl0IGFkZHMgYSBOVUxMIGNoZWNrIGluIGBkYW1vbl9jYWxsKClgIGFuZCBpbml0aWFsaXplcyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgaW4gYGRhbW9uX25ld19jdHgoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBtb2R1bGVzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB3aGVyZSBgZGFtb25fY2FsbCgpYCBjb3VsZCBiZSBpbnZva2VkIGJlZm9yZSB0aGUgY29udGV4dCB3YXMgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgYWZ0ZXIgaXQgd2FzIHN0b3BwZWQuIEl0IHJlcGxhY2VzIG1vZHVsZS1sZXZlbCBib29sZWFuIGZsYWdzIHdpdGggYSBjb250ZXh0LXNwZWNpZmljIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBmbGFnIGFuZCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgdGhlIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBhbmQgc3luY2hyb25pemF0aW9uIGJ1Z3MgKGUuZy4sIGluZGVmaW5pdGUgd2FpdHMgb3IgaW52YWxpZCBhY2Nlc3NlcyksIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNDBhZjFhYjdkOGEwNDM5ZWE5OTI0ZTRjZTQ4ZjBmYjFjMDQyYmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzo1Nzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC04NjQsNiAmIzQzOzg2NCw3IEBAIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZCkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3NjaGVtZXMpOwogCiYjNDM7CWN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7CiAJcHJhbmRvbV9zZWVkX3N0YXRlKCZhbXA7Y3R4LSZndDtybmRfc3RhdGUsIGdldF9yYW5kb21fdTY0KCkpOwogCiAJcmV0dXJuIGN0eDsKQEAgLTIwOTUsMTYgJiM0MzsyMDk2LDE0IEBAIGludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluCiAgKiAmYW1wO2RhbW9uX2NhbGxfY29udHJvbC0mZ3Q7cmV0dXJuX2NvZGUuCiAgKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGUKLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZQotICogd2FpdC4KLSAqCiAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZmFpbGVkLCB0aGUgQGN0eCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogICovCiBpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpCiB7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFjb250cm9sLSZndDtyZXBlYXQpCiAJCWluaXRfY29tcGxldGlvbigmYW1wO2NvbnRyb2wtJmd0O2NvbXBsZXRpb24pOwogCWNvbnRyb2wtJmd0O2NhbmNlbGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBiZDg0NzgyOWE5OTA3Li5mMjVlZTczMjZlODdjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmMKQEAgLTM0Niw4ICYjNDM7MzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZykKIAlyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDsKLQogc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKIAkJCQkJICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0zNjgsMTAgJiM0MzszNjYsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLAogCWlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KQogCQlyZXR1cm4gMDsKIAotCS8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqLwotCWlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gZGFtb25fY2FsbChjdHgsICZhbXA7Y29udHJvbCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTsKQEAgLTQyMiw4ICYjNDM7NDE2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCkKLQkJZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlOwogCXJldHVybiBkYW1vbl9jYWxsKGN0eCwgJmFtcDtjYWxsX2NvbnRyb2wpOwogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uYwpAQCAtMjcxLDggJiM0MzsyNzEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpCiAJcmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkOwotCiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yOTMsMTAgJiM0MzsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJaWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JLyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovCi0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7CkBAIC0zNDMsOCAmIzQzOzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogQSBTeW5jaHJvbml6YXRpb24gRml4PyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvciB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBEQU1PTiYjMzk7cyBjb3JlIG9wZXJhdGlvbnMuCgpJbiBgY29yZS5jYCwgSSBzZWUgYGRhbW9uX25ld19jdHgoKWAgbm93IHNldHMgYGN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7YCwgYW5kIGBkYW1vbl9jYWxsKClgIGlzIGdldHRpbmcgYSBgaWYgKCFjdHgpIHJldHVybiAtRUlOVkFMO2AgY2hlY2suIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZW1lcmdpbmc/IAoKVGhlbiwgb3ZlciBpbiBgbHJ1X3NvcnQuY2AgYW5kIGByZWNsYWltLmNgLCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGVzZSBgZGFtb25faGFzX3N0YXJ0ZWRgIGJvb2xlYW4gZmxhZ3MgZW50aXJlbHksIGFuZCBhbGwgdGhlIGNvcnJlc3BvbmRpbmcgY2hlY2tzIGFyZSByZW1vdmVkIGZyb20gYCpfY29tbWl0X2lucHV0c19zdG9yZWAuIFRoZSBhc3NpZ25tZW50cyBvZiBgdHJ1ZWAgdG8gdGhlc2UgZmxhZ3MgYXJlIGFsc28gcmVtb3ZlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgYCpfdHVybigpYCBmdW5jdGlvbnMuCgpXYWl0LCBsb29raW5nIGF0IHRoZSBlbnRpcmUgcGF0Y2ggdG9nZXRoZXI6IHRoZSBhYnNlbmNlIG9mIGEgYGhhc19zdGFydGVkYCBmbGFnIGlzIGNvdXBsZWQgd2l0aCBhIG5ldyBudWxsIGNoZWNrIGZvciBgY3R4YCBpbiBgZGFtb25fY2FsbCgpYCwgYW5kIHRoYXQgYm9vbGVhbiB2YXJpYWJsZSBiZWluZyBzZXQgYXMgYHRydWVgLiBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgbW9yZSBvZiBhIGxvZ2ljIGNvcnJlY3Rpb24gb3IsIG1vcmUgbGlrZWx5LCBhIHN5bmNocm9uaXphdGlvbiBmaXggZm9yIGBkYW1vbl9jYWxsKClgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIGBjdHhgLCBhbmQgdGhhdCBgY3R4YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgZGFtb25fY2FsbCgpYCBpcyBjYWxsZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRhbW9uX2NhbGwoKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkmIzM5O2xsIHVzZSB0aGUgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgY29tbWFuZCB0byBzZWUgdGhlIGNvZGUgdGhlcmUgYW5kIHF1aWNrbHkgdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDkwOlx0ICogQGNvbnRyb2wgaXMgdW5zZXQsIGZ1cnRoZXIgd2FpdCB1bnRpbCB0aGUga2RhbW9uZCBmaW5pc2hlcyBoYW5kbGluZyBvZiB0aGVcbjIwOTE6XHQgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gYXMgc29vbiBhcyB0aGUgcmVxdWVzdCBpcyBtYWRlLlxuMjA5MjpcdCAqXG4yMDkzOlx0ICogVGhlIGtkYW1vbmQgZXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGFyZ3VtZW50IGluIHRoZSBtYWluIGxvb3AsIGp1c3RcbjIwOTQ6XHQgKiBhZnRlciBhIHNhbXBsaW5nIG9mIHRoZSBpdGVyYXRpb24gaXMgZmluaXNoZWQuICBUaGUgZnVuY3Rpb24gY2FuIGhlbmNlXG4yMDk1Olx0ICogc2FmZWx5IGFjY2VzcyB0aGUgaW50ZXJuYWwgZGF0YSBvZiB0aGUgXHUwMDI2c3RydWN0IGRhbW9uX2N0eCB3aXRob3V0IGFkZGl0aW9uYWxcbjIwOTY6XHQgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluXG4yMDk3Olx0ICogXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZXJldHVybl9jb2RlLlxuMjA5ODpcdCAqXG4yMDk5Olx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuMjEwMDpcdCAqXG4yMTAxOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjEwMjpcdCAqL1xuMjEwMzpcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbjIxMDQ6XHR7XG4yMTA1Olx0XHRpZiAoIWN0eClcbjIxMDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTA3Olx0XHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuMjEwODpcdFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbjIxMDk6XHRcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbjIxMTA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbnRyb2wtXHUwMDNlbGlzdCk7XG4yMTExOlx0XG4yMTEyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuMjExMzpcdFx0aWYgKGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XG4yMTE0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbjIxMTU6XHRcdFx0Z290byBjYW5jZWxlZDtcbjIxMTY6XHRcdH1cbjIxMTc6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y29udHJvbC1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9scyk7XG4yMTE4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4yMTE5Olx0XHRpZiAoY29udHJvbC1cdTAwM2VyZXBlYXQpXG4yMTIwOlx0XHRcdHJldHVybiAwO1xuMjEyMTpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb250cm9sLVx1MDAzZWNvbXBsZXRpb24pO1xuMjEyMjpcdFx0aWYgKGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQpXG4yMTIzOlx0XHRcdGdvdG8gY2FuY2VsZWQ7XG4yMTI0Olx0XHRyZXR1cm4gMDtcbjIxMjU6XHRcbjIxMjY6XHRjYW5jZWxlZDpcbjIxMjc6XHRcdHdoaWxlIChkYW1vbl9pc19ydW5uaW5nKGN0eCkpXG4yMTI4Olx0XHRcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuMjEyOTpcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4yMTMwOlx0XG4yMTMxOlx0fVxuMjEzMjpcdFxuMjEzMzpcdC8qKlxuMjEzNDpcdCAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXG4yMTM1Olx0ICogQGN0eDpcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cbjIxMzY6XHQgKiBAY29udHJvbDpcdENvbnRyb2wgdmFyaWFibGUgb2YgdGhlIHdhbGsgcmVxdWVzdC5cbjIxMzc6XHQgKlxuMjEzODpcdCAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCByZWdpb25cbjIxMzk6XHQgKiB0aGF0IHRoZSBrZGFtb25kIHdpbGwgYXBwbHkgREFNT1MgYWN0aW9uIHRvLCBhbmQgd2FpdCB1bnRpbCB0aGUga2RhbW9uZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ4CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCBzcGVjaWZpY2FsbHkgaW4gaG93IGBkYW1vbl9jYWxsKClgIGlzIGJlaW5nIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2Ugd2UgaGFkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBmdW5jdGlvbiBjb3VsZCBiZSBjYWxsZWQgcHJlbWF0dXJlbHksIGJlZm9yZSB0aGUgY29udGV4dCB3YXMgZnVsbHkgcmVhZHksIG9yIHBvdGVudGlhbGx5IGFmdGVyIGl0IGhhZCBiZWVuIHN0b3BwZWQuIFRoZSBzb2x1dGlvbiBpcyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBib29sZWFuIGZsYWcgYXQgdGhlIG1vZHVsZSBsZXZlbCB3aXRoIGEgY29udGV4dC1zcGVjaWZpYyBgY3R4LSZndDtjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBhbmQgaW5jbHVkZSBhIGBpZiAoIWN0eClgIGNoZWNrLiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGNvZGUsIGFuZCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBhIG1lbW9yeSBzYWZldHkgaXNzdWUgbGlrZSBhbiB1bmluaXRpYWxpemVkIHJlYWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGUgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIHByb3Bvc2VkIGNoYW5nZSBhcHBlYXJzIHRvIHJlc29sdmUgdGhpcyBuaWNlbHkuCgpHaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYXMgdGhpcyBpc24mIzM5O3QgZGlyZWN0bHkgcmVsYXRlZCB0byBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEl0JiMzOTtzIGEgY2xlYW4gc3luY2hyb25pemF0aW9uIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB3aGVyZSBgZGFtb25fY2FsbCgpYCBjb3VsZCBiZSBpbnZva2VkIGJlZm9yZSB0aGUgY29udGV4dCB3YXMgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgYWZ0ZXIgaXQgd2FzIHN0b3BwZWQuIEl0IHJlcGxhY2VzIG1vZHVsZS1sZXZlbCBib29sZWFuIGZsYWdzIHdpdGggYSBjb250ZXh0LXNwZWNpZmljIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBmbGFnIGFuZCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgdGhlIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBhbmQgc3luY2hyb25pemF0aW9uIGJ1Z3MgKGUuZy4sIGluZGVmaW5pdGUgd2FpdHMgb3IgaW52YWxpZCBhY2Nlc3NlcyksIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU3OjQ2LjIxNDQ0NDI5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTEzMzA2OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X2N0eFwiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24ndCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTc6NDYuMjE0NDUwMDg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYyMjM0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODA0MGFmMWFiN2Q4YTA0MzllYTk5MjRlNGNlNDhmMGZiMWMwNDJiZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzo1Nzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC04NjQsNiArODY0LDcgQEAgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LVxcdTAwM2VhZGFwdGl2ZV90YXJnZXRzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcyk7XFxuIFxcbitcXHRjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO1xcbiBcXHRwcmFuZG9tX3NlZWRfc3RhdGUoXFx1MDAyNmN0eC1cXHUwMDNlcm5kX3N0YXRlLCBnZXRfcmFuZG9tX3U2NCgpKTtcXG4gXFxuIFxcdHJldHVybiBjdHg7XFxuQEAgLTIwOTUsMTYgKzIwOTYsMTQgQEAgaW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gICogc3luY2hyb25pemF0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gd2lsbCBiZSBzYXZlZCBpblxcbiAgKiBcXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVxcdTAwM2VyZXR1cm5fY29kZS5cXG4gICpcXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcXG4tICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLSAqIHdhaXQuXFxuLSAqXFxuICAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbiAgKi9cXG4gaW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbiB7XFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0aWYgKCFjb250cm9sLVxcdTAwM2VyZXBlYXQpXFxuIFxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuIFxcdGNvbnRyb2wtXFx1MDAzZWNhbmNlbGVkID0gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXFxuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXFxuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbkBAIC0zNDYsOCArMzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4ge1xcbkBAIC0zNjgsMTAgKzM2Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbi1cXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuIFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y29udHJvbCk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTtcXG5AQCAtNDIyLDggKzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbiBcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0aWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZClcXG4tXFx0XFx0ZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xcbiBcXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFxcdTAwMjZjYWxsX2NvbnRyb2wpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5pbmRleCA0NWQ1NTU3Y2M1NzVhLi40MmEyYzljYjEzNDMxIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xcbisrKyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbkBAIC0yNzEsOCArMjcxLDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbiBcXHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQ7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuIHtcXG5AQCAtMjkzLDEwICsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbi1cXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFxcdTAwMjZjb250cm9sKTtcXG4gXFxuIFxcdHJldHVybiBlcnIgPyBlcnIgOiBjb250cm9sLnJldHVybl9jb2RlO1xcbkBAIC0zNDMsOCArMzM3LDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcXG4gXFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcXG4tXFx0XFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XFxuIFxcdHJldHVybiBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNhbGxfY29udHJvbCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU3OjQ3LjU3NzM1Mjg5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU0MzEzNDYxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X2N0eFwiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIGNvcmUgKGBkYW1vbl9uZXdfY3R4YCwgYGRhbW9uX2NhbGxgKSBhbmQgREFNT04gbW9kdWxlcyAoYGRhbW9uX2xydV9zb3J0YCwgYGRhbW9uX3JlY2xhaW1gKSB0byBmaXggYSBidWcgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGBjdHhgIGlmIHRoZSBtb2R1bGUgaGFzbid0IGJlZW4gc3RhcnRlZCB5ZXQuIEl0IGFkZHMgYSBOVUxMIGNoZWNrIGluIGBkYW1vbl9jYWxsKClgIGFuZCBpbml0aWFsaXplcyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgaW4gYGRhbW9uX25ld19jdHgoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBtb2R1bGVzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MDQwYWYxYWI3ZDhhMDQzOWVhOTkyNGU0Y2U0OGYwZmIxYzA0MmJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDM6NTc6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUwODBjYjEyMjIwZDIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTg2NCw2ICs4NjQsNyBAQCBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcyk7XG4gXG4rXHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7XG4gXHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LVx1MDAzZXJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4gXG4gXHRyZXR1cm4gY3R4O1xuQEAgLTIwOTUsMTYgKzIwOTYsMTQgQEAgaW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluXG4gICogXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZXJldHVybl9jb2RlLlxuICAqXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbi0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0gKiB3YWl0LlxuLSAqXG4gICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuIGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbiB7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuIFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbiBcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDYsOCArMzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0zNjgsMTAgKzM2Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbi1cdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtNDIyLDggKzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLVx0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDggKzI3MSw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4ge1xuQEAgLTI5MywxMCArMjkxLDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0aWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovXG4tXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtMzQzLDggKzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTc6NDcuNTc3MzYzOTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNzQwMTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyB0b3VjaGluZyBjb3JlIERBTU9OIGZpbGVzOiBgY29yZS5jYCwgYGxydV9zb3J0LmNgLCBhbmQgYHJlY2xhaW0uY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVtb3ZhbCBvZiB0aG9zZSBgX2hhc19zdGFydGVkYCB2YXJpYWJsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgY2hlY2tzLiBUaGF0IHN1Z2dlc3RzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIERBTU9OIGluaXRpYWxpemF0aW9uIGZsb3csIGxpa2VseSBzaW1wbGlmeWluZyB0aGluZ3MgYnkgcmVtb3ZpbmcgdGhvc2Ugc3BlY2lmaWMgZ2F0ZWtlZXBpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSdyZSByZW1vdmluZyB0aGVtOyB3aGF0J3MgdGhlIG5ldyBhcHByb2FjaD8gSXMgaXQgY2xlYW5lciwgbW9yZSByb2J1c3QsIG9yIGp1c3QgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/XG5cblRoZSBhZGRlZCBgLUVJTlZBTGAgY2hlY2sgaW4gYGRhbW9uX2NhbGwoKWAgaXMgZ29vZCBoeWdpZW5lLiBFeHBsaWNpdCBudWxsIGNoZWNrcyBhcmUgYWx3YXlzIHdlbGNvbWUsIGVzcGVjaWFsbHkgaW4gYSBjb21wbGV4IHN1YnN5c3RlbSBsaWtlIERBTU9OIHdoZXJlIGNvbnRleHQgbWFuYWdlbWVudCBjYW4gYmUgdHJpY2t5LiBJdCdzIGEgcHJldmVudGF0aXZlIG1lYXN1cmUgYWdhaW5zdCBhIGNvbW1vbiBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy4gSG93ZXZlciwgSSBuZWVkIHRvIGxvb2sgaW50byB3aGVuIGBjdHhgIHdvdWxkIGJlIG51bGwuIElzIHRoaXMgYSBuZXcgZmFpbHVyZSBjYXNlLCBvciBhbiBleGlzdGluZyBvbmUgdGhhdCdzIGp1c3QgYmVpbmcgY2F1Z2h0IGVhcmxpZXI/XG5cbkZpbmFsbHksIHNldHRpbmcgYGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gdHJ1ZTtgIGluIGBkYW1vbl9uZXdfY3R4KClgIGlzIGludGVyZXN0aW5nLiBcIk9ic29sZXRlXCIgaXMgYSBzdHJvbmcgd29yZC4gSXQgc2lnbmFscyBhIHNoaWZ0IGluIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgZGFtb25fY2FsbCgpYCwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIGluIGhvdyBEQU1PTidzIG9wZXJhdGlvbnMgYXJlIGJlaW5nIG1hbmFnZWQuIEknbGwgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIGZsYWcgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBEQU1PTiBleGVjdXRpb24gcGF0aC4gV2hhdCBleGFjdGx5IGlzIGNvbnNpZGVyZWQgXCJvYnNvbGV0ZVwiIG5vdz8gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSByZW1vdmVkIGBfaGFzX3N0YXJ0ZWRgIHZhcmlhYmxlcz9cblxuVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8ga25vdyB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIERBTU9OLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZXhwbG9yZSB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGFuZCBzaW1pbGFyIGZpbGVzIHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBpbnZvbHZlZC4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgb24gdmFyaW91cyBEQU1PTiB1c2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1Nzo1Mi40ODQ3NjgzNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NjYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1Nzo1Mi41MjgzMzk3NTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4MDk1NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOlxuXG4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gncyBTY29wZSoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBoaXR0aW5nIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYG1tL2RhbW9uL3JlY2xhaW0uY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGZlYXR1cmVzIHJlbGF0ZWQgdG8gREFNT04ncyBMUlUgc29ydGluZyBhbmQgcmVjbGFpbSBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBrZWVwIHRoYXQgY29udGV4dCBpbiBtaW5kLiBOb3csIGdpdmVuIHRoYXQsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZC4gTG9va3MgbGlrZSBgREFNT05gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBnb2luZyB0byBiZSBrZXkuIExldCBtZSBxdWlja2x5IGdvIG92ZXIgdGhlIGRlcGVuZGVuY2llcyBmb3IgYERBTU9OX0xSVV9TT1JUYCBhbmQgYERBTU9OX1JFQ0xBSU1gLCBqdXN0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBpbXBhY3QuIEkgd2FudCB0byBlbnN1cmUgSSdtIGF3YXJlIG9mIGFueSBvdGhlciBwb3RlbnRpYWwgYXJlYXMgb3IgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU3OjU1Ljc5NjQzNzMwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExOTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fTFJVX1NPUlR8Y29uZmlnIERBTU9OX1JFQ0xBSU18ZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9MTU9Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxNzpcXHRkZXBlbmRzIG9uIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy0xOC1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTI2PWNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy00MS1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9NDc9Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZz02OD1jb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTcxLVxcdGRlZmF1bHQgREFNT05cXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9NzY9Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjkwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTkxLVxcdGhlbHBcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTExNj1jb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTE5LVxcdGRlZmF1bHQgREFNT05fU1RBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1Nzo1NS44NDE1NTk0MTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc1MDA4MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIFJlZmFjdG9yaW5nIFRob3VnaHRzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIERBTU9OIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgY2hlY2sgYGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpYCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGAqX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucy4gVGhhdCdzIGludGVyZXN0aW5nLCBJIHdvbmRlciB3aHkgdGhhdCBjaGVjayBpcyBiZWluZyByZW1vdmVkIC0gaXMgaXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgb3IgaXMgaXQgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUgbm93P1xuXG5UaGUgYWRkaXRpb24gb2YgYGlmICghY3R4KSByZXR1cm4gLUVJTlZBTDtgIHRvIGBkYW1vbl9jYWxsKClgIGlzIGEgZ29vZCBzYWZldHkgY2hlY2ssIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBwb3RlbnRpYWxseSBjb21wbGV4IHN5c3RlbSBsaWtlIERBTU9OLiBBbHdheXMgZ29vZCB0byB2YWxpZGF0ZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBjb250ZXh0LiBPdmVyYWxsLCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgaXRzIG1vZHVsZXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIHRyYWNlIHRoZSByZWFjaGFiaWxpdHkgb2YgYGRhbW9uX2NhbGwoKWAgYW5kIHRoaW5rIGFib3V0IGhvdyB0byBmdXp6IGl0LiBJIHNlZSB0aGF0IGBkYW1vbl9jYWxsKClgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLiBBbHNvLCBgZGFtb25fbmV3X2N0eGAgaXMgbW9kaWZpZWQsIHdoaWNoIEkgc2hvdWxkIGFsc28gZXhhbWluZS4gT2theSwgc28gdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbGVycyBvZiBgZGFtb25fY2FsbGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODowMC45MTY1NzAyMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NTY5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fY2FsbFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTAxND1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNDAtICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXFx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3JcXG5tbS9kYW1vbi9jb3JlLmMtMTA0Mi0gKiBvbmxpbmUgcGFyYW1ldGVycyB1cGRhdGVzLiAgRmluYWxseSwga2RhbW9uZF9mbigpIGl0c2VsZiB1c2UgdGhpcyBmb3JcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTQwPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjAtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxubW0vZGFtb24vY29yZS5jOjExNjE6ICogZGFtb25fY2FsbCgpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTYyLSAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MTA9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzNi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2VcXG5tbS9kYW1vbi9jb3JlLmM6MTgzNzogKiBkYW1vbl9jYWxsKCkuXFxubW0vZGFtb24vY29yZS5jLTE4MzgtICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA3MT1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwODItLyoqXFxubW0vZGFtb24vY29yZS5jOjIwODM6ICogZGFtb25fY2FsbCgpIC0gSW52b2tlIGEgZ2l2ZW4gZnVuY3Rpb24gb24gREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkuXFxubW0vZGFtb24vY29yZS5jLTIwODQtICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTAyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTAzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjEwNC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzY1Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzY2Mi0gKiBJZiB0aGVyZSBhcmUgXFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxcbm1tL2RhbW9uL2NvcmUuYzozNjYzOiAqIFxcdTAwMjZkYW1vbl9jYWxsKCkgb24gQGN0eCwgZG8gb3IgY2FuY2VsIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbiBkZXBlbmRpbmdcXG5tbS9kYW1vbi9jb3JlLmMtMzY2NC0gKiBvbiBAY2FuY2VsLiAgQGNhbmNlbCBpcyBzZXQgd2hlbiB0aGUga2RhbW9uZCBpcyBhbHJlYWR5IG91dCBvZiB0aGUgbWFpbiBsb29wXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc1MT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODMyLVxcdFxcdFxcdGtkYW1vbmRfdXNsZWVwKGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzgzMzpcXHRcXHRcXHQvKiBhbGxvdyBjYWxsZXIgdW5zZXQgcGF1c2UgdmlhIGRhbW9uX2NhbGwoKSAqL1xcbm1tL2RhbW9uL2NvcmUuYy0zODM0LVxcdFxcdFxcdGtkYW1vbmRfY2FsbChjdHgsIGZhbHNlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM2OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2OTpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcwLVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxOC1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE5OlxcdHJldHVybiBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNhbGxfY29udHJvbCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjAtfVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTI3ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjkzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyOTQ6XFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFxcdTAwMjZjb250cm9sKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjk1LVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOS1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDA6XFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQxLX1cXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjIxLVxcdGNhbGxfY29udHJvbC5kYXRhID0gZGFtb25fc3RhdF9jb250ZXh0O1xcbm1tL2RhbW9uL3N0YXQuYzoyMjI6XFx0cmV0dXJuIGRhbW9uX2NhbGwoZGFtb25fc3RhdF9jb250ZXh0LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjIzLX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyODItXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjI4MzpcXHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI4NC1cXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI4OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzAwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjMwMTpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMC1cXHRjYWxsX2NvbnRyb2wuZGF0YSA9IGtkYW1vbmQ7XFxubW0vZGFtb24vc3lzZnMuYzoyMzExOlxcdGVyciA9IGRhbW9uX2NhbGwoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTItXFx0cmV0dXJuIGVyciA/IGVyciA6IGNhbGxfY29udHJvbC5yZXR1cm5fY29kZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM2ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzc1LVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVDpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzNzY6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzc3LVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMzc4LVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTOlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3OTpcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG5tbS9kYW1vbi9zeXNmcy5jLTIzODAtXFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfU1RBVFM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzgzOlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM4NC1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTItXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTM6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzk0LVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTYtXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1RVTkVEX0lOVEVSVkFMUzpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTc6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzk4LVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODowMC45NjQxMzA5NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY4MTM1MjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgdGhlIERBTU9OIEJ1ZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IG5hc3R5IGJ1Zy4gSXQgc2VlbXMgdGhhdCBgZGFtb25fY2FsbCgpYCBpcyBnZXR0aW5nIGludm9rZWQgd2l0aCBhIGBOVUxMYCBjb250ZXh0IChgY3R4YCkgaW4gdGhlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zLiBUaGUgY3VscHJpdD8gSXQncyBoYXBwZW5pbmcgd2hlbiBgZGFtb25fbHJ1X3NvcnRfdHVybih0cnVlKWAgb3IgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAgaGFzbid0IGJlZW4gY2FsbGVkLCBtZWFuaW5nIHRoYXQgdGhlIGNydWNpYWwgYGN0eGAgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgdGhlIGNvbnRleHQgbmVlZHMgdG8gYmUgc2V0IHVwIGJlZm9yZSBpdCdzIHVzZWQuXG5cbk5vdywgYSBxdWljayByZW1pbmRlcjogYGN0eGAgaXMgYSBnbG9iYWwgdmFyaWFibGUgd2l0aGluIGJvdGggYGxydV9zb3J0LmNgIGFuZCBgcmVjbGFpbS5jYCwgd2hpY2ggbWFrZXMgdGhpcyBldmVuIG1vcmUgY3JpdGljYWwuIEdvdHRhIGJlIGNhcmVmdWwgd2l0aCB0aG9zZSBnbG9iYWwgdmFyaWFibGVzISBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIG15IHN1c3BpY2lvbiBieSB0aG9yb3VnaGx5IGNoZWNraW5nIGBscnVfc29ydC5jYCBhbmQgYHJlY2xhaW0uY2AuIExldCdzIHNlZSBob3cgdGhpcyBmaXggYWN0dWFsbHkgaGFuZGxlcyB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODoxNi42NDU0ODY5MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODgwODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4IFxcXFwqY3R4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jPTE3Mz1zdGF0aWMgc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIGRhbW9uX2xydV9zb3J0X3N0dWJfcGF0dGVybiA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTg0LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTg1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xODYtc3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldDtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjE9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE2NDpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjUtc3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6MTYuNjkyMzcyOTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODIzMTA4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb250ZXh0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYGN0eGAgaXMgaW5kZWVkIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZ2V0cyBjYWxsZWQgYmVmb3JlIGBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpYCwgYGN0eGAgd2lsbCBiZSBOVUxMLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGluaXRpYWxpemF0aW9uIGlzIGtleSwgYW5kIGlmIHRoZSBzZXR1cCBpc24ndCBkb25lLCB5b3UncmUgZ29pbmcgdG8gaGF2ZSBwcm9ibGVtcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgZ2V0cyByaWQgb2YgdGhlIGBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZGAgY2hlY2ssIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNhbGwgdG8gc2ltcGxpZnkgdGhpbmdzLiBJbnN0ZWFkLCBpdCBhZGRzIGEgbW9yZSBkaXJlY3QgYGlmICghY3R4KSByZXR1cm4gLUVJTlZBTDtgIGNoZWNrIGluc2lkZSBgZGFtb25fY2FsbCgpYC4gU21hcnQuIFRoaXMgZGlyZWN0bHkgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBkYW1vbl9jYWxsKClgLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIGJlIGEgbmFzdHkgYnVnIHRvIHRyYWNrIGRvd24sIGVzcGVjaWFsbHkgaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdWJzeXN0ZW0gbGlrZSBEQU1PTi4gU2FmZXR5IGZpcnN0IVxuXG5MZXQncyBzZWUuLi4gdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyB0aGUgbGluZSBgY3R4LVx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO2Agd2l0aGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGlzIGZlZWxzIGxpa2UgYSBjb250cm9sIGZsb3cgc2V0dGluZywgYSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoYXQncyBiZWluZyBkb25lIGluc2lkZSBgZGFtb25fbmV3X2N0eCgpYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCB1c2FnZSBvZiBgY3R4LVx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGVgLCBidXQgSSBoYXZlIGEgcHJldHR5IGdvb2QgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24gbm93OyBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX25ld19jdHgoKWAgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODoyMS4xNzQ2ODU4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2ODg4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X2N0eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMS1cXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODEwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MTQtXFxubW0vZGFtb24vY29yZS5jOjE4MTU6XFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vY29yZS5jLTE4MTYtXFx0aWYgKCF0ZXN0X2N0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTc1PWludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5ODItXFxubW0vZGFtb24vY29yZS5jOjE5ODM6XFx0XFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vY29yZS5jLTE5ODQtXFx0XFx0aWYgKCF0ZXN0X2N0eClcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM9MTU9aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTIwLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MjE6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjItXFx0aWYgKCFjdHgpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE1Ny1cXG5tbS9kYW1vbi9zdGF0LmM6MTU4OlxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi9zdGF0LmMtMTU5LVxcdGlmICghY3R4KVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIzOT1zdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9zdG9yZShcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yNTMtXFx0XFx0ICogcHJvYmFibHkgY2FsbGVkIGZyb20gY29tbWFuZCBsaW5lIHBhcnNpbmcgKHBhcnNlX2FyZ3MoKSkuXFxubW0vZGFtb24vc3RhdC5jOjI1NDpcXHRcXHQgKiBDYW5ub3QgY2FsbCBkYW1vbl9uZXdfY3R4KCkuICBMZXQgZGFtb25fc3RhdF9pbml0KCkgaGFuZGxlLlxcbm1tL2RhbW9uL3N0YXQuYy0yNTUtXFx0XFx0ICovXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyMDA9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjIwMi17XFxubW0vZGFtb24vc3lzZnMuYzoyMjAzOlxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDQtXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01Mj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3RhcmdldChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTUzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTQ6XFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTUtXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3LXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODg6XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04OS1cXHR1bnNpZ25lZCBsb25nIHNhZGRyW11bM10gPSB7ezEwLCAyMCwgMzB9LCB7NSwgNDIsIDQ5fSwgezEzLCAzMywgNTV9IH07XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjMyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ0LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyNDU6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNDYtXFx0aWYgKCFjdHgpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjgwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjg4LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyODk6XFx0YyA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjkwLVxcdGlmICghYylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zNTQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2My1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzY0OlxcdGMgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2NS1cXHRpZiAoIWMpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDExPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQxMi17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQxMzpcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MTQtXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01OTU9c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwNC1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDU6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MDYtXFx0aWYgKCFjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02MzY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02Mzcte1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2Mzg6XFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjM5LVxcdHN0cnVjdCBkYW1vbl9hdHRycyB2YWxpZF9hdHRycyA9IHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02OTY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzA1LVxcdH07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjcwNjpcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDctXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzA5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMxMi1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxMzpcXHRzcmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTQtXFx0aWYgKCFzcmMpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTUtXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic3JjIGFsbG9jIGZhaWxcXFwiKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxNjpcXHRkc3QgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTctXFx0aWYgKCFkc3QpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTIxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTMxLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTMyOlxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUzMy1cXHRpZiAoIWN0eClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjAxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjA2LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjA3OlxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwOC1cXHRpZiAoIWN0eClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTcyLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6NzM6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtNzQtXFx0aWYgKCFjdHgpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6MjEuMjIxMzc3Njg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjY0MjYyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhpcyBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IHNldHRpbmcgYGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gdHJ1ZTtgIHdpdGhpbiBgZGFtb25fbmV3X2N0eCgpYC4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgZnV6ei13b3J0aHkuIEdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBpdOKAmXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBleGFtaW5hdGlvbi5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbXBhY3RzOlxuXG4qICAgYGRhbW9uX25ld19jdHhgXG4qICAgYGRhbW9uX2NhbGxgXG4qICAgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgXG4qICAgYGRhbW9uX2xydV9zb3J0X3R1cm5gXG4qICAgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWBcbiogICBgZGFtb25fcmVjbGFpbV90dXJuYFxuXG5Ob3csIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFyZSBzeXNmcyBzdG9yZSBjYWxsYmFja3MsIGFuZCBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseSwgc28gdGhlIGF0dGFjayBzdXJmYWNlIGZvciB0aGUgbGF0dGVyIHR3byBhcmUgbG93LiBCdXQgYmVjYXVzZSB0aGV5IGFyZSBsaW5rZWQgdG8gdGhlIGZvcm1lciB0d28sIHRoZXNlIG1heSBuZWVkIHRvIGJlIGFzc2Vzc2VkIGFzIHdlbGwuIGBkYW1vbl9uZXdfY3R4YCBhbmQgYGRhbW9uX2NhbGxgIGFyZSB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBvbiB0aGUgbGlzdCBmb3IgY2xvc2Ugc2NydXRpbnkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IGlmIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBpcyBpbmRlZWQgcmVhY2hhYmxlIHZpYSBzeXNmcy4gSWYgc28sIHRoYXQgcmVwcmVzZW50cyBhIGRpcmVjdCBhdmVudWUgZm9yIGZ1enppbmcsIGFuZCBJ4oCZbGwgZGVzaWduIHRlc3QgY2FzZXMgYXJvdW5kIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjI2LjE4NzgwNjgxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMDk1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ0PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM0OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc1LVxcdC5mbGFncyA9IEtFUk5FTF9QQVJBTV9PUFNfRkxfTk9BUkcsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzY6XFx0LnNldCA9IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzctXFx0LmdldCA9IHBhcmFtX2dldF9ib29sLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODoyNi40NTg5MDczNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNjY4MTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgUGFyYW1ldGVyIFN0b3JlIEZ1bmN0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHRocm91Z2ggYC9zeXMvbW9kdWxlL2RhbW9uX2xydV9zb3J0L3BhcmFtZXRlcnMvY29tbWl0X2lucHV0c2AuIFRoZSBzYW1lIGFwcGxpZXMgdG8gYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnM6IGBkYW1vbl9uZXdfY3R4YCBhbmQgYGRhbW9uX2NhbGxgLiBIb3dldmVyLCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcm9hZCwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc2NvcGUgdGhhdCBkZXNlcnZlIGF0dGVudGlvbi5cblxuQWgsIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAgYXJlIHN0YXRpYywgYnV0IGFjdCBhcyBlbnRyeSBwb2ludHMgZnJvbSBzeXNmcy4gVGhlIGZseSBpbiB0aGUgb2ludG1lbnQgaGVyZSBpcyB0aGF0IFN5emthbGxlciBtaWdodCBoYXZlIGlzc3VlcyByZXNvbHZpbmcgc3RhdGljIGZ1bmN0aW9ucy4gV2FpdC4uLiB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBJZiB0aGUgZGVidWcgaW5mbyBpcyBwcmVzZW50LCBTeXprYWxsZXIgKmNhbiogcmVzb2x2ZSBzdGF0aWMgZnVuY3Rpb25zLiBTdGlsbCwgaXQncyBiZXR0ZXIsIGdlbmVyYWxseSwgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgb25lcyBmb3IgbW9yZSBkaXJlY3QgaW50ZWdyYXRpb24uXG5cblNvLCBgZGFtb25fY2FsbGAgYW5kIGBkYW1vbl9uZXdfY3R4YCAqYXJlKiBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEwMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODozMS4yNjU1OTE2NDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzcyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkYW1vbl9jYWxsXFxcXCh8c3RydWN0IGRhbW9uX2N0eCBcXFxcKmRhbW9uX25ld19jdHhcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMS1cXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDcxPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjEwMi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjEwMzppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIxMDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODozMS4zMTAzNzA3MDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTk4NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBc3Nlc3NpbmcgdGhlIER5bmFtaWMgTmF0dXJlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYywgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaW5ncyBjaGFuZ2UuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGhvdyAqZGFtb25fc3RhcnQqIGNvbm5lY3RzIHRvICpkYW1vbl9jYWxsKiBhbmQgKmRhbW9uX25ld19jdHgqLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY29uc2lkZXJpbmcgYWxsIHJlbGF0ZWQgZmFjdG9ycy4gVGhlIHJlbGF0aW9uc2hpcHMgaGVyZSBhcmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIFdlIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQgc3RhcnQgcHJvY2VzcywgZ2l2ZW4gaXRzIHJlbGF0aW9uIHRvIHRoZSBjYWxsIGFuZCBuZXcgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjM0LjIwMjM1ODA0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyOTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGRhbW9uX3N0YXJ0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xOTU4PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc1OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6MzQuMjQ3NjYyODU2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjMyODU0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZGFtb25fc3RhcnRgLCB3aGljaCBJIHNlZSBpcyBhbHNvICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZDsgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGVhc2llciB0byB0YXJnZXQuIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IHRoZSBwYXRjaCdzIGNvcmUgcmVxdWlyZW1lbnRzIGhpbmdlIG9uIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYmVpbmcgZW5hYmxlZDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgcG9zc2libHkgYERBTU9OX1NZU0ZTYCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZS5cblxuSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IGp1c3QgYERBTU9OX0xSVV9TT1JUYCBhbmQgYERBTU9OX1JFQ0xBSU1gIHdlcmUgdGhlIHJlbGV2YW50IG1vZHVsZXMsIGFuZCBub3cgSSd2ZSBjb25maXJtZWQgdGhhdC4gTWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBmaWxlcyBtb2RpZmllZC5cblxuVGhlcmVmb3JlLCB0aGUgY29uZmlndXJhdGlvbiBJJ2xsIHByb3ZpZGUgd2lsbCBiZSBleGFjdGx5IGFzIGluZGljYXRlZCBhYm92ZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NZU0ZTYC5cblxuSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBhIGNvdXBsZSBvZiBrZXkgc3ltYm9scyBoZXJlOiBgZGFtb25fbmV3X2N0eGAgYW5kIGBkYW1vbl9jYWxsYC4gSSBuZWVkIHRvIHZlcmlmeSByZWFjaGFiaWxpdHkuIFRoZSBmaWxlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBzZWVtcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgYXMgaXQgaXMgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIG1vZGlmaWVkIHZpYSBzeXNmcy4gU2luY2UgU3l6a2FsbGVyIGhhcyBhIHN5c2ZzIGZ1enplciwgdGhhdCBsb29rcyBwcm9taXNpbmcgZm9yIHRhcmdldGVkIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCB3aXRoIGEgTlVMTCBjb250ZXh0IChgY3R4YCkgaWYgdGhlIG1vZHVsZSBoYWRuJ3QgYmVlbiBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGltcGxlbWVudHMgYSBOVUxMIGNoZWNrIHdpdGhpbiBgZGFtb25fY2FsbCgpYCwgYW5kIGluaXRpYWxpemVzIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBpbiBgZGFtb25fbmV3X2N0eCgpYC4gQ3JpdGljYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIHRoZXkgaW1wYWN0IHRoZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFsb25nIHdpdGggbW9kdWxlIGNvZGUuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5JJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjAyLCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODo0MS44MTA5NTA5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODYxMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19jdHhcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24ndCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19jdHhcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24ndCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6NDEuODkwODE3OTA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgzNjkwNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjQxLjg5MTMzOTM1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTgzNjM3OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MDQwYWYxYWI3ZDhhMDQzOWVhOTkyNGU0Y2U0OGYwZmIxYzA0MmJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDM6NTc6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUwODBjYjEyMjIwZDIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTg2NCw2ICs4NjQsNyBAQCBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcyk7XG4gXG4rXHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7XG4gXHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LVx1MDAzZXJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4gXG4gXHRyZXR1cm4gY3R4O1xuQEAgLTIwOTUsMTYgKzIwOTYsMTQgQEAgaW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluXG4gICogXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZXJldHVybl9jb2RlLlxuICAqXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbi0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0gKiB3YWl0LlxuLSAqXG4gICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuIGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbiB7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuIFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbiBcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDYsOCArMzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0zNjgsMTAgKzM2Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbi1cdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtNDIyLDggKzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLVx0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDggKzI3MSw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4ge1xuQEAgLTI5MywxMCArMjkxLDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0aWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovXG4tXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtMzQzLDggKzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6NDEuODkxMzQwMjQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTI2NTgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2g6IEEgU3luY2hyb25pemF0aW9uIEZpeD8qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvciB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBEQU1PTidzIGNvcmUgb3BlcmF0aW9ucy5cblxuSW4gYGNvcmUuY2AsIEkgc2VlIGBkYW1vbl9uZXdfY3R4KClgIG5vdyBzZXRzIGBjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7YCwgYW5kIGBkYW1vbl9jYWxsKClgIGlzIGdldHRpbmcgYSBgaWYgKCFjdHgpIHJldHVybiAtRUlOVkFMO2AgY2hlY2suIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZW1lcmdpbmc/IFxuXG5UaGVuLCBvdmVyIGluIGBscnVfc29ydC5jYCBhbmQgYHJlY2xhaW0uY2AsIHRoZSBwYXRjaCByZW1vdmVzIHRoZXNlIGBkYW1vbl9oYXNfc3RhcnRlZGAgYm9vbGVhbiBmbGFncyBlbnRpcmVseSwgYW5kIGFsbCB0aGUgY29ycmVzcG9uZGluZyBjaGVja3MgYXJlIHJlbW92ZWQgZnJvbSBgKl9jb21taXRfaW5wdXRzX3N0b3JlYC4gVGhlIGFzc2lnbm1lbnRzIG9mIGB0cnVlYCB0byB0aGVzZSBmbGFncyBhcmUgYWxzbyByZW1vdmVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBgKl90dXJuKClgIGZ1bmN0aW9ucy5cblxuV2FpdCwgbG9va2luZyBhdCB0aGUgZW50aXJlIHBhdGNoIHRvZ2V0aGVyOiB0aGUgYWJzZW5jZSBvZiBhIGBoYXNfc3RhcnRlZGAgZmxhZyBpcyBjb3VwbGVkIHdpdGggYSBuZXcgbnVsbCBjaGVjayBmb3IgYGN0eGAgaW4gYGRhbW9uX2NhbGwoKWAsIGFuZCB0aGF0IGJvb2xlYW4gdmFyaWFibGUgYmVpbmcgc2V0IGFzIGB0cnVlYC4gSSdtIHRoaW5raW5nIHRoaXMgaXMgbW9yZSBvZiBhIGxvZ2ljIGNvcnJlY3Rpb24gb3IsIG1vcmUgbGlrZWx5LCBhIHN5bmNocm9uaXphdGlvbiBmaXggZm9yIGBkYW1vbl9jYWxsKClgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIGBjdHhgLCBhbmQgdGhhdCBgY3R4YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgZGFtb25fY2FsbCgpYCBpcyBjYWxsZWQuXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkYW1vbl9jYWxsKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJJ2xsIHVzZSB0aGUgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgY29tbWFuZCB0byBzZWUgdGhlIGNvZGUgdGhlcmUgYW5kIHF1aWNrbHkgdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODo0Ny45NDQwMDA4MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDkwOlxcdCAqIEBjb250cm9sIGlzIHVuc2V0LCBmdXJ0aGVyIHdhaXQgdW50aWwgdGhlIGtkYW1vbmQgZmluaXNoZXMgaGFuZGxpbmcgb2YgdGhlXFxuMjA5MTpcXHQgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gYXMgc29vbiBhcyB0aGUgcmVxdWVzdCBpcyBtYWRlLlxcbjIwOTI6XFx0ICpcXG4yMDkzOlxcdCAqIFRoZSBrZGFtb25kIGV4ZWN1dGVzIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBhcmd1bWVudCBpbiB0aGUgbWFpbiBsb29wLCBqdXN0XFxuMjA5NDpcXHQgKiBhZnRlciBhIHNhbXBsaW5nIG9mIHRoZSBpdGVyYXRpb24gaXMgZmluaXNoZWQuICBUaGUgZnVuY3Rpb24gY2FuIGhlbmNlXFxuMjA5NTpcXHQgKiBzYWZlbHkgYWNjZXNzIHRoZSBpbnRlcm5hbCBkYXRhIG9mIHRoZSBcXHUwMDI2c3RydWN0IGRhbW9uX2N0eCB3aXRob3V0IGFkZGl0aW9uYWxcXG4yMDk2OlxcdCAqIHN5bmNocm9uaXphdGlvbi4gIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgc2F2ZWQgaW5cXG4yMDk3OlxcdCAqIFxcdTAwMjZkYW1vbl9jYWxsX2NvbnRyb2wtXFx1MDAzZXJldHVybl9jb2RlLlxcbjIwOTg6XFx0ICpcXG4yMDk5OlxcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cXG4yMTAwOlxcdCAqXFxuMjEwMTpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuMjEwMjpcXHQgKi9cXG4yMTAzOlxcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4yMTA0OlxcdHtcXG4yMTA1OlxcdFxcdGlmICghY3R4KVxcbjIxMDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjEwNzpcXHRcXHRpZiAoIWNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMTA4OlxcdFxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjEwOTpcXHRcXHRjb250cm9sLVxcdTAwM2VjYW5jZWxlZCA9IGZhbHNlO1xcbjIxMTA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWxpc3QpO1xcbjIxMTE6XFx0XFxuMjExMjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XFxuMjExMzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XFxuMjExNDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4yMTE1OlxcdFxcdFxcdGdvdG8gY2FuY2VsZWQ7XFxuMjExNjpcXHRcXHR9XFxuMjExNzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjb250cm9sLVxcdTAwM2VsaXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzKTtcXG4yMTE4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbjIxMTk6XFx0XFx0aWYgKGNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMTIwOlxcdFxcdFxcdHJldHVybiAwO1xcbjIxMjE6XFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjEyMjpcXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlY2FuY2VsZWQpXFxuMjEyMzpcXHRcXHRcXHRnb3RvIGNhbmNlbGVkO1xcbjIxMjQ6XFx0XFx0cmV0dXJuIDA7XFxuMjEyNTpcXHRcXG4yMTI2OlxcdGNhbmNlbGVkOlxcbjIxMjc6XFx0XFx0d2hpbGUgKGRhbW9uX2lzX3J1bm5pbmcoY3R4KSlcXG4yMTI4OlxcdFxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xcbjIxMjk6XFx0XFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XFxuMjEzMDpcXHRcXG4yMTMxOlxcdH1cXG4yMTMyOlxcdFxcbjIxMzM6XFx0LyoqXFxuMjEzNDpcXHQgKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxcbjIxMzU6XFx0ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXFxuMjEzNjpcXHQgKiBAY29udHJvbDpcXHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSB3YWxrIHJlcXVlc3QuXFxuMjEzNzpcXHQgKlxcbjIxMzg6XFx0ICogQXNrIERBTU9OIHdvcmtlciB0aHJlYWQgKGtkYW1vbmQpIG9mIEBjdHggdG8gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lvblxcbjIxMzk6XFx0ICogdGhhdCB0aGUga2RhbW9uZCB3aWxsIGFwcGx5IERBTU9TIGFjdGlvbiB0bywgYW5kIHdhaXQgdW50aWwgdGhlIGtkYW1vbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6NDcuOTQ0MjYyMDM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODM0MjI1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IGluIGhvdyBgZGFtb25fY2FsbCgpYCBpcyBiZWluZyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHdlIGhhZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZnVuY3Rpb24gY291bGQgYmUgY2FsbGVkIHByZW1hdHVyZWx5LCBiZWZvcmUgdGhlIGNvbnRleHQgd2FzIGZ1bGx5IHJlYWR5LCBvciBwb3RlbnRpYWxseSBhZnRlciBpdCBoYWQgYmVlbiBzdG9wcGVkLiBUaGUgc29sdXRpb24gaXMgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgYm9vbGVhbiBmbGFnIGF0IHRoZSBtb2R1bGUgbGV2ZWwgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBhbmQgaW5jbHVkZSBhIGBpZiAoIWN0eClgIGNoZWNrLiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBjb2RlLCBhbmQgdGhlcmUncyBubyBldmlkZW5jZSBvZiBhIG1lbW9yeSBzYWZldHkgaXNzdWUgbGlrZSBhbiB1bmluaXRpYWxpemVkIHJlYWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGUgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIHByb3Bvc2VkIGNoYW5nZSBhcHBlYXJzIHRvIHJlc29sdmUgdGhpcyBuaWNlbHkuXG5cbkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhcyB0aGlzIGlzbid0IGRpcmVjdGx5IHJlbGF0ZWQgdG8gYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCdzIGEgY2xlYW4gc3luY2hyb25pemF0aW9uIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0OCwiT3V0cHV0VG9rZW5zIjoxNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjUzLjcyNzY4ODMxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCBiZWZvcmUgdGhlIGNvbnRleHQgd2FzIGZ1bGx5IGluaXRpYWxpemVkIG9yIGFmdGVyIGl0IHdhcyBzdG9wcGVkLiBJdCByZXBsYWNlcyBtb2R1bGUtbGV2ZWwgYm9vbGVhbiBmbGFncyB3aXRoIGEgY29udGV4dC1zcGVjaWZpYyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgZmxhZyBhbmQgYWRkcyBhIE5VTEwgY2hlY2sgZm9yIHRoZSBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbiBidWdzIChlLmcuLCBpbmRlZmluaXRlIHdhaXRzIG9yIGludmFsaWQgYWNjZXNzZXMpLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 03:56:17 +0000 UTC FinishedAt: 2026-08-13 03:58:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_SYSFS" ], "series_id": "e339fa60-04ae-4de8-99e8-483552bdf652" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_new_ctx", "damon_call" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCBiZWZvcmUgdGhlIGNvbnRleHQgd2FzIGZ1bGx5IGluaXRpYWxpemVkIG9yIGFmdGVyIGl0IHdhcyBzdG9wcGVkLiBJdCByZXBsYWNlcyBtb2R1bGUtbGV2ZWwgYm9vbGVhbiBmbGFncyB3aXRoIGEgY29udGV4dC1zcGVjaWZpYyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgZmxhZyBhbmQgYWRkcyBhIE5VTEwgY2hlY2sgZm9yIHRoZSBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbiBidWdzIChlLmcuLCBpbmRlZmluaXRlIHdhaXRzIG9yIGludmFsaWQgYWNjZXNzZXMpLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24mIzM5O3QgYmVlbiBzdGFydGVkIHlldC4gSXQgYWRkcyBhIE5VTEwgY2hlY2sgaW4gYGRhbW9uX2NhbGwoKWAgYW5kIGluaXRpYWxpemVzIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBpbiBgZGFtb25fbmV3X2N0eCgpYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIG1vZHVsZXMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MDQwYWYxYWI3ZDhhMDQzOWVhOTkyNGU0Y2U0OGYwZmIxYzA0MmJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDM6NTc6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC04NjQsNiAmIzQzOzg2NCw3IEBAIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VzY2hlbWVzKTtcbiBcbiYjNDM7XHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7XG4gXHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LVx1MDAzZXJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4gXG4gXHRyZXR1cm4gY3R4O1xuQEAgLTIwOTUsMTYgJiM0MzsyMDk2LDE0IEBAIGludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gICogc3luY2hyb25pemF0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gd2lsbCBiZSBzYXZlZCBpblxuICAqIFx1MDAyNmRhbW9uX2NhbGxfY29udHJvbC1cdTAwM2VyZXR1cm5fY29kZS5cbiAgKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG4tICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXG4tICogd2FpdC5cbi0gKlxuICAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbiBpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4ge1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuIFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbiBcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDYsOCAmIzQzOzM0Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG4gXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDtcbi1cbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG5AQCAtMzY4LDEwICYjNDM7MzY2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiBcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xuLVx0aWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTtcbkBAIC00MjIsOCAmIzQzOzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLVx0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDggJiM0MzsyNzEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG4gXHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQ7XG4tXG4gc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0yOTMsMTAgJiM0MzsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG4gXG4gXHRyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTtcbkBAIC0zNDMsOCAmIzQzOzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbmV3X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIGNvcmUgKGBkYW1vbl9uZXdfY3R4YCwgYGRhbW9uX2NhbGxgKSBhbmQgREFNT04gbW9kdWxlcyAoYGRhbW9uX2xydV9zb3J0YCwgYGRhbW9uX3JlY2xhaW1gKSB0byBmaXggYSBidWcgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGBjdHhgIGlmIHRoZSBtb2R1bGUgaGFzbiYjMzk7dCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNDBhZjFhYjdkOGEwNDM5ZWE5OTI0ZTRjZTQ4ZjBmYjFjMDQyYmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzo1Nzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC04NjQsNiAmIzQzOzg2NCw3IEBAIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZCkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3NjaGVtZXMpOwogCiYjNDM7CWN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7CiAJcHJhbmRvbV9zZWVkX3N0YXRlKCZhbXA7Y3R4LSZndDtybmRfc3RhdGUsIGdldF9yYW5kb21fdTY0KCkpOwogCiAJcmV0dXJuIGN0eDsKQEAgLTIwOTUsMTYgJiM0MzsyMDk2LDE0IEBAIGludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluCiAgKiAmYW1wO2RhbW9uX2NhbGxfY29udHJvbC0mZ3Q7cmV0dXJuX2NvZGUuCiAgKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGUKLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZQotICogd2FpdC4KLSAqCiAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZmFpbGVkLCB0aGUgQGN0eCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogICovCiBpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpCiB7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFjb250cm9sLSZndDtyZXBlYXQpCiAJCWluaXRfY29tcGxldGlvbigmYW1wO2NvbnRyb2wtJmd0O2NvbXBsZXRpb24pOwogCWNvbnRyb2wtJmd0O2NhbmNlbGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBiZDg0NzgyOWE5OTA3Li5mMjVlZTczMjZlODdjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmMKQEAgLTM0Niw4ICYjNDM7MzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZykKIAlyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDsKLQogc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKIAkJCQkJICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0zNjgsMTAgJiM0MzszNjYsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLAogCWlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KQogCQlyZXR1cm4gMDsKIAotCS8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqLwotCWlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gZGFtb25fY2FsbChjdHgsICZhbXA7Y29udHJvbCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTsKQEAgLTQyMiw4ICYjNDM7NDE2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCkKLQkJZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlOwogCXJldHVybiBkYW1vbl9jYWxsKGN0eCwgJmFtcDtjYWxsX2NvbnRyb2wpOwogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uYwpAQCAtMjcxLDggJiM0MzsyNzEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpCiAJcmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkOwotCiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yOTMsMTAgJiM0MzsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJaWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JLyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovCi0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7CkBAIC0zNDMsOCAmIzQzOzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIFBhdGNoIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgREFNT04gZmlsZXM6IGBjb3JlLmNgLCBgbHJ1X3NvcnQuY2AsIGFuZCBgcmVjbGFpbS5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSByZW1vdmFsIG9mIHRob3NlIGBfaGFzX3N0YXJ0ZWRgIHZhcmlhYmxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBjaGVja3MuIFRoYXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyBvZiB0aGUgREFNT04gaW5pdGlhbGl6YXRpb24gZmxvdywgbGlrZWx5IHNpbXBsaWZ5aW5nIHRoaW5ncyBieSByZW1vdmluZyB0aG9zZSBzcGVjaWZpYyBnYXRla2VlcGluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTtyZSByZW1vdmluZyB0aGVtOyB3aGF0JiMzOTtzIHRoZSBuZXcgYXBwcm9hY2g/IElzIGl0IGNsZWFuZXIsIG1vcmUgcm9idXN0LCBvciBqdXN0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPwoKVGhlIGFkZGVkIGAtRUlOVkFMYCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBpcyBnb29kIGh5Z2llbmUuIEV4cGxpY2l0IG51bGwgY2hlY2tzIGFyZSBhbHdheXMgd2VsY29tZSwgZXNwZWNpYWxseSBpbiBhIGNvbXBsZXggc3Vic3lzdGVtIGxpa2UgREFNT04gd2hlcmUgY29udGV4dCBtYW5hZ2VtZW50IGNhbiBiZSB0cmlja3kuIEl0JiMzOTtzIGEgcHJldmVudGF0aXZlIG1lYXN1cmUgYWdhaW5zdCBhIGNvbW1vbiBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy4gSG93ZXZlciwgSSBuZWVkIHRvIGxvb2sgaW50byB3aGVuIGBjdHhgIHdvdWxkIGJlIG51bGwuIElzIHRoaXMgYSBuZXcgZmFpbHVyZSBjYXNlLCBvciBhbiBleGlzdGluZyBvbmUgdGhhdCYjMzk7cyBqdXN0IGJlaW5nIGNhdWdodCBlYXJsaWVyPwoKRmluYWxseSwgc2V0dGluZyBgY3R4LSZndDtjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gdHJ1ZTtgIGluIGBkYW1vbl9uZXdfY3R4KClgIGlzIGludGVyZXN0aW5nLiAmIzM0O09ic29sZXRlJiMzNDsgaXMgYSBzdHJvbmcgd29yZC4gSXQgc2lnbmFscyBhIHNoaWZ0IGluIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgZGFtb25fY2FsbCgpYCwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIGluIGhvdyBEQU1PTiYjMzk7cyBvcGVyYXRpb25zIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgZmxhZyBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERBTU9OIGV4ZWN1dGlvbiBwYXRoLiBXaGF0IGV4YWN0bHkgaXMgY29uc2lkZXJlZCAmIzM0O29ic29sZXRlJiMzNDsgbm93PyBJcyB0aGlzIHJlbGF0ZWQgdG8gdGhlIHJlbW92ZWQgYF9oYXNfc3RhcnRlZGAgdmFyaWFibGVzPwoKVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8ga25vdyB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIERBTU9OLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBhbmQgc2ltaWxhciBmaWxlcyB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgaW52b2x2ZWQuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzIG9uIHZhcmlvdXMgREFNT04gdXNlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY2hhbmdlczoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCYjMzk7cyBTY29wZSoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIGhpdHRpbmcgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZlYXR1cmVzIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgTFJVIHNvcnRpbmcgYW5kIHJlY2xhaW0gY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGNvbnRleHQgaW4gbWluZC4gTm93LCBnaXZlbiB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkLiBMb29rcyBsaWtlIGBEQU1PTmAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fUkVDTEFJTWAgYXJlIGdvaW5nIHRvIGJlIGtleS4gTGV0IG1lIHF1aWNrbHkgZ28gb3ZlciB0aGUgZGVwZW5kZW5jaWVzIGZvciBgREFNT05fTFJVX1NPUlRgIGFuZCBgREFNT05fUkVDTEFJTWAsIGp1c3QgdG8gZ2V0IGEgZnVsbGVyIHBpY3R1cmUgb2YgdGhlIGltcGFjdC4gSSB3YW50IHRvIGVuc3VyZSBJJiMzOTttIGF3YXJlIG9mIGFueSBvdGhlciBwb3RlbnRpYWwgYXJlYXMgb3IgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fTFJVX1NPUlR8Y29uZmlnIERBTU9OX1JFQ0xBSU18ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0xNT1jb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gREFNT05cbm1tL2RhbW9uL0tjb25maWctMTgtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZz0yNj1jb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWc9Mzg9Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNDEtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbi0tXG5tbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy01MC1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuLS1cbm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNTktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWc9Njg9Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZy03MS1cdGRlZmF1bHQgREFNT05cbi0tXG5tbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo3ODpcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNzktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctOTEtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMDMtXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWc9MTE2PWNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTExOS1cdGRlZmF1bHQgREFNT05fU1RBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gUmVmYWN0b3JpbmcgVGhvdWdodHMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIERBTU9OIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgY2hlY2sgYGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpYCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGAqX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSB3b25kZXIgd2h5IHRoYXQgY2hlY2sgaXMgYmVpbmcgcmVtb3ZlZCAtIGlzIGl0IG5vIGxvbmdlciBuZWNlc3NhcnksIG9yIGlzIGl0IGJlaW5nIGhhbmRsZWQgZWxzZXdoZXJlIG5vdz8KClRoZSBhZGRpdGlvbiBvZiBgaWYgKCFjdHgpIHJldHVybiAtRUlOVkFMO2AgdG8gYGRhbW9uX2NhbGwoKWAgaXMgYSBnb29kIHNhZmV0eSBjaGVjaywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiBhIHBvdGVudGlhbGx5IGNvbXBsZXggc3lzdGVtIGxpa2UgREFNT04uIEFsd2F5cyBnb29kIHRvIHZhbGlkYXRlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGNvbnRleHQuIE92ZXJhbGwsIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBpdHMgbW9kdWxlcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCk5vdywgSSBuZWVkIHRvIHRyYWNlIHRoZSByZWFjaGFiaWxpdHkgb2YgYGRhbW9uX2NhbGwoKWAgYW5kIHRoaW5rIGFib3V0IGhvdyB0byBmdXp6IGl0LiBJIHNlZSB0aGF0IGBkYW1vbl9jYWxsKClgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLiBBbHNvLCBgZGFtb25fbmV3X2N0eGAgaXMgbW9kaWZpZWQsIHdoaWNoIEkgc2hvdWxkIGFsc28gZXhhbWluZS4gT2theSwgc28gdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGxlcnMgb2YgYGRhbW9uX2NhbGxgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fY2FsbFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTAxND1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDQwLSAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDItICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG4tLVxubW0vZGFtb24vY29yZS5jPTExNDA9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjAtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG5tbS9kYW1vbi9jb3JlLmM6MTE2MTogKiBkYW1vbl9jYWxsKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE2Mi0gKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgxMD1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgzNi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2Vcbm1tL2RhbW9uL2NvcmUuYzoxODM3OiAqIGRhbW9uX2NhbGwoKS5cbm1tL2RhbW9uL2NvcmUuYy0xODM4LSAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDcxPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODItLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA4MzogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cbm1tL2RhbW9uL2NvcmUuYy0yMDg0LSAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTAzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTA0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzY1Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM2NjItICogSWYgdGhlcmUgYXJlIFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxubW0vZGFtb24vY29yZS5jOjM2NjM6ICogXHUwMDI2ZGFtb25fY2FsbCgpIG9uIEBjdHgsIGRvIG9yIGNhbmNlbCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZGVwZW5kaW5nXG5tbS9kYW1vbi9jb3JlLmMtMzY2NC0gKiBvbiBAY2FuY2VsLiAgQGNhbmNlbCBpcyBzZXQgd2hlbiB0aGUga2RhbW9uZCBpcyBhbHJlYWR5IG91dCBvZiB0aGUgbWFpbiBsb29wXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NTE9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4MzItXHRcdFx0a2RhbW9uZF91c2xlZXAoY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XG5tbS9kYW1vbi9jb3JlLmM6MzgzMzpcdFx0XHQvKiBhbGxvdyBjYWxsZXIgdW5zZXQgcGF1c2UgdmlhIGRhbW9uX2NhbGwoKSAqL1xubW0vZGFtb24vY29yZS5jLTM4MzQtXHRcdFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2OTpcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcdTAwMjZjb250cm9sKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcwLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAzPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE4LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTk6XHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMC19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTI3ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI5My1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyOTQ6XHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjk1LVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMjQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM5LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vcmVjbGFpbS5jOjM0MDpcdHJldHVybiBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDEtfVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIyMS1cdGNhbGxfY29udHJvbC5kYXRhID0gZGFtb25fc3RhdF9jb250ZXh0O1xubW0vZGFtb24vc3RhdC5jOjIyMjpcdHJldHVybiBkYW1vbl9jYWxsKGRhbW9uX3N0YXRfY29udGV4dCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3N0YXQuYy0yMjMtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjgyLVx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XG5tbS9kYW1vbi9zeXNmcy5jOjIyODM6XHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxubW0vZGFtb24vc3lzZnMuYy0yMjg0LVx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODg9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDAtXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDE6c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMi1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzEwLVx0Y2FsbF9jb250cm9sLmRhdGEgPSBrZGFtb25kO1xubW0vZGFtb24vc3lzZnMuYzoyMzExOlx0ZXJyID0gZGFtb25fY2FsbChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMi1cdHJldHVybiBlcnIgPyBlcnIgOiBjYWxsX2NvbnRyb2wucmV0dXJuX2NvZGU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzY0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzc1LVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUOlxubW0vZGFtb24vc3lzZnMuYzoyMzc2Olx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Ny1cdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNzgtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3OTpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODAtXHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19TVEFUUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4MzpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODQtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzkyLVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5MzpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTQtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM5Ni1cdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XG5tbS9kYW1vbi9zeXNmcy5jOjIzOTc6XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxubW0vZGFtb24vc3lzZnMuYy0yMzk4LVx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscywga2RhbW9uZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgdGhlIERBTU9OIEJ1ZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBuYXN0eSBidWcuIEl0IHNlZW1zIHRoYXQgYGRhbW9uX2NhbGwoKWAgaXMgZ2V0dGluZyBpbnZva2VkIHdpdGggYSBgTlVMTGAgY29udGV4dCAoYGN0eGApIGluIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucy4gVGhlIGN1bHByaXQ/IEl0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpYCBvciBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYCBoYXNuJiMzOTt0IGJlZW4gY2FsbGVkLCBtZWFuaW5nIHRoYXQgdGhlIGNydWNpYWwgYGN0eGAgaXNuJiMzOTt0IGluaXRpYWxpemVkIHlldC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHRoZSBjb250ZXh0IG5lZWRzIHRvIGJlIHNldCB1cCBiZWZvcmUgaXQmIzM5O3MgdXNlZC4KCk5vdywgYSBxdWljayByZW1pbmRlcjogYGN0eGAgaXMgYSBnbG9iYWwgdmFyaWFibGUgd2l0aGluIGJvdGggYGxydV9zb3J0LmNgIGFuZCBgcmVjbGFpbS5jYCwgd2hpY2ggbWFrZXMgdGhpcyBldmVuIG1vcmUgY3JpdGljYWwuIEdvdHRhIGJlIGNhcmVmdWwgd2l0aCB0aG9zZSBnbG9iYWwgdmFyaWFibGVzISBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIG15IHN1c3BpY2lvbiBieSB0aG9yb3VnaGx5IGNoZWNraW5nIGBscnVfc29ydC5jYCBhbmQgYHJlY2xhaW0uY2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZml4IGFjdHVhbGx5IGhhbmRsZXMgdGhlIGNvbnRleHQgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4IFxcKmN0eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTE3Mz1zdGF0aWMgc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIGRhbW9uX2xydV9zb3J0X3N0dWJfcGF0dGVybiA9IHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTE4NC1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTg1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG5tbS9kYW1vbi9scnVfc29ydC5jLTE4Ni1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0O1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjE9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTYzLVxubW0vZGFtb24vcmVjbGFpbS5jOjE2NDpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xubW0vZGFtb24vcmVjbGFpbS5jLTE2NS1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29udGV4dCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYGN0eGAgaXMgaW5kZWVkIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZ2V0cyBjYWxsZWQgYmVmb3JlIGBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpYCwgYGN0eGAgd2lsbCBiZSBOVUxMLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGluaXRpYWxpemF0aW9uIGlzIGtleSwgYW5kIGlmIHRoZSBzZXR1cCBpc24mIzM5O3QgZG9uZSwgeW91JiMzOTtyZSBnb2luZyB0byBoYXZlIHByb2JsZW1zLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgZ2V0cyByaWQgb2YgdGhlIGBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZGAgY2hlY2ssIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNhbGwgdG8gc2ltcGxpZnkgdGhpbmdzLiBJbnN0ZWFkLCBpdCBhZGRzIGEgbW9yZSBkaXJlY3QgYGlmICghY3R4KSByZXR1cm4gLUVJTlZBTDtgIGNoZWNrIGluc2lkZSBgZGFtb25fY2FsbCgpYC4gU21hcnQuIFRoaXMgZGlyZWN0bHkgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBkYW1vbl9jYWxsKClgLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIGJlIGEgbmFzdHkgYnVnIHRvIHRyYWNrIGRvd24sIGVzcGVjaWFsbHkgaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdWJzeXN0ZW0gbGlrZSBEQU1PTi4gU2FmZXR5IGZpcnN0IQoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIHRoZSBsaW5lIGBjdHgtJmd0O2NhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO2Agd2l0aGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGlzIGZlZWxzIGxpa2UgYSBjb250cm9sIGZsb3cgc2V0dGluZywgYSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSBpbnNpZGUgYGRhbW9uX25ld19jdHgoKWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IHVzYWdlIG9mIGBjdHgtJmd0O2NhbGxfY29udHJvbHNfb2Jzb2xldGVgLCBidXQgSSBoYXZlIGEgcHJldHR5IGdvb2QgaWRlYSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIG5vdzsgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fbmV3X2N0eCgpYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz04Mjc9dW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODMxLVxubW0vZGFtb24vY29yZS5jOjgzMjpzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgxMD1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgxNC1cbm1tL2RhbW9uL2NvcmUuYzoxODE1Olx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi9jb3JlLmMtMTgxNi1cdGlmICghdGVzdF9jdHgpXG4tLVxubW0vZGFtb24vY29yZS5jPTE5NzU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5ODItXG5tbS9kYW1vbi9jb3JlLmM6MTk4MzpcdFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi9jb3JlLmMtMTk4NC1cdFx0aWYgKCF0ZXN0X2N0eClcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jPTE1PWludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjAtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjIxOlx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yMi1cdGlmICghY3R4KVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE1Ny1cbm1tL2RhbW9uL3N0YXQuYzoxNTg6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi9zdGF0LmMtMTU5LVx0aWYgKCFjdHgpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIzOT1zdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9zdG9yZShcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjUzLVx0XHQgKiBwcm9iYWJseSBjYWxsZWQgZnJvbSBjb21tYW5kIGxpbmUgcGFyc2luZyAocGFyc2VfYXJncygpKS5cbm1tL2RhbW9uL3N0YXQuYzoyNTQ6XHRcdCAqIENhbm5vdCBjYWxsIGRhbW9uX25ld19jdHgoKS4gIExldCBkYW1vbl9zdGF0X2luaXQoKSBoYW5kbGUuXG5tbS9kYW1vbi9zdGF0LmMtMjU1LVx0XHQgKi9cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyMDA9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDIte1xubW0vZGFtb24vc3lzZnMuYzoyMjAzOlx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vc3lzZnMuYy0yMjA0LVx0aW50IGVycjtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NTI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF90YXJnZXQoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTUzLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1NDpcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTUtXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4Olx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg5LVx0dW5zaWduZWQgbG9uZyBzYWRkcltdWzNdID0ge3sxMCwgMjAsIDMwfSwgezUsIDQyLCA0OX0sIHsxMywgMzMsIDU1fSB9O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMzI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ0LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI0NTpcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNDYtXHRpZiAoIWN0eClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjgwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI4OC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyODk6XHRjID0gZGFtb25fbmV3X2N0eCgpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI5MC1cdGlmICghYylcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzU0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzYzLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2NDpcdGMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY1LVx0aWYgKCFjKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD00MTE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MTIte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQxMzpcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDE0LVx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NTk1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjA0LVx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDU6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjA2LVx0aWYgKCFjdHgpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NjM2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02Mzcte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjYzODpcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjM5LVx0c3RydWN0IGRhbW9uX2F0dHJzIHZhbGlkX2F0dHJzID0ge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02OTY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTcwNS1cdH07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzA2Olx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDctXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzA5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxMzpcdHNyYyA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzE0LVx0aWYgKCFzcmMpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMxNS1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtzcmMgYWxsb2MgZmFpbFwmIzM0Oyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxNjpcdGRzdCA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzE3LVx0aWYgKCFkc3QpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTUyMT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MzEtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUzMjpcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTMzLVx0aWYgKCFjdHgpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2MDE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjA2LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2MDc6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwOC1cdGlmICghY3R4KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC03Mi1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6NzM6XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTc0LVx0aWYgKCFjdHgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhpcyBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBieSBzZXR0aW5nIGBjdHgtJmd0O2NhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO2Agd2l0aGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBmdXp6LXdvcnRoeS4gR2l2ZW4gdGhlIGNvcmUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGl04oCZcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGV4YW1pbmF0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbXBhY3RzOgoKKiAgIGBkYW1vbl9uZXdfY3R4YAoqICAgYGRhbW9uX2NhbGxgCiogICBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAKKiAgIGBkYW1vbl9scnVfc29ydF90dXJuYAoqICAgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAKKiAgIGBkYW1vbl9yZWNsYWltX3R1cm5gCgpOb3csIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gbXkgdW5kZXJzdGFuZGluZywgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCBhcmUgc3lzZnMgc3RvcmUgY2FsbGJhY2tzLCBhbmQgYGRhbW9uX2xydV9zb3J0X3R1cm5gIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHksIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBmb3IgdGhlIGxhdHRlciB0d28gYXJlIGxvdy4gQnV0IGJlY2F1c2UgdGhleSBhcmUgbGlua2VkIHRvIHRoZSBmb3JtZXIgdHdvLCB0aGVzZSBtYXkgbmVlZCB0byBiZSBhc3Nlc3NlZCBhcyB3ZWxsLiBgZGFtb25fbmV3X2N0eGAgYW5kIGBkYW1vbl9jYWxsYCBhcmUgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cy4gVGhvc2UgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QgZm9yIGNsb3NlIHNjcnV0aW55LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgaWYgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGlzIGluZGVlZCByZWFjaGFibGUgdmlhIHN5c2ZzLiBJZiBzbywgdGhhdCByZXByZXNlbnRzIGEgZGlyZWN0IGF2ZW51ZSBmb3IgZnV6emluZywgYW5kIEnigJlsbCBkZXNpZ24gdGVzdCBjYXNlcyBhcm91bmQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTM0ND1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgY29tbWl0X2lucHV0c19wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM3NS1cdC5mbGFncyA9IEtFUk5FTF9QQVJBTV9PUFNfRkxfTk9BUkcsXG5tbS9kYW1vbi9scnVfc29ydC5jOjM3NjpcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzctXHQuZ2V0ID0gcGFyYW1fZ2V0X2Jvb2wsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTAxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXJhbWV0ZXIgU3RvcmUgRnVuY3Rpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHRocm91Z2ggYC9zeXMvbW9kdWxlL2RhbW9uX2xydV9zb3J0L3BhcmFtZXRlcnMvY29tbWl0X2lucHV0c2AuIFRoZSBzYW1lIGFwcGxpZXMgdG8gYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25zOiBgZGFtb25fbmV3X2N0eGAgYW5kIGBkYW1vbl9jYWxsYC4gSG93ZXZlciwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHJvYWQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc2NvcGUgdGhhdCBkZXNlcnZlIGF0dGVudGlvbi4KCkFoLCBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFyZSBzdGF0aWMsIGJ1dCBhY3QgYXMgZW50cnkgcG9pbnRzIGZyb20gc3lzZnMuIFRoZSBmbHkgaW4gdGhlIG9pbnRtZW50IGhlcmUgaXMgdGhhdCBTeXprYWxsZXIgbWlnaHQgaGF2ZSBpc3N1ZXMgcmVzb2x2aW5nIHN0YXRpYyBmdW5jdGlvbnMuIFdhaXQuLi4gdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIElmIHRoZSBkZWJ1ZyBpbmZvIGlzIHByZXNlbnQsIFN5emthbGxlciAqY2FuKiByZXNvbHZlIHN0YXRpYyBmdW5jdGlvbnMuIFN0aWxsLCBpdCYjMzk7cyBiZXR0ZXIsIGdlbmVyYWxseSwgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgb25lcyBmb3IgbW9yZSBkaXJlY3QgaW50ZWdyYXRpb24uCgpTbywgYGRhbW9uX2NhbGxgIGFuZCBgZGFtb25fbmV3X2N0eGAgKmFyZSogbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBkYW1vbl9jYWxsXFwofHN0cnVjdCBkYW1vbl9jdHggXFwqZGFtb25fbmV3X2N0eFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODI3PXVuc2lnbmVkIGludCBkYW1vbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTgzMS1cbm1tL2RhbW9uL2NvcmUuYzo4MzI6c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTgzMy17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwNzE9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTAzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTA0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyB0aGUgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG5vbi1zdGF0aWMsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgY2hhbmdlLiBOb3csIGdpdmVuIHRoYXQgY29udGV4dCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBob3cgKmRhbW9uX3N0YXJ0KiBjb25uZWN0cyB0byAqZGFtb25fY2FsbCogYW5kICpkYW1vbl9uZXdfY3R4Ki4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvbnNpZGVyaW5nIGFsbCByZWxhdGVkIGZhY3RvcnMuIFRoZSByZWxhdGlvbnNoaXBzIGhlcmUgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBXZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGF0IHN0YXJ0IHByb2Nlc3MsIGdpdmVuIGl0cyByZWxhdGlvbiB0byB0aGUgY2FsbCBhbmQgbmV3IGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBkYW1vbl9zdGFydFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTk1OD1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzQtICovXG5tbS9kYW1vbi9jb3JlLmM6MTk3NTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0xOTc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDIKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZGFtb25fc3RhcnRgLCB3aGljaCBJIHNlZSBpcyBhbHNvICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBlYXNpZXIgdG8gdGFyZ2V0LiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgY29yZSByZXF1aXJlbWVudHMgaGluZ2Ugb24gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBwb3NzaWJseSBgREFNT05fU1lTRlNgIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlLgoKSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IGp1c3QgYERBTU9OX0xSVV9TT1JUYCBhbmQgYERBTU9OX1JFQ0xBSU1gIHdlcmUgdGhlIHJlbGV2YW50IG1vZHVsZXMsIGFuZCBub3cgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQuIE1ha2VzIHNlbnNlLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUgZmlsZXMgbW9kaWZpZWQuCgpUaGVyZWZvcmUsIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O2xsIHByb3ZpZGUgd2lsbCBiZSBleGFjdGx5IGFzIGluZGljYXRlZCBhYm92ZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NZU0ZTYC4KCkkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGEgY291cGxlIG9mIGtleSBzeW1ib2xzIGhlcmU6IGBkYW1vbl9uZXdfY3R4YCBhbmQgYGRhbW9uX2NhbGxgLiBJIG5lZWQgdG8gdmVyaWZ5IHJlYWNoYWJpbGl0eS4gVGhlIGZpbGUgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIHNlZW1zIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBhcyBpdCBpcyBhIG1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgbW9kaWZpZWQgdmlhIHN5c2ZzLiBTaW5jZSBTeXprYWxsZXIgaGFzIGEgc3lzZnMgZnV6emVyLCB0aGF0IGxvb2tzIHByb21pc2luZyBmb3IgdGFyZ2V0ZWQgZnV6emluZy4KCk15IHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCB3aXRoIGEgTlVMTCBjb250ZXh0IChgY3R4YCkgaWYgdGhlIG1vZHVsZSBoYWRuJiMzOTt0IGJlZW4gaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgTlVMTCBjaGVjayB3aXRoaW4gYGRhbW9uX2NhbGwoKWAsIGFuZCBpbml0aWFsaXplcyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgaW4gYGRhbW9uX25ld19jdHgoKWAuIENyaXRpY2FsbHksIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCB0aGV5IGltcGFjdCB0aGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbG9uZyB3aXRoIG1vZHVsZSBjb2RlLiBUaGF0IG1ha2VzIGl0IGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCkkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIExldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24mIzM5O3QgYmVlbiBzdGFydGVkIHlldC4gSXQgYWRkcyBhIE5VTEwgY2hlY2sgaW4gYGRhbW9uX2NhbGwoKWAgYW5kIGluaXRpYWxpemVzIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBpbiBgZGFtb25fbmV3X2N0eCgpYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIG1vZHVsZXMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gY29yZSAoYGRhbW9uX25ld19jdHhgLCBgZGFtb25fY2FsbGApIGFuZCBEQU1PTiBtb2R1bGVzIChgZGFtb25fbHJ1X3NvcnRgLCBgZGFtb25fcmVjbGFpbWApIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZGFtb25fY2FsbCgpYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgYGN0eGAgaWYgdGhlIG1vZHVsZSBoYXNuJiMzOTt0IGJlZW4gc3RhcnRlZCB5ZXQuIEl0IGFkZHMgYSBOVUxMIGNoZWNrIGluIGBkYW1vbl9jYWxsKClgIGFuZCBpbml0aWFsaXplcyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgaW4gYGRhbW9uX25ld19jdHgoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBtb2R1bGVzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB3aGVyZSBgZGFtb25fY2FsbCgpYCBjb3VsZCBiZSBpbnZva2VkIGJlZm9yZSB0aGUgY29udGV4dCB3YXMgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgYWZ0ZXIgaXQgd2FzIHN0b3BwZWQuIEl0IHJlcGxhY2VzIG1vZHVsZS1sZXZlbCBib29sZWFuIGZsYWdzIHdpdGggYSBjb250ZXh0LXNwZWNpZmljIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBmbGFnIGFuZCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgdGhlIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBhbmQgc3luY2hyb25pemF0aW9uIGJ1Z3MgKGUuZy4sIGluZGVmaW5pdGUgd2FpdHMgb3IgaW52YWxpZCBhY2Nlc3NlcyksIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNDBhZjFhYjdkOGEwNDM5ZWE5OTI0ZTRjZTQ4ZjBmYjFjMDQyYmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzo1Nzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC04NjQsNiAmIzQzOzg2NCw3IEBAIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZCkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3NjaGVtZXMpOwogCiYjNDM7CWN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7CiAJcHJhbmRvbV9zZWVkX3N0YXRlKCZhbXA7Y3R4LSZndDtybmRfc3RhdGUsIGdldF9yYW5kb21fdTY0KCkpOwogCiAJcmV0dXJuIGN0eDsKQEAgLTIwOTUsMTYgJiM0MzsyMDk2LDE0IEBAIGludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluCiAgKiAmYW1wO2RhbW9uX2NhbGxfY29udHJvbC0mZ3Q7cmV0dXJuX2NvZGUuCiAgKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGUKLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZQotICogd2FpdC4KLSAqCiAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZmFpbGVkLCB0aGUgQGN0eCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogICovCiBpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpCiB7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFjb250cm9sLSZndDtyZXBlYXQpCiAJCWluaXRfY29tcGxldGlvbigmYW1wO2NvbnRyb2wtJmd0O2NvbXBsZXRpb24pOwogCWNvbnRyb2wtJmd0O2NhbmNlbGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBiZDg0NzgyOWE5OTA3Li5mMjVlZTczMjZlODdjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmMKQEAgLTM0Niw4ICYjNDM7MzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZykKIAlyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDsKLQogc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKIAkJCQkJICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0zNjgsMTAgJiM0MzszNjYsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLAogCWlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KQogCQlyZXR1cm4gMDsKIAotCS8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqLwotCWlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gZGFtb25fY2FsbChjdHgsICZhbXA7Y29udHJvbCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTsKQEAgLTQyMiw4ICYjNDM7NDE2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCkKLQkJZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlOwogCXJldHVybiBkYW1vbl9jYWxsKGN0eCwgJmFtcDtjYWxsX2NvbnRyb2wpOwogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uYwpAQCAtMjcxLDggJiM0MzsyNzEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpCiAJcmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpOwogfQogCi1zdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkOwotCiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yOTMsMTAgJiM0MzsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJaWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JLyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovCi0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7CkBAIC0zNDMsOCAmIzQzOzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQotCQlkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogQSBTeW5jaHJvbml6YXRpb24gRml4PyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvciB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBEQU1PTiYjMzk7cyBjb3JlIG9wZXJhdGlvbnMuCgpJbiBgY29yZS5jYCwgSSBzZWUgYGRhbW9uX25ld19jdHgoKWAgbm93IHNldHMgYGN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7YCwgYW5kIGBkYW1vbl9jYWxsKClgIGlzIGdldHRpbmcgYSBgaWYgKCFjdHgpIHJldHVybiAtRUlOVkFMO2AgY2hlY2suIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZW1lcmdpbmc/IAoKVGhlbiwgb3ZlciBpbiBgbHJ1X3NvcnQuY2AgYW5kIGByZWNsYWltLmNgLCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGVzZSBgZGFtb25faGFzX3N0YXJ0ZWRgIGJvb2xlYW4gZmxhZ3MgZW50aXJlbHksIGFuZCBhbGwgdGhlIGNvcnJlc3BvbmRpbmcgY2hlY2tzIGFyZSByZW1vdmVkIGZyb20gYCpfY29tbWl0X2lucHV0c19zdG9yZWAuIFRoZSBhc3NpZ25tZW50cyBvZiBgdHJ1ZWAgdG8gdGhlc2UgZmxhZ3MgYXJlIGFsc28gcmVtb3ZlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgYCpfdHVybigpYCBmdW5jdGlvbnMuCgpXYWl0LCBsb29raW5nIGF0IHRoZSBlbnRpcmUgcGF0Y2ggdG9nZXRoZXI6IHRoZSBhYnNlbmNlIG9mIGEgYGhhc19zdGFydGVkYCBmbGFnIGlzIGNvdXBsZWQgd2l0aCBhIG5ldyBudWxsIGNoZWNrIGZvciBgY3R4YCBpbiBgZGFtb25fY2FsbCgpYCwgYW5kIHRoYXQgYm9vbGVhbiB2YXJpYWJsZSBiZWluZyBzZXQgYXMgYHRydWVgLiBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgbW9yZSBvZiBhIGxvZ2ljIGNvcnJlY3Rpb24gb3IsIG1vcmUgbGlrZWx5LCBhIHN5bmNocm9uaXphdGlvbiBmaXggZm9yIGBkYW1vbl9jYWxsKClgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIGBjdHhgLCBhbmQgdGhhdCBgY3R4YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgZGFtb25fY2FsbCgpYCBpcyBjYWxsZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRhbW9uX2NhbGwoKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkmIzM5O2xsIHVzZSB0aGUgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgY29tbWFuZCB0byBzZWUgdGhlIGNvZGUgdGhlcmUgYW5kIHF1aWNrbHkgdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDkwOlx0ICogQGNvbnRyb2wgaXMgdW5zZXQsIGZ1cnRoZXIgd2FpdCB1bnRpbCB0aGUga2RhbW9uZCBmaW5pc2hlcyBoYW5kbGluZyBvZiB0aGVcbjIwOTE6XHQgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gYXMgc29vbiBhcyB0aGUgcmVxdWVzdCBpcyBtYWRlLlxuMjA5MjpcdCAqXG4yMDkzOlx0ICogVGhlIGtkYW1vbmQgZXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGFyZ3VtZW50IGluIHRoZSBtYWluIGxvb3AsIGp1c3RcbjIwOTQ6XHQgKiBhZnRlciBhIHNhbXBsaW5nIG9mIHRoZSBpdGVyYXRpb24gaXMgZmluaXNoZWQuICBUaGUgZnVuY3Rpb24gY2FuIGhlbmNlXG4yMDk1Olx0ICogc2FmZWx5IGFjY2VzcyB0aGUgaW50ZXJuYWwgZGF0YSBvZiB0aGUgXHUwMDI2c3RydWN0IGRhbW9uX2N0eCB3aXRob3V0IGFkZGl0aW9uYWxcbjIwOTY6XHQgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluXG4yMDk3Olx0ICogXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZXJldHVybl9jb2RlLlxuMjA5ODpcdCAqXG4yMDk5Olx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuMjEwMDpcdCAqXG4yMTAxOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjEwMjpcdCAqL1xuMjEwMzpcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbjIxMDQ6XHR7XG4yMTA1Olx0XHRpZiAoIWN0eClcbjIxMDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTA3Olx0XHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuMjEwODpcdFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbjIxMDk6XHRcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbjIxMTA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbnRyb2wtXHUwMDNlbGlzdCk7XG4yMTExOlx0XG4yMTEyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuMjExMzpcdFx0aWYgKGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XG4yMTE0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbjIxMTU6XHRcdFx0Z290byBjYW5jZWxlZDtcbjIxMTY6XHRcdH1cbjIxMTc6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y29udHJvbC1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9scyk7XG4yMTE4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4yMTE5Olx0XHRpZiAoY29udHJvbC1cdTAwM2VyZXBlYXQpXG4yMTIwOlx0XHRcdHJldHVybiAwO1xuMjEyMTpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb250cm9sLVx1MDAzZWNvbXBsZXRpb24pO1xuMjEyMjpcdFx0aWYgKGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQpXG4yMTIzOlx0XHRcdGdvdG8gY2FuY2VsZWQ7XG4yMTI0Olx0XHRyZXR1cm4gMDtcbjIxMjU6XHRcbjIxMjY6XHRjYW5jZWxlZDpcbjIxMjc6XHRcdHdoaWxlIChkYW1vbl9pc19ydW5uaW5nKGN0eCkpXG4yMTI4Olx0XHRcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuMjEyOTpcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4yMTMwOlx0XG4yMTMxOlx0fVxuMjEzMjpcdFxuMjEzMzpcdC8qKlxuMjEzNDpcdCAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXG4yMTM1Olx0ICogQGN0eDpcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cbjIxMzY6XHQgKiBAY29udHJvbDpcdENvbnRyb2wgdmFyaWFibGUgb2YgdGhlIHdhbGsgcmVxdWVzdC5cbjIxMzc6XHQgKlxuMjEzODpcdCAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCByZWdpb25cbjIxMzk6XHQgKiB0aGF0IHRoZSBrZGFtb25kIHdpbGwgYXBwbHkgREFNT1MgYWN0aW9uIHRvLCBhbmQgd2FpdCB1bnRpbCB0aGUga2RhbW9uZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ4CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCBzcGVjaWZpY2FsbHkgaW4gaG93IGBkYW1vbl9jYWxsKClgIGlzIGJlaW5nIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2Ugd2UgaGFkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBmdW5jdGlvbiBjb3VsZCBiZSBjYWxsZWQgcHJlbWF0dXJlbHksIGJlZm9yZSB0aGUgY29udGV4dCB3YXMgZnVsbHkgcmVhZHksIG9yIHBvdGVudGlhbGx5IGFmdGVyIGl0IGhhZCBiZWVuIHN0b3BwZWQuIFRoZSBzb2x1dGlvbiBpcyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBib29sZWFuIGZsYWcgYXQgdGhlIG1vZHVsZSBsZXZlbCB3aXRoIGEgY29udGV4dC1zcGVjaWZpYyBgY3R4LSZndDtjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBhbmQgaW5jbHVkZSBhIGBpZiAoIWN0eClgIGNoZWNrLiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGNvZGUsIGFuZCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBhIG1lbW9yeSBzYWZldHkgaXNzdWUgbGlrZSBhbiB1bmluaXRpYWxpemVkIHJlYWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGUgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIHByb3Bvc2VkIGNoYW5nZSBhcHBlYXJzIHRvIHJlc29sdmUgdGhpcyBuaWNlbHkuCgpHaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYXMgdGhpcyBpc24mIzM5O3QgZGlyZWN0bHkgcmVsYXRlZCB0byBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEl0JiMzOTtzIGEgY2xlYW4gc3luY2hyb25pemF0aW9uIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB3aGVyZSBgZGFtb25fY2FsbCgpYCBjb3VsZCBiZSBpbnZva2VkIGJlZm9yZSB0aGUgY29udGV4dCB3YXMgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgYWZ0ZXIgaXQgd2FzIHN0b3BwZWQuIEl0IHJlcGxhY2VzIG1vZHVsZS1sZXZlbCBib29sZWFuIGZsYWdzIHdpdGggYSBjb250ZXh0LXNwZWNpZmljIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBmbGFnIGFuZCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgdGhlIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBhbmQgc3luY2hyb25pemF0aW9uIGJ1Z3MgKGUuZy4sIGluZGVmaW5pdGUgd2FpdHMgb3IgaW52YWxpZCBhY2Nlc3NlcyksIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU3OjQ2LjIxNDQ0NDI5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTEzMzA2OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X2N0eFwiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24ndCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTc6NDYuMjE0NDUwMDg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYyMjM0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODA0MGFmMWFiN2Q4YTA0MzllYTk5MjRlNGNlNDhmMGZiMWMwNDJiZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzo1Nzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi41MDgwY2IxMjIyMGQyIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC04NjQsNiArODY0LDcgQEAgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LVxcdTAwM2VhZGFwdGl2ZV90YXJnZXRzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcyk7XFxuIFxcbitcXHRjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO1xcbiBcXHRwcmFuZG9tX3NlZWRfc3RhdGUoXFx1MDAyNmN0eC1cXHUwMDNlcm5kX3N0YXRlLCBnZXRfcmFuZG9tX3U2NCgpKTtcXG4gXFxuIFxcdHJldHVybiBjdHg7XFxuQEAgLTIwOTUsMTYgKzIwOTYsMTQgQEAgaW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gICogc3luY2hyb25pemF0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gd2lsbCBiZSBzYXZlZCBpblxcbiAgKiBcXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVxcdTAwM2VyZXR1cm5fY29kZS5cXG4gICpcXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcXG4tICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLSAqIHdhaXQuXFxuLSAqXFxuICAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbiAgKi9cXG4gaW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbiB7XFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0aWYgKCFjb250cm9sLVxcdTAwM2VyZXBlYXQpXFxuIFxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuIFxcdGNvbnRyb2wtXFx1MDAzZWNhbmNlbGVkID0gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXFxuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXFxuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbkBAIC0zNDYsOCArMzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4ge1xcbkBAIC0zNjgsMTAgKzM2Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbi1cXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuIFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y29udHJvbCk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyID8gZXJyIDogY29udHJvbC5yZXR1cm5fY29kZTtcXG5AQCAtNDIyLDggKzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbiBcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0aWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZClcXG4tXFx0XFx0ZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xcbiBcXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFxcdTAwMjZjYWxsX2NvbnRyb2wpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5pbmRleCA0NWQ1NTU3Y2M1NzVhLi40MmEyYzljYjEzNDMxIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xcbisrKyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbkBAIC0yNzEsOCArMjcxLDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbiBcXHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQ7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuIHtcXG5AQCAtMjkzLDEwICsyOTEsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbi1cXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFxcdTAwMjZjb250cm9sKTtcXG4gXFxuIFxcdHJldHVybiBlcnIgPyBlcnIgOiBjb250cm9sLnJldHVybl9jb2RlO1xcbkBAIC0zNDMsOCArMzM3LDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcXG4gXFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcXG4tXFx0XFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XFxuIFxcdHJldHVybiBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNhbGxfY29udHJvbCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU3OjQ3LjU3NzM1Mjg5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU0MzEzNDYxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X2N0eFwiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIGNvcmUgKGBkYW1vbl9uZXdfY3R4YCwgYGRhbW9uX2NhbGxgKSBhbmQgREFNT04gbW9kdWxlcyAoYGRhbW9uX2xydV9zb3J0YCwgYGRhbW9uX3JlY2xhaW1gKSB0byBmaXggYSBidWcgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGBjdHhgIGlmIHRoZSBtb2R1bGUgaGFzbid0IGJlZW4gc3RhcnRlZCB5ZXQuIEl0IGFkZHMgYSBOVUxMIGNoZWNrIGluIGBkYW1vbl9jYWxsKClgIGFuZCBpbml0aWFsaXplcyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgaW4gYGRhbW9uX25ld19jdHgoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBtb2R1bGVzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MDQwYWYxYWI3ZDhhMDQzOWVhOTkyNGU0Y2U0OGYwZmIxYzA0MmJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDM6NTc6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUwODBjYjEyMjIwZDIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTg2NCw2ICs4NjQsNyBAQCBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcyk7XG4gXG4rXHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7XG4gXHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LVx1MDAzZXJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4gXG4gXHRyZXR1cm4gY3R4O1xuQEAgLTIwOTUsMTYgKzIwOTYsMTQgQEAgaW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluXG4gICogXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZXJldHVybl9jb2RlLlxuICAqXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbi0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0gKiB3YWl0LlxuLSAqXG4gICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuIGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbiB7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuIFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbiBcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDYsOCArMzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0zNjgsMTAgKzM2Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbi1cdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtNDIyLDggKzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLVx0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDggKzI3MSw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4ge1xuQEAgLTI5MywxMCArMjkxLDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0aWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovXG4tXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtMzQzLDggKzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTc6NDcuNTc3MzYzOTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNzQwMTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyB0b3VjaGluZyBjb3JlIERBTU9OIGZpbGVzOiBgY29yZS5jYCwgYGxydV9zb3J0LmNgLCBhbmQgYHJlY2xhaW0uY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVtb3ZhbCBvZiB0aG9zZSBgX2hhc19zdGFydGVkYCB2YXJpYWJsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgY2hlY2tzLiBUaGF0IHN1Z2dlc3RzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIERBTU9OIGluaXRpYWxpemF0aW9uIGZsb3csIGxpa2VseSBzaW1wbGlmeWluZyB0aGluZ3MgYnkgcmVtb3ZpbmcgdGhvc2Ugc3BlY2lmaWMgZ2F0ZWtlZXBpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhleSdyZSByZW1vdmluZyB0aGVtOyB3aGF0J3MgdGhlIG5ldyBhcHByb2FjaD8gSXMgaXQgY2xlYW5lciwgbW9yZSByb2J1c3QsIG9yIGp1c3QgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/XG5cblRoZSBhZGRlZCBgLUVJTlZBTGAgY2hlY2sgaW4gYGRhbW9uX2NhbGwoKWAgaXMgZ29vZCBoeWdpZW5lLiBFeHBsaWNpdCBudWxsIGNoZWNrcyBhcmUgYWx3YXlzIHdlbGNvbWUsIGVzcGVjaWFsbHkgaW4gYSBjb21wbGV4IHN1YnN5c3RlbSBsaWtlIERBTU9OIHdoZXJlIGNvbnRleHQgbWFuYWdlbWVudCBjYW4gYmUgdHJpY2t5LiBJdCdzIGEgcHJldmVudGF0aXZlIG1lYXN1cmUgYWdhaW5zdCBhIGNvbW1vbiBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy4gSG93ZXZlciwgSSBuZWVkIHRvIGxvb2sgaW50byB3aGVuIGBjdHhgIHdvdWxkIGJlIG51bGwuIElzIHRoaXMgYSBuZXcgZmFpbHVyZSBjYXNlLCBvciBhbiBleGlzdGluZyBvbmUgdGhhdCdzIGp1c3QgYmVpbmcgY2F1Z2h0IGVhcmxpZXI/XG5cbkZpbmFsbHksIHNldHRpbmcgYGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gdHJ1ZTtgIGluIGBkYW1vbl9uZXdfY3R4KClgIGlzIGludGVyZXN0aW5nLiBcIk9ic29sZXRlXCIgaXMgYSBzdHJvbmcgd29yZC4gSXQgc2lnbmFscyBhIHNoaWZ0IGluIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgZGFtb25fY2FsbCgpYCwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIGluIGhvdyBEQU1PTidzIG9wZXJhdGlvbnMgYXJlIGJlaW5nIG1hbmFnZWQuIEknbGwgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIGZsYWcgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBEQU1PTiBleGVjdXRpb24gcGF0aC4gV2hhdCBleGFjdGx5IGlzIGNvbnNpZGVyZWQgXCJvYnNvbGV0ZVwiIG5vdz8gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSByZW1vdmVkIGBfaGFzX3N0YXJ0ZWRgIHZhcmlhYmxlcz9cblxuVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8ga25vdyB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIERBTU9OLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZXhwbG9yZSB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGFuZCBzaW1pbGFyIGZpbGVzIHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBpbnZvbHZlZC4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgb24gdmFyaW91cyBEQU1PTiB1c2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1Nzo1Mi40ODQ3NjgzNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NjYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1Nzo1Mi41MjgzMzk3NTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4MDk1NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOlxuXG4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gncyBTY29wZSoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBoaXR0aW5nIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYG1tL2RhbW9uL3JlY2xhaW0uY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGZlYXR1cmVzIHJlbGF0ZWQgdG8gREFNT04ncyBMUlUgc29ydGluZyBhbmQgcmVjbGFpbSBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBrZWVwIHRoYXQgY29udGV4dCBpbiBtaW5kLiBOb3csIGdpdmVuIHRoYXQsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZC4gTG9va3MgbGlrZSBgREFNT05gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBnb2luZyB0byBiZSBrZXkuIExldCBtZSBxdWlja2x5IGdvIG92ZXIgdGhlIGRlcGVuZGVuY2llcyBmb3IgYERBTU9OX0xSVV9TT1JUYCBhbmQgYERBTU9OX1JFQ0xBSU1gLCBqdXN0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBpbXBhY3QuIEkgd2FudCB0byBlbnN1cmUgSSdtIGF3YXJlIG9mIGFueSBvdGhlciBwb3RlbnRpYWwgYXJlYXMgb3IgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU3OjU1Ljc5NjQzNzMwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExOTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fTFJVX1NPUlR8Y29uZmlnIERBTU9OX1JFQ0xBSU18ZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9MTU9Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxNzpcXHRkZXBlbmRzIG9uIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy0xOC1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTI2PWNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy00MS1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9NDc9Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZz02OD1jb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTcxLVxcdGRlZmF1bHQgREFNT05cXG4tLVxcbm1tL2RhbW9uL0tjb25maWc9NzY9Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjkwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTkxLVxcdGhlbHBcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz0xMDg9Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnPTExNj1jb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTE5LVxcdGRlZmF1bHQgREFNT05fU1RBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1Nzo1NS44NDE1NTk0MTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc1MDA4MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIFJlZmFjdG9yaW5nIFRob3VnaHRzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIERBTU9OIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgY2hlY2sgYGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpYCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGAqX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucy4gVGhhdCdzIGludGVyZXN0aW5nLCBJIHdvbmRlciB3aHkgdGhhdCBjaGVjayBpcyBiZWluZyByZW1vdmVkIC0gaXMgaXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgb3IgaXMgaXQgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUgbm93P1xuXG5UaGUgYWRkaXRpb24gb2YgYGlmICghY3R4KSByZXR1cm4gLUVJTlZBTDtgIHRvIGBkYW1vbl9jYWxsKClgIGlzIGEgZ29vZCBzYWZldHkgY2hlY2ssIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBwb3RlbnRpYWxseSBjb21wbGV4IHN5c3RlbSBsaWtlIERBTU9OLiBBbHdheXMgZ29vZCB0byB2YWxpZGF0ZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBjb250ZXh0LiBPdmVyYWxsLCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgaXRzIG1vZHVsZXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIHRyYWNlIHRoZSByZWFjaGFiaWxpdHkgb2YgYGRhbW9uX2NhbGwoKWAgYW5kIHRoaW5rIGFib3V0IGhvdyB0byBmdXp6IGl0LiBJIHNlZSB0aGF0IGBkYW1vbl9jYWxsKClgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLiBBbHNvLCBgZGFtb25fbmV3X2N0eGAgaXMgbW9kaWZpZWQsIHdoaWNoIEkgc2hvdWxkIGFsc28gZXhhbWluZS4gT2theSwgc28gdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbGVycyBvZiBgZGFtb25fY2FsbGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODowMC45MTY1NzAyMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NTY5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fY2FsbFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTAxND1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNDAtICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXFx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3JcXG5tbS9kYW1vbi9jb3JlLmMtMTA0Mi0gKiBvbmxpbmUgcGFyYW1ldGVycyB1cGRhdGVzLiAgRmluYWxseSwga2RhbW9uZF9mbigpIGl0c2VsZiB1c2UgdGhpcyBmb3JcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTQwPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjAtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxubW0vZGFtb24vY29yZS5jOjExNjE6ICogZGFtb25fY2FsbCgpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTYyLSAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MTA9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzNi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2VcXG5tbS9kYW1vbi9jb3JlLmM6MTgzNzogKiBkYW1vbl9jYWxsKCkuXFxubW0vZGFtb24vY29yZS5jLTE4MzgtICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA3MT1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwODItLyoqXFxubW0vZGFtb24vY29yZS5jOjIwODM6ICogZGFtb25fY2FsbCgpIC0gSW52b2tlIGEgZ2l2ZW4gZnVuY3Rpb24gb24gREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkuXFxubW0vZGFtb24vY29yZS5jLTIwODQtICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTAyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTAzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjEwNC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzY1Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzY2Mi0gKiBJZiB0aGVyZSBhcmUgXFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxcbm1tL2RhbW9uL2NvcmUuYzozNjYzOiAqIFxcdTAwMjZkYW1vbl9jYWxsKCkgb24gQGN0eCwgZG8gb3IgY2FuY2VsIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbiBkZXBlbmRpbmdcXG5tbS9kYW1vbi9jb3JlLmMtMzY2NC0gKiBvbiBAY2FuY2VsLiAgQGNhbmNlbCBpcyBzZXQgd2hlbiB0aGUga2RhbW9uZCBpcyBhbHJlYWR5IG91dCBvZiB0aGUgbWFpbiBsb29wXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc1MT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODMyLVxcdFxcdFxcdGtkYW1vbmRfdXNsZWVwKGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzgzMzpcXHRcXHRcXHQvKiBhbGxvdyBjYWxsZXIgdW5zZXQgcGF1c2UgdmlhIGRhbW9uX2NhbGwoKSAqL1xcbm1tL2RhbW9uL2NvcmUuYy0zODM0LVxcdFxcdFxcdGtkYW1vbmRfY2FsbChjdHgsIGZhbHNlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM2OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2OTpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcwLVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxOC1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE5OlxcdHJldHVybiBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNhbGxfY29udHJvbCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjAtfVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTI3ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjkzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyOTQ6XFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFxcdTAwMjZjb250cm9sKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjk1LVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOS1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDA6XFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQxLX1cXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjIxLVxcdGNhbGxfY29udHJvbC5kYXRhID0gZGFtb25fc3RhdF9jb250ZXh0O1xcbm1tL2RhbW9uL3N0YXQuYzoyMjI6XFx0cmV0dXJuIGRhbW9uX2NhbGwoZGFtb25fc3RhdF9jb250ZXh0LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjIzLX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyODItXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjI4MzpcXHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI4NC1cXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI4OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzAwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjMwMTpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMC1cXHRjYWxsX2NvbnRyb2wuZGF0YSA9IGtkYW1vbmQ7XFxubW0vZGFtb24vc3lzZnMuYzoyMzExOlxcdGVyciA9IGRhbW9uX2NhbGwoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTItXFx0cmV0dXJuIGVyciA/IGVyciA6IGNhbGxfY29udHJvbC5yZXR1cm5fY29kZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM2ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzc1LVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVDpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzNzY6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzc3LVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMzc4LVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTOlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3OTpcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG5tbS9kYW1vbi9zeXNmcy5jLTIzODAtXFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfU1RBVFM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzgzOlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM4NC1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTItXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTM6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzk0LVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTYtXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1RVTkVEX0lOVEVSVkFMUzpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTc6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzk4LVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODowMC45NjQxMzA5NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY4MTM1MjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgdGhlIERBTU9OIEJ1ZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IG5hc3R5IGJ1Zy4gSXQgc2VlbXMgdGhhdCBgZGFtb25fY2FsbCgpYCBpcyBnZXR0aW5nIGludm9rZWQgd2l0aCBhIGBOVUxMYCBjb250ZXh0IChgY3R4YCkgaW4gdGhlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zLiBUaGUgY3VscHJpdD8gSXQncyBoYXBwZW5pbmcgd2hlbiBgZGFtb25fbHJ1X3NvcnRfdHVybih0cnVlKWAgb3IgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAgaGFzbid0IGJlZW4gY2FsbGVkLCBtZWFuaW5nIHRoYXQgdGhlIGNydWNpYWwgYGN0eGAgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgdGhlIGNvbnRleHQgbmVlZHMgdG8gYmUgc2V0IHVwIGJlZm9yZSBpdCdzIHVzZWQuXG5cbk5vdywgYSBxdWljayByZW1pbmRlcjogYGN0eGAgaXMgYSBnbG9iYWwgdmFyaWFibGUgd2l0aGluIGJvdGggYGxydV9zb3J0LmNgIGFuZCBgcmVjbGFpbS5jYCwgd2hpY2ggbWFrZXMgdGhpcyBldmVuIG1vcmUgY3JpdGljYWwuIEdvdHRhIGJlIGNhcmVmdWwgd2l0aCB0aG9zZSBnbG9iYWwgdmFyaWFibGVzISBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIG15IHN1c3BpY2lvbiBieSB0aG9yb3VnaGx5IGNoZWNraW5nIGBscnVfc29ydC5jYCBhbmQgYHJlY2xhaW0uY2AuIExldCdzIHNlZSBob3cgdGhpcyBmaXggYWN0dWFsbHkgaGFuZGxlcyB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODoxNi42NDU0ODY5MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODgwODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4IFxcXFwqY3R4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jPTE3Mz1zdGF0aWMgc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIGRhbW9uX2xydV9zb3J0X3N0dWJfcGF0dGVybiA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTg0LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTg1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xODYtc3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldDtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjE9REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE2NDpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjUtc3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6MTYuNjkyMzcyOTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODIzMTA4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb250ZXh0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYGN0eGAgaXMgaW5kZWVkIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZ2V0cyBjYWxsZWQgYmVmb3JlIGBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpYCwgYGN0eGAgd2lsbCBiZSBOVUxMLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGluaXRpYWxpemF0aW9uIGlzIGtleSwgYW5kIGlmIHRoZSBzZXR1cCBpc24ndCBkb25lLCB5b3UncmUgZ29pbmcgdG8gaGF2ZSBwcm9ibGVtcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgZ2V0cyByaWQgb2YgdGhlIGBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZGAgY2hlY2ssIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGNhbGwgdG8gc2ltcGxpZnkgdGhpbmdzLiBJbnN0ZWFkLCBpdCBhZGRzIGEgbW9yZSBkaXJlY3QgYGlmICghY3R4KSByZXR1cm4gLUVJTlZBTDtgIGNoZWNrIGluc2lkZSBgZGFtb25fY2FsbCgpYC4gU21hcnQuIFRoaXMgZGlyZWN0bHkgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBkYW1vbl9jYWxsKClgLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIGJlIGEgbmFzdHkgYnVnIHRvIHRyYWNrIGRvd24sIGVzcGVjaWFsbHkgaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdWJzeXN0ZW0gbGlrZSBEQU1PTi4gU2FmZXR5IGZpcnN0IVxuXG5MZXQncyBzZWUuLi4gdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyB0aGUgbGluZSBgY3R4LVx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGUgPSB0cnVlO2Agd2l0aGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGlzIGZlZWxzIGxpa2UgYSBjb250cm9sIGZsb3cgc2V0dGluZywgYSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoYXQncyBiZWluZyBkb25lIGluc2lkZSBgZGFtb25fbmV3X2N0eCgpYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCB1c2FnZSBvZiBgY3R4LVx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGVgLCBidXQgSSBoYXZlIGEgcHJldHR5IGdvb2QgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24gbm93OyBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX25ld19jdHgoKWAgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODoyMS4xNzQ2ODU4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2ODg4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X2N0eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMS1cXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODEwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MTQtXFxubW0vZGFtb24vY29yZS5jOjE4MTU6XFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vY29yZS5jLTE4MTYtXFx0aWYgKCF0ZXN0X2N0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTc1PWludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5ODItXFxubW0vZGFtb24vY29yZS5jOjE5ODM6XFx0XFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vY29yZS5jLTE5ODQtXFx0XFx0aWYgKCF0ZXN0X2N0eClcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM9MTU9aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTIwLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MjE6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjItXFx0aWYgKCFjdHgpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE1Ny1cXG5tbS9kYW1vbi9zdGF0LmM6MTU4OlxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi9zdGF0LmMtMTU5LVxcdGlmICghY3R4KVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIzOT1zdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9zdG9yZShcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yNTMtXFx0XFx0ICogcHJvYmFibHkgY2FsbGVkIGZyb20gY29tbWFuZCBsaW5lIHBhcnNpbmcgKHBhcnNlX2FyZ3MoKSkuXFxubW0vZGFtb24vc3RhdC5jOjI1NDpcXHRcXHQgKiBDYW5ub3QgY2FsbCBkYW1vbl9uZXdfY3R4KCkuICBMZXQgZGFtb25fc3RhdF9pbml0KCkgaGFuZGxlLlxcbm1tL2RhbW9uL3N0YXQuYy0yNTUtXFx0XFx0ICovXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyMDA9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjIwMi17XFxubW0vZGFtb24vc3lzZnMuYzoyMjAzOlxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDQtXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01Mj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3RhcmdldChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTUzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTQ6XFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTUtXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3LXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODg6XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04OS1cXHR1bnNpZ25lZCBsb25nIHNhZGRyW11bM10gPSB7ezEwLCAyMCwgMzB9LCB7NSwgNDIsIDQ5fSwgezEzLCAzMywgNTV9IH07XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjMyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjQ0LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyNDU6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNDYtXFx0aWYgKCFjdHgpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjgwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjg4LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyODk6XFx0YyA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjkwLVxcdGlmICghYylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zNTQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2My1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzY0OlxcdGMgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2NS1cXHRpZiAoIWMpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDExPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQxMi17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQxMzpcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MTQtXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01OTU9c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwNC1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDU6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MDYtXFx0aWYgKCFjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02MzY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02Mzcte1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2Mzg6XFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjM5LVxcdHN0cnVjdCBkYW1vbl9hdHRycyB2YWxpZF9hdHRycyA9IHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02OTY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzA1LVxcdH07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjcwNjpcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDctXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzA5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMxMi1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxMzpcXHRzcmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTQtXFx0aWYgKCFzcmMpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTUtXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic3JjIGFsbG9jIGZhaWxcXFwiKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxNjpcXHRkc3QgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMTctXFx0aWYgKCFkc3QpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTIxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTMxLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTMyOlxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUzMy1cXHRpZiAoIWN0eClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjAxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjA2LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjA3OlxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwOC1cXHRpZiAoIWN0eClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTcyLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6NzM6XFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtNzQtXFx0aWYgKCFjdHgpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6MjEuMjIxMzc3Njg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjY0MjYyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhpcyBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IHNldHRpbmcgYGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gdHJ1ZTtgIHdpdGhpbiBgZGFtb25fbmV3X2N0eCgpYC4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgZnV6ei13b3J0aHkuIEdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBpdOKAmXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBleGFtaW5hdGlvbi5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbXBhY3RzOlxuXG4qICAgYGRhbW9uX25ld19jdHhgXG4qICAgYGRhbW9uX2NhbGxgXG4qICAgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgXG4qICAgYGRhbW9uX2xydV9zb3J0X3R1cm5gXG4qICAgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWBcbiogICBgZGFtb25fcmVjbGFpbV90dXJuYFxuXG5Ob3csIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFyZSBzeXNmcyBzdG9yZSBjYWxsYmFja3MsIGFuZCBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseSwgc28gdGhlIGF0dGFjayBzdXJmYWNlIGZvciB0aGUgbGF0dGVyIHR3byBhcmUgbG93LiBCdXQgYmVjYXVzZSB0aGV5IGFyZSBsaW5rZWQgdG8gdGhlIGZvcm1lciB0d28sIHRoZXNlIG1heSBuZWVkIHRvIGJlIGFzc2Vzc2VkIGFzIHdlbGwuIGBkYW1vbl9uZXdfY3R4YCBhbmQgYGRhbW9uX2NhbGxgIGFyZSB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBvbiB0aGUgbGlzdCBmb3IgY2xvc2Ugc2NydXRpbnkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IGlmIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBpcyBpbmRlZWQgcmVhY2hhYmxlIHZpYSBzeXNmcy4gSWYgc28sIHRoYXQgcmVwcmVzZW50cyBhIGRpcmVjdCBhdmVudWUgZm9yIGZ1enppbmcsIGFuZCBJ4oCZbGwgZGVzaWduIHRlc3QgY2FzZXMgYXJvdW5kIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjI2LjE4NzgwNjgxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMDk1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ0PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM0OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc1LVxcdC5mbGFncyA9IEtFUk5FTF9QQVJBTV9PUFNfRkxfTk9BUkcsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzY6XFx0LnNldCA9IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzctXFx0LmdldCA9IHBhcmFtX2dldF9ib29sLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODoyNi40NTg5MDczNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNjY4MTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgUGFyYW1ldGVyIFN0b3JlIEZ1bmN0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHRocm91Z2ggYC9zeXMvbW9kdWxlL2RhbW9uX2xydV9zb3J0L3BhcmFtZXRlcnMvY29tbWl0X2lucHV0c2AuIFRoZSBzYW1lIGFwcGxpZXMgdG8gYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnM6IGBkYW1vbl9uZXdfY3R4YCBhbmQgYGRhbW9uX2NhbGxgLiBIb3dldmVyLCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcm9hZCwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc2NvcGUgdGhhdCBkZXNlcnZlIGF0dGVudGlvbi5cblxuQWgsIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAgYXJlIHN0YXRpYywgYnV0IGFjdCBhcyBlbnRyeSBwb2ludHMgZnJvbSBzeXNmcy4gVGhlIGZseSBpbiB0aGUgb2ludG1lbnQgaGVyZSBpcyB0aGF0IFN5emthbGxlciBtaWdodCBoYXZlIGlzc3VlcyByZXNvbHZpbmcgc3RhdGljIGZ1bmN0aW9ucy4gV2FpdC4uLiB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBJZiB0aGUgZGVidWcgaW5mbyBpcyBwcmVzZW50LCBTeXprYWxsZXIgKmNhbiogcmVzb2x2ZSBzdGF0aWMgZnVuY3Rpb25zLiBTdGlsbCwgaXQncyBiZXR0ZXIsIGdlbmVyYWxseSwgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgb25lcyBmb3IgbW9yZSBkaXJlY3QgaW50ZWdyYXRpb24uXG5cblNvLCBgZGFtb25fY2FsbGAgYW5kIGBkYW1vbl9uZXdfY3R4YCAqYXJlKiBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEwMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODozMS4yNjU1OTE2NDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzcyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkYW1vbl9jYWxsXFxcXCh8c3RydWN0IGRhbW9uX2N0eCBcXFxcKmRhbW9uX25ld19jdHhcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMS1cXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDcxPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjEwMi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjEwMzppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIxMDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODozMS4zMTAzNzA3MDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTk4NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBc3Nlc3NpbmcgdGhlIER5bmFtaWMgTmF0dXJlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYywgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaW5ncyBjaGFuZ2UuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGhvdyAqZGFtb25fc3RhcnQqIGNvbm5lY3RzIHRvICpkYW1vbl9jYWxsKiBhbmQgKmRhbW9uX25ld19jdHgqLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY29uc2lkZXJpbmcgYWxsIHJlbGF0ZWQgZmFjdG9ycy4gVGhlIHJlbGF0aW9uc2hpcHMgaGVyZSBhcmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIFdlIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQgc3RhcnQgcHJvY2VzcywgZ2l2ZW4gaXRzIHJlbGF0aW9uIHRvIHRoZSBjYWxsIGFuZCBuZXcgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjM0LjIwMjM1ODA0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyOTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGRhbW9uX3N0YXJ0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xOTU4PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc1OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6MzQuMjQ3NjYyODU2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjMyODU0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZGFtb25fc3RhcnRgLCB3aGljaCBJIHNlZSBpcyBhbHNvICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZDsgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGVhc2llciB0byB0YXJnZXQuIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IHRoZSBwYXRjaCdzIGNvcmUgcmVxdWlyZW1lbnRzIGhpbmdlIG9uIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYmVpbmcgZW5hYmxlZDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgcG9zc2libHkgYERBTU9OX1NZU0ZTYCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZS5cblxuSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IGp1c3QgYERBTU9OX0xSVV9TT1JUYCBhbmQgYERBTU9OX1JFQ0xBSU1gIHdlcmUgdGhlIHJlbGV2YW50IG1vZHVsZXMsIGFuZCBub3cgSSd2ZSBjb25maXJtZWQgdGhhdC4gTWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBmaWxlcyBtb2RpZmllZC5cblxuVGhlcmVmb3JlLCB0aGUgY29uZmlndXJhdGlvbiBJJ2xsIHByb3ZpZGUgd2lsbCBiZSBleGFjdGx5IGFzIGluZGljYXRlZCBhYm92ZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NZU0ZTYC5cblxuSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBhIGNvdXBsZSBvZiBrZXkgc3ltYm9scyBoZXJlOiBgZGFtb25fbmV3X2N0eGAgYW5kIGBkYW1vbl9jYWxsYC4gSSBuZWVkIHRvIHZlcmlmeSByZWFjaGFiaWxpdHkuIFRoZSBmaWxlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBzZWVtcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgYXMgaXQgaXMgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIG1vZGlmaWVkIHZpYSBzeXNmcy4gU2luY2UgU3l6a2FsbGVyIGhhcyBhIHN5c2ZzIGZ1enplciwgdGhhdCBsb29rcyBwcm9taXNpbmcgZm9yIHRhcmdldGVkIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCB3aXRoIGEgTlVMTCBjb250ZXh0IChgY3R4YCkgaWYgdGhlIG1vZHVsZSBoYWRuJ3QgYmVlbiBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGltcGxlbWVudHMgYSBOVUxMIGNoZWNrIHdpdGhpbiBgZGFtb25fY2FsbCgpYCwgYW5kIGluaXRpYWxpemVzIGBjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBpbiBgZGFtb25fbmV3X2N0eCgpYC4gQ3JpdGljYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIHRoZXkgaW1wYWN0IHRoZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFsb25nIHdpdGggbW9kdWxlIGNvZGUuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5JJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjAyLCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODo0MS44MTA5NTA5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODYxMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19jdHhcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24ndCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19jdHhcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiBjb3JlIChgZGFtb25fbmV3X2N0eGAsIGBkYW1vbl9jYWxsYCkgYW5kIERBTU9OIG1vZHVsZXMgKGBkYW1vbl9scnVfc29ydGAsIGBkYW1vbl9yZWNsYWltYCkgdG8gZml4IGEgYnVnIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBgY3R4YCBpZiB0aGUgbW9kdWxlIGhhc24ndCBiZWVuIHN0YXJ0ZWQgeWV0LiBJdCBhZGRzIGEgTlVMTCBjaGVjayBpbiBgZGFtb25fY2FsbCgpYCBhbmQgaW5pdGlhbGl6ZXMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGluIGBkYW1vbl9uZXdfY3R4KClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgbW9kdWxlcywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6NDEuODkwODE3OTA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgzNjkwNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjQxLjg5MTMzOTM1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTgzNjM3OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MDQwYWYxYWI3ZDhhMDQzOWVhOTkyNGU0Y2U0OGYwZmIxYzA0MmJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDM6NTc6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUwODBjYjEyMjIwZDIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTg2NCw2ICs4NjQsNyBAQCBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcyk7XG4gXG4rXHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7XG4gXHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LVx1MDAzZXJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4gXG4gXHRyZXR1cm4gY3R4O1xuQEAgLTIwOTUsMTYgKzIwOTYsMTQgQEAgaW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAgKiBzeW5jaHJvbml6YXRpb24uICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHNhdmVkIGluXG4gICogXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZXJldHVybl9jb2RlLlxuICAqXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbi0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0gKiB3YWl0LlxuLSAqXG4gICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuIGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbiB7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuIFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbiBcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uZjI1ZWU3MzI2ZTg3YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDYsOCArMzQ2LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0zNjgsMTAgKzM2Niw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbi1cdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtNDIyLDggKzQxNiw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLVx0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggNDVkNTU1N2NjNTc1YS4uNDJhMmM5Y2IxMzQzMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDggKzI3MSw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4ge1xuQEAgLTI5MywxMCArMjkxLDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0aWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuICovXG4tXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuIFxuIFx0cmV0dXJuIGVyciA/IGVyciA6IGNvbnRyb2wucmV0dXJuX2NvZGU7XG5AQCAtMzQzLDggKzMzNyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbi1cdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6NDEuODkxMzQwMjQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTI2NTgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2g6IEEgU3luY2hyb25pemF0aW9uIEZpeD8qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvciB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBEQU1PTidzIGNvcmUgb3BlcmF0aW9ucy5cblxuSW4gYGNvcmUuY2AsIEkgc2VlIGBkYW1vbl9uZXdfY3R4KClgIG5vdyBzZXRzIGBjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IHRydWU7YCwgYW5kIGBkYW1vbl9jYWxsKClgIGlzIGdldHRpbmcgYSBgaWYgKCFjdHgpIHJldHVybiAtRUlOVkFMO2AgY2hlY2suIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZW1lcmdpbmc/IFxuXG5UaGVuLCBvdmVyIGluIGBscnVfc29ydC5jYCBhbmQgYHJlY2xhaW0uY2AsIHRoZSBwYXRjaCByZW1vdmVzIHRoZXNlIGBkYW1vbl9oYXNfc3RhcnRlZGAgYm9vbGVhbiBmbGFncyBlbnRpcmVseSwgYW5kIGFsbCB0aGUgY29ycmVzcG9uZGluZyBjaGVja3MgYXJlIHJlbW92ZWQgZnJvbSBgKl9jb21taXRfaW5wdXRzX3N0b3JlYC4gVGhlIGFzc2lnbm1lbnRzIG9mIGB0cnVlYCB0byB0aGVzZSBmbGFncyBhcmUgYWxzbyByZW1vdmVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBgKl90dXJuKClgIGZ1bmN0aW9ucy5cblxuV2FpdCwgbG9va2luZyBhdCB0aGUgZW50aXJlIHBhdGNoIHRvZ2V0aGVyOiB0aGUgYWJzZW5jZSBvZiBhIGBoYXNfc3RhcnRlZGAgZmxhZyBpcyBjb3VwbGVkIHdpdGggYSBuZXcgbnVsbCBjaGVjayBmb3IgYGN0eGAgaW4gYGRhbW9uX2NhbGwoKWAsIGFuZCB0aGF0IGJvb2xlYW4gdmFyaWFibGUgYmVpbmcgc2V0IGFzIGB0cnVlYC4gSSdtIHRoaW5raW5nIHRoaXMgaXMgbW9yZSBvZiBhIGxvZ2ljIGNvcnJlY3Rpb24gb3IsIG1vcmUgbGlrZWx5LCBhIHN5bmNocm9uaXphdGlvbiBmaXggZm9yIGBkYW1vbl9jYWxsKClgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIGBjdHhgLCBhbmQgdGhhdCBgY3R4YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgZGFtb25fY2FsbCgpYCBpcyBjYWxsZWQuXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkYW1vbl9jYWxsKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJJ2xsIHVzZSB0aGUgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgY29tbWFuZCB0byBzZWUgdGhlIGNvZGUgdGhlcmUgYW5kIHF1aWNrbHkgdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzo1ODo0Ny45NDQwMDA4MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDkwOlxcdCAqIEBjb250cm9sIGlzIHVuc2V0LCBmdXJ0aGVyIHdhaXQgdW50aWwgdGhlIGtkYW1vbmQgZmluaXNoZXMgaGFuZGxpbmcgb2YgdGhlXFxuMjA5MTpcXHQgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gYXMgc29vbiBhcyB0aGUgcmVxdWVzdCBpcyBtYWRlLlxcbjIwOTI6XFx0ICpcXG4yMDkzOlxcdCAqIFRoZSBrZGFtb25kIGV4ZWN1dGVzIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBhcmd1bWVudCBpbiB0aGUgbWFpbiBsb29wLCBqdXN0XFxuMjA5NDpcXHQgKiBhZnRlciBhIHNhbXBsaW5nIG9mIHRoZSBpdGVyYXRpb24gaXMgZmluaXNoZWQuICBUaGUgZnVuY3Rpb24gY2FuIGhlbmNlXFxuMjA5NTpcXHQgKiBzYWZlbHkgYWNjZXNzIHRoZSBpbnRlcm5hbCBkYXRhIG9mIHRoZSBcXHUwMDI2c3RydWN0IGRhbW9uX2N0eCB3aXRob3V0IGFkZGl0aW9uYWxcXG4yMDk2OlxcdCAqIHN5bmNocm9uaXphdGlvbi4gIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgc2F2ZWQgaW5cXG4yMDk3OlxcdCAqIFxcdTAwMjZkYW1vbl9jYWxsX2NvbnRyb2wtXFx1MDAzZXJldHVybl9jb2RlLlxcbjIwOTg6XFx0ICpcXG4yMDk5OlxcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cXG4yMTAwOlxcdCAqXFxuMjEwMTpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuMjEwMjpcXHQgKi9cXG4yMTAzOlxcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4yMTA0OlxcdHtcXG4yMTA1OlxcdFxcdGlmICghY3R4KVxcbjIxMDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjEwNzpcXHRcXHRpZiAoIWNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMTA4OlxcdFxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjEwOTpcXHRcXHRjb250cm9sLVxcdTAwM2VjYW5jZWxlZCA9IGZhbHNlO1xcbjIxMTA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWxpc3QpO1xcbjIxMTE6XFx0XFxuMjExMjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XFxuMjExMzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XFxuMjExNDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4yMTE1OlxcdFxcdFxcdGdvdG8gY2FuY2VsZWQ7XFxuMjExNjpcXHRcXHR9XFxuMjExNzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjb250cm9sLVxcdTAwM2VsaXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzKTtcXG4yMTE4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbjIxMTk6XFx0XFx0aWYgKGNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMTIwOlxcdFxcdFxcdHJldHVybiAwO1xcbjIxMjE6XFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjEyMjpcXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlY2FuY2VsZWQpXFxuMjEyMzpcXHRcXHRcXHRnb3RvIGNhbmNlbGVkO1xcbjIxMjQ6XFx0XFx0cmV0dXJuIDA7XFxuMjEyNTpcXHRcXG4yMTI2OlxcdGNhbmNlbGVkOlxcbjIxMjc6XFx0XFx0d2hpbGUgKGRhbW9uX2lzX3J1bm5pbmcoY3R4KSlcXG4yMTI4OlxcdFxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xcbjIxMjk6XFx0XFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XFxuMjEzMDpcXHRcXG4yMTMxOlxcdH1cXG4yMTMyOlxcdFxcbjIxMzM6XFx0LyoqXFxuMjEzNDpcXHQgKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxcbjIxMzU6XFx0ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXFxuMjEzNjpcXHQgKiBAY29udHJvbDpcXHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSB3YWxrIHJlcXVlc3QuXFxuMjEzNzpcXHQgKlxcbjIxMzg6XFx0ICogQXNrIERBTU9OIHdvcmtlciB0aHJlYWQgKGtkYW1vbmQpIG9mIEBjdHggdG8gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lvblxcbjIxMzk6XFx0ICogdGhhdCB0aGUga2RhbW9uZCB3aWxsIGFwcGx5IERBTU9TIGFjdGlvbiB0bywgYW5kIHdhaXQgdW50aWwgdGhlIGtkYW1vbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6NTg6NDcuOTQ0MjYyMDM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODM0MjI1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IGluIGhvdyBgZGFtb25fY2FsbCgpYCBpcyBiZWluZyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHdlIGhhZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZnVuY3Rpb24gY291bGQgYmUgY2FsbGVkIHByZW1hdHVyZWx5LCBiZWZvcmUgdGhlIGNvbnRleHQgd2FzIGZ1bGx5IHJlYWR5LCBvciBwb3RlbnRpYWxseSBhZnRlciBpdCBoYWQgYmVlbiBzdG9wcGVkLiBUaGUgc29sdXRpb24gaXMgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgYm9vbGVhbiBmbGFnIGF0IHRoZSBtb2R1bGUgbGV2ZWwgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlYCBhbmQgaW5jbHVkZSBhIGBpZiAoIWN0eClgIGNoZWNrLiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBjb2RlLCBhbmQgdGhlcmUncyBubyBldmlkZW5jZSBvZiBhIG1lbW9yeSBzYWZldHkgaXNzdWUgbGlrZSBhbiB1bmluaXRpYWxpemVkIHJlYWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGUgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIHByb3Bvc2VkIGNoYW5nZSBhcHBlYXJzIHRvIHJlc29sdmUgdGhpcyBuaWNlbHkuXG5cbkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhcyB0aGlzIGlzbid0IGRpcmVjdGx5IHJlbGF0ZWQgdG8gYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCdzIGEgY2xlYW4gc3luY2hyb25pemF0aW9uIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0OCwiT3V0cHV0VG9rZW5zIjoxNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjU4OjUzLjcyNzY4ODMxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBmdWxseSBpbml0aWFsaXplZCBvciBhZnRlciBpdCB3YXMgc3RvcHBlZC4gSXQgcmVwbGFjZXMgbW9kdWxlLWxldmVsIGJvb2xlYW4gZmxhZ3Mgd2l0aCBhIGNvbnRleHQtc3BlY2lmaWMgYGNhbGxfY29udHJvbHNfb2Jzb2xldGVgIGZsYWcgYW5kIGFkZHMgYSBOVUxMIGNoZWNrIGZvciB0aGUgY29udGV4dC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGFuZCBzeW5jaHJvbml6YXRpb24gYnVncyAoZS5nLiwgaW5kZWZpbml0ZSB3YWl0cyBvciBpbnZhbGlkIGFjY2Vzc2VzKSwgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCBiZWZvcmUgdGhlIGNvbnRleHQgd2FzIGZ1bGx5IGluaXRpYWxpemVkIG9yIGFmdGVyIGl0IHdhcyBzdG9wcGVkLiBJdCByZXBsYWNlcyBtb2R1bGUtbGV2ZWwgYm9vbGVhbiBmbGFncyB3aXRoIGEgY29udGV4dC1zcGVjaWZpYyBgY2FsbF9jb250cm9sc19vYnNvbGV0ZWAgZmxhZyBhbmQgYWRkcyBhIE5VTEwgY2hlY2sgZm9yIHRoZSBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYW5kIHN5bmNocm9uaXphdGlvbiBidWdzIChlLmcuLCBpbmRlZmluaXRlIHdhaXRzIG9yIGludmFsaWQgYWNjZXNzZXMpLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[1] Phase: Succeeded StartedAt: 2026-08-13 03:59:04 +0000 UTC FinishedAt: 2026-08-13 03:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 03:59:04 +0000 UTC FinishedAt: 2026-08-13 03:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2] Phase: Succeeded StartedAt: 2026-08-13 03:59:04 +0000 UTC FinishedAt: 2026-08-13 07:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 03:59:04 +0000 UTC FinishedAt: 2026-08-13 07:40:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 03:59:04 +0000 UTC FinishedAt: 2026-08-13 03:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 03:59:04 +0000 UTC FinishedAt: 2026-08-13 03:59:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwdtb2/series-workflowwdtb2-convert-artifact-2644798555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 03:59:14 +0000 UTC FinishedAt: 2026-08-13 04:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 03:59:14 +0000 UTC FinishedAt: 2026-08-13 04:15:45 +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:*cf25304c-b741-43b4-a3d1-578affa9e147,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-workflowwdtb2/series-workflowwdtb2-convert-artifact-2644798555/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": "a336631f-2d9a-4b87-a7da-82f7cfb02af2", "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-workflowwdtb2/series-workflowwdtb2-build-action-3817613721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 03:59:14 +0000 UTC FinishedAt: 2026-08-13 04:15:35 +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:*cf25304c-b741-43b4-a3d1-578affa9e147,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-workflowwdtb2/series-workflowwdtb2-convert-artifact-2644798555/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": "a336631f-2d9a-4b87-a7da-82f7cfb02af2", "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-workflowwdtb2/series-workflowwdtb2-build-action-3817613721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 04:15:45 +0000 UTC FinishedAt: 2026-08-13 04:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 04:15:45 +0000 UTC FinishedAt: 2026-08-13 04:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 04:15:45 +0000 UTC FinishedAt: 2026-08-13 04:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 04:15:45 +0000 UTC FinishedAt: 2026-08-13 04:15:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwdtb2/series-workflowwdtb2-convert-artifact-1761486002/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 04:15:55 +0000 UTC FinishedAt: 2026-08-13 04:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 04:15:55 +0000 UTC FinishedAt: 2026-08-13 04:17:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a336631f-2d9a-4b87-a7da-82f7cfb02af2,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-workflowwdtb2/series-workflowwdtb2-build-action-3817613721/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-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 04:17:50 +0000 UTC FinishedAt: 2026-08-13 04:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 04:17:50 +0000 UTC FinishedAt: 2026-08-13 04:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 04:17:50 +0000 UTC FinishedAt: 2026-08-13 04:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 04:17:50 +0000 UTC FinishedAt: 2026-08-13 04:36:02 +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:*cf25304c-b741-43b4-a3d1-578affa9e147,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-workflowwdtb2/series-workflowwdtb2-convert-artifact-1761486002/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": "e1ac7b7a-c0d7-4337-b6e2-66dbe058df6d", "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-workflowwdtb2/series-workflowwdtb2-build-action-2403014214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 04:17:50 +0000 UTC FinishedAt: 2026-08-13 04:35:52 +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:*cf25304c-b741-43b4-a3d1-578affa9e147,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-workflowwdtb2/series-workflowwdtb2-convert-artifact-1761486002/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": "e1ac7b7a-c0d7-4337-b6e2-66dbe058df6d", "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-workflowwdtb2/series-workflowwdtb2-build-action-2403014214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 04:36:02 +0000 UTC FinishedAt: 2026-08-13 04:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 04:36:02 +0000 UTC FinishedAt: 2026-08-13 04:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 04:36:02 +0000 UTC FinishedAt: 2026-08-13 04:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 04:36:02 +0000 UTC FinishedAt: 2026-08-13 04:38:00 +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:*e1ac7b7a-c0d7-4337-b6e2-66dbe058df6d,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-workflowwdtb2/series-workflowwdtb2-build-action-2403014214/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-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 07:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 07:40:03 +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":["damon_new_ctx","damon_call"],"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:*a336631f-2d9a-4b87-a7da-82f7cfb02af2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1ac7b7a-c0d7-4337-b6e2-66dbe058df6d,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-workflowwdtb2/series-workflowwdtb2-build-action-3817613721/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-workflowwdtb2/series-workflowwdtb2-build-action-2403014214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 04:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 04:38:28 +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":["damon_new_ctx","damon_call"],"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-workflowwdtb2/series-workflowwdtb2-convert-artifact-631218695/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 04:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 04:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 04:38:10 +0000 UTC FinishedAt: 2026-08-13 04:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 04:38:36 +0000 UTC FinishedAt: 2026-08-13 07:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_ctx","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_SYSFS"],"series_id":"e339fa60-04ae-4de8-99e8-483552bdf652","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 04:38:36 +0000 UTC FinishedAt: 2026-08-13 07:39:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a336631f-2d9a-4b87-a7da-82f7cfb02af2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1ac7b7a-c0d7-4337-b6e2-66dbe058df6d,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-workflowwdtb2/series-workflowwdtb2-build-action-3817613721/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-workflowwdtb2/series-workflowwdtb2-build-action-2403014214/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-workflowwdtb2/series-workflowwdtb2-convert-artifact-631218695/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,}