Name: series-workflowq2qj8 Phase: Succeeded StartedAt: 2026-08-11 04:17:44 +0000 UTC FinishedAt: 2026-08-11 08:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[0] Phase: Succeeded StartedAt: 2026-08-11 04:17:44 +0000 UTC FinishedAt: 2026-08-11 05:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 04:17:44 +0000 UTC FinishedAt: 2026-08-11 05:10:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ff359235-5e90-4606-93c9-6caa7aed96d7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_is_state_visited" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nIChgc3RhY2tzYWZlYCkgZm9yIGl0ZXJhdG9yIHN0YWNrIHNsb3RzIChgU1RBQ0tfSVRFUmApLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIHZlcmlmaWVyIG9ubHkgY29tcGFyZWQgdGhlIGl0ZXJhdG9yLXNwZWNpZmljIGZpZWxkcyAobGlrZSBgYnRmYCBhbmQgYGJ0Zl9pZGApIGJ1dCBmYWlsZWQgdG8gY29tcGFyZSB0aGUgcmVnaXN0ZXIgdHlwZSAoYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgKS4gXG5cblRoaXMgb21pc3Npb24gYWxsb3dlZCB0aGUgdmVyaWZpZXIgdG8gaW5jb3JyZWN0bHkgbWVyZ2UgYSBzdGF0ZSB3aGVyZSBhbiBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgdW50cnVzdGVkIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLiBBcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGluY2x1ZGVkIHRlc3QgY2FzZSwgYW4gdW5wcm90ZWN0ZWQgZ2FwIChlLmcuLCB1bmxvY2tpbmcgYW5kIHJlbG9ja2luZyBSQ1UpIHN0cmlwcyB0aGUgYE1FTV9SQ1VgIGZsYWcsIG1ha2luZyB0aGUgaXRlcmF0b3IgdW50cnVzdGVkLiBCeSBpbmNvcnJlY3RseSBtZXJnaW5nIHRoZXNlIHN0YXRlcywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiB1bnRydXN0ZWQgaXRlcmF0b3IsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgd2hlbiB0aGUgdGFzayBzdHJ1Y3QgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLlxuXG5UaGlzIGlzIGEgdmVyaWZpZXIgbG9naWMgYnVnIHRoYXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGludm9sdmVkLCBhcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgd2hlbmV2ZXIgYSBzbG90IGlzIG1hcmtlZCBhcyBgU1RBQ0tfSVRFUmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNzA1N2NiNTdiOWIwZDM0YTkzNjQ2OTFkNmM2Njk3MmNhNzgzMjc2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MDg6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4gXHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiBcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4mIzQzO1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4mIzQzO1x0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiBcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuaW5kZXggZmUzNjYzZGVkYmUxNC4uNTY2YTFkM2RmZmVhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDUyIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2V4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFwmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7aW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfcmN1X3N0YXRlX3BydW5pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcbiYjNDM7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMSA9ICVbaXRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjIgPSAwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjMgPSAwO1wmIzM0OyAvKiBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyAqL1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9pdGVyX3Rhc2tfbmV3XTtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtpZiB3MCA9PSAwIGdvdG8gdW5wcm90ZWN0ZWRfJT07XCYjMzQ7XG4mIzQzO1xuJiM0MztcdFx0LyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlIG9uIHRoZSBzdHJhaWdodC1saW5lIHBhdGguICovXG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Z290byBtZXJnZV8lPTtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XCYjMzQ7dW5wcm90ZWN0ZWRfJT06XCYjMzQ7XG4mIzQzO1x0XHQvKiBDcmVhdGUgYW4gdW5wcm90ZWN0ZWQgZ2FwIG9uIHRoZSB0YWtlbiBwYXRoLiAqL1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XCYjMzQ7bWVyZ2VfJT06IHIxID0gJVtpdF07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19uZXh0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gJVtpdF07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19kZXN0cm95XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTtcJiMzNDtcbiYjNDM7XHRcdDpcbiYjNDM7XHRcdDogX19pbW1fcHRyKGl0KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV3KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXh0KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX3JjdV9yZWFkX2xvY2spLFxuJiM0MztcdFx0ICBfX2ltbShicGZfcmN1X3JlYWRfdW5sb2NrKVxuJiM0MztcdFx0OiBfX2Nsb2JiZXJfY29tbW9uXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcJiMzNDspXG4gaW50IEJQRl9QUk9HKGl0ZXJfY3NzX2xvY2tfYW5kX3VubG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNzA1N2NiNTdiOWIwZDM0YTkzNjQ2OTFkNmM2Njk3MmNhNzgzMjc2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MDg6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuYwppbmRleCBlYTIxNTNjZjI4ZDBhLi40ZTZhYWZhZDMzYmQyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKQEAgLTgxMiw3ICYjNDM7ODEyLDggQEAgc3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLAogCQkJICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWUKIAkJCSAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKQogCQkJICovCi0JCQlpZiAob2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKJiM0MzsJCQlpZiAob2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlIHx8CiYjNDM7CQkJICAgIG9sZF9yZWctJmd0O2l0ZXIuYnRmICE9IGN1cl9yZWctJmd0O2l0ZXIuYnRmIHx8CiAJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGZfaWQgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGZfaWQgfHwKIAkJCSAgICBvbGRfcmVnLSZndDtpdGVyLnN0YXRlICE9IGN1cl9yZWctJmd0O2l0ZXIuc3RhdGUgfHwKIAkJCSAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tJmd0O2l0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jCmluZGV4IGZlMzY2M2RlZGJlMTQuLjU2NmExZDNkZmZlYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMKQEAgLTYxLDYgJiM0Mzs2MSw1MiBAQCBpbnQgQlBGX1BST0coaXRlcl90YXNrc19sb2NrX2FuZF91bmxvY2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/ZmVudHJ5LnMvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfdGFza19uZXh0JiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztpbnQgQlBGX1BST0coaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrIGl0OwomIzQzOwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gJVtpdF07JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O3IzID0gMDsmIzM0OyAvKiBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyAqLwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19uZXddOyYjMzQ7CiYjNDM7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsmIzM0OwomIzQzOwkJJiMzNDtpZiB3MCA9PSAwIGdvdG8gdW5wcm90ZWN0ZWRfJT07JiMzNDsKJiM0MzsKJiM0MzsJCS8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZSBvbiB0aGUgc3RyYWlnaHQtbGluZSBwYXRoLiAqLwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTsmIzM0OwomIzQzOwkJJiMzNDtnb3RvIG1lcmdlXyU9OyYjMzQ7CiYjNDM7CiYjNDM7CSYjMzQ7dW5wcm90ZWN0ZWRfJT06JiMzNDsKJiM0MzsJCS8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAgb24gdGhlIHRha2VuIHBhdGguICovCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdOyYjMzQ7CiYjNDM7CiYjNDM7CSYjMzQ7bWVyZ2VfJT06IHIxID0gJVtpdF07JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX3Rhc2tfbmV4dF07JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSAlW2l0XTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19kZXN0cm95XTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW1fcHRyKGl0KSwKJiM0MzsJCSAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV3KSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXh0KSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSwKJiM0MzsJCSAgX19pbW0oYnBmX3JjdV9yZWFkX2xvY2spLAomIzQzOwkJICBfX2ltbShicGZfcmN1X3JlYWRfdW5sb2NrKQomIzQzOwkJOiBfX2Nsb2JiZXJfY29tbW9uCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2V4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX2Nzc19uZXh0JiMzNDspCiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBuZXcgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGl0ZXJhdG9ycyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYHN0YWNrc2FmZSgpYCBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tzYWZlKClgIGJ5IGludHJvZHVjaW5nIGEgbmV3IHR5cGUgY2hlY2sgZHVyaW5nIHRoZSBjb21wYXJpc29uIG9mIGl0ZXJhdG9yczoKCmBgYGMKLQkJCWlmIChvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fAomIzQzOwkJCWlmIChvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGUgfHwKJiM0MzsJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKYGBgCgpFc3NlbnRpYWxseSwgaXQmIzM5O3Mgbm93IHZlcmlmeWluZyB0aGF0IHRoZSB0eXBlcyBvZiBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCBtYXRjaCBiZWZvcmUgY29uc2lkZXJpbmcgdGhlaXIgQlRGIChCVEYgLSBCUEYgVHlwZSBGb3JtYXQpIGluZm9ybWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVmaW5lbWVudCBpbiB0aGUgdHlwZS1zYWZldHkgb2YgdGhlIHZlcmlmaWVyLiBUaGUgaW5jbHVzaW9uIG9mIGEgbmV3IHRlc3QgY2FzZSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2AsIGluZGljYXRlcyB0aGUgcGF0Y2ggYXV0aG9ycyBoYXZlIGltcGxlbWVudGVkIGEgbmV3IHRlc3QgY2FzZSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGBzdGFja3NhZmUoKWAgaXMgdXNlZCwgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBndWFyYW50ZWUsIGFuZCB3aHkgdGhpcyBhZGRpdGlvbmFsIHR5cGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBpdGVyYXRvciBjb21wYXJpc29uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIG1pc21hdGNoZWQgdHlwZXMgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFuZCBob3cgdGhpcyBtaWdodCByZWxhdGUgdG8gcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGxvb2tzIGxpa2UgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBwaWVjZSBvZiBoYXJkZW5pbmcsIHNvIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGlzIGNhcmVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFja3NhZmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9NjkwPXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2NhbGFyX3JlZ19mb3Jfc3RhY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTcwMS1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NzAyOnN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAzLVx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05NDU9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NjItXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk2MzpcdGlmICghc3RhY2tzYWZlKGVudiwgb2xkLCBjdXIsIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk2NC1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlY29uc3RydWN0aW5nIFN0YXRpYyBGdW5jdGlvbiBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgY29kZSBzbmlwcGV0IGludm9sdmluZyB0aGUgZnVuY3Rpb24gYHN0YWNrc2FmZWAuIFRoZSBjcnVjaWFsIGJpdCBpcyB0aGF0IGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBhYm91dCBzY29wZSBhbmQgbGlua2FnZS4gT2theSwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBsaWtlbHkgaGlkZGVuIGZyb20gZXh0ZXJuYWwgYWNjZXNzLgoKTm93LCBgc3RhY2tzYWZlYCBpcyAqY2FsbGVkKiBieSBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbGltaXRlZCBzY29wZSBvZiBpbnRlcmFjdGlvbi4gSXQgY2FuJiMzOTt0IGJlIGNhbGxlZCBmcm9tIHNvbWUgb3RoZXIgZmlsZSwgYXMgaXQgaXMgYWxzbyBgc3RhdGljYC4KClRoZSBxdWVzdGlvbiBiZWNvbWVzLCB3aGF0IGFyZSB0aGUgdXNlLWNhc2VzIG9mIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbj8gTm93IHRoYXQgYGZ1bmNfc3RhdGVzX2VxdWFsYCBoYXMgYmVlbiBpZGVudGlmaWVkIGFzIGEgY2FsbGVyLCBpdCBtaWdodCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgYGZ1bmNfc3RhdGVzX2VxdWFsYCBpcyB1c2VkLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHdobyBpcyB0aGUgcGFyZW50IG9mIHRoZSBjYWxsZXIuIFNvIGxldCYjMzk7cyB0cmFjZSBiYWNrLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBgZnVuY19zdGF0ZXNfZXF1YWxgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbS4gVGhhdCYjMzk7cyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVuY19zdGF0ZXNfZXF1YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05ODA9c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxMjpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBzdGF0ZXNfZXF1YWxgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBzdGF0ZXNfZXF1YWxgIGlzIGNhbGxpbmcgYGZ1bmNfc3RhdGVzX2VxdWFsYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBwaWVjZSBvZiB0aGUgcHV6emxlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHN0YXRlc19lcXVhbGAgaXRzZWxmIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlOyBrbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIHJlYWNoaW5nIG91dCB0byAqdGhpcyogZnVuY3Rpb24sIHRoZW4gSSYjMzk7bGwgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0NC0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQ1OnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDYtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk3Mj1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzktXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk4MDpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTgxLVx0XHRcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxMjpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzk9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzItXHRcdFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMzM6XHRcdFx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzM0LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDItXHRcdFx0XHRcdGl0ZXJfcmVnID0gXHUwMDI2Y3VyX2ZyYW1lLVx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0MzpcdFx0XHRcdFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDQtXHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Ny1cdFx0XHRcdGlmIChzbC1cdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXHUwMDNlbWF5X2dvdG9fZGVwdGggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTg6XHRcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU5LVx0XHRcdFx0XHRsb29wID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjMtXHRcdFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzY0Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2NS1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzcxLVx0XHRcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM3MjpcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzczLVx0XHRcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MDQtXHRcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDU6XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA2LWhpdDpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDQtXHRcdFx0ICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0NTpcdFx0XHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDYtXHRcdFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIFN0YXRlIG9mIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSB2ZXJpZmllci4gSXQgc2VlbXMgdG8gYmUgdGhlIGdhdGVrZWVwZXIsIHRoZSBwbGFjZSB3aGVyZSB3ZSBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHByb2dyYW0gc3RhdGUgaGFzIGFscmVhZHkgYmVlbiBhbmFseXplZC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHN0YXRlIGV4cGxvcmF0aW9uLCBhdCBsZWFzdCBmcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpkcml2aW5nKiB0aGUgY2FsbHMgdG8gYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gV2hhdCBwYXJ0cyBvZiB0aGUgdmVyaWZpZXIgYXJlIGFjdHVhbGx5IGxldmVyYWdpbmcgdGhpcyBmdW5jdGlvbmFsaXR5PyBGaWd1cmluZyBvdXQgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCB0aGUgb3ZlcmFsbCB2ZXJpZmljYXRpb24gc3RyYXRlZ3kuIEJ5IGV4YW1pbmluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIGhvdyBzdGF0ZXMgYXJlIHRyYWNrZWQgYW5kIG1hbmFnZWQgZHVyaW5nIHRoZSBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBkZWNpZGVzIHdoZW4gdG8gZGVsdmUgZGVlcGVyIGludG8gYSBzdGF0ZSBhbmQgd2hlbiB0byBwcnVuZSBvciByZWNvZ25pemUgdGhhdCBhIHBhdGggaGFzIGJlZW4gZXhwbG9yZWQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSB2ZXJpZmllciYjMzk7cyBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMTQ9c3RhdGljIHZvaWQgbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM4LVxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjM5OmludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzM0ND1zdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzgxLVx0XHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVx1MDAzZWluc25faWR4KSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzgyOlx0XHRcdGVyciA9IGJwZl9pc19zdGF0ZV92aXNpdGVkKGVudiwgZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4My1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIGBkb19jaGVja2AgaXMgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHRoZSBtYWluIGxvb3Agd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGFyZWE6IHN0YXRlIGVxdWl2YWxlbmNlLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSBpdGVyYXRvciByZWdpc3RlcnMgd2l0aGluIHRoZSBgc3RhY2tzYWZlYCBjb250ZXh0LgoKSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogV2UmIzM5O3JlIGFkZGluZyBhIGB0eXBlYCBjaGVjayAoYG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZWApICpiZWZvcmUqIHdlIGNvbXBhcmUgdGhlIEJURiBpbmZvcm1hdGlvbiBmb3IgdGhlIGl0ZXJhdG9yIChgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGZgKS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIHNoaWZ0LiBQcmV2aW91c2x5LCB0aGUgdmVyaWZpZXIgY291bGQmIzM5O3ZlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgYW4gaXRlcmF0b3IgcmVnaXN0ZXIgdGhlIHNhbWUgYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCByZWdpc3RlciAobm9uLWl0ZXJhdG9yIG9yIG9mIGEgZGlmZmVyZW50IHJlZ2lzdGVyIHR5cGUpIGlmLCBieSBwdXJlIGNvaW5jaWRlbmNlLCB0aGVpciBtZW1vcnkgbGF5b3V0cyBvciB1bmluaXRpYWxpemVkIGRhdGEgaGFwcGVuZWQgdG8gbWF0Y2ggdGhlIGl0ZXJhdG9yJiMzOTtzIEJURiBkYXRhLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuIFRoaXMgY2hhbmdlIGVmZmVjdGl2ZWx5IGd1YXJkcyBhZ2FpbnN0IGZhbHNlIHBvc2l0aXZlcyBpbiBlcXVpdmFsZW5jZSBjaGVja3MsIG1ha2luZyB0aGUgdmVyaWZpZXIgbW9yZSByb2J1c3QuCgpUaGUgYWRkZWQgdGVzdCBjYXNlLCBgaXRlcnNfdGFza19mYWlsdXJlLmNgLCB3aXRoIGBpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nYCBpcyBhIHdlbGNvbWUgYWRkaXRpb24uIFRoaXMgdGVzdCBsZXZlcmFnZXMgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAsIGFuZCBgYnBmX2l0ZXJfdGFza19kZXN0cm95YCwgYW5kIGlzIGFubm90YXRlZCB3aXRoIGEgYGZlbnRyeWAgaG9vayBvbiB0aGUgYHN5c19nZXRwZ2lkYCBzeXNjYWxsLiBUaGF0IHN1Z2dlc3RzIHRhcmdldGVkIHRlc3Rpbmcgb2YgdGhlIGl0ZXJhdG9yIHJlZ2lzdGVyIGludGVyYWN0aW9ucyB1bmRlciByZWFsaXN0aWMgY29uZGl0aW9ucy4KClRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYW5kIGBzdGFja3NhZmVgLiBIb3dldmVyLCB0aGUgbGFzdCB0aHJlZSBhcmUgdW5mb3J0dW5hdGVseSBgc3RhdGljYCwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBleHRlcm5hbGx5LiBUaGF0IGxlYXZlcyB1cyB3aXRoIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEl0JiMzOTtzICpub24tc3RhdGljKiBhbmQgZGVjbGFyZWQgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLCB3aGlsZSBiZWluZyBjYWxsZWQgZnJvbSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXMgdGhlcmVmb3JlLCByZWFjaGFibGUsIGFzIGl0IGNvdWxkIGJlIGV4cG9ydGVkIG9yIGp1c3Qgbm9uLXN0YXRpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz0xMjE0PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIzOTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjQwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczNDQ9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4MS1cdFx0aWYgKGJwZl9pc19wcnVuZV9wb2ludChlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM4MjpcdFx0XHRlcnIgPSBicGZfaXNfc3RhdGVfdmlzaXRlZChlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczODMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkJQRiBWZXJpZmljYXRpb24gRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gVGhlIGZ1bmN0aW9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBzdGF0ZSBjaGVja2luZy4gSXQgc2VlbXMgdG8gYmUgdGhlIGZvY3VzIHN5bWJvbCBJIG5lZWQuIE5vdywgYSBjcnVjaWFsIGFzcGVjdCB0byBub3RlIGhlcmUgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgYGRvX2NoZWNrYCBpcyBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIHN1Z2dlc3RzIGl0IGlzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gV2hpbGUgYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyb3BlcmF0ZSwgd2hpY2ggbWFrZXMgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBhIHBlcmZlY3QgZW50cnkgcG9pbnQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBpdCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIENoYW5jZXMgYXJlLCBpdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBvciBhdCBsZWFzdCBkZWNsYXJlZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IG1vcmUgZWZmZWN0aXZlbHkuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE4Nz1pbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4OC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4OTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE5MC1pbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvY2F0aW5nIHRoZSBCUEYgVmVyaWZpZXImIzM5O3MgVml0YWxzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHdvcmtpbmdzLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHVuZGVyc3RhbmRpbmcgdGhlIHZpc2l0YXRpb24gcHJvY2Vzcy4gTGV0IG1lIGNvbmZpcm0gdGhhdDsgeWVzLCBhIHF1aWNrIHNlYXJjaCBjb25maXJtcyBpdCByZXNpZGVzIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBteSBhbmFseXNpcy4KCk5vdywgd2hhdCBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbj8gVGhlIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5IGlzbuKAmXQgYWx3YXlzIGVuYWJsZWQsIHJpZ2h0PyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvbiBidWlsZCBvcHRpb25zLiBJIHJlY2FsbCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGtleSByZXF1aXJlbWVudC4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc2VlIHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZW4gZXhwbG9yaW5nIHRoZSB2ZXJpZmllciYjMzk7cyBiZWhhdmlvciBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgQlBGIHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYsIGFuZCBsaWtlbHkgcG9pbnQgbWUgdG8gb3RoZXIsIG1vcmUgc3BlY2lmaWMgYEtjb25maWdgIGZpbGVzIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIHNwbGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCBwZXJoYXBzIGVCUEYsIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLCB2ZXJpZmllciBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgb3B0aW9ucyBmb3Igc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9ucyBvciBmZWF0dXJlcyBsaWtlIHRyYWNpbmcsIG5ldHdvcmtpbmcsIG9yIHNlY3VyaXR5LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgbWFwcGluZyBob3cgdGhlc2UgYXJlIHVzZWQgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqS2NvbmZpZyBMb2NhdGlvbiAtIEEgUXVpY2sgRGVkdWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgbGlrZWx5IGludm9sdmVzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB3aGVuIEkgc2VlIGBLY29uZmlnYCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gQW5kIHRoZSBwYXRoLi4uIGhtbSwgdGhlIG9sZGVyIGtlcm5lbHMsIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhpcyB3b3VsZCBiZSBgaW5pdC9LY29uZmlnYC4gSXQmIzM5O3MgYSBjbGFzc2ljIGxvY2F0aW9uLiBIb3dldmVyLCB3aXRoIHRoZSBldm9sdXRpb24gb2YgdGhlIGtlcm5lbCwgZXNwZWNpYWxseSBpbiBtb3JlIHJlY2VudCB2ZXJzaW9ucyB3aGVyZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGhhcyBleHBsb2RlZCBpbiBzaWduaWZpY2FuY2UsIHRoZXJlJiMzOTtzIGEgc3Ryb25nIGNoYW5jZSBpdCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbmV3ZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbGlrZWx5IHRvIHJlc2lkZS4gSXQmIzM5O3MgYWxtb3N0IGEga25lZS1qZXJrIHJlYWN0aW9uIG5vdyB0byB0aGluayBvZiBCUEYgY29uZmlnIGlmIEkgc2VlIGBLY29uZmlnYCBpbiB0aGUgY29udGV4dCBvZiBhIG1vZGVybiBrZXJuZWwuIEkgc2hvdWxkIGNoZWNrIGJvdGggYnV0IEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBuZXdlciBCUEYgcmVsYXRlZCBsb2NhdGlvbiBmaXJzdC4gSXQgaXMgcHJvYmFibHkgbW9yZSB1cCB0byBkYXRlIGFuZCBsZXNzIGN1bWJlcnNvbWUgdGhhbiBnb2luZyBpbnRvIG9sZGVyIGRpcmVjdG9yaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyB0aGUgY29uZmlnIGl0ZW0gd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBHb3QgaXQuIE5vdywgdGhlIGNvbm5lY3Rpb24gaXMuLi5haCwgcmlnaHQsIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgKm9ubHkqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRlcGVuZGVuY3ksIGxpbmtpbmcgdGhvc2UgdHdvIHRoaW5ncy4gSG1tLi4uIG1ha2VzIG1lIHdvbmRlciB3aGF0IGVsc2UgaGluZ2VzIG9uIHRoYXQgZmxhZy4gQmVzdCB0byBjaGVjayB0aGUgYnVpbGQgcnVsZXMgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyBpcyBhbGwgd2lyZWQgdG9nZXRoZXIuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZXMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkNoZWNraW5nIEJQRiBJdGVyYXRvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgc3RhdGVzLm9gIGlzIGRlZmluaXRlbHkgYnVpbHQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIHRlc3QgdGhhdCBsZXZlcmFnZXMgQlBGIGl0ZXJhdG9ycywgc3BlY2lmaWNhbGx5IHVzaW5nIGBicGZfaXRlcl90YXNrX25ld2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbmFpbCBkb3duIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGJleW9uZCBqdXN0IHRoZSBzeXNjYWxsIHN1cHBvcnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGBicGZfaXRlcl90YXNrX25ld2AgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjsgeW91IGNhbiYjMzk7dCBhc3N1bWUgYSBzaW5nbGUgb3B0aW9uIGd1YXJhbnRlZXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDkwMj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfY3NzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDMtI2VuZGlmXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTA0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9SQ1VfUFJPVEVDVEVEKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkwNS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGFza19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTExMTg9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE5LVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTIwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMjEtXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19fbnVsbGFibGUsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5Mzk9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyMzQtXHRcdFx0XHQgKiBJZiB0aGUgaXRlcmF0b3ImIzM5O3MgY29uc3RydWN0b3IgKHRoZSBfbmV3XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyMzU6XHRcdFx0XHQgKiBmdW5jdGlvbiBlLmcuLCBicGZfaXRlcl90YXNrX25ldykgaGFzIGJlZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzIzNi1cdFx0XHRcdCAqIGFubm90YXRlZCB3aXRoIEJQRiBrZnVuYyBmbGFnXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NDcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIHRoZSBicGZfaXRlcl90YXNrX25ldyBGdW5jdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBicGZfaXRlcl90YXNrX25ld2AgZnVuY3Rpb24uIEkgc2VlbSB0byByZWNhbGwgaXQgaGF2aW5nIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBCUEYgaXRlcmF0b3IgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBpdHMgbG9jYXRpb24uIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRhc2tzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4KCk5vdywganVzdCB0byBjb25maXJtIHRoYXQgdGhpcyBzb3VyY2UgZmlsZSBpcyBwYXJ0IG9mIHRoZSBmaW5hbCBidWlsZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBJJiMzOTtsbCBzY2FuIHRocm91Z2ggdGhhdCBxdWlja2x5IGFuZCBzZWUgaWYgYHRhc2tfaXRlci5vYCBpcyBiZWluZyBidWlsdCB0aGVyZS4gVGhpcyB3aWxsIGNvbmZpcm0gbXkgaHlwb3RoZXNpcyBhbmQgZ2l2ZSBtZSBjb25maWRlbmNlIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29ycmVjdCBjb21wb25lbnQuIFRoaXMgc2hvdWxkIGFsc28gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb2JqZWN0IGZpbGVzIGFuZCBzb3VyY2UgY29kZSBhcmUgcmVsYXRlZCB0byB0aGlzIG1vZHVsZS4gTm93IEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rhc2tfaXRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1NgoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQnVnIEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gVGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMsIGZvY3VzaW5nIG9uIGhvdyBpdGVyYXRvciByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGEgdHlwZSBjaGVjaywgcmVhbGx5LCB0byBwcmV2ZW50IHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IGVxdWF0aW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBtaWdodCBqdXN0ICpoYXBwZW4qIHRvIGxvb2sgdGhlIHNhbWUgaW4gbWVtb3J5IG9yIGhhdmUgdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZpeCwgaW1wYWN0aW5nIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZhbGlkYXRlZCBhbmQgdWx0aW1hdGVseSBsb2FkZWQgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuCgpNeSBmb2N1cyBzeW1ib2wgaXMgY2xlYXJseSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJiMzOTtzIHJlYWNoLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYHN0YWNrc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGFuZCBgc3RhdGVzX2VxdWFsYCBhcmUgYWxsIHN0YXRpYy4gWWVwLCB0aGV5IGFyZS4gQnV0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgKm5vdCogc3RhdGljLCBhbmQgaXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIHRoZSByaWdodCBwb2ludCB0byBkcmlsbCBpbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgY2xvc2VseSBhdCB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYHN0YWNrc2FmZWAsIG5vdCBhbnl0aGluZyBlbHNlIGRpcmVjdGx5LiBUaGUgY2FsbCBjaGFpbiBpcyBwcmV0dHkgY2xlYXI6IGBzdGFja3NhZmVgIGlzIGNhbGxlZCBieSBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIHVsdGltYXRlbHkgY2FsbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIFRoaXMgY29uZmlybWF0aW9uIHJlaW5mb3JjZXMgdGhhdCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzIGRlZmluaXRlbHkgdGhlIG1vc3QgcmVsZXZhbnQgcG9pbnQgdG8gZm9jdXMgb24gZHVyaW5nIG15IGFuYWx5c2lzLiBJIGhhdmUgdGhlIHdob2xlIHBpY3R1cmUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyAoYHN0YWNrc2FmZSgpYCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2ApLiBJdCBhZGRzIGEgdHlwZSBjaGVjayBmb3IgcmVnaXN0ZXIgc3RhdGVzIHdoZW4gY29tcGFyaW5nIGl0ZXJhdG9yIHJlZ2lzdGVycywgcHJldmVudGluZyB0aGUgdmVyaWZpZXIgZnJvbSBpbmNvcnJlY3RseSBtYXRjaGluZyBhbiBpdGVyYXRvciByZWdpc3RlciB3aXRoIGEgbm9uLWl0ZXJhdG9yIHJlZ2lzdGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoZSBzYW1lIG1lbW9yeSBsYXlvdXQgb3IgdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSB2ZXJpZmllZCBhbmQgYWNjZXB0ZWQvcmVqZWN0ZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWApLiBcblxuVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBtZXJnZSBhIHN0YXRlIHdoZXJlIGFuIGl0ZXJhdG9yIGlzIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciBpcyB1bnRydXN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYCkuIEFzIGRlbW9uc3RyYXRlZCBieSB0aGUgaW5jbHVkZWQgdGVzdCBjYXNlLCBhbiB1bnByb3RlY3RlZCBnYXAgKGUuZy4sIHVubG9ja2luZyBhbmQgcmVsb2NraW5nIFJDVSkgc3RyaXBzIHRoZSBgTUVNX1JDVWAgZmxhZywgbWFraW5nIHRoZSBpdGVyYXRvciB1bnRydXN0ZWQuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcgdGhlc2Ugc3RhdGVzLCB0aGUgdmVyaWZpZXIgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBjYWxsIGBicGZfaXRlcl90YXNrX25leHRgIG9uIGFuIHVudHJ1c3RlZCBpdGVyYXRvciwgbGVhZGluZyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB3aGVuIHRoZSB0YXNrIHN0cnVjdCBpcyBhY2Nlc3NlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQuXG5cblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI3MDU3Y2I1N2I5YjBkMzRhOTM2NDY5MWQ2YzY2OTcyY2E3ODMyNzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTowODoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGF0ZXMuYwpAQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsCiAJCQkgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZQogCQkJICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpCiAJCQkgKi8KLQkJCWlmIChvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fAomIzQzOwkJCWlmIChvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGUgfHwKJiM0MzsJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKIAkJCSAgICBvbGRfcmVnLSZndDtpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0Zl9pZCB8fAogCQkJICAgIG9sZF9yZWctJmd0O2l0ZXIuc3RhdGUgIT0gY3VyX3JlZy0mZ3Q7aXRlci5zdGF0ZSB8fAogCQkJICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS0mZ3Q7aXRlci5kZXB0aCwgc2VlIGFib3ZlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMKaW5kZXggZmUzNjYzZGVkYmUxNC4uNTY2YTFkM2RmZmVhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYwpAQCAtNjEsNiAmIzQzOzYxLDUyIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHQmIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2sgaXQ7CiYjNDM7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSAlW2l0XTsmIzM0OwomIzQzOwkJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7cjMgPSAwOyYjMzQ7IC8qIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTICovCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl90YXNrX25ld107JiMzNDsKJiM0MzsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOyYjMzQ7CiYjNDM7CQkmIzM0O2lmIHcwID09IDAgZ290byB1bnByb3RlY3RlZF8lPTsmIzM0OwomIzQzOwomIzQzOwkJLyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlIG9uIHRoZSBzdHJhaWdodC1saW5lIHBhdGguICovCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O2dvdG8gbWVyZ2VfJT07JiMzNDsKJiM0MzsKJiM0MzsJJiMzNDt1bnByb3RlY3RlZF8lPTomIzM0OwomIzQzOwkJLyogQ3JlYXRlIGFuIHVucHJvdGVjdGVkIGdhcCBvbiB0aGUgdGFrZW4gcGF0aC4gKi8KJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107JiMzNDsKJiM0MzsKJiM0MzsJJiMzNDttZXJnZV8lPTogcjEgPSAlW2l0XTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19uZXh0XTsmIzM0OwomIzQzOwkJJiMzNDtyMSA9ICVbaXRdOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl90YXNrX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTsmIzM0OwomIzQzOwkJOgomIzQzOwkJOiBfX2ltbV9wdHIoaXQpLAomIzQzOwkJICBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXcpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl90YXNrX25leHQpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl90YXNrX2Rlc3Ryb3kpLAomIzQzOwkJICBfX2ltbShicGZfcmN1X3JlYWRfbG9jayksCiYjNDM7CQkgIF9faW1tKGJwZl9yY3VfcmVhZF91bmxvY2spCiYjNDM7CQk6IF9fY2xvYmJlcl9jb21tb24KJiM0MzsJKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P2ZlbnRyeS5zLyYjMzQ7IFNZU19QUkVGSVggJiMzNDtzeXNfZ2V0cGdpZCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHQmIzM0OykKIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgY2hlY2s6IGBvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGVgICpiZWZvcmUqIGNvbXBhcmluZyBgb2xkX3JlZy0mZ3Q7aXRlci5idGZgIGFuZCBgY3VyX3JlZy0mZ3Q7aXRlci5idGZgLiBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSByZWFsbSBvZiBpdGVyYXRvciBzdGF0ZSAoYGl0ZXJgKS4gTXkgaW1tZWRpYXRlIGd1ZXNzIGlzIHRoYXQgdGhpcyBhZGRyZXNzZXMgc29tZSBraW5kIG9mIHR5cGUgY29uZnVzaW9uIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgaXNzdWUuIEVzc2VudGlhbGx5LCB3ZSB3ZXJlIHRyeWluZyB0byBsb29rIGF0IGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgd2hlbiBgb2xkX3JlZy0mZ3Q7dHlwZWAgbWlnaHQgbm90IGV2ZW4gKmJlKiBhbiBpdGVyYXRvciB0eXBlLCBvciBwZXJoYXBzIHRoZSB0eXBlcyBkb24mIzM5O3QgbWF0Y2ggYmV0d2VlbiB0aGUgb2xkIGFuZCBjdXJyZW50IHJlZ2lzdGVycy4KCldhaXQgYSBzZWNvbmQsIGlmIGBvbGRfcmVnLSZndDt0eXBlYCAqaXNuJiMzOTt0KiBhbiBpdGVyYXRvciwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgZnJvbSBhIHVuaW9uIGZpZWxkIChgaXRlcmApIGluIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgdGhhdCYjMzk7cyAqbWVhbnQqIGZvciBzb21ldGhpbmcgZWxzZS4gVGhhdCBmaWVsZCBjb3VsZCBjb250YWluIGdhcmJhZ2UsIG9yIGV2ZW4gYmUgdW5pbml0aWFsaXplZC4gQnV0LCBpdCBzZWVtcyB0byBiZSBvbmx5IGEgdmFsdWUgY29tcGFyaXNvbiwgcmlnaHQ/IFNvIHdlIGFyZSBub3QgZGVyZWZlcmVuY2luZyBpdC4KCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCBpdCB1cCB3aXRoIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBnZXQgdGhlIGRlZmluaXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3RydWN0dXJlIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHR5cGVgIGFuZCB0aGF0IGBpdGVyYCBmaWVsZCB3aXRoaW4gdGhlIHVuaW9uLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHNwb3QsIGFzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyaWZpZXIgc3RhdGVzIGFuZCBpdGVyYXRvciBpbmZvcm1hdGlvbiwgd2hpY2ggYXJlIHByZXR0eSBzZW5zaXRpdmUgYXJlYXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MzI9ZW51bSBicGZfaXRlcl9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zNy1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6Mzg6c3RydWN0IGJwZl9yZWdfc3RhdGUge1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zOS1cdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSGVhZGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhlIEJQRiB2ZXJpZmllciBpcywgYXMgd2UgYWxsIGtub3csIGFic29sdXRlbHkgY3JpdGljYWwuIEl0JiMzOTtzIHRoZSBsaW5jaHBpbiBvZiBlQlBGJiMzOTtzIHNlY3VyaXR5IG1vZGVsLCBlbnN1cmluZyB0aGF0IHRoZSBwcm9ncmFtcyB3ZSBsb2FkIGFyZSBzYWZlIHRvIHJ1biBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFyb3VuZCBsaW5lIDM4IOKAkyB0aGlzIGlzIG9mdGVuIHdoZXJlIGtleSBkYXRhIHN0cnVjdHVyZXMgb3IgaW5pdGlhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXJlIGxvY2F0ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyB1c2VkIGJ5IHRoZSB2ZXJpZmllciBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIGhlcmU7IHRoaW5ncyBsaWtlIGluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9ucywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlcywgb3IgbWF5YmUgdGhlIGluaXRpYWwgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIGNvcmUgdmVyaWZpY2F0aW9uIGxvZ2ljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDM5Olx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA0MDpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNDE6XHRcdC8qXG4gIDQyOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDQzOlx0XHQgKi9cbiAgNDQ6XHRcdHMzMiBkZWx0YTtcbiAgNDU6XHRcdHVuaW9uIHtcbiAgNDY6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNDc6XHRcdFx0aW50IHJhbmdlO1xuICA0ODpcdFxuICA0OTpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA1MDpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA1MTpcdFx0XHQgKi9cbiAgNTI6XHRcdFx0c3RydWN0IHtcbiAgNTM6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNTQ6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA1NTpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNTY6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA1NzpcdFx0XHRcdCAqL1xuICA1ODpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA1OTpcdFx0XHR9O1xuICA2MDpcdFxuICA2MTpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA2MjpcdFx0XHRzdHJ1Y3Qge1xuICA2MzpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgNjQ6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA2NTpcdFx0XHR9O1xuICA2NjpcdFxuICA2NzpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA2ODpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgNjk6XHRcdFx0fTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA3MjpcdFx0XHRzdHJ1Y3Qge1xuICA3MzpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDc0Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgNzU6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgNzY6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA3NzpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDc4Olx0XHRcdFx0ICogZHlucHRyLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAgODE6XHRcdFx0fSBkeW5wdHI7XG4gIDgyOlx0XG4gIDgzOlx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuICA4NDpcdFx0XHRzdHJ1Y3Qge1xuICA4NTpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAgODY6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuICA4NzpcdFx0XHRcdCAqL1xuICA4ODpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODk6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA5MDpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuICA5MTpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAgOTI6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gIDkzOlx0XHRcdH0gaXRlcjtcbiAgOTQ6XHRcbiAgOTU6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuICA5NjpcdFx0XHRzdHJ1Y3Qge1xuICA5NzpcdFx0XHRcdGVudW0ge1xuICA5ODpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAgOTk6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEwMDpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTAxOlx0XHRcdH0gaXJxO1xuIDEwMjpcdFxuIDEwMzpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTA0Olx0XHRcdHN0cnVjdCB7XG4gMTA1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEwNjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMDc6XHRcdFx0fSByYXc7XG4gMTA4Olx0XG4gMTA5Olx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDExMDpcdFx0fTtcbiAxMTE6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTEyOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDExMzpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTE0Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDExNTpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuIDEyODpcdFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXG4gMTI5Olx0XHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxuIDEzMDpcdFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQmIzM5O3MgZnJlZWQuXG4gMTMxOlx0XHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxuIDEzMjpcdFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cbiAxMzM6XHRcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xuIDEzNDpcdFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzNTpcdFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcJiMzNDtiZWxvbmdpbmdcJiMzNDsgb2YgYSByZWZlcmVuY2VcbiAxMzY6XHRcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gMTM3Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZCBpbiBicGZfcmVnX3N0YXRlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGBpdGVyYCBzdHJ1Y3Qgd2l0aGluIHRoZSBgYnBmX3JlZ19zdGF0ZWAgdW5pb24uIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZXJlJiMzOTtzIHRoaXMgbmV3IGNoZWNrOiBgb2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlYCBiZWZvcmUgY29tcGFyaW5nIHNvbWUgYGl0ZXJgIGZpZWxkcywgbGlrZSBgYnRmYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gcHJldmVudCBhIGNvbXBhcmlzb24gaWYgdGhlIHJlZ2lzdGVyIHR5cGVzIGFyZSBkaWZmZXJlbnQsIHdoaWNoIHByb2JhYmx5IG1ha2VzIHNlbnNlIGluIG1vc3Qgc2NlbmFyaW9zLgoKTm93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJZiBgb2xkX3JlZy0mZ3Q7dHlwZWAgaXNuJiMzOTt0IGFuIGl0ZXJhdG9yIHR5cGUsIHRoZW4gYWNjZXNzaW5nIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgYmVjb21lcyBhIHJlYWQgZnJvbSB0aGUgdW5pb24uIFRoaXMgdW5pb24gaXMgcG9wdWxhdGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoYXQgYHR5cGVgIGlzIHNldCB0byBpbiBgYnBmX3JlZ19zdGF0ZWAuIFNvLCBpZiB0aGF0IHVuaW9uJiMzOTtzIGZpZWxkcyBhcmUgdW5pbml0aWFsaXplZCwgb3IgY29udGFpbiBnYXJiYWdlIGRhdGEgYmVjYXVzZSBvZiBob3cgdGhlIHN0cnVjdHVyZSBpcyB1c2VkLCB0aGVuIHdlIGNvdWxkIGJlIGxvb2tpbmcgYXQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgcG90ZW50aWFsbHkuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBhcmVuJiMzOTt0IGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgaW5zdGFuY2VzIHR5cGljYWxseSBmdWxseSBpbml0aWFsaXplZD8gT3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3aGVuIHRoZSBgdHlwZWAgaXMgc2V0LCB0aGUgYXNzb2NpYXRlZCB1bmlvbiBmaWVsZHMgKnNob3VsZCogYmUgd3JpdHRlbiB0bz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gTWF5YmUgaWYgdGhlIHR5cGUgaXMgYFNDQUxBUl9WQUxVRWAsIHRoZSB1bmlvbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBjaGVjayBob3cgYGJwZl9yZWdfc3RhdGVgIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoYXQgc3RydWN0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcmtfcmVnX3Vua25vd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTY2MT1zdGF0aWMgX19pbml0IGludCB1bmJvdW5kX3JlZ19pbml0KHZvaWQpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY2Mi17XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY2MzpcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShcdTAwMjZ1bmJvdW5kX3JlZyk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY2NC1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NDI9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2MS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NjI6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzYzLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzY1PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5LVx0ZWxzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3MDpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzEtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDk4PXN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEzMi0vKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMzM6dm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTM0LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0My0gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTQ0OnN0YXRpYyB2b2lkIF9fbWFya19yZWdfdW5rbm93bihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDUtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0Ni17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0NzpcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShyZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDgtXHRyZWctXHUwMDNlcHJlY2lzZSA9ICFlbnYtXHUwMDNlYnBmX2NhcGFibGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNTAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1MTpzdGF0aWMgdm9pZCBtYXJrX3JlZ191bmtub3duKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE1Mi1cdFx0XHQgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE1My17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1NDpcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MgJiM0MzsgcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNTUtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTc3PXZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNzkte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxODA6XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxODEtXHRyZWctXHUwMDNldHlwZSA9IE5PVF9JTklUO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTg0PXN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxOTEtXHRjYXNlIFNDQUxBUl9WQUxVRTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTkyOlx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxOTMtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMDczPXN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMwOTgtXHRcdGlmICh0ID09IERTVF9PUClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMDk5Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEwMC1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY2MD1zdGF0aWMgaW50IG1hcmtfcmVnX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzY5OS1cdFx0LyogaGF2ZSByZWFkIG1pc2MgZGF0YSBmcm9tIHRoZSBzdGFjayAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM3MDA6XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBzdGF0ZS1cdTAwM2VyZWdzLCBkc3RfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MDEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwOTA9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExNi1cdFx0aWYgKHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTE3Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExOC1cdH0gZWxzZSBpZiAocmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX01BUF9WQUxVRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTY3LVx0XHRcdH0gZWxzZSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE2ODpcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2OS1cdFx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMDAtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2ICh0ID09IEJQRl9SRUFEIHx8IHJkb25seV9tZW0pKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyMDE6XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjAyLVx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQ1RYKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMjMtXHRcdFx0XHRpZiAoaW5mby5pc19yZXR2YWwgXHUwMDI2XHUwMDI2IGdldF9mdW5jX3JldHZhbF9yYW5nZShlbnYtXHUwMDNlcHJvZywgXHUwMDI2cmFuZ2UpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjIyNDpcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjI1LVx0XHRcdFx0XHRlcnIgPSBfX21hcmtfcmVnX3MzMl9yYW5nZShlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjI5LVx0XHRcdFx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjMwOlx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMzEtXHRcdFx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNzAtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI3MTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNzItXHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19GTE9XX0tFWVMpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI4MS1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjgyOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI4My1cdH0gZWxzZSBpZiAodHlwZV9pc19za19wb2ludGVyKHJlZy1cdTAwM2V0eXBlKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjkwLVx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTE6XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjkyLVx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTQtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI5NTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTYtXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMyMi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgKHJkb25seV9tZW0gfHwgdCA9PSBCUEZfUkVBRCkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMyMzpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjQtXHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19BUkVOQSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjUtXHRcdGlmICh0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMyNjpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjctXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjEzPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3MDQtXHRcdFx0aWYgKGNsb2JiZXIpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzA1Olx0XHRcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjcwNi1cdFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1MDA9c3RhdGljIHZvaWQgbWF5YmVfd2lkZW5fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1MDgtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTA5Olx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmN1cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzUxMC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkzODM9c3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM0LVx0XHRpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDM1Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM2LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMjA1PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQ2MS1cdFx0Lyogc2V0cyB0eXBlIHRvIFNDQUxBUl9WQUxVRSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDYyOlx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQ2My1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjc4LVx0XHRcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDY3OTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDY4MC1cdFx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTM5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTk1Olx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ni1cdFx0ZXJyID0gX19tYXJrX3JlZ19zMzJfcmFuZ2UoZW52LCByZWdzLCBCUEZfUkVHXzAsIC1NQVhfRVJSTk8sIC0xKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNjktXHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNzA6XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTcxLVx0XHRpZiAobWV0YS5idGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE4MS1cdFx0XHQvKiBrZnVuYyByZXR1cm5pbmcgJiMzOTt2b2lkIComIzM5OyBpcyBlcXVpdmFsZW50IHRvIHJldHVybmluZyBzY2FsYXIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE4MjpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE4My1cdFx0fSBlbHNlIGlmICghX19idGZfdHlwZV9pc19zdHJ1Y3QocHRyX3R5cGUpKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNDUwPXN0YXRpYyBpbnQgc2FuaXRpemVfc3BlY3VsYXRpdmVfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ2MC1cdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYxOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDYyLVx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYzOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDY0Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDY1LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNjgzPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MDUtXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzA2Olx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzcwNy1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzEyLVx0XHRpZiAob3Bjb2RlID09IEJQRl9TVUIgXHUwMDI2XHUwMDI2IGVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzcxMzpcdFx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzcxNC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2MTA9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyMC1cdGlmICghaXNfc2FmZV90b19jb21wdXRlX2RzdF9yZWdfcmFuZ2UoaW5zbiwgXHUwMDI2c3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYyMTpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MjItXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDc2OD1zdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODE1LVx0XHRcdFx0aWYgKG9wY29kZSA9PSBCUEZfU1VCIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYWxsb3dfcHRyX2xlYWtzKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4MTY6XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODE3LVx0XHRcdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MzY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5My1cdFx0XHRcdFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk5NDpcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTUtXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAxKSAvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCkgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMjAtXHRcdFx0XHRcdH0gZWxzZSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwMjE6XHRcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMjItXHRcdFx0XHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNTUtXHRcdFx0XHR9IGVsc2Uge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDU2Olx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA1Ny1cdFx0XHRcdFx0XHRcdCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA2Ni1cdFx0XHQvKiBjbGVhciBhbnkgc3RhdGUgX19tYXJrX3JlZ19rbm93biBkb2VzbiYjMzk7dCBzZXQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA2NzpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA2OC1cdFx0XHRyZWdzW2luc24tXHUwMDNlZHN0X3JlZ10udHlwZSA9IFNDQUxBUl9WQUxVRTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxOTE9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI2My1cdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI2NDpcdFx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI2NS1cdFx0XHRkc3RfcmVnLVx1MDAzZW1hcF9wdHIgPSBtYXA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzEzPXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNjktXHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM3MDpcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzcxLVx0Lypcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg0MTE9c3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDgzLVx0XHRcdFx0cmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg0ODQ6XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0ODUtXHRcdFx0fSBlbHNlIGlmIChhcmctXHUwMDNlYXJnX3R5cGUgPT0gQVJHX1BUUl9UT19EWU5QVFIpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg1MDktXHRcdFx0XHQvKiBjYWxsZXIgY2FuIHBhc3MgZWl0aGVyIFBUUl9UT19BUkVOQSBvciBTQ0FMQVIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODUxMDpcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODUxMS1cdFx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGUgaW5zaWRlOgoKKipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllcjogQSBGb2N1cyBvbiBgX19tYXJrX3JlZ191bmtub3duYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fbWFya19yZWdfdW5rbm93bmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNyaXRpY2FsIHJvbGUgb2YgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgaW4gQlBGIHNhZmV0eS4gYF9fbWFya19yZWdfdW5rbm93bmAgbGlrZWx5IHBsYXlzIGEgcGFydCBpbiBpbml0aWFsaXppbmcgb3IgcmVzZXR0aW5nIGEgcmVnaXN0ZXImIzM5O3Mga25vd24gc3RhdGUgd2l0aGluIHRoZSB2ZXJpZmllci4gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBoYW5kbGluZyB1bmRlZmluZWQgdmFsdWVzIG9yIHVudHJ1c3RlZCBkYXRhIGNvbWluZyBpbnRvIGEgQlBGIHByb2dyYW0uIEkgaW1hZ2luZSBpdCYjMzk7cyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIGNvbnRyb2wgZmxvdyBleHBsb2l0cyBhbmQgZGF0YSBsZWFrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNpcmN1bXN0YW5jZXMgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZDogd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyB0cmlnZ2VyIGl0LCBhbmQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhdGUgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMga2V5IC0gd2hhdCBzZWN1cml0eSB0aHJlYXRzIGlzIGl0IGF0dGVtcHRpbmcgdG8gbWl0aWdhdGU/IEFsc28sIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/IElzIGl0IGVmZmljaWVudCwgb3IgaXMgaXQgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHZlcmlmaWVyIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEzMzpcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMTM0Olx0e1xuMjEzNTpcdFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbjIxMzY6XHRcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMjEzNzpcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4yMTM4Olx0XHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuMjEzOTpcdH1cbjIxNDA6XHRcbjIxNDE6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLFxuMjE0MjpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIxNDM6XHQgKi9cbjIxNDQ6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIxNDU6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIxNDY6XHR7XG4yMTQ3Olx0XHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UocmVnKTtcbjIxNDg6XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gIWVudi1cdTAwM2VicGZfY2FwYWJsZTtcbjIxNDk6XHR9XG4yMTUwOlx0XG4yMTUxOlx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjE1MjpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcbjIxNTM6XHR7XG4yMTU0Olx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICYjNDM7IHJlZ25vKTtcbjIxNTU6XHR9XG4yMTU2Olx0XG4yMTU3Olx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjE1ODpcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4yMTU5Olx0XHRcdFx0XHR1MzIgcmVnbm8sXG4yMTYwOlx0XHRcdFx0XHRzMzIgczMyX21pbixcbjIxNjE6XHRcdFx0XHRcdHMzMiBzMzJfbWF4KVxuMjE2MjpcdHtcbjIxNjM6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICYjNDM7IHJlZ25vO1xuMjE2NDpcdFxuMjE2NTpcdFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXG4yMTY2Olx0XHRcdFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXG4yMTY3Olx0XHRcdFx0IG1pbl90KHMzMiwgcmVnX3MzMl9tYXgocmVnKSwgczMyX21heCkpO1xuMjE2ODpcdFx0cmVnX3NldF9zcmFuZ2U2NChyZWcsXG4yMTY5Olx0XHRcdFx0IG1heF90KHM2NCwgcmVnX3NtaW4ocmVnKSwgczMyX21pbiksXG4yMTcwOlx0XHRcdFx0IG1pbl90KHM2NCwgcmVnX3NtYXgocmVnKSwgczMyX21heCkpO1xuMjE3MTpcdFxuMjE3MjpcdFx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4yMTczOlx0XG4yMTc0Olx0XHRyZXR1cm4gcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soZW52LCByZWcsIFwmIzM0O3MzMl9yYW5nZVwmIzM0Oyk7XG4yMTc1Olx0fVxuMjE3NjpcdFxuMjE3NzpcdHZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4yMTc4Olx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIxNzk6XHR7XG4yMTgwOlx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWcpO1xuMjE4MTpcdFx0cmVnLVx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcbjIxODI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlZ2lzdGVyIFN0YXRlIEhhbmRsaW5nIGluIEJQRioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBtZW1zZXRgIG9uIHRoZSByZWdpc3Rlciwgc3BlY2lmaWNhbGx5IHplcm9pbmcgb3V0IHRoZSBlbnRpcmUgdW5pb24uIFRoYXQgbWFrZXMgaW1tZWRpYXRlIHNlbnNlOyBtYXJraW5nIHNvbWV0aGluZyAmIzM0O3Vua25vd24mIzM0OyBzaG91bGQgaW52b2x2ZSBjbGVhcmluZyBhbnkgcHJldmlvdXNseSBoZWxkIHZhbHVlLCByaWdodD8gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIHJlYWxseSBoaXRzIG1lOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBvdGhlciBkYXRhIHR5cGVzIHJlcHJlc2VudGVkIGJ5IHRoYXQgdW5pb24/IFRoaXMgemVyb2luZyBhY3Rpb24gYWZmZWN0cyBldmVyeXRoaW5nLiBBcmUgdGhlcmUgYW55IGNvZGUgcGF0aHMgd2hlcmUgYSByZWdpc3RlciYjMzk7cyBgcmVnLSZndDt0eXBlYCBpcyBtb2RpZmllZCB3aXRob3V0IGFsc28gZW5zdXJpbmcgdGhlIHVuaW9uIGlzIGNsZWFyZWQ/IFRoYXQgY291bGQgYmUgYSBzZXJpb3VzIGlzc3VlLiBUbyBwcm9wZXJseSBmaWd1cmUgdGhpcyBvdXQgSSBzaG91bGQgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBmaWxlOyB0aGF0JiMzOTtzIHdoZXJlIGBzdGFja3NhZmVgIGlzIGhhbmRsZWQsIGFuZCBsaWtlbHkgcmVsYXRlZCBzdGF0ZSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVnaXN0ZXIgbGlmZWN5Y2xlIG1vcmUgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdFx0XHQgKiBzdWNoIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQuXG4gNzkxOlx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3OTI6XHRcdFx0XHQgKi9cbiA3OTM6XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcbiA3OTQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4gNzk1Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzk2Olx0XHRcdFx0YnJlYWs7XG4gNzk3Olx0XHRcdGNhc2UgU1RBQ0tfRFlOUFRSOlxuIDc5ODpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA3OTk6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODAwOlx0XHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlZHlucHRyLnR5cGUgIT0gY3VyX3JlZy1cdTAwM2VkeW5wdHIudHlwZSB8fFxuIDgwMTpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90ICE9IGN1cl9yZWctXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcbiA4MDI6XHRcdFx0XHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVx1MDAzZWlkLCBjdXJfcmVnLVx1MDAzZWlkLCBpZG1hcCkgfHxcbiA4MDM6XHRcdFx0XHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVx1MDAzZXBhcmVudF9pZCwgY3VyX3JlZy1cdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSlcbiA4MDQ6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4MDU6XHRcdFx0XHRicmVhaztcbiA4MDY6XHRcdFx0Y2FzZSBTVEFDS19JVEVSOlxuIDgwNzpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA4MDg6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODA5Olx0XHRcdFx0LyogaXRlci5kZXB0aCBpcyBub3QgY29tcGFyZWQgYmV0d2VlbiBzdGF0ZXMgYXMgaXRcbiA4MTA6XHRcdFx0XHQgKiBkb2VzbiYjMzk7dCBtYXR0ZXIgZm9yIGNvcnJlY3RuZXNzIGFuZCB3b3VsZCBvdGhlcndpc2VcbiA4MTE6XHRcdFx0XHQgKiBwcmV2ZW50IGNvbnZlcmdlbmNlOyB3ZSBtYWludGFpbiBpdCBvbmx5IHRvIHByZXZlbnRcbiA4MTI6XHRcdFx0XHQgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZVxuIDgxMzpcdFx0XHRcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxuIDgxNDpcdFx0XHRcdCAqL1xuIDgxNTpcdFx0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4gODE2Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuIDgxNzpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGZfaWQgfHxcbiA4MTg6XHRcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLnN0YXRlICE9IGN1cl9yZWctXHUwMDNlaXRlci5zdGF0ZSB8fFxuIDgxOTpcdFx0XHRcdCAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXG4gODIwOlx0XHRcdFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VpZCwgY3VyX3JlZy1cdTAwM2VpZCwgaWRtYXApKVxuIDgyMTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgyMjpcdFx0XHRcdGJyZWFrO1xuIDgyMzpcdFx0XHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxuIDgyNDpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA4MjU6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODI2Olx0XHRcdFx0aWYgKCFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VpZCwgY3VyX3JlZy1cdTAwM2VpZCwgaWRtYXApIHx8XG4gODI3Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXJxLmtmdW5jX2NsYXNzICE9IGN1cl9yZWctXHUwMDNlaXJxLmtmdW5jX2NsYXNzKVxuIDgyODpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgyOTpcdFx0XHRcdGJyZWFrO1xuIDgzMDpcdFx0XHRjYXNlIFNUQUNLX01JU0M6XG4gODMxOlx0XHRcdGNhc2UgU1RBQ0tfWkVSTzpcbiA4MzI6XHRcdFx0Y2FzZSBTVEFDS19JTlZBTElEOlxuIDgzMzpcdFx0XHRjYXNlIFNUQUNLX1BPSVNPTjpcbiA4MzQ6XHRcdFx0XHRjb250aW51ZTtcbiA4MzU6XHRcdFx0LyogRW5zdXJlIHRoYXQgbmV3IHVuaGFuZGxlZCBzbG90IHR5cGVzIHJldHVybiBmYWxzZSBieSBkZWZhdWx0ICovXG4gODM2Olx0XHRcdGRlZmF1bHQ6XG4gODM3Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgzODpcdFx0XHR9XG4gODM5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHN0YWNrc2FmZWAgTG9naWMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgc3RhY2tzYWZlYCBpcyBoYW5kbGluZyB0aGUgY29tcGFyaXNvbi4gSXQmIzM5O3MgY2hlY2tpbmcgYG9sZC0mZ3Q7c3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV1gLiBJZiBpdCYjMzk7cyBhIGBTVEFDS19JVEVSYCwgdGhlbiBpdCBhY2Nlc3NlcyBgb2xkX3JlZyA9ICZhbXA7b2xkLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyYC4gQnV0IGhvbGQgb24sIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlYCBpcyBhbiBhcnJheSBvZiBgdThgLCBzbyBkb2VzIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgIG1lYW4gYG9sZF9yZWctJmd0O3R5cGVgIGlzIGFuIGl0ZXJhdG9yIHR5cGU/CgpBY3R1YWxseSwgYG9sZF9yZWdgIGlzbiYjMzk7dCBhIHJlZ2lzdGVyIGRpcmVjdGx5OyBpdCYjMzk7cyBgc3BpbGxlZF9wdHJgLiBIbW0sIG5vdyBJIHNlZSB0aGUgcG90ZW50aWFsIGlzc3VlLiBUaGUgY29kZSBzZWVtcyB0byBiZSBjb21wYXJpbmcgYG9sZF9yZWctJmd0O2l0ZXIuYnRmYCB3aXRoIGBjdXJfcmVnLSZndDtpdGVyLmJ0ZmAgd2l0aG91dCBleHBsaWNpdGx5IGNoZWNraW5nIGBvbGRfcmVnLSZndDt0eXBlYCBiZWZvcmVoYW5kLiBUaGUgcGF0Y2ggKmRvZXMqIGFkZCBhIGNoZWNrIGBvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGVgLCB3aGljaCBpcyBnb29kLiBCdXQgYmVmb3JlIHRoZSBwYXRjaCwgaWYgdGhlIHR5cGVzIHdlcmUgZGlmZmVyZW50LCB0aGUgY29tcGFyaXNvbiBjb3VsZCBoYXZlIHJldHVybmVkIHRydWUgYWNjaWRlbnRhbGx5IGlmIHRoZSBvdGhlciBmaWVsZHMsIGJ5IGNvaW5jaWRlbmNlLCBoYXBwZW5lZCB0byBiZSBlcXVhbC4KClRoZSBtYWluIGNvbmNlcm4gYmVmb3JlIHRoZSBwYXRjaCBpcyB0aGF0IGl0IHdhcyBzaW1wbHkgY29tcGFyaW5nIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgYW5kIGBjdXJfcmVnLSZndDtpdGVyLmJ0ZmAuIFRoaXMgbWVhbnMgaWYgdGhvc2UgYGJ0ZmAgdmFsdWVzIGhhcHBlbmVkIHRvIGJlIHRoZSBzYW1lLCB0aGUgY29kZSBjb3VsZCBoYXZlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgdGhlbSBlcXVpdmFsZW50LiBUaGUgZGFuZ2VyIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJZiBgb2xkX3JlZ2AgaXMgYSBgc3BpbGxlZF9wdHJgLCBhbmQgaXQgKmlzbiYjMzk7dCogYW4gaXRlcmF0b3IsIGl0cyB1bmlvbiBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkLCBsZWFkaW5nIHRvIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHdhaXQhIElmIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgLCB0aGVuIGBvbGRfcmVnYCBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGFzIGFuIGl0ZXJhdG9yLgoKSG93ZXZlciwgd2hhdCBpZiBgb2xkLSZndDtzdGFja1tzcGldLnNsb3RfdHlwZVswXSA9PSBTVEFDS19JVEVSYCBhbmQgYGN1ci0mZ3Q7c3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gPT0gU1RBQ0tfSVRFUmAgKmJ1dCogdGhlaXIgYHNwaWxsZWRfcHRyLnR5cGVgIHZhbHVlcyBhcmUgZGlmZmVyZW50PyBJcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBzcGlsbGVkX3B0ci50eXBlYCB0byBiZSBkaWZmZXJlbnQgd2hlbiBib3RoIHNsb3RzIGFyZSBtYXJrZWQgYXMgYFNUQUNLX0lURVJgPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBTVEFDS19JVEVSYCBpcyBzZXQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIHBvdGVudGlhbCBlZGdlIGNhc2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1RBQ0tfSVRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbG9nLmM9NDk3PXN0YXRpYyBjaGFyIHNsb3RfdHlwZV9jaGFyW10gPSB7XG4tLVxua2VybmVsL2JwZi9sb2cuYy01MDItXHRbU1RBQ0tfRFlOUFRSXVx0PSAmIzM5O2QmIzM5Oyxcbmtlcm5lbC9icGYvbG9nLmM6NTAzOlx0W1NUQUNLX0lURVJdXHQ9ICYjMzk7aSYjMzk7LFxua2VybmVsL2JwZi9sb2cuYy01MDQtXHRbU1RBQ0tfSVJRX0ZMQUddID0gJiMzOTtmJiMzOTssXG4tLVxua2VybmVsL2JwZi9sb2cuYz03MTE9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi9sb2cuYy03NzQtXHRcdFx0YnJlYWs7XG5rZXJuZWwvYnBmL2xvZy5jOjc3NTpcdFx0Y2FzZSBTVEFDS19JVEVSOlxua2VybmVsL2JwZi9sb2cuYy03NzYtXHRcdFx0Lyogb25seSBtYWluIHNsb3QgaGFzIGlkIHNldDsgc2tpcCBvdGhlcnMgKi9cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM5OD1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQzMy1cdFx0XHQgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDM0Olx0XHRcdGlmIChzdHlwZSA9PSBTVEFDS19EWU5QVFIgfHwgc3R5cGUgPT0gU1RBQ0tfSVRFUiB8fFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzUtXHRcdFx0ICAgIHN0eXBlID09IFNUQUNLX0lSUV9GTEFHKVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NzAyPXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgwNS1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODA2Olx0XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgwNy1cdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTkwPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTk4LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGF0ZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExOTk6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjAwLVx0XHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkxNT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDktXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTUwOlx0XHRcdHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NTEtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Nj1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDA2Olx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSA9PSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDctXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTM9c3RhdGljIGludCBpc19pdGVyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzctXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzODpcdFx0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbal0gIT0gU1RBQ0tfSVRFUilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM5LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNTU9c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwLSAqICAgLSBkeW5wdHIgc3RhdGUgKFNUQUNLX0RZTlBUUik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MTogKiAgIC0gaXRlciBzdGF0ZSAoU1RBQ0tfSVRFUikuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4Mi0gKiAgIC0gaXJxIGZsYWcgc3RhdGUgKFNUQUNLX0lSUV9GTEFHKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg0PXN0YXRpYyBib29sIGlzX3N0YWNrX3Nsb3Rfc3BlY2lhbChjb25zdCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MC1cdGNhc2UgU1RBQ0tfRFlOUFRSOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE6XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Mi1cdGNhc2UgU1RBQ0tfSVJRX0ZMQUc6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwNTE9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1NS1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA1NjpcdHUzMiBjbGVhcl9tYXNrID0gKDEgXHUwMDNjXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19JVEVSKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXImIzM5O3MgUkNVIFByb3RlY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBzb21ldGhpbmcgdGhhdCYjMzk7cyBiZWVuIG5hZ2dpbmcgYXQgbWUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbG9naWMgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIG1lbW9yeSBzYWZldHkgYW5kIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVuIEJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIFJDVS1wcm90ZWN0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGl0cyBzcGVjaWZpYyBjaGVja3MgYW5kIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBpbnZhbGlkYXRlcyB0aG9zZSByZWZzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSYjMzk7bSBjdXJpb3VzIHdoYXQga2luZCBvZiBhc3N1bXB0aW9ucyB0aGUgZGVzaWduIG1ha2VzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwNTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTA1MTpcdHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG45MDUyOlx0e1xuOTA1MzpcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG45MDU0Olx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTA1NTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkwNTY6XHRcdHUzMiBjbGVhcl9tYXNrID0gKDEgXHUwMDNjXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19JVEVSKTtcbjkwNTc6XHRcbjkwNTg6XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XG45MDU5Olx0XHRcdGlmIChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1JDVSkge1xuOTA2MDpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xuOTA2MTpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG45MDYyOlx0XHRcdH1cbjkwNjM6XHRcdH0pKTtcbjkwNjQ6XHR9XG45MDY1Olx0XG45MDY2Olx0c3RhdGljIGludCByZWZfY29udmVydF9hbGxvY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZClcbjkwNjc6XHR7XG45MDY4Olx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTA2OTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkwNzA6XHRcdGludCBlcnI7XG45MDcxOlx0XG45MDcyOlx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xuOTA3MzpcdFxuOTA3NDpcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgKHtcbjkwNzU6XHRcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBpZClcbjkwNzY6XHRcdFx0XHRjb250aW51ZTtcbjkwNzc6XHRcdFx0aWYgKChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX0FMTE9DKSBcdTAwMjZcdTAwMjYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSkge1xuOTA3ODpcdFx0XHRcdHJlZy1cdTAwM2VpZCA9IDA7XG45MDc5Olx0XHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+TUVNX0FMTE9DO1xuOTA4MDpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XG45MDgxOlx0XHRcdH1cbjkwODI6XHRcdH0pKTtcbjkwODM6XHRcbjkwODQ6XHRcdHJldHVybiBlcnI7XG45MDg1Olx0fVxuOTA4NjpcdFxuOTA4NzpcdHN0YXRpYyB2b2lkIGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG45MDg4Olx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXG45MDg5Olx0e1xuOTA5MDpcdFx0aW50IGk7XG45MDkxOlx0XG45MDkyOlx0XHQvKiBhZnRlciB0aGUgY2FsbCByZWdpc3RlcnMgcjAgLSByNSB3ZXJlIHNjcmF0Y2hlZCAqL1xuOTA5MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG45MDk0Olx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XG45MDk1Olx0XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuOTA5NjpcdFx0fVxuOTA5NzpcdH1cbjkwOTg6XHRcbjkwOTk6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjkxMDA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVIFJlZmVyZW5jZSBJbnZhbGlkYXRpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2AgaXMgdG91Y2hpbmcgcmVnaXN0ZXJzIHRhZ2dlZCB3aXRoIGBNRU1fUkNVYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdyYXNwIGhvdyBpdCBkb2VzIHRoYXQuIEl0JiMzOTtzIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByZWdpc3RlcnMgaW4gdGhlIHZlcmlmaWVyIHN0YXRlIOKAkyBpbnRlcmVzdGluZy4gQW5kIGl0JiMzOTtzIGluY2x1ZGluZyBzdGFjayBzbG90cyBpZiB0aGV5IG1hdGNoIGBjbGVhcl9tYXNrYC4gQWgsIHJpZ2h0LCBgY2xlYXJfbWFza2AgY29udGFpbnMgYFNUQUNLX0lURVJgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGxvb3BpbmcgdGhyb3VnaCBgU1RBQ0tfSVRFUmAgc2xvdHMgc3BlY2lmaWNhbGx5IGFuZCBjaGVja2luZyBgcmVnLSZndDt0eXBlICZhbXA7IE1FTV9SQ1VgLgoKQnV0IHRoZW4gaXQgaGl0IG1lOiBpZiBgcmVnLSZndDt0eXBlYCBpcyBzb21ldGhpbmcgbGlrZSBgUFRSX1RPX1NUQUNLYCwgd291bGRuJiMzOTt0IHRoYXQgcG90ZW50aWFsbHkgKm5vdCogaGF2ZSBgTUVNX1JDVWAgc2V0PyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludCwgYW5kIGl0IHN1Z2dlc3RzIGEgcG9zc2libGUgc3VidGxlIGJ1ZyBvciBhIG1pc3NlZCBjb25uZWN0aW9uIGluIG15IHVuZGVyc3RhbmRpbmcuCgpJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IGByZWctJmd0O3R5cGVgICpzaG91bGQqIGJlIHdoZW4gYSBzbG90IGlzIG1hcmtlZCBgU1RBQ0tfSVRFUmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbGluY2hwaW4uIEJldHRlciBjaGVjayB0aGUgY29kZSBmb3IgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBsaWVzLiBUaGlzIGVudGlyZSBsb2dpYyBoaW5nZXMgb24gaG93IHRoYXQgZnVuY3Rpb24gc2V0cyB1cCB0aGUgdHlwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNTpcdHN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gOTE2Olx0XHRcdFx0XHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIDkxNzpcdFx0XHRcdFx0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBpbnNuX2lkeCxcbiA5MTg6XHRcdFx0XHRcdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsIGludCBucl9zbG90cylcbiA5MTk6XHR7XG4gOTIwOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuIDkyMTpcdFx0aW50IHNwaSwgaSwgaiwgaWQ7XG4gOTIyOlx0XG4gOTIzOlx0XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbiA5MjQ6XHRcdGlmIChzcGkgXHUwMDNjIDApXG4gOTI1Olx0XHRcdHJldHVybiBzcGk7XG4gOTI2Olx0XG4gOTI3Olx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuIDkyODpcdFx0aWYgKGlkIFx1MDAzYyAwKVxuIDkyOTpcdFx0XHRyZXR1cm4gaWQ7XG4gOTMwOlx0XG4gOTMxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9zbG90czsgaSYjNDM7JiM0MzspIHtcbiA5MzI6XHRcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaSAtIGldO1xuIDkzMzpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuIDkzNDpcdFxuIDkzNTpcdFx0XHRfX21hcmtfcmVnX2tub3duX3plcm8oc3QpO1xuIDkzNjpcdFx0XHRzdC1cdTAwM2V0eXBlID0gUFRSX1RPX1NUQUNLOyAvKiB3ZSBkb24mIzM5O3QgaGF2ZSBkZWRpY2F0ZWQgcmVnIHR5cGUgKi9cbiA5Mzc6XHRcdFx0aWYgKGlzX2tmdW5jX3JjdV9wcm90ZWN0ZWQobWV0YSkpIHtcbiA5Mzg6XHRcdFx0XHRpZiAoaW5fcmN1X2NzKGVudikpXG4gOTM5Olx0XHRcdFx0XHRzdC1cdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XG4gOTQwOlx0XHRcdFx0ZWxzZVxuIDk0MTpcdFx0XHRcdFx0c3QtXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuIDk0MjpcdFx0XHR9XG4gOTQzOlx0XHRcdHN0LVx1MDAzZWlkID0gaSA9PSAwID8gaWQgOiAwO1xuIDk0NDpcdFx0XHRzdC1cdTAwM2VpdGVyLmJ0ZiA9IGJ0ZjtcbiA5NDU6XHRcdFx0c3QtXHUwMDNlaXRlci5idGZfaWQgPSBidGZfaWQ7XG4gOTQ2Olx0XHRcdHN0LVx1MDAzZWl0ZXIuc3RhdGUgPSBCUEZfSVRFUl9TVEFURV9BQ1RJVkU7XG4gOTQ3Olx0XHRcdHN0LVx1MDAzZWl0ZXIuZGVwdGggPSAwO1xuIDk0ODpcdFxuIDk0OTpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxuIDk1MDpcdFx0XHRcdHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcbiA5NTE6XHRcbiA5NTI6XHRcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xuIDk1MzpcdFx0fVxuIDk1NDpcdFxuIDk1NTpcdFx0cmV0dXJuIDA7XG4gOTU2Olx0fVxuIDk1NzpcdFxuIDk1ODpcdHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA5NTk6XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbiA5NjA6XHR7XG4gOTYxOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuIDk2MjpcdFx0aW50IHNwaSwgaSwgajtcbiA5NjM6XHRcbiA5NjQ6XHRcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVmVyaWZpZXIgQnVnOiBJbmNvbnNpc3RlbnQgU3RhdGUgTWVyZ2luZyB3aXRoIFJDVS1Qcm90ZWN0ZWQgSXRlcmF0b3JzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGBzdC0mZ3Q7dHlwZWAgZmllbGQsIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgYSBzdGFjayBzbG90LCBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiBgUFRSX1RPX1NUQUNLYCwgYE1FTV9SQ1VgLCBhbmQgYFBUUl9VTlRSVVNURURgLiAgU3BlY2lmaWNhbGx5LCBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLCB0aGUgdHlwZSBjYW4gYmUgYFBUUl9UT19TVEFDS2AsIGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCwgb3IgYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyBpbiBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgc3RhdGUgbWVyZ2luZywgc3BlY2lmaWNhbGx5IHdpdGggUkNVLXByb3RlY3RlZCBpdGVyYXRvcnMuCgpUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgaW4gdGhlIGBzdGFja3NhZmVgIGZ1bmN0aW9uLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgaWYgdHdvIHN0YXRlcyBhcmUgZXF1aXZhbGVudCBkdXJpbmcgc3RhdGUgbWVyZ2luZy4gIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGBzdGFja3NhZmVgICp3YXNuJiMzOTt0KiBjaGVja2luZyBgb2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlYCBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBUaGlzIG1lYW5zIHRoYXQgaWYgb25lIHN0YXRlIGhhZCBgTUVNX1JDVWAgYW5kIHRoZSBvdGhlciBoYWQgYFBUUl9VTlRSVVNURURgLCB0aGV5IHdvdWxkIGJlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgZXF1aXZhbGVudCEgVGhpcyBpcyBhIGNsYXNzaWMgdmVyaWZpZXIgYnVnLgoKVGhlIHRlc3QgY2FzZSBpbiB0aGUgcGF0Y2gsIGBpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nYCwgaWxsdXN0cmF0ZXMgdGhpcyBwZXJmZWN0bHkuICBJdCBzZXRzIHVwIGEgc2NlbmFyaW8gd2hlcmUgYW4gaXRlcmF0b3IgaXMgY3JlYXRlZCB3aXRoaW4gYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNvZGUgdGhlbiBicmFuY2hlcywgd2l0aCBvbmUgcGF0aCAqa2VlcGluZyogdGhlIFJDVSBsb2NrIGFuZCB0aGUgb3RoZXIgKnJlbGVhc2luZyogYW5kICpyZS1hY3F1aXJpbmcqIGl0LCB0aHVzIGNyZWF0aW5nIGFuIHVucHJvdGVjdGVkIHdpbmRvdy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoZSBzdWJzZXF1ZW50IG1lcmdlLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgdmVyaWZpZXIsIGVuY291bnRlcmluZyB0d28gYFNUQUNLX0lURVJgIHNsb3RzIHdpdGggdGhlIHNhbWUgQlRGIElELCBldGMuLCB3b3VsZCBpbmNvcnJlY3RseSBkZWVtIHRoZSBzdGF0ZXMgZXF1aXZhbGVudCwgZGVzcGl0ZSB0aGUgZGlmZmVyZW5jZSBpbiBSQ1UgcHJvdGVjdGlvbiAoYE1FTV9SQ1VgIHZzLiBgUFRSX1VOVFJVU1RFRGApLgoKYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCBpcyBrZXkuICBJdCBjaGFuZ2VzIGBNRU1fUkNVYCB0byBgUFRSX1VOVFJVU1RFRGAgd2hlbiB0aGUgUkNVIHByb3RlY3Rpb24gaXMgbG9zdC4gIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHByZXZlbnRzIHRoZSB2ZXJpZmllciBmcm9tIG1lcmdpbmcgYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgKmlzKiBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSBpdCAqaXMgbm90KiAoYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgKS4KCk5vdywgaWYgdGhlIHZlcmlmaWVyICpkaWQqIG1lcmdlIHRoZXNlIHN0YXRlcywgaXQgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgaXNzdWUuIGBicGZfaXRlcl90YXNrX25leHRgLCBjcnVjaWFsbHksIHJlcXVpcmVzIGFuICpSQ1UtcHJvdGVjdGVkKiBpdGVyYXRvci4gQnkgaW5jb3JyZWN0bHkgbWVyZ2luZywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiBpdGVyYXRvciB0aGF0JiMzOTtzIG5vIGxvbmdlciBSQ1UtcHJvdGVjdGVkLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgYSBrZXJuZWwgbWVtb3J5IHNhZmV0eSBidWcsIHdoZW4gYGJwZl9pdGVyX3Rhc2tfbmV4dGAgdHJpZXMgdG8gYWNjZXNzIHRoZSB0YXNrIHN0cnVjdCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgcGFzc2VkLiBUaGUgdGVzdCBjYXNlIGV4cGxvaXRzIHRoaXMgd2l0aCB0aGUgdW5wcm90ZWN0ZWQgd2luZG93LCBhbGxvd2luZyB0aGUgaXRlcmF0b3IgdG8gYmVjb21lIGBQVFJfVU5UUlVTVEVEYC4KClRoaXMgdXNlLWFmdGVyLWZyZWUgaXMsIHRoYW5rZnVsbHksIHNvbWV0aGluZyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBjYW4gY2F0Y2guICBBcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIGBzdGFja3NhZmVgIGRvZXMgY2hlY2sgdGhlIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCB0byBiZSBgU1RBQ0tfSU5WQUxJRGAsIHNvIGl0IGRvZXNuJiMzOTt0IGFsbG93IGNvbXBhcmluZyB1bnJlbGF0ZWQgZGF0YS4gIFRoZSBwYXRjaCBqdXN0IGludHJvZHVjZXMgYSBuZWNlc3NhcnkgY2hlY2sgb2YgYG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZWAgZm9yIHRoZSBgU1RBQ0tfSVRFUmAgdHlwZSBkdXJpbmcgYHN0YWNrc2FmZWAuIFRoaXMgZW5zdXJlcyBjb3JyZWN0IHN0YXRlIG1lcmdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMjpcdHN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbiA3MDM6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxuIDcwNDpcdFx0XHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuIDcwNTpcdHtcbiA3MDY6XHRcdGludCBpLCBzcGk7XG4gNzA3Olx0XG4gNzA4Olx0XHQvKiB3YWxrIHNsb3RzIG9mIHRoZSBleHBsb3JlZCBzdGFjayBhbmQgaWdub3JlIGFueSBhZGRpdGlvbmFsXG4gNzA5Olx0XHQgKiBzbG90cyBpbiB0aGUgY3VycmVudCBzdGFjaywgc2luY2UgZXhwbG9yZWQoc2FmZSkgc3RhdGVcbiA3MTA6XHRcdCAqIGRpZG4mIzM5O3QgdXNlIHRoZW1cbiA3MTE6XHRcdCAqL1xuIDcxMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2xkLVx1MDAzZWFsbG9jYXRlZF9zdGFjazsgaSYjNDM7JiM0MzspIHtcbiA3MTM6XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsICpjdXJfcmVnO1xuIDcxNDpcdFx0XHRpbnQgaW0gPSBpICUgQlBGX1JFR19TSVpFO1xuIDcxNTpcdFxuIDcxNjpcdFx0XHRzcGkgPSBpIC8gQlBGX1JFR19TSVpFO1xuIDcxNzpcdFxuIDcxODpcdFx0XHRpZiAoZXhhY3QgPT0gRVhBQ1QpIHtcbiA3MTk6XHRcdFx0XHR1OCBvbGRfdHlwZSA9IG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXTtcbiA3MjA6XHRcdFx0XHR1OCBjdXJfdHlwZSA9IGkgXHUwMDNjIGN1ci1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgP1xuIDcyMTpcdFx0XHRcdFx0ICAgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdIDogU1RBQ0tfSU5WQUxJRDtcbiA3MjI6XHRcbiA3MjM6XHRcdFx0XHQvKiBTVEFDS19JTlZBTElEIGFuZCBTVEFDS19QT0lTT04gYXJlIGVxdWl2YWxlbnQgZm9yIHBydW5pbmcgKi9cbiA3MjQ6XHRcdFx0XHRpZiAob2xkX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxuIDcyNTpcdFx0XHRcdFx0b2xkX3R5cGUgPSBTVEFDS19JTlZBTElEO1xuIDcyNjpcdFx0XHRcdGlmIChjdXJfdHlwZSA9PSBTVEFDS19QT0lTT04pXG4gNzI3Olx0XHRcdFx0XHRjdXJfdHlwZSA9IFNUQUNLX0lOVkFMSUQ7XG4gNzI4Olx0XHRcdFx0aWYgKGkgXHUwMDNlPSBjdXItXHUwMDNlYWxsb2NhdGVkX3N0YWNrIHx8IG9sZF90eXBlICE9IGN1cl90eXBlKVxuIDcyOTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczMDpcdFx0XHR9XG4gNzMxOlx0XG4gNzMyOlx0XHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gPT0gU1RBQ0tfSU5WQUxJRCB8fFxuIDczMzpcdFx0XHQgICAgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1BPSVNPTilcbiA3MzQ6XHRcdFx0XHRjb250aW51ZTtcbiA3MzU6XHRcbiA3MzY6XHRcdFx0aWYgKGVudi1cdTAwM2VhbGxvd191bmluaXRfc3RhY2sgXHUwMDI2XHUwMDI2XG4gNzM3Olx0XHRcdCAgICBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gPT0gU1RBQ0tfTUlTQylcbiA3Mzg6XHRcdFx0XHRjb250aW51ZTtcbiA3Mzk6XHRcbiA3NDA6XHRcdFx0LyogZXhwbG9yZWQgc3RhY2sgaGFzIG1vcmUgcG9wdWxhdGVkIHNsb3RzIHRoYW4gY3VycmVudCBzdGFja1xuIDc0MTpcdFx0XHQgKiBhbmQgdGhlc2Ugc2xvdHMgd2VyZSB1c2VkXG4gNzQyOlx0XHRcdCAqL1xuIDc0MzpcdFx0XHRpZiAoaSBcdTAwM2U9IGN1ci1cdTAwM2VhbGxvY2F0ZWRfc3RhY2spXG4gNzQ0Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc0NTpcdFxuIDc0NjpcdFx0XHQvKlxuIDc0NzpcdFx0XHQgKiA2NCBhbmQgMzItYml0IHNjYWxhciBzcGlsbHMgdnMgTUlTQy9JTlZBTElEIHNsb3RzIGFuZCB2aWNlIHZlcnNhLlxuIDc0ODpcdFx0XHQgKiBMb2FkIGZyb20gTUlTQy9JTlZBTElEIHNsb3RzIHByb2R1Y2VzIHVuYm91bmQgc2NhbGFyLlxuIDc0OTpcdFx0XHQgKiBDb25zdHJ1Y3QgYSBmYWtlIHJlZ2lzdGVyIGZvciBzdWNoIHN0YWNrIGFuZCBjYWxsXG4gNzUwOlx0XHRcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXG4gNzUxOlx0XHRcdCAqL1xuIDc1MjpcdFx0XHRpZiAoaW0gPT0gMCB8fCBpbSA9PSA0KSB7XG4gNzUzOlx0XHRcdFx0b2xkX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0sIGltKTtcbiA3NTQ6XHRcdFx0XHRjdXJfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xuIDc1NTpcdFx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG4gNzU2Olx0XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxuIDc1NzpcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzU4Olx0XHRcdFx0XHRpICYjNDM7PSAoaW0gPT0gMCA/IEJQRl9SRUdfU0laRSAtIDEgOiAzKTtcbiA3NTk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDc2MDpcdFx0XHRcdH1cbiA3NjE6XHRcdFx0fVxuIDc2MjpcdFxuIDc2MzpcdFx0XHQvKiBpZiBvbGQgc3RhdGUgd2FzIHNhZmUgd2l0aCBtaXNjIGRhdGEgaW4gdGhlIHN0YWNrXG4gNzY0Olx0XHRcdCAqIGl0IHdpbGwgYmUgc2FmZSB3aXRoIHplcm8taW5pdGlhbGl6ZWQgc3RhY2suXG4gNzY1Olx0XHRcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxuIDc2NjpcdFx0XHQgKi9cbiA3Njc6XHRcdFx0aWYgKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFx1MDAyNlx1MDAyNlxuIDc2ODpcdFx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1pFUk8pXG4gNzY5Olx0XHRcdFx0Y29udGludWU7XG4gNzcwOlx0XHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gIT1cbiA3NzE6XHRcdFx0ICAgIGN1ci1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSlcbiA3NzI6XHRcdFx0XHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cbiA3NzM6XHRcdFx0XHQgKiB0aGlzIHN0YWNrIHNsb3QsIGJ1dCBjdXJyZW50IGhhcyBTVEFDS19NSVNDIC1cdTAwM2VcbiA3NzQ6XHRcdFx0XHQgKiB0aGlzIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQsXG4gNzc1Olx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3NzY6XHRcdFx0XHQgKi9cbiA3Nzc6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzc4Olx0XHRcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXG4gNzc5Olx0XHRcdFx0Y29udGludWU7XG4gNzgwOlx0XHRcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xuIDc4MTpcdFx0XHRzd2l0Y2ggKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtCUEZfUkVHX1NJWkUgLSAxXSkge1xuIDc4MjpcdFx0XHRjYXNlIFNUQUNLX1NQSUxMOlxuIDc4MzpcdFx0XHRcdC8qIHdoZW4gZXhwbG9yZWQgYW5kIGN1cnJlbnQgc3RhY2sgc2xvdCBhcmUgYm90aCBzdG9yaW5nXG4gNzg0Olx0XHRcdFx0ICogc3BpbGxlZCByZWdpc3RlcnMsIGNoZWNrIHRoYXQgc3RvcmVkIHBvaW50ZXJzIHR5cGVzXG4gNzg1Olx0XHRcdFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXG4gNzg2Olx0XHRcdFx0ICogRXg6IGV4cGxvcmVkIHNhZmUgcGF0aCBjb3VsZCBoYXZlIHN0b3JlZFxuIDc4NzpcdFx0XHRcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtOH1cbiA3ODg6XHRcdFx0XHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XG4gNzg5Olx0XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC0xNn1cbiA3OTA6XHRcdFx0XHQgKiBzdWNoIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQuXG4gNzkxOlx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3OTI6XHRcdFx0XHQgKi9cbiA3OTM6XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcbiA3OTQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4gNzk1Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzk2Olx0XHRcdFx0YnJlYWs7XG4gNzk3Olx0XHRcdGNhc2UgU1RBQ0tfRFlOUFRSOlxuIDc5ODpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA3OTk6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODAwOlx0XHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlZHlucHRyLnR5cGUgIT0gY3VyX3JlZy1cdTAwM2VkeW5wdHIudHlwZSB8fFxuIDgwMTpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90ICE9IGN1cl9yZWctXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGFjayBTYWZldHkgQ2hlY2sqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgc3RhY2tzYWZlYCBjaGVjazoKCmBgYGMKCQlpZiAob2xkLSZndDtzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPQoJCSAgICBjdXItJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdKQoJCQlyZXR1cm4gZmFsc2U7CmBgYAoKUmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoZSBjaGVjayBpcyBjb21wYXJpbmcgdGhlIGBzbG90X3R5cGVgIG9mIGEgc3RhY2sgc2xvdCBiZXR3ZWVuIHR3byBzdGF0ZXMsIGBvbGRgIGFuZCBgY3VyYC4gRm9yIHRoaXMgY2hlY2sgdG8gZXZlbiBiZSByZWxldmFudCwgKmJvdGgqIGBvbGRgIGFuZCBgY3VyYCBtdXN0IGhhdmUgYFNUQUNLX0lURVJgIGFzIHRoZWlyIGBzbG90X3R5cGVgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4KCklmIGJvdGggc3RhdGVzIGhhdmUgYFNUQUNLX0lURVJgLCB0aGVuIHRoYXQgaW1wbGllcyBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCBhcmUgYm90aCBpbml0aWFsaXplZCBhcyBpdGVyYXRvcnMsIHRoYW5rcyB0byBgbWFya19zdGFja19zbG90c19pdGVyYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgc3QtJmd0O3R5cGUgPSBQVFJfVE9fU1RBQ0tgIGFuZCBhZGRpbmcgZWl0aGVyIGBNRU1fUkNVYCBvciBgUFRSX1VOVFJVU1RFRGAuIENydWNpYWxseSwgaXQgYWxzbyBpbml0aWFsaXplcyBhbGwgdGhvc2UgYGl0ZXJgIHVuaW9uIGZpZWxkczogYGJ0ZmAsIGBidGZfaWRgLCBldGMuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gaW5oZXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlIGR1cmluZyB0aGUgaW5pdGlhbCBpbml0aWFsaXphdGlvbiwgYXMgdGhlIGZpZWxkcyBhcmUgYWxsIHNldC4KClNvLCB0aGUgaXNzdWUgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcuIEl0JiMzOTtzIGZhaWxpbmcgdG8gYWNjdXJhdGVseSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYW4gUkNVLXByb3RlY3RlZCBpdGVyYXRvciBhbmQgYW4gdW50cnVzdGVkIGl0ZXJhdG9yLiBUaGlzLCBvZiBjb3Vyc2UsIGNyZWF0ZXMgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIChVQUYpIHNjZW5hcmlvLiBJZiB0aGUgdmVyaWZpZXIgbWlzdGFrZW5seSBhbGxvd3MgYW4gdW50cnVzdGVkIGl0ZXJhdG9yIHRvIGJlIHVzZWQgKmFmdGVyKiB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzLiBGb3J0dW5hdGVseSwgS0FTQU4gd291bGQgY2F0Y2ggdGhhdCwgd2hpY2ggaXMgZ29vZC4KCkJ1dCBpcyB0aGVyZSBhIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgKnJlc3VsdGluZyogZnJvbSB0aGUgbG9naWMgYnVnPwoKSWYgdGhlIHZlcmlmaWVyLCBlcnJvbmVvdXNseSwgdGhpbmtzIGFuIHVudHJ1c3RlZCBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkLCB0aGF0IGFsbG93cyBgYnBmX2l0ZXJfdGFza19uZXh0YCB0byBiZSBjYWxsZWQuIEFuZCB0aGlzIGFjY2Vzc2VzIHRoZSB0YXNrIHN0cnVjdC4gSWYgdGhhdCBgdGFza2Agc3RydWN0IGlzIGZyZWVkLCBpdCYjMzk7cyBhIFVBRi4gQnV0IFVBRnMgYXJlbiYjMzk7dCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGxpa2UgdmFyaWFibGVzIG9uIHRoZSBzdGFjayBub3QgaW5pdGlhbGl6ZWQsIG9yIGhlYXAgYWxsb2NhdGlvbnMgbm90IHplcm9lZC4KCkFoLCBidXQgd2FpdC4uLiBjb3VsZCBgb2xkX3JlZy0mZ3Q7dHlwZWAgYmUgKmNvbXBsZXRlbHkqIGRpZmZlcmVudCBpZiB0aGUgc3RhY2sgc2xvdCB3YXMgb3ZlcndyaXR0ZW4/IElmIHdlIGhhdmUgYSBgU1RBQ0tfSVRFUmAgc2xvdCwgYW5kIHNvbWV0aGluZyAqbGF0ZXIqIHdyaXRlcyBvdmVyIGl0LCB0aGVuIHllcywgdGhlIGBzbG90X3R5cGVgIHdvdWxkIGNoYW5nZS4gVGhlIHZlcmlmaWVyIHdvdWxkIGNoYW5nZSBpdCBmcm9tIGBTVEFDS19JVEVSYC4KCkFuZCB3aGF0IGlmIGEgQlBGIHByb2dyYW0gZGlyZWN0bHkgd3JpdGVzIHRvIHRoYXQgc3RhY2sgc2xvdCBieXRlLWJ5LWJ5dGU/IElmIHRoYXQgaGFwcGVucyB0byBhIGBTVEFDS19JVEVSYCBzbG90LCB0aGUgdmVyaWZpZXIgd2lsbCAqY2hhbmdlKiBpdHMgYHNsb3RfdHlwZWAgdG8gYFNUQUNLX01JU0NgIG9yIGBTVEFDS19aRVJPYC4gSG1tLCB0aGF0IHN1Z2dlc3RzIHRoZSBjb3JlIGxpZXMgaW4gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIG92ZXJ3cml0ZXMgYW5kIGhvdyB0aGF0IGltcGFjdHMgdGhlIGNvbXBhcmlzb24uIExldCBtZSBkb3VibGUtY2hlY2sgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzODpcdFx0ICogcmVnX3VtYXgocmVnKSBjYW4mIzM5O3QgYmUgYmlnZ2VyIHRoYW4gTUFYX1BBQ0tFVF9PRkYgd2hpY2ggaXMgMHhmZmZmLFxuNDYzOTpcdFx0ICogb3RoZXJ3aXNlIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMgd291bGQgaGF2ZSByZWZ1c2VkIHRvIHNldCByYW5nZSBpbmZvXG40NjQwOlx0XHQgKiB0aGF0IF9fY2hlY2tfbWVtX2FjY2VzcyB3b3VsZCBoYXZlIHJlamVjdGVkIHRoaXMgcGt0IGFjY2Vzcy5cbjQ2NDE6XHRcdCAqIFRoZXJlZm9yZSwgXCYjMzQ7b2ZmICYjNDM7IHJlZ191bWF4KHJlZykgJiM0Mzsgc2l6ZSAtIDFcJiMzNDsgd29uJiMzOTt0IG92ZXJmbG93IHUzMi5cbjQ2NDI6XHRcdCAqL1xuNDY0MzpcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9wa3Rfb2Zmc2V0ID1cbjQ2NDQ6XHRcdFx0bWF4X3QodTMyLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3BrdF9vZmZzZXQsXG40NjQ1Olx0XHRcdCAgICAgIG9mZiAmIzQzOyByZWdfdW1heChyZWcpICYjNDM7IHNpemUgLSAxKTtcbjQ2NDY6XHRcbjQ2NDc6XHRcdHJldHVybiAwO1xuNDY0ODpcdH1cbjQ2NDk6XHRcbjQ2NTA6XHRzdGF0aWMgYm9vbCBpc192YXJfY3R4X29mZl9hbGxvd2VkKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjQ2NTE6XHR7XG40NjUyOlx0XHRyZXR1cm4gcmVzb2x2ZV9wcm9nX3R5cGUocHJvZykgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMO1xuNDY1MzpcdH1cbjQ2NTQ6XHRcbjQ2NTU6XHQvKiBjaGVjayBhY2Nlc3MgdG8gJiMzOTtzdHJ1Y3QgYnBmX2NvbnRleHQmIzM5OyBmaWVsZHMuICBTdXBwb3J0cyBmaXhlZCBvZmZzZXRzIG9ubHkgKi9cbjQ2NTY6XHRzdGF0aWMgaW50IF9fY2hlY2tfY3R4X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIGludCBvZmYsIGludCBzaXplLFxuNDY1NzpcdFx0XHRcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxuNDY1ODpcdHtcbjQ2NTk6XHRcdGlmIChlbnYtXHUwMDNlb3BzLVx1MDAzZWlzX3ZhbGlkX2FjY2VzcyBcdTAwMjZcdTAwMjZcbjQ2NjA6XHRcdCAgICBlbnYtXHUwMDNlb3BzLVx1MDAzZWlzX3ZhbGlkX2FjY2VzcyhvZmYsIHNpemUsIHQsIGVudi1cdTAwM2Vwcm9nLCBpbmZvKSkge1xuNDY2MTpcdFx0XHQvKiBBIG5vbiB6ZXJvIGluZm8uY3R4X2ZpZWxkX3NpemUgaW5kaWNhdGVzIHRoYXQgdGhpcyBmaWVsZCBpcyBhXG40NjYyOlx0XHRcdCAqIGNhbmRpZGF0ZSBmb3IgbGF0ZXIgdmVyaWZpZXIgdHJhbnNmb3JtYXRpb24gdG8gbG9hZCB0aGUgd2hvbGVcbjQ2NjM6XHRcdFx0ICogZmllbGQgYW5kIHRoZW4gYXBwbHkgYSBtYXNrIHdoZW4gYWNjZXNzZWQgd2l0aCBhIG5hcnJvd2VyXG40NjY0Olx0XHRcdCAqIGFjY2VzcyB0aGFuIGFjdHVhbCBjdHggYWNjZXNzIHNpemUuIEEgemVybyBpbmZvLmN0eF9maWVsZF9zaXplXG40NjY1Olx0XHRcdCAqIHdpbGwgb25seSBhbGxvdyBmb3Igd2hvbGUgZmllbGQgYWNjZXNzIGFuZCByZWplY3RzIGFueSBvdGhlclxuNDY2NjpcdFx0XHQgKiB0eXBlIG9mIG5hcnJvd2VyIGFjY2Vzcy5cbjQ2Njc6XHRcdFx0ICovXG40NjY4Olx0XHRcdGlmIChiYXNlX3R5cGUoaW5mby1cdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xuNDY2OTpcdFx0XHRcdGlmIChpbmZvLVx1MDAzZXJlZl9pZCBcdTAwMjZcdTAwMjZcbjQ2NzA6XHRcdFx0XHQgICAgIWZpbmRfcmVmZXJlbmNlX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIGluZm8tXHUwMDNlcmVmX2lkKSkge1xuNDY3MTpcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ludmFsaWQgYnBmX2NvbnRleHQgYWNjZXNzIG9mZj0lZC4gUmVmZXJlbmNlIG1heSBhbHJlYWR5IGJlIHJlbGVhc2VkXFxuXCYjMzQ7LFxuNDY3MjpcdFx0XHRcdFx0XHRvZmYpO1xuNDY3MzpcdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG40Njc0Olx0XHRcdFx0fVxuNDY3NTpcdFx0XHR9IGVsc2Uge1xuNDY3NjpcdFx0XHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5jdHhfZmllbGRfc2l6ZSA9IGluZm8tXHUwMDNlY3R4X2ZpZWxkX3NpemU7XG40Njc3Olx0XHRcdH1cbjQ2Nzg6XHRcdFx0LyogcmVtZW1iZXIgdGhlIG9mZnNldCBvZiBsYXN0IGJ5dGUgYWNjZXNzZWQgaW4gY3R4ICovXG40Njc5Olx0XHRcdGlmIChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X2N0eF9vZmZzZXQgXHUwMDNjIG9mZiAmIzQzOyBzaXplKVxuNDY4MDpcdFx0XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VtYXhfY3R4X29mZnNldCA9IG9mZiAmIzQzOyBzaXplO1xuNDY4MTpcdFx0XHRyZXR1cm4gMDtcbjQ2ODI6XHRcdH1cbjQ2ODM6XHRcbjQ2ODQ6XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtpbnZhbGlkIGJwZl9jb250ZXh0IGFjY2VzcyBvZmY9JWQgc2l6ZT0lZFxcblwmIzM0Oywgb2ZmLCBzaXplKTtcbjQ2ODU6XHRcdHJldHVybiAtRUFDQ0VTO1xuNDY4NjpcdH1cbjQ2ODc6XHRcbjQ2ODg6XHRzdGF0aWMgaW50IGNoZWNrX2N0eF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuNDY4OTpcdFx0XHRcdCAgICBpbnQgb2ZmLCBpbnQgYWNjZXNzX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsXG40NjkwOlx0XHRcdFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxuNDY5MTpcdHtcbjQ2OTI6XHRcdC8qXG40NjkzOlx0XHQgKiBQcm9ncmFtIHR5cGVzIHRoYXQgZG9uJiMzOTt0IHJld3JpdGUgY3R4IGFjY2Vzc2VzIGNhbiBzYWZlbHlcbjQ2OTQ6XHRcdCAqIGRlcmVmZXJlbmNlIGN0eCBwb2ludGVycyB3aXRoIGZpeGVkIG9mZnNldHMuXG40Njk1Olx0XHQgKi9cbjQ2OTY6XHRcdGJvb2wgdmFyX29mZl9vayA9IGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoZW52LVx1MDAzZXByb2cpO1xuNDY5NzpcdFx0Ym9vbCBmaXhlZF9vZmZfb2sgPSAhZW52LVx1MDAzZW9wcy1cdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XG40Njk4Olx0XHRpbnQgZXJyO1xuNDY5OTpcdFxuNDcwMDpcdFx0aWYgKHZhcl9vZmZfb2spXG40NzAxOlx0XHRcdGVyciA9IGNoZWNrX21lbV9yZWdpb25fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBhY2Nlc3Nfc2l6ZSwgVTE2X01BWCwgZmFsc2UpO1xuNDcwMjpcdFx0ZWxzZVxuNDcwMzpcdFx0XHRlcnIgPSBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTtcbjQ3MDQ6XHRcdGlmIChlcnIpXG40NzA1Olx0XHRcdHJldHVybiBlcnI7XG40NzA2Olx0XHRvZmYgJiM0Mzs9IHJlZ191bWF4KHJlZyk7XG40NzA3Olx0XG40NzA4Olx0XHRlcnIgPSBfX2NoZWNrX2N0eF9hY2Nlc3MoZW52LCBpbnNuX2lkeCwgb2ZmLCBhY2Nlc3Nfc2l6ZSwgdCwgaW5mbyk7XG40NzA5Olx0XHRpZiAoZXJyKVxuNDcxMDpcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsIFwmIzM0OzsgXCYjMzQ7KTtcbjQ3MTE6XHRcdHJldHVybiBlcnI7XG40NzEyOlx0fVxuNDcxMzpcdFxuNDcxNDpcdHN0YXRpYyBpbnQgY2hlY2tfZmxvd19rZXlzX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuNDcxNTpcdFx0XHRcdFx0ICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuNDcxNjpcdFx0XHRcdFx0ICBpbnQgb2ZmLCBpbnQgc2l6ZSlcbjQ3MTc6XHR7XG40NzE4Olx0XHQvKiBPbmx5IGEgY29uc3RhbnQgb2Zmc2V0IGlzIGFsbG93ZWQgaGVyZTsgZm9sZCBpdCBpbnRvIG9mZi4gKi9cbjQ3MTk6XHRcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbjQ3MjA6XHRcdFx0Y2hhciB0bl9idWZbNDhdO1xuNDcyMTpcdFxuNDcyMjpcdFx0XHR0bnVtX3N0cm4odG5fYnVmLCBzaXplb2YodG5fYnVmKSwgcmVnLVx1MDAzZXZhcl9vZmYpO1xuNDcyMzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaW52YWxpZCB2YXJpYWJsZSBvZmZzZXQgdG8gZmxvdyBrZXlzOiBvZmY9JWQsIHZhcl9vZmY9JXNcXG5cJiMzNDssXG40NzI0Olx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBvZmYsIHRuX2J1Zik7XG40NzI1Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNDcyNjpcdFx0fVxuNDcyNzpcdFx0b2ZmICYjNDM7PSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbjQ3Mjg6XHRcbjQ3Mjk6XHRcdGlmIChzaXplIFx1MDAzYyAwIHx8IG9mZiBcdTAwM2MgMCB8fFxuNDczMDpcdFx0ICAgICh1NjQpb2ZmICYjNDM7IHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpIHtcbjQ3MzE6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ludmFsaWQgYWNjZXNzIHRvIGZsb3cga2V5cyBvZmY9JWQgc2l6ZT0lZFxcblwmIzM0OyxcbjQ3MzI6XHRcdFx0XHRvZmYsIHNpemUpO1xuNDczMzpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjQ3MzQ6XHRcdH1cbjQ3MzU6XHRcdHJldHVybiAwO1xuNDczNjpcdH1cbjQ3Mzc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBtZW50YWxseSByZWNvbnN0cnVjdCBpdHMgcHVycG9zZSBhbmQgd2hhdCBpdCYjMzk7cyBndWFyZGluZyBhZ2FpbnN0LiBGcm9tIHRoZSBuYW1lIGFsb25lLCBpdCYjMzk7cyBjbGVhcmx5IHJlbGF0ZWQgdG8gc3RhY2sgd3JpdGVzLCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIHdoZW4gY29uc2lkZXJpbmcgc2VjdXJpdHksIGVzcGVjaWFsbHkgaW4gbWVtb3J5LW1hbmFnZWQgbGFuZ3VhZ2VzIChvciBpbiBjb250ZXh0cyB3aGVyZSB0aGF0JiMzOTtzIGFuIGlzc3VlKS4gVGhlICYjMzQ7Zml4ZWQgb2Zmc2V0JiMzNDsgcGFydCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcsIGFzIGl0IGhpbnRzIGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgc2l6ZSBhbmQgYm91bmRzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBlbmZvcmNpbmcsIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHNpemUgY2hlY2sgaXQgZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgJiMzNDtmaXhlZCBvZmZzZXQmIzM0OyBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuIElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIGNoZWNrcz8gV2hhdCBhc3N1bXB0aW9ucyBkb2VzIGl0IG1ha2UgYWJvdXQgdGhlIHN0YWNrIGxheW91dD8gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlcmFjdCB3aXRoIGFueSBwcmlvciBidWZmZXIgYWxsb2NhdGlvbnMuIEnigJltIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIGF0dGFjayB2ZWN0b3JzIG5vdyDigJMgaG93IGFuIGF0dGFja2VyIG1pZ2h0IGF0dGVtcHQgdG8gZXhwbG9pdCBhIHBvdGVudGlhbCBmbGF3LCBsaWtlIG1hbmlwdWxhdGluZyB0aGUgb2Zmc2V0IG9yIGJ5cGFzc2luZyB0aGUgY2hlY2suIElzIHRoZSBmaXhlZCBvZmZzZXQgdnVsbmVyYWJsZSB0byBhIHJhY2UgY29uZGl0aW9uPyBJIG11c3QgY29uc2lkZXIgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzg0PXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzk4LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMzOTk6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDAwLVx0XHRcdFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJiMzOTtyZSB3cml0aW5nIHRvICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5MjU9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5NzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzk3MTovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5NzItICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzk4MD1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5ODgtXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzk4OTpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTkwLVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDk4MT1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTAxMC1cdFx0cG9pbnRlcl9kZXNjID0gXCYjMzQ7c3RhY2sgXCYjMzQ7O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMTE6XHRcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMTItXHRcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXImIzM5O3MgU3RhY2sgV3JpdGUgQ2hlY2sqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpc3NlY3QgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBtb3JlIGFjY3VyYXRlbHksIHdoZXJlIHdlIHByZXZlbnQgdGhlIG1hZ2ljIGZyb20gZ29pbmcgaGF5d2lyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhhdCBCUEYgcHJvZ3JhbXMgYXJlIHdyaXRpbmcgdG8gdGhlIHN0YWNrIGluIGEgc2FmZSBhbmQgcHJlZGljdGFibGUgbWFubmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpeGVkIG9mZnNldHMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoaXMgZnVuY3Rpb24gYWltcyB0byBtaXRpZ2F0ZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgYXBwcm9hY2hlZCB0aGlzIGNyaXRpY2FsIGFzcGVjdCBvZiBCUEYgc2VjdXJpdHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzb2xpZCBkZWZlbnNlIGluIHBsYWNlLCBob3BlZnVsbHkgd2VsbC1vcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLCBnaXZlbiBob3cgZnJlcXVlbnRseSB0aGlzIG11c3QgZ2V0IGNhbGxlZCBkdXJpbmcgcHJvZ3JhbSB2ZXJpZmljYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjaGVja3Mgb24gdGhlIG9mZnNldHMsIHRoZSBzaXplIGNoZWNrcywgYW5kIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgb3ZlcmxhcCBpc3N1ZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBpbm5lciB3b3JraW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzk5Olx0c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjM0MDA6XHRcdFx0XHRcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSYjMzk7cmUgd3JpdGluZyB0byAqL1xuMzQwMTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG4zNDAyOlx0XHRcdFx0XHQgICAgICAgaW50IG9mZiwgaW50IHNpemUsIGludCB2YWx1ZV9yZWdubyxcbjM0MDM6XHRcdFx0XHRcdCAgICAgICBpbnQgaW5zbl9pZHgpXG4zNDA0Olx0e1xuMzQwNTpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXI7IC8qIHN0YXRlIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uICovXG4zNDA2Olx0XHRpbnQgaSwgc2xvdCA9IC1vZmYgLSAxLCBzcGkgPSBzbG90IC8gQlBGX1JFR19TSVpFLCBlcnI7XG4zNDA3Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcdTAwMjZlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbaW5zbl9pZHhdO1xuMzQwODpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IE5VTEw7XG4zNDA5Olx0XHRpbnQgaW5zbl9mbGFncyA9IElOU05fRl9TVEFDS19BQ0NFU1M7XG4zNDEwOlx0XHRpbnQgaGlzdF9zcGkgPSBzcGksIGhpc3RfZnJhbWUgPSBzdGF0ZS1cdTAwM2VmcmFtZW5vO1xuMzQxMTpcdFxuMzQxMjpcdFx0LyogY2FsbGVyIGNoZWNrZWQgdGhhdCBvZmYgJSBzaXplID09IDAgYW5kIC1NQVhfQlBGX1NUQUNLIFx1MDAzYz0gb2ZmIFx1MDAzYyAwLFxuMzQxMzpcdFx0ICogc28gaXQmIzM5O3MgYWxpZ25lZCBhY2Nlc3MgYW5kIFtvZmYsIG9mZiAmIzQzOyBzaXplKSBhcmUgd2l0aGluIHN0YWNrIGxpbWl0c1xuMzQxNDpcdFx0ICovXG4zNDE1Olx0XHRpZiAoIWVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MgXHUwMDI2XHUwMDI2XG4zNDE2Olx0XHQgICAgYnBmX2lzX3NwaWxsZWRfcmVnKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pIFx1MDAyNlx1MDAyNlxuMzQxNzpcdFx0ICAgICFicGZfaXNfc3BpbGxlZF9zY2FsYXJfcmVnKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pIFx1MDAyNlx1MDAyNlxuMzQxODpcdFx0ICAgIHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XG4zNDE5Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDthdHRlbXB0IHRvIGNvcnJ1cHQgc3BpbGxlZCBwb2ludGVyIG9uIHN0YWNrXFxuXCYjMzQ7KTtcbjM0MjA6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4zNDIxOlx0XHR9XG4zNDIyOlx0XG4zNDIzOlx0XHRjdXIgPSBlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWZyYW1lW2Vudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlY3VyZnJhbWVdO1xuMzQyNDpcdFx0aWYgKHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbjM0MjU6XHRcdFx0cmVnID0gXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbdmFsdWVfcmVnbm9dO1xuMzQyNjpcdFx0aWYgKCFlbnYtXHUwMDNlYnlwYXNzX3NwZWNfdjQpIHtcbjM0Mjc6XHRcdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbjM0Mjg6XHRcbjM0Mjk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjM0MzA6XHRcdFx0XHR1OCB0eXBlID0gc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbKHNsb3QgLSBpKSAlXG4zNDMxOlx0XHRcdFx0XHRcdFx0XHQgICAgICBCUEZfUkVHX1NJWkVdO1xuMzQzMjpcdFxuMzQzMzpcdFx0XHRcdGlmICh0eXBlICE9IFNUQUNLX01JU0MgXHUwMDI2XHUwMDI2IHR5cGUgIT0gU1RBQ0tfWkVSTykge1xuMzQzNDpcdFx0XHRcdFx0c2FuaXRpemUgPSB0cnVlO1xuMzQzNTpcdFx0XHRcdFx0YnJlYWs7XG4zNDM2Olx0XHRcdFx0fVxuMzQzNzpcdFx0XHR9XG4zNDM4Olx0XG4zNDM5Olx0XHRcdGlmIChzYW5pdGl6ZSlcbjM0NDA6XHRcdFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9zcGVjX3Jlc3VsdCA9IHRydWU7XG4zNDQxOlx0XHR9XG4zNDQyOlx0XG4zNDQzOlx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG4zNDQ0Olx0XHRpZiAoZXJyKVxuMzQ0NTpcdFx0XHRyZXR1cm4gZXJyO1xuMzQ0NjpcdFxuMzQ0NzpcdFx0Y2hlY2tfZmFzdGNhbGxfc3RhY2tfY29udHJhY3QoZW52LCBzdGF0ZSwgaW5zbl9pZHgsIG9mZik7XG4zNDQ4Olx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbjM0NDk6XHRcdGlmIChyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbjM0NTA6XHRcdFx0Ym9vbCByZWdfdmFsdWVfZml0cztcbjM0NTE6XHRcbjM0NTI6XHRcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbjM0NTM6XHRcdFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xuMzQ1NDpcdFx0XHRpZiAocmVnX3ZhbHVlX2ZpdHMpXG4zNDU1Olx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbjM0NTY6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4zNDU3Olx0XHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbjM0NTg6XHRcdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbjM0NTk6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbjM0NjA6XHRcdH0gZWxzZSBpZiAoIXJlZyBcdTAwMjZcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNlxuMzQ2MTpcdFx0XHQgICBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbjM0NjI6XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcdTAwMjZlbnYtXHUwMDNlZmFrZV9yZWdbMF07XG4zNDYzOlx0XG4zNDY0Olx0XHRcdG1lbXNldCh0bXBfcmVnLCAwLCBzaXplb2YoKnRtcF9yZWcpKTtcbjM0NjU6XHRcdFx0X19tYXJrX3JlZ19rbm93bih0bXBfcmVnLCBpbnNuLVx1MDAzZWltbSk7XG4zNDY2Olx0XHRcdHRtcF9yZWctXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcbjM0Njc6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpO1xuMzQ2ODpcdFx0fSBlbHNlIGlmIChyZWcgXHUwMDI2XHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSkpIHtcbjM0Njk6XHRcdFx0LyogcmVnaXN0ZXIgY29udGFpbmluZyBwb2ludGVyIGlzIGJlaW5nIHNwaWxsZWQgaW50byBzdGFjayAqL1xuMzQ3MDpcdFx0XHRpZiAoc2l6ZSAhPSBCUEZfUkVHX1NJWkUpIHtcbjM0NzE6XHRcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsIFwmIzM0OzsgXCYjMzQ7KTtcbjM0NzI6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7aW52YWxpZCBzaXplIG9mIHJlZ2lzdGVyIHNwaWxsXFxuXCYjMzQ7KTtcbjM0NzM6XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjM0NzQ6XHRcdFx0fVxuMzQ3NTpcdFx0XHRpZiAoc3RhdGUgIT0gY3VyIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fU1RBQ0spIHtcbjM0NzY6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHNwaWxsIHBvaW50ZXJzIHRvIHN0YWNrIGludG8gc3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxlclxcblwmIzM0Oyk7XG4zNDc3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNDc4Olx0XHRcdH1cbjM0Nzk6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4zNDgwOlx0XHR9IGVsc2Uge1xuMzQ4MTpcdFx0XHR1OCB0eXBlID0gU1RBQ0tfTUlTQztcbjM0ODI6XHRcbjM0ODM6XHRcdFx0c2NydWJfc3BlY2lhbF9zbG90KHN0YXRlLCBzcGkpO1xuMzQ4NDpcdFxuMzQ4NTpcdFx0XHQvKiB3aGVuIHdlIHplcm8gaW5pdGlhbGl6ZSBzdGFjayBzbG90cyBtYXJrIHRoZW0gYXMgc3VjaCAqL1xuMzQ4NjpcdFx0XHRpZiAoKHJlZyBcdTAwMjZcdTAwMjYgYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSkgfHxcbjM0ODc6XHRcdFx0ICAgICghcmVnIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAwKSkge1xuMzQ4ODpcdFx0XHRcdC8qIFNUQUNLX1pFUk8gY2FzZSBoYXBwZW5lZCBiZWNhdXNlIHJlZ2lzdGVyIHNwaWxsXG4zNDg5Olx0XHRcdFx0ICogd2FzbiYjMzk7dCBwcm9wZXJseSBhbGlnbmVkIGF0IHRoZSBzdGFjayBzbG90IGJvdW5kYXJ5LFxuMzQ5MDpcdFx0XHRcdCAqIHNvIGl0JiMzOTtzIG5vdCBhIHJlZ2lzdGVyIHNwaWxsIGFueW1vcmU7IGZvcmNlXG4zNDkxOlx0XHRcdFx0ICogb3JpZ2luYXRpbmcgcmVnaXN0ZXIgdG8gYmUgcHJlY2lzZSB0byBtYWtlXG4zNDkyOlx0XHRcdFx0ICogU1RBQ0tfWkVSTyBjb3JyZWN0IGZvciBzdWJzZXF1ZW50IHN0YXRlc1xuMzQ5MzpcdFx0XHRcdCAqL1xuMzQ5NDpcdFx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgdmFsdWVfcmVnbm8pO1xuMzQ5NTpcdFx0XHRcdGlmIChlcnIpXG4zNDk2Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzQ5NzpcdFx0XHRcdHR5cGUgPSBTVEFDS19aRVJPO1xuMzQ5ODpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gdGhlIGV4cGVydCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgc2NydWJfc3BlY2lhbF9zbG90YCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHRoZSBkZWJ1Z2dlciBqdXN0IGhpdCBhIGNhbGwgdG8gYHNjcnViX3NwZWNpYWxfc2xvdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgZWRnZSBjYXNlcyBvciBkYXRhIHZhbGlkYXRpb24gYXJvdW5kIHNwZWNpZmljIHNsb3RzIG9yIGZpZWxkcy4gSeKAmWxsIGltbWVkaWF0ZWx5IGRpdmUgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgc29tZXRoaW5nICYjMzQ7c3BlY2lhbCwmIzM0OyB3aGljaCBvZnRlbiBtZWFucyBwb3RlbnRpYWxseSB0cm91Ymxlc29tZSBvciBzZW5zaXRpdmUgZGF0YSB0aGF0IHJlcXVpcmVzIGV4dHJhIGNhcmUgZHVyaW5nIGNsZWFuaW5nIG9yIHByb2Nlc3NpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlICYjMzQ7c3BlY2lhbCYjMzQ7IGNhc2VzIGFyZSwgd2h5IHRoZXnigJlyZSBwcm9ibGVtYXRpYywgYW5kIHdoYXQgYHNjcnViX3NwZWNpYWxfc2xvdGAgaXMgZG9pbmcgdG8gcmVzb2x2ZSB0aG9zZSBpc3N1ZXMuIEnigJlsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBtaXRpZ2F0ZS4gTm93LCBsZXTigJlzIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzg0Olx0c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4zMzg1Olx0e1xuMzM4NjpcdFx0aW50IGk7XG4zMzg3Olx0XG4zMzg4Olx0XHQvKiByZWd1bGFyIHdyaXRlIG9mIGRhdGEgaW50byBzdGFjayBkZXN0cm95cyBhbnkgc3BpbGxlZCBwdHIgKi9cbjMzODk6XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIudHlwZSA9IE5PVF9JTklUO1xuMzM5MDpcdFx0LyogTWFyayBzbG90cyBhcyBTVEFDS19NSVNDIGlmIHRoZXkgYmVsb25nZWQgdG8gc3BpbGxlZCBwdHIvZHlucHRyL2l0ZXIuICovXG4zMzkxOlx0XHRpZiAoaXNfc3RhY2tfc2xvdF9zcGVjaWFsKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pKVxuMzM5MjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KVxuMzM5MzpcdFx0XHRcdHNjcnViX3NwaWxsZWRfc2xvdChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpXSk7XG4zMzk0Olx0fVxuMzM5NTpcdFxuMzM5NjpcdC8qIGNoZWNrX3N0YWNrX3tyZWFkLHdyaXRlfV9maXhlZF9vZmYgZnVuY3Rpb25zIHRyYWNrIHNwaWxsL2ZpbGwgb2YgcmVnaXN0ZXJzLFxuMzM5NzpcdCAqIHN0YWNrIGJvdW5kYXJ5IGFuZCBhbGlnbm1lbnQgYXJlIGNoZWNrZWQgaW4gY2hlY2tfbWVtX2FjY2VzcygpXG4zMzk4Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhY2sgU3RhdGUgYW5kIEl0ZXJhdG9yIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdW5kZXJzdGFuZGluZzogVGhlIGNvZGUgaW5pdGlhbGx5IHNldHMgYHN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLnR5cGUgPSBOT1RfSU5JVDtgIGFuZCBzZXRzIHRoZSBgc2xvdF90eXBlYCB0byBgU1RBQ0tfTUlTQ2AuIElmIGEgYFNUQUNLX0lURVJgIHNsb3QgZ2V0cyBvdmVyd3JpdHRlbiwgaXRzIGBzbG90X3R5cGVgIGNoYW5nZXMgdG8gYFNUQUNLX01JU0NgLiBUaGlzIGlzIGltcG9ydGFudC4gYHN0YWNrc2FmZWAgd2lsbCB0aGVuIGNvbXBhcmUgdGhlIG9sZCBhbmQgY3VycmVudCBzdGFjayBzdGF0ZXMuIEl0IGNoZWNrcyBpZiBgb2xkLSZndDtzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPSBjdXItJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdYCBhbmQgcmV0dXJucyBgZmFsc2VgLiBUaGlzIG1lYW5zIHRoYXQgYHN0YWNrc2FmZWAgKm9ubHkqIGNvbXBhcmVzIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgaWYgKmJvdGgqIHRoZSBvbGQgYW5kIGN1cnJlbnQgc3RhdGVzIGhhdmUgYSBgU1RBQ0tfSVRFUmAgc2xvdCB0eXBlLgoKTm93LCBiZWNhdXNlIG9mIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLCBpZiBib3RoIG9sZCBhbmQgY3VycmVudCBzdGF0ZXMgaGF2ZSBgU1RBQ0tfSVRFUmAsIHRoZW4gdGhleSB3ZXJlIGJvdGggaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAuIEFuZCBgbWFya19zdGFja19zbG90c19pdGVyYCBzcGVjaWZpY2FsbHkgc2V0cyBgc3QtJmd0O3R5cGUgPSBQVFJfVE9fU1RBQ0tgIGFuZCBpbml0aWFsaXplcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcy4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBubyB3YXkgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhhdCYjMzk7cyBvZmYgdGhlIHRhYmxlLgoKU28sIHRoaXMgYm9pbHMgZG93biB0byBhIHZlcmlmaWVyIGxvZ2ljIGJ1Zy4gSXQmIzM5O3MgbWVyZ2luZyBzdGF0ZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBgcmVnLSZndDt0eXBlYCB2YWx1ZXMsIGxpa2UgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgIHdpdGggYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgLiBUaGUgYnVnIGlzIHRoYXQgaXQgb25seSBjaGVja3MgdGhlIGBpdGVyYCB1bmlvbiBmaWVsZHMgYW5kIGlnbm9yZXMgdGhlIGByZWctJmd0O3R5cGVgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBwaWVjZS4gSXQmIzM5O3MgYWxsb3dpbmcgYW4gdW50cnVzdGVkIGl0ZXJhdG9yIHRvIGJlIHRyZWF0ZWQgYXMgaWYgaXQmIzM5O3MgUkNVLXByb3RlY3RlZCwgd2hpY2ggdGhlbiBsZWFkcyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB3aGVuIGBicGZfaXRlcl90YXNrX25leHRgIGlzIGNhbGxlZCBvbiB0aGF0IHVudHJ1c3RlZCBpdGVyYXRvci4KClNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSB1c2UtYWZ0ZXItZnJlZSwgS0FTQU4gd2lsbCBjYXRjaCB0aGlzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm8gaW5mb3JtYXRpb24gbGVhay4gVGhlcmVmb3JlLCB3ZSBkb24mIzM5O3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFdlIHNob3VsZCBiZSBnb29kIHdpdGggd2hhdCB3ZSYjMzk7dmUgZ290LgoKT2theSwganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgU1RBQ0tfSVRFUmAgaXMgKm9ubHkqIHNldCBieSBgbWFya19zdGFja19zbG90c19pdGVyYC4gWXVwLCB0aGF0JiMzOTtzIHRoZSBvbmx5IHBsYWNlLiBHb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVEFDS19JVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9sb2cuYz00OTc9c3RhdGljIGNoYXIgc2xvdF90eXBlX2NoYXJbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTUwMi1cdFtTVEFDS19EWU5QVFJdXHQ9ICYjMzk7ZCYjMzk7LFxua2VybmVsL2JwZi9sb2cuYzo1MDM6XHRbU1RBQ0tfSVRFUl1cdD0gJiMzOTtpJiMzOTssXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cdFtTVEFDS19JUlFfRkxBR10gPSAmIzM5O2YmIzM5Oyxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTcxMT12b2lkIHByaW50X3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvbG9nLmM6Nzc1Olx0XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL2xvZy5jLTc3Ni1cdFx0XHQvKiBvbmx5IG1haW4gc2xvdCBoYXMgaWQgc2V0OyBza2lwIG90aGVycyAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMzLVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XHRcdFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQzNS1cdFx0XHQgICAgc3R5cGUgPT0gU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtODA1LVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XHRcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExOTA9c3RhdGljIGJvb2wgaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cilcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXRlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RhY2tbaV0uc2xvdF90eXBlWzBdICE9IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE1PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XHRcdFx0c2xvdC1cdTAwM2VzbG90X3R5cGVbal0gPSBTVEFDS19JVEVSO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTk1MS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTg2PXN0YXRpYyBib29sIGlzX2l0ZXJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDY6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNy1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxMz1zdGF0aWMgaW50IGlzX2l0ZXJfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM4Olx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzktXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1NT1zdGF0aWMgaW50IGlzX2lycV9mbGFnX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTgxOiAqICAgLSBpdGVyIHN0YXRlIChTVEFDS19JVEVSKS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyLSAqICAgLSBpcnEgZmxhZyBzdGF0ZSAoU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODQ9c3RhdGljIGJvb2wgaXNfc3RhY2tfc2xvdF9zcGVjaWFsKGNvbnN0IHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVx0Y2FzZSBTVEFDS19EWU5QVFI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MTpcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyLVx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1MT1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU1LVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MDU2Olx0dTMyIGNsZWFyX21hc2sgPSAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXHUwMDNjXHUwMDNjIFNUQUNLX0lURVIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTMxCgkJCQkJCQlvdXRwdXQ6IDM0MwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIE1lbW9yeSBTYWZldHkqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCB0aGUgaXNzdWUuIEl0JiMzOTtzIGRlZmluaXRpdmU6IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIGlzIHRoZSBzb2xlIGZ1bmN0aW9uIHNldHRpbmcgdGhlIGBzbG90X3R5cGVgIHRvIGBTVEFDS19JVEVSYC4gIEZ1cnRoZXJtb3JlLCBpdCB0aG9yb3VnaGx5IGluaXRpYWxpemVzIGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYGl0ZXJgIHVuaW9uLiBUaGVyZWZvcmUsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoYXQmIzM5O3Mgb2ZmIHRoZSB0YWJsZS4KClRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCB1bHRpbWF0ZWx5IHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gIEZvcnR1bmF0ZWx5LCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBjYXRjaGluZyB0aGUgcHJvYmxlbS4gIEtub3dpbmcgdGhpcyBhbGxvd3MgbWUgdG8gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBpc3N1ZSBpcyBub3QgcmVsYXRlZCB0byBhbiB1bmNoZWNrZWQgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIHdpbGwgbm93IGFkZCBhIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBpc3N1ZSBvYnNlcnZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZyAoYHN0YWNrc2FmZWApIGZvciBpdGVyYXRvciBzdGFjayBzbG90cyAoYFNUQUNLX0lURVJgKS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSB2ZXJpZmllciBvbmx5IGNvbXBhcmVkIHRoZSBpdGVyYXRvci1zcGVjaWZpYyBmaWVsZHMgKGxpa2UgYGJ0ZmAgYW5kIGBidGZfaWRgKSBidXQgZmFpbGVkIHRvIGNvbXBhcmUgdGhlIHJlZ2lzdGVyIHR5cGUgKGBvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlYCkuIFxuXG5UaGlzIG9taXNzaW9uIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IG1lcmdlIGEgc3RhdGUgd2hlcmUgYW4gaXRlcmF0b3IgaXMgUkNVLXByb3RlY3RlZCAoYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgKSB3aXRoIGEgc3RhdGUgd2hlcmUgdGhlIGl0ZXJhdG9yIGlzIHVudHJ1c3RlZCAoYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgKS4gQXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBpbmNsdWRlZCB0ZXN0IGNhc2UsIGFuIHVucHJvdGVjdGVkIGdhcCAoZS5nLiwgdW5sb2NraW5nIGFuZCByZWxvY2tpbmcgUkNVKSBzdHJpcHMgdGhlIGBNRU1fUkNVYCBmbGFnLCBtYWtpbmcgdGhlIGl0ZXJhdG9yIHVudHJ1c3RlZC4gQnkgaW5jb3JyZWN0bHkgbWVyZ2luZyB0aGVzZSBzdGF0ZXMsIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyBhIEJQRiBwcm9ncmFtIHRvIGNhbGwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgb24gYW4gdW50cnVzdGVkIGl0ZXJhdG9yLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHdoZW4gdGhlIHRhc2sgc3RydWN0IGlzIGFjY2Vzc2VkIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbmRlZC5cblxuVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGJ1ZyB0aGF0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbnZvbHZlZCwgYXMgdGhlIGBpdGVyYCB1bmlvbiBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIHdoZW5ldmVyIGEgc2xvdCBpcyBtYXJrZWQgYXMgYFNUQUNLX0lURVJgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWApLiBcblxuVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBtZXJnZSBhIHN0YXRlIHdoZXJlIGFuIGl0ZXJhdG9yIGlzIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciBpcyB1bnRydXN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYCkuIEFzIGRlbW9uc3RyYXRlZCBieSB0aGUgaW5jbHVkZWQgdGVzdCBjYXNlLCBhbiB1bnByb3RlY3RlZCBnYXAgKGUuZy4sIHVubG9ja2luZyBhbmQgcmVsb2NraW5nIFJDVSkgc3RyaXBzIHRoZSBgTUVNX1JDVWAgZmxhZywgbWFraW5nIHRoZSBpdGVyYXRvciB1bnRydXN0ZWQuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcgdGhlc2Ugc3RhdGVzLCB0aGUgdmVyaWZpZXIgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBjYWxsIGBicGZfaXRlcl90YXNrX25leHRgIG9uIGFuIHVudHJ1c3RlZCBpdGVyYXRvciwgbGVhZGluZyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB3aGVuIHRoZSB0YXNrIHN0cnVjdCBpcyBhY2Nlc3NlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQuXG5cblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjIxLjg2ODg1MDEwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTYwNTk1Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cXHUwMDNldHlwZSAhPSBjdXJfcmVnLVxcdTAwM2V0eXBlYCkuIFxcblxcblRoaXMgb21pc3Npb24gYWxsb3dlZCB0aGUgdmVyaWZpZXIgdG8gaW5jb3JyZWN0bHkgbWVyZ2UgYSBzdGF0ZSB3aGVyZSBhbiBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgdW50cnVzdGVkIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLiBBcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGluY2x1ZGVkIHRlc3QgY2FzZSwgYW4gdW5wcm90ZWN0ZWQgZ2FwIChlLmcuLCB1bmxvY2tpbmcgYW5kIHJlbG9ja2luZyBSQ1UpIHN0cmlwcyB0aGUgYE1FTV9SQ1VgIGZsYWcsIG1ha2luZyB0aGUgaXRlcmF0b3IgdW50cnVzdGVkLiBCeSBpbmNvcnJlY3RseSBtZXJnaW5nIHRoZXNlIHN0YXRlcywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiB1bnRydXN0ZWQgaXRlcmF0b3IsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgd2hlbiB0aGUgdGFzayBzdHJ1Y3QgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLlxcblxcblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjIxLjg2ODg1NzE4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTc4MjgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI3MDU3Y2I1N2I5YjBkMzRhOTM2NDY5MWQ2YzY2OTcyY2E3ODMyNzZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MDg6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5pbmRleCBlYTIxNTNjZjI4ZDBhLi40ZTZhYWZhZDMzYmQyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuQEAgLTgxMiw3ICs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuIFxcdFxcdFxcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXFxuIFxcdFxcdFxcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmIHx8XFxuK1xcdFxcdFxcdGlmIChvbGRfcmVnLVxcdTAwM2V0eXBlICE9IGN1cl9yZWctXFx1MDAzZXR5cGUgfHxcXG4rXFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmIHx8XFxuIFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCB8fFxcbiBcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLnN0YXRlIHx8XFxuIFxcdFxcdFxcdCAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tXFx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcXG5pbmRleCBmZTM2NjNkZWRiZTE0Li41NjZhMWQzZGZmZWFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xcbkBAIC02MSw2ICs2MSw1MiBAQCBpbnQgQlBGX1BST0coaXRlcl90YXNrc19sb2NrX2FuZF91bmxvY2spXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcIj9mZW50cnkucy9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHRcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxcbitpbnQgQlBGX1BST0coaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1xcXCJcXG4rXFx0XFx0XFxcInIxID0gJVtpdF07XFxcIlxcbitcXHRcXHRcXFwicjIgPSAwO1xcXCJcXG4rXFx0XFx0XFxcInIzID0gMDtcXFwiIC8qIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTICovXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfdGFza19uZXddO1xcXCJcXG4rXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFxcIlxcbitcXHRcXHRcXFwiaWYgdzAgPT0gMCBnb3RvIHVucHJvdGVjdGVkXyU9O1xcXCJcXG4rXFxuK1xcdFxcdC8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZSBvbiB0aGUgc3RyYWlnaHQtbGluZSBwYXRoLiAqL1xcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XFxcIlxcbitcXHRcXHRcXFwiZ290byBtZXJnZV8lPTtcXFwiXFxuK1xcbitcXHRcXFwidW5wcm90ZWN0ZWRfJT06XFxcIlxcbitcXHRcXHQvKiBDcmVhdGUgYW4gdW5wcm90ZWN0ZWQgZ2FwIG9uIHRoZSB0YWtlbiBwYXRoLiAqL1xcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfcmN1X3JlYWRfbG9ja107XFxcIlxcbitcXG4rXFx0XFxcIm1lcmdlXyU9OiByMSA9ICVbaXRdO1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl90YXNrX25leHRdO1xcXCJcXG4rXFx0XFx0XFxcInIxID0gJVtpdF07XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX3Rhc2tfZGVzdHJveV07XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1xcXCJcXG4rXFx0XFx0OlxcbitcXHRcXHQ6IF9faW1tX3B0cihpdCksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXcpLFxcbitcXHRcXHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV4dCksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSxcXG4rXFx0XFx0ICBfX2ltbShicGZfcmN1X3JlYWRfbG9jayksXFxuK1xcdFxcdCAgX19pbW0oYnBmX3JjdV9yZWFkX3VubG9jaylcXG4rXFx0XFx0OiBfX2Nsb2JiZXJfY29tbW9uXFxuK1xcdCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/ZmVudHJ5LnMvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcXFwiKVxcbiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODoyMy4wMDUzNzk2NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NTcyNzMyODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI3MDU3Y2I1N2I5YjBkMzRhOTM2NDY5MWQ2YzY2OTcyY2E3ODMyNzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTowODoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCBlYTIxNTNjZjI4ZDBhLi40ZTZhYWZhZDMzYmQyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTgxMiw3ICs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4gXHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiBcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4rXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGUgfHxcbitcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGZfaWQgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCB8fFxuIFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLnN0YXRlIHx8XG4gXHRcdFx0ICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS1cdTAwM2VpdGVyLmRlcHRoLCBzZWUgYWJvdmUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcbmluZGV4IGZlMzY2M2RlZGJlMTQuLjU2NmExZDNkZmZlYWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuQEAgLTYxLDYgKzYxLDUyIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfdGFza19uZXh0XCIpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitpbnQgQlBGX1BST0coaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZylcbit7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcbitcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcIlxuK1x0XHRcInIxID0gJVtpdF07XCJcbitcdFx0XCJyMiA9IDA7XCJcbitcdFx0XCJyMyA9IDA7XCIgLyogQlBGX1RBU0tfSVRFUl9BTExfUFJPQ1MgKi9cbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfdGFza19uZXddO1wiXG4rXG4rXHRcdFwiY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1wiXG4rXHRcdFwiaWYgdzAgPT0gMCBnb3RvIHVucHJvdGVjdGVkXyU9O1wiXG4rXG4rXHRcdC8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZSBvbiB0aGUgc3RyYWlnaHQtbGluZSBwYXRoLiAqL1xuK1x0XHRcImNhbGwgJVticGZfcmN1X3JlYWRfbG9ja107XCJcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XCJcbitcdFx0XCJnb3RvIG1lcmdlXyU9O1wiXG4rXG4rXHRcInVucHJvdGVjdGVkXyU9OlwiXG4rXHRcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAgb24gdGhlIHRha2VuIHBhdGguICovXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcIlxuK1xuK1x0XCJtZXJnZV8lPTogcjEgPSAlW2l0XTtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl90YXNrX25leHRdO1wiXG4rXHRcdFwicjEgPSAlW2l0XTtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl90YXNrX2Rlc3Ryb3ldO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbV9wdHIoaXQpLFxuK1x0XHQgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV3KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl90YXNrX25leHQpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfZGVzdHJveSksXG4rXHRcdCAgX19pbW0oYnBmX3JjdV9yZWFkX2xvY2spLFxuK1x0XHQgIF9faW1tKGJwZl9yY3VfcmVhZF91bmxvY2spXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vblxuK1x0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcIilcbiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MjMuMDA1MzgyMjQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2NTEzNjE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIG5ldyBwYXRjaCwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBpdGVyYXRvcnMgYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrc2FmZSgpYCBieSBpbnRyb2R1Y2luZyBhIG5ldyB0eXBlIGNoZWNrIGR1cmluZyB0aGUgY29tcGFyaXNvbiBvZiBpdGVyYXRvcnM6XG5cbmBgYGNcbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4rXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGUgfHxcbitcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG5gYGBcblxuRXNzZW50aWFsbHksIGl0J3Mgbm93IHZlcmlmeWluZyB0aGF0IHRoZSB0eXBlcyBvZiBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCBtYXRjaCBiZWZvcmUgY29uc2lkZXJpbmcgdGhlaXIgQlRGIChCVEYgLSBCUEYgVHlwZSBGb3JtYXQpIGluZm9ybWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVmaW5lbWVudCBpbiB0aGUgdHlwZS1zYWZldHkgb2YgdGhlIHZlcmlmaWVyLiBUaGUgaW5jbHVzaW9uIG9mIGEgbmV3IHRlc3QgY2FzZSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2AsIGluZGljYXRlcyB0aGUgcGF0Y2ggYXV0aG9ycyBoYXZlIGltcGxlbWVudGVkIGEgbmV3IHRlc3QgY2FzZSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgYHN0YWNrc2FmZSgpYCBpcyB1c2VkLCB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZ3VhcmFudGVlLCBhbmQgd2h5IHRoaXMgYWRkaXRpb25hbCB0eXBlIGNoZWNrIGlzIG5lY2Vzc2FyeSBmb3IgaXRlcmF0b3IgY29tcGFyaXNvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBtaXNtYXRjaGVkIHR5cGVzIGluIHRoZSBjb250ZXh0IG9mIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgaG93IHRoaXMgbWlnaHQgcmVsYXRlIHRvIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhpcyBsb29rcyBsaWtlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgcGllY2Ugb2YgaGFyZGVuaW5nLCBzbyBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGlzIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjI4LjY3MDUyMDU1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU0MzIyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2tzYWZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz02OTA9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDEtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MDI6c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAzLVxcdFxcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTQ1PXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NjItXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NjM6XFx0aWYgKCFzdGFja3NhZmUoZW52LCBvbGQsIGN1ciwgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MjkuMDk1OTU4NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY5NjY3MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgU3RhdGljIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBjb2RlIHNuaXBwZXQgaW52b2x2aW5nIHRoZSBmdW5jdGlvbiBgc3RhY2tzYWZlYC4gVGhlIGNydWNpYWwgYml0IGlzIHRoYXQgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBzb21lIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgYWJvdXQgc2NvcGUgYW5kIGxpbmthZ2UuIE9rYXksIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQncyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIGxpa2VseSBoaWRkZW4gZnJvbSBleHRlcm5hbCBhY2Nlc3MuXG5cbk5vdywgYHN0YWNrc2FmZWAgaXMgKmNhbGxlZCogYnkgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgd2hpY2ggaXMgKmFsc28qIHN0YXRpYy4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGxpbWl0ZWQgc2NvcGUgb2YgaW50ZXJhY3Rpb24uIEl0IGNhbid0IGJlIGNhbGxlZCBmcm9tIHNvbWUgb3RoZXIgZmlsZSwgYXMgaXQgaXMgYWxzbyBgc3RhdGljYC5cblxuVGhlIHF1ZXN0aW9uIGJlY29tZXMsIHdoYXQgYXJlIHRoZSB1c2UtY2FzZXMgb2YgdGhlIGBzdGFja3NhZmVgIGZ1bmN0aW9uPyBOb3cgdGhhdCBgZnVuY19zdGF0ZXNfZXF1YWxgIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgYSBjYWxsZXIsIGl0IG1pZ2h0IGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyBgZnVuY19zdGF0ZXNfZXF1YWxgIGlzIHVzZWQuIFdlIG5lZWQgdG8gaWRlbnRpZnkgd2hvIGlzIHRoZSBwYXJlbnQgb2YgdGhlIGNhbGxlci4gU28gbGV0J3MgdHJhY2UgYmFjay4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogYGZ1bmNfc3RhdGVzX2VxdWFsYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20uIFRoYXQncyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODozMi40NjU2MjgxNDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVuY19zdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTg2OT1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NDU6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTgwPXN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MzIuNTE2MDUxMjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE0OTIyMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHN0YXRlc19lcXVhbGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgc3RhdGVzX2VxdWFsYCBpcyBjYWxsaW5nIGBmdW5jX3N0YXRlc19lcXVhbGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBwaWVjZSBvZiB0aGUgcHV6emxlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHN0YXRlc19lcXVhbGAgaXRzZWxmIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlOyBrbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcuIExldCdzIHNlZSB3aG8ncyByZWFjaGluZyBvdXQgdG8gKnRoaXMqIGZ1bmN0aW9uLCB0aGVuIEknbGwgdW5kZXJzdGFuZCB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjM1LjQzMDk3NTYxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODExOTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ0LSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQ1OnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk3Mj1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk3OS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk4MDpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cXHRcXHRcXHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzMyLVxcdFxcdFxcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTMzMzpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzM0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyX2ZyYW1lO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQyLVxcdFxcdFxcdFxcdFxcdGl0ZXJfcmVnID0gXFx1MDAyNmN1cl9mcmFtZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzFdO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0MzpcXHRcXHRcXHRcXHRcXHQvKiBjdXJyZW50IHN0YXRlIGlzIHZhbGlkIGR1ZSB0byBzdGF0ZXNfZXF1YWwoKSxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDQtXFx0XFx0XFx0XFx0XFx0ICogc28gd2UgY2FuIGFzc3VtZSB2YWxpZCBpdGVyIGFuZCByZWcgc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTctXFx0XFx0XFx0XFx0aWYgKHNsLVxcdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXFx1MDAzZW1heV9nb3RvX2RlcHRoIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU4OlxcdFxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTktXFx0XFx0XFx0XFx0XFx0bG9vcCA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjMtXFx0XFx0XFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NDpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY1LVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzcxLVxcdFxcdFxcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzcyOlxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3My1cXHRcXHRcXHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA0LVxcdFxcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDU6XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MDYtaGl0Olxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ0LVxcdFxcdFxcdCAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDQ1OlxcdFxcdFxcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIGVuY291bnRlcnMgYSBgc3RhdGVzX2VxdWFsKC4uLixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDYtXFx0XFx0XFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MzUuNDc5MDk4MTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NTkxNjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFN0YXRlIG9mIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaW4gdGhlIHZlcmlmaWVyLiBJdCBzZWVtcyB0byBiZSB0aGUgZ2F0ZWtlZXBlciwgdGhlIHBsYWNlIHdoZXJlIHdlIGRldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBzdGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGFuYWx5emVkLiBJdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBzdGF0ZSBleHBsb3JhdGlvbiwgYXQgbGVhc3QgZnJvbSB3aGF0IEkgY2FuIGdhdGhlci5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmRyaXZpbmcqIHRoZSBjYWxscyB0byBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLiBXaGF0IHBhcnRzIG9mIHRoZSB2ZXJpZmllciBhcmUgYWN0dWFsbHkgbGV2ZXJhZ2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/IEZpZ3VyaW5nIG91dCB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIHRoZSBvdmVyYWxsIHZlcmlmaWNhdGlvbiBzdHJhdGVneS4gQnkgZXhhbWluaW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IHN0YXRlcyBhcmUgdHJhY2tlZCBhbmQgbWFuYWdlZCBkdXJpbmcgdGhlIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHZlcmlmaWVyIGRlY2lkZXMgd2hlbiB0byBkZWx2ZSBkZWVwZXIgaW50byBhIHN0YXRlIGFuZCB3aGVuIHRvIHBydW5lIG9yIHJlY29nbml6ZSB0aGF0IGEgcGF0aCBoYXMgYmVlbiBleHBsb3JlZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gdGhlIHN0YXRlIG1hY2hpbmUgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHZlcmlmaWVyJ3MgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODozOC45MzUwMTczOTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTg3MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzQ0PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4MS1cXHRcXHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczODI6XFx0XFx0XFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczODMtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjM4Ljk4MTYwODc3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjEzNTQ4MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKipcblxuT2theSwgc28gYGRvX2NoZWNrYCBpcyB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllciwgdGhlIG1haW4gbG9vcCB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gVGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGEgY3JpdGljYWwgYXJlYTogc3RhdGUgZXF1aXZhbGVuY2UsIHNwZWNpZmljYWxseSBob3cgd2UgaGFuZGxlIGl0ZXJhdG9yIHJlZ2lzdGVycyB3aXRoaW4gdGhlIGBzdGFja3NhZmVgIGNvbnRleHQuXG5cbkkgc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IFdlJ3JlIGFkZGluZyBhIGB0eXBlYCBjaGVjayAoYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgKSAqYmVmb3JlKiB3ZSBjb21wYXJlIHRoZSBCVEYgaW5mb3JtYXRpb24gZm9yIHRoZSBpdGVyYXRvciAoYG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmApLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgc2hpZnQuIFByZXZpb3VzbHksIHRoZSB2ZXJpZmllciBjb3VsZCd2ZSBpbmNvcnJlY3RseSBjb25zaWRlcmVkIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHRoZSBzYW1lIGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgcmVnaXN0ZXIgKG5vbi1pdGVyYXRvciBvciBvZiBhIGRpZmZlcmVudCByZWdpc3RlciB0eXBlKSBpZiwgYnkgcHVyZSBjb2luY2lkZW5jZSwgdGhlaXIgbWVtb3J5IGxheW91dHMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGhhcHBlbmVkIHRvIG1hdGNoIHRoZSBpdGVyYXRvcidzIEJURiBkYXRhLiBUaGF0J3MgYSBjbGFzc2ljIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4gVGhpcyBjaGFuZ2UgZWZmZWN0aXZlbHkgZ3VhcmRzIGFnYWluc3QgZmFsc2UgcG9zaXRpdmVzIGluIGVxdWl2YWxlbmNlIGNoZWNrcywgbWFraW5nIHRoZSB2ZXJpZmllciBtb3JlIHJvYnVzdC5cblxuVGhlIGFkZGVkIHRlc3QgY2FzZSwgYGl0ZXJzX3Rhc2tfZmFpbHVyZS5jYCwgd2l0aCBgaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZ2AgaXMgYSB3ZWxjb21lIGFkZGl0aW9uLiBUaGlzIHRlc3QgbGV2ZXJhZ2VzIGBicGZfaXRlcl90YXNrX25ld2AsIGBicGZfaXRlcl90YXNrX25leHRgLCBhbmQgYGJwZl9pdGVyX3Rhc2tfZGVzdHJveWAsIGFuZCBpcyBhbm5vdGF0ZWQgd2l0aCBhIGBmZW50cnlgIGhvb2sgb24gdGhlIGBzeXNfZ2V0cGdpZGAgc3lzY2FsbC4gVGhhdCBzdWdnZXN0cyB0YXJnZXRlZCB0ZXN0aW5nIG9mIHRoZSBpdGVyYXRvciByZWdpc3RlciBpbnRlcmFjdGlvbnMgdW5kZXIgcmVhbGlzdGljIGNvbmRpdGlvbnMuXG5cblRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYW5kIGBzdGFja3NhZmVgLiBIb3dldmVyLCB0aGUgbGFzdCB0aHJlZSBhcmUgdW5mb3J0dW5hdGVseSBgc3RhdGljYCwgbWVhbmluZyB0aGV5J3JlIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGV4dGVybmFsbHkuIFRoYXQgbGVhdmVzIHVzIHdpdGggYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSXQncyAqbm9uLXN0YXRpYyogYW5kIGRlY2xhcmVkIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgd2hpbGUgYmVpbmcgY2FsbGVkIGZyb20gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGlzIHRoZXJlZm9yZSwgcmVhY2hhYmxlLCBhcyBpdCBjb3VsZCBiZSBleHBvcnRlZCBvciBqdXN0IG5vbi1zdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjQ2LjE5NTE2MDAzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwMzM0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMjE0PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM4LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIzOTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczNDQ9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzgxLVxcdFxcdGlmIChicGZfaXNfcHJ1bmVfcG9pbnQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM4MjpcXHRcXHRcXHRlcnIgPSBicGZfaXNfc3RhdGVfdmlzaXRlZChlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4My1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6NDYuMjgxMTk3NTUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzM4NTU1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQlBGIFZlcmlmaWNhdGlvbiBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gVGhlIGZ1bmN0aW9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBzdGF0ZSBjaGVja2luZy4gSXQgc2VlbXMgdG8gYmUgdGhlIGZvY3VzIHN5bWJvbCBJIG5lZWQuIE5vdywgYSBjcnVjaWFsIGFzcGVjdCB0byBub3RlIGhlcmUgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBmdW5jdGlvbnMuIEknbSBzZWVpbmcgdGhhdCBgZG9fY2hlY2tgIGlzIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggc3VnZ2VzdHMgaXQgaXMgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBXaGlsZSBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJvcGVyYXRlLCB3aGljaCBtYWtlcyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGEgcGVyZmVjdCBlbnRyeSBwb2ludC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb2NhdGUgdGhlIGRlY2xhcmF0aW9uIG9mIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBpdCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIENoYW5jZXMgYXJlLCBpdCdzIGRlZmluZWQgdGhlcmUsIG9yIGF0IGxlYXN0IGRlY2xhcmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZm9sbG93IHRoZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgbW9yZSBlZmZlY3RpdmVseS4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODo0OS43NTUwNTY0OTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjUwMjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTExODc9aW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyk7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTg4LVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4OTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExOTAtaW50IGJwZl91cGRhdGVfYnJhbmNoX2NvdW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjQ5Ljg4MTU2MzExOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3MjQ3MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkxvY2F0aW5nIHRoZSBCUEYgVmVyaWZpZXIncyBWaXRhbHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEJQRiB2ZXJpZmllcidzIHdvcmtpbmdzLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHVuZGVyc3RhbmRpbmcgdGhlIHZpc2l0YXRpb24gcHJvY2Vzcy4gTGV0IG1lIGNvbmZpcm0gdGhhdDsgeWVzLCBhIHF1aWNrIHNlYXJjaCBjb25maXJtcyBpdCByZXNpZGVzIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IFRoZSBCUEYgdmVyaWZpZXIgZnVuY3Rpb25hbGl0eSBpc27igJl0IGFsd2F5cyBlbmFibGVkLCByaWdodD8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvbiBidWlsZCBvcHRpb25zLiBJIHJlY2FsbCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGtleSByZXF1aXJlbWVudC4gVG8gYmUgY2VydGFpbiwgSSdsbCBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzZWUgd2hhdCBJIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBleHBsb3JpbmcgdGhlIHZlcmlmaWVyJ3MgYmVoYXZpb3IgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjUzLjE4ODgxNDEzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxOTI1NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjUzLjIzOTAxNjM3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk5MzE3Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IEJQRiBzdXBwb3J0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCdsbCBnaXZlIG1lIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiwgYW5kIGxpa2VseSBwb2ludCBtZSB0byBvdGhlciwgbW9yZSBzcGVjaWZpYyBgS2NvbmZpZ2AgZmlsZXMgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BsaXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSwgcGVyaGFwcyBlQlBGLCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucywgdmVyaWZpZXIgY29uZmlndXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IG9wdGlvbnMgZm9yIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgb3IgZmVhdHVyZXMgbGlrZSB0cmFjaW5nLCBuZXR3b3JraW5nLCBvciBzZWN1cml0eS4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgbWFwcGluZyBob3cgdGhlc2UgYXJlIHVzZWQgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODo1Ni4wMzgzMzcyMjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg1MDI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODo1Ni4wODI0MzE0NDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMDkzMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipLY29uZmlnIExvY2F0aW9uIC0gQSBRdWljayBEZWR1Y3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgbGlrZWx5IGludm9sdmVzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB3aGVuIEkgc2VlIGBLY29uZmlnYCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLiBBbmQgdGhlIHBhdGguLi4gaG1tLCB0aGUgb2xkZXIga2VybmVscywgdGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIGBpbml0L0tjb25maWdgLiBJdCdzIGEgY2xhc3NpYyBsb2NhdGlvbi4gSG93ZXZlciwgd2l0aCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgaW4gbW9yZSByZWNlbnQgdmVyc2lvbnMgd2hlcmUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBoYXMgZXhwbG9kZWQgaW4gc2lnbmlmaWNhbmNlLCB0aGVyZSdzIGEgc3Ryb25nIGNoYW5jZSBpdCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBuZXdlciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBsaWtlbHkgdG8gcmVzaWRlLiBJdCdzIGFsbW9zdCBhIGtuZWUtamVyayByZWFjdGlvbiBub3cgdG8gdGhpbmsgb2YgQlBGIGNvbmZpZyBpZiBJIHNlZSBgS2NvbmZpZ2AgaW4gdGhlIGNvbnRleHQgb2YgYSBtb2Rlcm4ga2VybmVsLiBJIHNob3VsZCBjaGVjayBib3RoIGJ1dCBJJ2xsIGZvY3VzIG9uIHRoZSBuZXdlciBCUEYgcmVsYXRlZCBsb2NhdGlvbiBmaXJzdC4gSXQgaXMgcHJvYmFibHkgbW9yZSB1cCB0byBkYXRlIGFuZCBsZXNzIGN1bWJlcnNvbWUgdGhhbiBnb2luZyBpbnRvIG9sZGVyIGRpcmVjdG9yaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6NTkuNDgzMzY0Nzg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2NTc5MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTowMS4wOTk5NDkxNjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTQ0MTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gdGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyB0aGUgY29uZmlnIGl0ZW0gd2UncmUgZm9jdXNpbmcgb24uIEdvdCBpdC4gTm93LCB0aGUgY29ubmVjdGlvbiBpcy4uLmFoLCByaWdodCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqb25seSogY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5LCBsaW5raW5nIHRob3NlIHR3byB0aGluZ3MuIEhtbS4uLiBtYWtlcyBtZSB3b25kZXIgd2hhdCBlbHNlIGhpbmdlcyBvbiB0aGF0IGZsYWcuIEJlc3QgdG8gY2hlY2sgdGhlIGJ1aWxkIHJ1bGVzIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLiBMZXQncyBkaWcgaW50byB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6MDUuMDYxMzk0NzgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM1MDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTUtb2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjA1LjEyNzc0OTE0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyNDc1MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipDaGVja2luZyBCUEYgSXRlcmF0b3IgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgc3RhdGVzLm9gIGlzIGRlZmluaXRlbHkgYnVpbHQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ20gd29ya2luZyB3aXRoIGEgdGVzdCB0aGF0IGxldmVyYWdlcyBCUEYgaXRlcmF0b3JzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGJwZl9pdGVyX3Rhc2tfbmV3YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biBpZiB0aGVyZSBhcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBiZXlvbmQganVzdCB0aGUgc3lzY2FsbCBzdXBwb3J0LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBgYnBmX2l0ZXJfdGFza19uZXdgIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb247IHlvdSBjYW4ndCBhc3N1bWUgYSBzaW5nbGUgb3B0aW9uIGd1YXJhbnRlZXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTowOC40MjAyMjczODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDY5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ5MDI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2Nzc19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkwMy0jZW5kaWZcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTA0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9SQ1VfUFJPVEVDVEVEKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rhc2tfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTExMTg9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExOS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMjA6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMjEtXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTM5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyMzQtXFx0XFx0XFx0XFx0ICogSWYgdGhlIGl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgKHRoZSBfbmV3XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMjM1OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIGUuZy4sIGJwZl9pdGVyX3Rhc2tfbmV3KSBoYXMgYmVlblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzIzNi1cXHRcXHRcXHRcXHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTowOC40NzAzMDA4MDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDk2OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRlYnVnZ2luZyB0aGUgYnBmX2l0ZXJfdGFza19uZXcgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGJwZl9pdGVyX3Rhc2tfbmV3YCBmdW5jdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCBpdCBoYXZpbmcgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIEJQRiBpdGVyYXRvciBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggaXRzIGxvY2F0aW9uLiBUaGUgY29kZSBzZWVtcyB0byBiZSBpbiBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRhc2tzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy5cblxuTm93LCBqdXN0IHRvIGNvbmZpcm0gdGhhdCB0aGlzIHNvdXJjZSBmaWxlIGlzIHBhcnQgb2YgdGhlIGZpbmFsIGJ1aWxkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCB3aGljaCBpcywgb2YgY291cnNlLCBga2VybmVsL2JwZi9NYWtlZmlsZWAuIEknbGwgc2NhbiB0aHJvdWdoIHRoYXQgcXVpY2tseSBhbmQgc2VlIGlmIGB0YXNrX2l0ZXIub2AgaXMgYmVpbmcgYnVpbHQgdGhlcmUuIFRoaXMgd2lsbCBjb25maXJtIG15IGh5cG90aGVzaXMgYW5kIGdpdmUgbWUgY29uZmlkZW5jZSBJJ20gbG9va2luZyBhdCB0aGUgY29ycmVjdCBjb21wb25lbnQuIFRoaXMgc2hvdWxkIGFsc28gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb2JqZWN0IGZpbGVzIGFuZCBzb3VyY2UgY29kZSBhcmUgcmVsYXRlZCB0byB0aGlzIG1vZHVsZS4gTm93IEknbSByZWFkeSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjExLjcwNTI3Mjc4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMDUxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFza19pdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjExLjc1MTM4NDExN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA1NjUyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gVGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMsIGZvY3VzaW5nIG9uIGhvdyBpdGVyYXRvciByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIEl0J3MgYSB0eXBlIGNoZWNrLCByZWFsbHksIHRvIHByZXZlbnQgdGhlIHZlcmlmaWVyIGZyb20gaW5jb3JyZWN0bHkgZXF1YXRpbmcgYW4gaXRlcmF0b3IgcmVnaXN0ZXIgd2l0aCBhIG5vbi1pdGVyYXRvciByZWdpc3RlciB0aGF0IG1pZ2h0IGp1c3QgKmhhcHBlbiogdG8gbG9vayB0aGUgc2FtZSBpbiBtZW1vcnkgb3IgaGF2ZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZml4LCBpbXBhY3RpbmcgaG93IEJQRiBwcm9ncmFtcyBhcmUgdmFsaWRhdGVkIGFuZCB1bHRpbWF0ZWx5IGxvYWRlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC5cblxuTXkgZm9jdXMgc3ltYm9sIGlzIGNsZWFybHkgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYW5kIHRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgcmVhY2guIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgc3RhY2tzYWZlYCwgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYW5kIGBzdGF0ZXNfZXF1YWxgIGFyZSBhbGwgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBCdXQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCdzIGV4cG9ydGVkLCBzbyBpdCdzIHRoZSByaWdodCBwb2ludCB0byBkcmlsbCBpbi5cblxuTm93LCBsZXQncyBsb29rIGNsb3NlbHkgYXQgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGBzdGFja3NhZmVgLCBub3QgYW55dGhpbmcgZWxzZSBkaXJlY3RseS4gVGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IGNsZWFyOiBgc3RhY2tzYWZlYCBpcyBjYWxsZWQgYnkgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLiBUaGlzIGNvbmZpcm1hdGlvbiByZWluZm9yY2VzIHRoYXQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyBkZWZpbml0ZWx5IHRoZSBtb3N0IHJlbGV2YW50IHBvaW50IHRvIGZvY3VzIG9uIGR1cmluZyBteSBhbmFseXNpcy4gSSBoYXZlIHRoZSB3aG9sZSBwaWN0dXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTYsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjE4LjY1NzAzOTAxMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjY2ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyAoYHN0YWNrc2FmZSgpYCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2ApLiBJdCBhZGRzIGEgdHlwZSBjaGVjayBmb3IgcmVnaXN0ZXIgc3RhdGVzIHdoZW4gY29tcGFyaW5nIGl0ZXJhdG9yIHJlZ2lzdGVycywgcHJldmVudGluZyB0aGUgdmVyaWZpZXIgZnJvbSBpbmNvcnJlY3RseSBtYXRjaGluZyBhbiBpdGVyYXRvciByZWdpc3RlciB3aXRoIGEgbm9uLWl0ZXJhdG9yIHJlZ2lzdGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoZSBzYW1lIG1lbW9yeSBsYXlvdXQgb3IgdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSB2ZXJpZmllZCBhbmQgYWNjZXB0ZWQvcmVqZWN0ZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOToxOC43MzI3MTE5NDdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzQyMDgxNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6MTguNzMzMTM0NDY4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0NzQxNjU0MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cXHUwMDNldHlwZSAhPSBjdXJfcmVnLVxcdTAwM2V0eXBlYCkuIFxcblxcblRoaXMgb21pc3Npb24gYWxsb3dlZCB0aGUgdmVyaWZpZXIgdG8gaW5jb3JyZWN0bHkgbWVyZ2UgYSBzdGF0ZSB3aGVyZSBhbiBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgdW50cnVzdGVkIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLiBBcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGluY2x1ZGVkIHRlc3QgY2FzZSwgYW4gdW5wcm90ZWN0ZWQgZ2FwIChlLmcuLCB1bmxvY2tpbmcgYW5kIHJlbG9ja2luZyBSQ1UpIHN0cmlwcyB0aGUgYE1FTV9SQ1VgIGZsYWcsIG1ha2luZyB0aGUgaXRlcmF0b3IgdW50cnVzdGVkLiBCeSBpbmNvcnJlY3RseSBtZXJnaW5nIHRoZXNlIHN0YXRlcywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiB1bnRydXN0ZWQgaXRlcmF0b3IsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgd2hlbiB0aGUgdGFzayBzdHJ1Y3QgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLlxcblxcblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjcwNTdjYjU3YjliMGQzNGE5MzY0NjkxZDZjNjY5NzJjYTc4MzI3NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjA4OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtODEyLDcgKzgxMiw4IEBAIHN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbiBcdFx0XHQgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZVxuIFx0XHRcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbitcdFx0XHRpZiAob2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZSB8fFxuK1x0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiBcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuaW5kZXggZmUzNjYzZGVkYmUxNC4uNTY2YTFkM2RmZmVhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5AQCAtNjEsNiArNjEsNTIgQEAgaW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfbG9ja19hbmRfdW5sb2NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHRcIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKVxuK3tcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIGl0O1xuK1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1wiXG4rXHRcdFwicjEgPSAlW2l0XTtcIlxuK1x0XHRcInIyID0gMDtcIlxuK1x0XHRcInIzID0gMDtcIiAvKiBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyAqL1xuK1x0XHRcImNhbGwgJVticGZfaXRlcl90YXNrX25ld107XCJcbitcbitcdFx0XCJjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XCJcbitcdFx0XCJpZiB3MCA9PSAwIGdvdG8gdW5wcm90ZWN0ZWRfJT07XCJcbitcbitcdFx0LyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlIG9uIHRoZSBzdHJhaWdodC1saW5lIHBhdGguICovXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcIlxuK1x0XHRcImNhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTtcIlxuK1x0XHRcImdvdG8gbWVyZ2VfJT07XCJcbitcbitcdFwidW5wcm90ZWN0ZWRfJT06XCJcbitcdFx0LyogQ3JlYXRlIGFuIHVucHJvdGVjdGVkIGdhcCBvbiB0aGUgdGFrZW4gcGF0aC4gKi9cbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XCJcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1wiXG4rXG4rXHRcIm1lcmdlXyU9OiByMSA9ICVbaXRdO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX3Rhc2tfbmV4dF07XCJcbitcdFx0XCJyMSA9ICVbaXRdO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX3Rhc2tfZGVzdHJveV07XCJcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tX3B0cihpdCksXG4rXHRcdCAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXcpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV4dCksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSxcbitcdFx0ICBfX2ltbShicGZfcmN1X3JlYWRfbG9jayksXG4rXHRcdCAgX19pbW0oYnBmX3JjdV9yZWFkX3VubG9jaylcbitcdFx0OiBfX2Nsb2JiZXJfY29tbW9uXG4rXHQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl9jc3NfbmV4dFwiKVxuIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOToxOC43MzMxMzUzNjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4NzU0MTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIG5ldyBjaGVjazogYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgICpiZWZvcmUqIGNvbXBhcmluZyBgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgYW5kIGBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgaXRlcmF0b3Igc3RhdGUgKGBpdGVyYCkuIE15IGltbWVkaWF0ZSBndWVzcyBpcyB0aGF0IHRoaXMgYWRkcmVzc2VzIHNvbWUga2luZCBvZiB0eXBlIGNvbmZ1c2lvbiBvciBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzIGlzc3VlLiBFc3NlbnRpYWxseSwgd2Ugd2VyZSB0cnlpbmcgdG8gbG9vayBhdCBgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgd2hlbiBgb2xkX3JlZy1cdTAwM2V0eXBlYCBtaWdodCBub3QgZXZlbiAqYmUqIGFuIGl0ZXJhdG9yIHR5cGUsIG9yIHBlcmhhcHMgdGhlIHR5cGVzIGRvbid0IG1hdGNoIGJldHdlZW4gdGhlIG9sZCBhbmQgY3VycmVudCByZWdpc3RlcnMuXG5cbldhaXQgYSBzZWNvbmQsIGlmIGBvbGRfcmVnLVx1MDAzZXR5cGVgICppc24ndCogYW4gaXRlcmF0b3IsIHdlJ3JlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgZnJvbSBhIHVuaW9uIGZpZWxkIChgaXRlcmApIGluIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgdGhhdCdzICptZWFudCogZm9yIHNvbWV0aGluZyBlbHNlLiBUaGF0IGZpZWxkIGNvdWxkIGNvbnRhaW4gZ2FyYmFnZSwgb3IgZXZlbiBiZSB1bmluaXRpYWxpemVkLiBCdXQsIGl0IHNlZW1zIHRvIGJlIG9ubHkgYSB2YWx1ZSBjb21wYXJpc29uLCByaWdodD8gU28gd2UgYXJlIG5vdCBkZXJlZmVyZW5jaW5nIGl0LlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpdHNlbGYuIEknbSBnb2luZyB0byBwdWxsIGl0IHVwIHdpdGggYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdHlwZWAgYW5kIHRoYXQgYGl0ZXJgIGZpZWxkIHdpdGhpbiB0aGUgdW5pb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgc3BvdCwgYXMgd2UncmUgZGVhbGluZyB3aXRoIHZlcmlmaWVyIHN0YXRlcyBhbmQgaXRlcmF0b3IgaW5mb3JtYXRpb24sIHdoaWNoIGFyZSBwcmV0dHkgc2Vuc2l0aXZlIGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjIzLjgyMDY4MDQ5OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0ODg1NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBicGZfcmVnX3N0YXRlIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0zMj1lbnVtIGJwZl9pdGVyX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDozODpzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zOS1cXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOToyNC40OTU1NzQwMjNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3Njc1NDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyIEhlYWRlcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoZSBCUEYgdmVyaWZpZXIgaXMsIGFzIHdlIGFsbCBrbm93LCBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJdCdzIHRoZSBsaW5jaHBpbiBvZiBlQlBGJ3Mgc2VjdXJpdHkgbW9kZWwsIGVuc3VyaW5nIHRoYXQgdGhlIHByb2dyYW1zIHdlIGxvYWQgYXJlIHNhZmUgdG8gcnVuIGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgYXJvdW5kIGxpbmUgMzgg4oCTIHRoaXMgaXMgb2Z0ZW4gd2hlcmUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBpbml0aWFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgbG9jYXRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIHVzZWQgYnkgdGhlIHZlcmlmaWVyIGJlZm9yZSBnb2luZyBhbnkgZnVydGhlci4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBoZXJlOyB0aGluZ3MgbGlrZSBpbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbnMsIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZXMsIG9yIG1heWJlIHRoZSBpbml0aWFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBsb2dpYy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6MjcuNDcyMzMwODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTE4OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcbiAxMTk6XFx0XFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cXG4gMTIwOlxcdFxcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXFxuIDEyMTpcXHRcXHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXFxuIDEyMjpcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXFxuIDEyNDpcXHRcXHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjU6XFx0XFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXFxuIDEyNjpcXHRcXHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cXG4gMTI3OlxcdFxcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxcbiAxMjg6XFx0XFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXFxuIDEyOTpcXHRcXHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxcbiAxMzA6XFx0XFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQncyBmcmVlZC5cXG4gMTMxOlxcdFxcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXFxuIDEzMjpcXHRcXHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzM6XFx0XFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXFxuIDEzNDpcXHRcXHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXFxuIDEzNTpcXHRcXHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFxcXCJiZWxvbmdpbmdcXFwiIG9mIGEgcmVmZXJlbmNlXFxuIDEzNjpcXHRcXHQgKiB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIGJwZl9pdGVyLlxcbiAxMzc6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjI3LjQ3MjQ1NTc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTA5NTU0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gYnBmX3JlZ19zdGF0ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIHRoZSBgaXRlcmAgc3RydWN0IHdpdGhpbiB0aGUgYGJwZl9yZWdfc3RhdGVgIHVuaW9uLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGVyZSdzIHRoaXMgbmV3IGNoZWNrOiBgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWAgYmVmb3JlIGNvbXBhcmluZyBzb21lIGBpdGVyYCBmaWVsZHMsIGxpa2UgYGJ0ZmAuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gcHJldmVudCBhIGNvbXBhcmlzb24gaWYgdGhlIHJlZ2lzdGVyIHR5cGVzIGFyZSBkaWZmZXJlbnQsIHdoaWNoIHByb2JhYmx5IG1ha2VzIHNlbnNlIGluIG1vc3Qgc2NlbmFyaW9zLlxuXG5Ob3cgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gSWYgYG9sZF9yZWctXHUwMDNldHlwZWAgaXNuJ3QgYW4gaXRlcmF0b3IgdHlwZSwgdGhlbiBhY2Nlc3NpbmcgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgIGJlY29tZXMgYSByZWFkIGZyb20gdGhlIHVuaW9uLiBUaGlzIHVuaW9uIGlzIHBvcHVsYXRlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiB3aGF0IGB0eXBlYCBpcyBzZXQgdG8gaW4gYGJwZl9yZWdfc3RhdGVgLiBTbywgaWYgdGhhdCB1bmlvbidzIGZpZWxkcyBhcmUgdW5pbml0aWFsaXplZCwgb3IgY29udGFpbiBnYXJiYWdlIGRhdGEgYmVjYXVzZSBvZiBob3cgdGhlIHN0cnVjdHVyZSBpcyB1c2VkLCB0aGVuIHdlIGNvdWxkIGJlIGxvb2tpbmcgYXQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgcG90ZW50aWFsbHkuXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGFyZW4ndCBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIGluc3RhbmNlcyB0eXBpY2FsbHkgZnVsbHkgaW5pdGlhbGl6ZWQ/IE9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlbiB0aGUgYHR5cGVgIGlzIHNldCwgdGhlIGFzc29jaWF0ZWQgdW5pb24gZmllbGRzICpzaG91bGQqIGJlIHdyaXR0ZW4gdG8/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIE1heWJlIGlmIHRoZSB0eXBlIGlzIGBTQ0FMQVJfVkFMVUVgLCB0aGUgdW5pb24gaXNuJ3QgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBjaGVjayBob3cgYGJwZl9yZWdfc3RhdGVgIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoYXQgc3RydWN0IGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTozMi41MjM0MTMyMzJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTM2MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcmtfcmVnX3Vua25vd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz02NjE9c3RhdGljIF9faW5pdCBpbnQgdW5ib3VuZF9yZWdfaW5pdCh2b2lkKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjYyLXtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY2MzpcXHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoXFx1MDAyNnVuYm91bmRfcmVnKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY2NC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NDI9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzYxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NjI6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2My1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzY1PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NjktXFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NzA6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcxLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDk4PXN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTMyLS8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMzM6dm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEzNC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0My0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0NDpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0Ni17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNDc6XFx0YnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDgtXFx0cmVnLVxcdTAwM2VwcmVjaXNlID0gIWVudi1cXHUwMDNlYnBmX2NhcGFibGU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE1MC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1MTpzdGF0aWMgdm9pZCBtYXJrX3JlZ191bmtub3duKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNTItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTUzLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1NDpcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICsgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTU1LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTc3PXZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE3OS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxODA6XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE4MS1cXHRyZWctXFx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTg0PXN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE5MS1cXHRjYXNlIFNDQUxBUl9WQUxVRTpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE5MjpcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTkzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMwNzM9c3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk4LVxcdFxcdGlmICh0ID09IERTVF9PUClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzA5OTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTAwLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjYwPXN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2OTktXFx0XFx0LyogaGF2ZSByZWFkIG1pc2MgZGF0YSBmcm9tIHRoZSBzdGFjayAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzAwOlxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCBzdGF0ZS1cXHUwMDNlcmVncywgZHN0X3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzcwMS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5MD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMTYtXFx0XFx0aWYgKHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYxMTc6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExOC1cXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2Ny1cXHRcXHRcXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTY4OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxNjktXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMDAtXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiAodCA9PSBCUEZfUkVBRCB8fCByZG9ubHlfbWVtKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjIwMTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjAyLVxcdH0gZWxzZSBpZiAocmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19DVFgpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjIzLVxcdFxcdFxcdFxcdGlmIChpbmZvLmlzX3JldHZhbCBcXHUwMDI2XFx1MDAyNiBnZXRfZnVuY19yZXR2YWxfcmFuZ2UoZW52LVxcdTAwM2Vwcm9nLCBcXHUwMDI2cmFuZ2UpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyMjQ6XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjIyNS1cXHRcXHRcXHRcXHRcXHRlcnIgPSBfX21hcmtfcmVnX3MzMl9yYW5nZShlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMjktXFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjIzMDpcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjMxLVxcdFxcdFxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjcwLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI3MTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjcyLVxcdH0gZWxzZSBpZiAocmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19GTE9XX0tFWVMpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjgxLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI4MjpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjgzLVxcdH0gZWxzZSBpZiAodHlwZV9pc19za19wb2ludGVyKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjkwLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTE6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI5Mi1cXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI5NC1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiB0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTU6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI5Ni1cXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzIyLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgKHJkb25seV9tZW0gfHwgdCA9PSBCUEZfUkVBRCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMjM6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMyNC1cXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fQVJFTkEpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMyNS1cXHRcXHRpZiAodCA9PSBCUEZfUkVBRCBcXHUwMDI2XFx1MDAyNiB2YWx1ZV9yZWdubyBcXHUwMDNlPSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzI2OlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjctXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjEzPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjcwNC1cXHRcXHRcXHRpZiAoY2xvYmJlcikge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzA1OlxcdFxcdFxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3MDYtXFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1MDA9c3RhdGljIHZvaWQgbWF5YmVfd2lkZW5fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzUwOC1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc1MDk6XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmN1cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1MTAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkzODM9c3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0MzQtXFx0XFx0aWYgKCFzdWJwcm9nX3JldHVybnNfdm9pZChlbnYsIHN1YnByb2cpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0MzU6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci1cXHUwMDNlcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQzNi1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyMDU9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0NjEtXFx0XFx0Lyogc2V0cyB0eXBlIHRvIFNDQUxBUl9WQUxVRSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQ2MjpcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2NzgtXFx0XFx0XFx0Y2xlYXJfYWxsX3BrdF9wb2ludGVycyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDY3OTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2ODAtXFx0XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5Mzk9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTU6XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk2LVxcdFxcdGVyciA9IF9fbWFya19yZWdfczMyX3JhbmdlKGVudiwgcmVncywgQlBGX1JFR18wLCAtTUFYX0VSUk5PLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNjktXFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE3MDpcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNzEtXFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTgxLVxcdFxcdFxcdC8qIGtmdW5jIHJldHVybmluZyAndm9pZCAqJyBpcyBlcXVpdmFsZW50IHRvIHJldHVybmluZyBzY2FsYXIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxODI6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTgzLVxcdFxcdH0gZWxzZSBpZiAoIV9fYnRmX3R5cGVfaXNfc3RydWN0KHB0cl90eXBlKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNDUwPXN0YXRpYyBpbnQgc2FuaXRpemVfc3BlY3VsYXRpdmVfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDYwLVxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYxOlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NjItXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYzOlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NjQ6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ2NS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM2ODM9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzA1LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzcwNjpcXHRcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MDctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MTItXFx0XFx0aWYgKG9wY29kZSA9PSBCUEZfU1VCIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzEzOlxcdFxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzcxNC1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDYxMD1zdGF0aWMgaW50IGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MjAtXFx0aWYgKCFpc19zYWZlX3RvX2NvbXB1dGVfZHN0X3JlZ19yYW5nZShpbnNuLCBcXHUwMDI2c3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2MjE6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjIyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NzY4PXN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxNS1cXHRcXHRcXHRcXHRpZiAob3Bjb2RlID09IEJQRl9TVUIgXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2VhbGxvd19wdHJfbGVha3MpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4MTY6XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxNy1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkzNj1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTMtXFx0XFx0XFx0XFx0XFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5OTQ6XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5NS1cXHRcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IDEpIC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDIwLVxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDIxOlxcdFxcdFxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMjItXFx0XFx0XFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDU1LVxcdFxcdFxcdFxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDU2OlxcdFxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA1Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNjYtXFx0XFx0XFx0LyogY2xlYXIgYW55IHN0YXRlIF9fbWFya19yZWdfa25vd24gZG9lc24ndCBzZXQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNjc6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA2OC1cXHRcXHRcXHRyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLnR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxOTE9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjYzLVxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9BUkVOQSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI2NDpcXHRcXHRcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNjUtXFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlbWFwX3B0ciA9IG1hcDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjMxMz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNjktXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzcwOlxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM3MS1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NDExPXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDgzLVxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg0ODQ6XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODQ4NS1cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZy1cXHUwMDNlYXJnX3R5cGUgPT0gQVJHX1BUUl9UT19EWU5QVFIpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODUwOS1cXHRcXHRcXHRcXHQvKiBjYWxsZXIgY2FuIHBhc3MgZWl0aGVyIFBUUl9UT19BUkVOQSBvciBTQ0FMQVIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg1MTA6XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODUxMS1cXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTozMi41NzM1NTI3NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMzAwMTYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCB3ZSdyZSBsb29raW5nIGF0LCBzdW1tYXJpemVkIGZyb20gdGhlIGluc2lkZTpcblxuKipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllcjogQSBGb2N1cyBvbiBgX19tYXJrX3JlZ191bmtub3duYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX21hcmtfcmVnX3Vua25vd25gIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBCUEYgdmVyaWZpZXIncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgY3JpdGljYWwgcm9sZSBvZiByZWdpc3RlciBzdGF0ZSB0cmFja2luZyBpbiBCUEYgc2FmZXR5LiBgX19tYXJrX3JlZ191bmtub3duYCBsaWtlbHkgcGxheXMgYSBwYXJ0IGluIGluaXRpYWxpemluZyBvciByZXNldHRpbmcgYSByZWdpc3RlcidzIGtub3duIHN0YXRlIHdpdGhpbiB0aGUgdmVyaWZpZXIuIEl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBoYW5kbGluZyB1bmRlZmluZWQgdmFsdWVzIG9yIHVudHJ1c3RlZCBkYXRhIGNvbWluZyBpbnRvIGEgQlBGIHByb2dyYW0uIEkgaW1hZ2luZSBpdCdzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgY29udHJvbCBmbG93IGV4cGxvaXRzIGFuZCBkYXRhIGxlYWtzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY2lyY3Vtc3RhbmNlcyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkOiB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIHRyaWdnZXIgaXQsIGFuZCB3aGF0J3MgdGhlIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIHZlcmlmaWVyJ3Mgc3RhdGUgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMga2V5IC0gd2hhdCBzZWN1cml0eSB0aHJlYXRzIGlzIGl0IGF0dGVtcHRpbmcgdG8gbWl0aWdhdGU/IEFsc28sIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/IElzIGl0IGVmZmljaWVudCwgb3IgaXMgaXQgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHZlcmlmaWVyIGZ1bmN0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjM2LjQ3NjU1Njc1NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTMzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTMzOlxcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMjEzNDpcXHR7XFxuMjEzNTpcXHRcXHRtZW1zZXQocmVnLCAwLCBzaXplb2YoKnJlZykpO1xcbjIxMzY6XFx0XFx0cmVnLVxcdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xcbjIxMzc6XFx0XFx0cmVnLVxcdTAwM2V2YXJfb2ZmID0gdG51bV91bmtub3duO1xcbjIxMzg6XFx0XFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcXG4yMTM5OlxcdH1cXG4yMTQwOlxcdFxcbjIxNDE6XFx0LyogTWFyayBhIHJlZ2lzdGVyIGFzIGhhdmluZyBhIGNvbXBsZXRlbHkgdW5rbm93biAoc2NhbGFyKSB2YWx1ZSxcXG4yMTQyOlxcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cXG4yMTQzOlxcdCAqL1xcbjIxNDQ6XFx0c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMjE0NTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4yMTQ2OlxcdHtcXG4yMTQ3OlxcdFxcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShyZWcpO1xcbjIxNDg6XFx0XFx0cmVnLVxcdTAwM2VwcmVjaXNlID0gIWVudi1cXHUwMDNlYnBmX2NhcGFibGU7XFxuMjE0OTpcXHR9XFxuMjE1MDpcXHRcXG4yMTUxOlxcdHN0YXRpYyB2b2lkIG1hcmtfcmVnX3Vua25vd24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMTUyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MgKyByZWdubyk7XFxuMjE1NTpcXHR9XFxuMjE1NjpcXHRcXG4yMTU3OlxcdHN0YXRpYyBpbnQgX19tYXJrX3JlZ19zMzJfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMTU4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLFxcbjIxNTk6XFx0XFx0XFx0XFx0XFx0dTMyIHJlZ25vLFxcbjIxNjA6XFx0XFx0XFx0XFx0XFx0czMyIHMzMl9taW4sXFxuMjE2MTpcXHRcXHRcXHRcXHRcXHRzMzIgczMyX21heClcXG4yMTYyOlxcdHtcXG4yMTYzOlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICsgcmVnbm87XFxuMjE2NDpcXHRcXG4yMTY1OlxcdFxcdHJlZ19zZXRfc3JhbmdlMzIocmVnLFxcbjIxNjY6XFx0XFx0XFx0XFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXFxuMjE2NzpcXHRcXHRcXHRcXHQgbWluX3QoczMyLCByZWdfczMyX21heChyZWcpLCBzMzJfbWF4KSk7XFxuMjE2ODpcXHRcXHRyZWdfc2V0X3NyYW5nZTY0KHJlZyxcXG4yMTY5OlxcdFxcdFxcdFxcdCBtYXhfdChzNjQsIHJlZ19zbWluKHJlZyksIHMzMl9taW4pLFxcbjIxNzA6XFx0XFx0XFx0XFx0IG1pbl90KHM2NCwgcmVnX3NtYXgocmVnKSwgczMyX21heCkpO1xcbjIxNzE6XFx0XFxuMjE3MjpcXHRcXHRyZWdfYm91bmRzX3N5bmMocmVnKTtcXG4yMTczOlxcdFxcbjIxNzQ6XFx0XFx0cmV0dXJuIHJlZ19ib3VuZHNfc2FuaXR5X2NoZWNrKGVudiwgcmVnLCBcXFwiczMyX3JhbmdlXFxcIik7XFxuMjE3NTpcXHR9XFxuMjE3NjpcXHRcXG4yMTc3OlxcdHZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMjE3ODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIxNzk6XFx0e1xcbjIxODA6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG4yMTgxOlxcdFxcdHJlZy1cXHUwMDNldHlwZSA9IE5PVF9JTklUO1xcbjIxODI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTozNi40Nzc3MzIwNzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2OTY3OTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVnaXN0ZXIgU3RhdGUgSGFuZGxpbmcgaW4gQlBGKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxpbmcgYG1lbXNldGAgb24gdGhlIHJlZ2lzdGVyLCBzcGVjaWZpY2FsbHkgemVyb2luZyBvdXQgdGhlIGVudGlyZSB1bmlvbi4gVGhhdCBtYWtlcyBpbW1lZGlhdGUgc2Vuc2U7IG1hcmtpbmcgc29tZXRoaW5nIFwidW5rbm93blwiIHNob3VsZCBpbnZvbHZlIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IGhlbGQgdmFsdWUsIHJpZ2h0PyBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gcmVhbGx5IGhpdHMgbWU6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG90aGVyIGRhdGEgdHlwZXMgcmVwcmVzZW50ZWQgYnkgdGhhdCB1bmlvbj8gVGhpcyB6ZXJvaW5nIGFjdGlvbiBhZmZlY3RzIGV2ZXJ5dGhpbmcuIEFyZSB0aGVyZSBhbnkgY29kZSBwYXRocyB3aGVyZSBhIHJlZ2lzdGVyJ3MgYHJlZy1cdTAwM2V0eXBlYCBpcyBtb2RpZmllZCB3aXRob3V0IGFsc28gZW5zdXJpbmcgdGhlIHVuaW9uIGlzIGNsZWFyZWQ/IFRoYXQgY291bGQgYmUgYSBzZXJpb3VzIGlzc3VlLiBUbyBwcm9wZXJseSBmaWd1cmUgdGhpcyBvdXQgSSBzaG91bGQgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBmaWxlOyB0aGF0J3Mgd2hlcmUgYHN0YWNrc2FmZWAgaXMgaGFuZGxlZCwgYW5kIGxpa2VseSByZWxhdGVkIHN0YXRlIG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWdpc3RlciBsaWZlY3ljbGUgbW9yZSB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6NDAuMDQ3NDE0NDlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdFxcdFxcdCAqIHN1Y2ggdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudC5cXG4gNzkxOlxcdFxcdFxcdFxcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXFxuIDc5MjpcXHRcXHRcXHRcXHQgKi9cXG4gNzkzOlxcdFxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXFxuIDc5NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXFxuIDc5NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc5NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzk3OlxcdFxcdFxcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbiA3OTg6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDc5OTpcXHRcXHRcXHRcXHRjdXJfcmVnID0gXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODAwOlxcdFxcdFxcdFxcdGlmIChvbGRfcmVnLVxcdTAwM2VkeW5wdHIudHlwZSAhPSBjdXJfcmVnLVxcdTAwM2VkeW5wdHIudHlwZSB8fFxcbiA4MDE6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWR5bnB0ci5maXJzdF9zbG90ICE9IGN1cl9yZWctXFx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XFxuIDgwMjpcXHRcXHRcXHRcXHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VpZCwgY3VyX3JlZy1cXHUwMDNlaWQsIGlkbWFwKSB8fFxcbiA4MDM6XFx0XFx0XFx0XFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cXHUwMDNlcGFyZW50X2lkLCBjdXJfcmVnLVxcdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSlcXG4gODA0OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODA1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4MDY6XFx0XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbiA4MDc6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgwODpcXHRcXHRcXHRcXHRjdXJfcmVnID0gXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODA5OlxcdFxcdFxcdFxcdC8qIGl0ZXIuZGVwdGggaXMgbm90IGNvbXBhcmVkIGJldHdlZW4gc3RhdGVzIGFzIGl0XFxuIDgxMDpcXHRcXHRcXHRcXHQgKiBkb2Vzbid0IG1hdHRlciBmb3IgY29ycmVjdG5lc3MgYW5kIHdvdWxkIG90aGVyd2lzZVxcbiA4MTE6XFx0XFx0XFx0XFx0ICogcHJldmVudCBjb252ZXJnZW5jZTsgd2UgbWFpbnRhaW4gaXQgb25seSB0byBwcmV2ZW50XFxuIDgxMjpcXHRcXHRcXHRcXHQgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZVxcbiA4MTM6XFx0XFx0XFx0XFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXFxuIDgxNDpcXHRcXHRcXHRcXHQgKi9cXG4gODE1OlxcdFxcdFxcdFxcdGlmIChvbGRfcmVnLVxcdTAwM2V0eXBlICE9IGN1cl9yZWctXFx1MDAzZXR5cGUgfHxcXG4gODE2OlxcdFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLmJ0ZiB8fFxcbiA4MTc6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkIHx8XFxuIDgxODpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLnN0YXRlIHx8XFxuIDgxOTpcXHRcXHRcXHRcXHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVxcdTAwM2VpdGVyLmRlcHRoLCBzZWUgYWJvdmUgKi9cXG4gODIwOlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZWlkLCBjdXJfcmVnLVxcdTAwM2VpZCwgaWRtYXApKVxcbiA4MjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgyMzpcXHRcXHRcXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbiA4MjQ6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgyNTpcXHRcXHRcXHRcXHRjdXJfcmVnID0gXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODI2OlxcdFxcdFxcdFxcdGlmICghY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZWlkLCBjdXJfcmVnLVxcdTAwM2VpZCwgaWRtYXApIHx8XFxuIDgyNzpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXJxLmtmdW5jX2NsYXNzICE9IGN1cl9yZWctXFx1MDAzZWlycS5rZnVuY19jbGFzcylcXG4gODI4OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODI5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4MzA6XFx0XFx0XFx0Y2FzZSBTVEFDS19NSVNDOlxcbiA4MzE6XFx0XFx0XFx0Y2FzZSBTVEFDS19aRVJPOlxcbiA4MzI6XFx0XFx0XFx0Y2FzZSBTVEFDS19JTlZBTElEOlxcbiA4MzM6XFx0XFx0XFx0Y2FzZSBTVEFDS19QT0lTT046XFxuIDgzNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODM1OlxcdFxcdFxcdC8qIEVuc3VyZSB0aGF0IG5ldyB1bmhhbmRsZWQgc2xvdCB0eXBlcyByZXR1cm4gZmFsc2UgYnkgZGVmYXVsdCAqL1xcbiA4MzY6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gODM3OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODM4OlxcdFxcdFxcdH1cXG4gODM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6NDAuMDQ3NTcwMzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4NTEyMzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzdGFja3NhZmVgIExvZ2ljKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGBzdGFja3NhZmVgIGlzIGhhbmRsaW5nIHRoZSBjb21wYXJpc29uLiBJdCdzIGNoZWNraW5nIGBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV1gLiBJZiBpdCdzIGEgYFNUQUNLX0lURVJgLCB0aGVuIGl0IGFjY2Vzc2VzIGBvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHJgLiBCdXQgaG9sZCBvbiwgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZWAgaXMgYW4gYXJyYXkgb2YgYHU4YCwgc28gZG9lcyBgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgIG1lYW4gYG9sZF9yZWctXHUwMDNldHlwZWAgaXMgYW4gaXRlcmF0b3IgdHlwZT9cblxuQWN0dWFsbHksIGBvbGRfcmVnYCBpc24ndCBhIHJlZ2lzdGVyIGRpcmVjdGx5OyBpdCdzIGBzcGlsbGVkX3B0cmAuIEhtbSwgbm93IEkgc2VlIHRoZSBwb3RlbnRpYWwgaXNzdWUuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGNvbXBhcmluZyBgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgd2l0aCBgY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgd2l0aG91dCBleHBsaWNpdGx5IGNoZWNraW5nIGBvbGRfcmVnLVx1MDAzZXR5cGVgIGJlZm9yZWhhbmQuIFRoZSBwYXRjaCAqZG9lcyogYWRkIGEgY2hlY2sgYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgLCB3aGljaCBpcyBnb29kLiBCdXQgYmVmb3JlIHRoZSBwYXRjaCwgaWYgdGhlIHR5cGVzIHdlcmUgZGlmZmVyZW50LCB0aGUgY29tcGFyaXNvbiBjb3VsZCBoYXZlIHJldHVybmVkIHRydWUgYWNjaWRlbnRhbGx5IGlmIHRoZSBvdGhlciBmaWVsZHMsIGJ5IGNvaW5jaWRlbmNlLCBoYXBwZW5lZCB0byBiZSBlcXVhbC5cblxuVGhlIG1haW4gY29uY2VybiBiZWZvcmUgdGhlIHBhdGNoIGlzIHRoYXQgaXQgd2FzIHNpbXBseSBjb21wYXJpbmcgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgIGFuZCBgY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmAuIFRoaXMgbWVhbnMgaWYgdGhvc2UgYGJ0ZmAgdmFsdWVzIGhhcHBlbmVkIHRvIGJlIHRoZSBzYW1lLCB0aGUgY29kZSBjb3VsZCBoYXZlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgdGhlbSBlcXVpdmFsZW50LiBUaGUgZGFuZ2VyIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJZiBgb2xkX3JlZ2AgaXMgYSBgc3BpbGxlZF9wdHJgLCBhbmQgaXQgKmlzbid0KiBhbiBpdGVyYXRvciwgaXRzIHVuaW9uIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIGxlYWRpbmcgdG8gYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgd2FpdCEgSWYgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXSA9PSBTVEFDS19JVEVSYCwgdGhlbiBgb2xkX3JlZ2Agc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCBhcyBhbiBpdGVyYXRvci5cblxuSG93ZXZlciwgd2hhdCBpZiBgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgIGFuZCBgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgICpidXQqIHRoZWlyIGBzcGlsbGVkX3B0ci50eXBlYCB2YWx1ZXMgYXJlIGRpZmZlcmVudD8gSXMgaXQgZXZlbiAqcG9zc2libGUqIGZvciBgc3BpbGxlZF9wdHIudHlwZWAgdG8gYmUgZGlmZmVyZW50IHdoZW4gYm90aCBzbG90cyBhcmUgbWFya2VkIGFzIGBTVEFDS19JVEVSYD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgU1RBQ0tfSVRFUmAgaXMgc2V0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBwb3RlbnRpYWwgZWRnZSBjYXNlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTo0Ny40MzI2OTYxOTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTI1ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNUQUNLX0lURVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9sb2cuYz00OTc9c3RhdGljIGNoYXIgc2xvdF90eXBlX2NoYXJbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNTAyLVxcdFtTVEFDS19EWU5QVFJdXFx0PSAnZCcsXFxua2VybmVsL2JwZi9sb2cuYzo1MDM6XFx0W1NUQUNLX0lURVJdXFx0PSAnaScsXFxua2VybmVsL2JwZi9sb2cuYy01MDQtXFx0W1NUQUNLX0lSUV9GTEFHXSA9ICdmJyxcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmM9NzExPXZvaWQgcHJpbnRfdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9sb2cuYy03NzQtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9sb2cuYzo3NzU6XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbmtlcm5lbC9icGYvbG9nLmMtNzc2LVxcdFxcdFxcdC8qIG9ubHkgbWFpbiBzbG90IGhhcyBpZCBzZXQ7IHNraXAgb3RoZXJzICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM5OD1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMzLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDM0OlxcdFxcdFxcdGlmIChzdHlwZSA9PSBTVEFDS19EWU5QVFIgfHwgc3R5cGUgPT0gU1RBQ0tfSVRFUiB8fFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDM1LVxcdFxcdFxcdCAgICBzdHlwZSA9PSBTVEFDS19JUlFfRkxBRylcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9NzAyPXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA1LVxcdFxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODA2OlxcdFxcdGNhc2UgU1RBQ0tfSVRFUjpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgwNy1cXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTE5MD1zdGF0aWMgYm9vbCBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTk4LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGF0ZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExOTk6XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzdGFja1tpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfSVRFUilcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDAtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE1PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBCUEZfUkVHX1NJWkU7IGorKylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTUwOlxcdFxcdFxcdHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSA9IFNUQUNLX0lURVI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk1MS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05ODY9c3RhdGljIGJvb2wgaXNfaXRlcl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNS1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDY6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSA9PSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA3LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDEzPXN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzctXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM4OlxcdFxcdFxcdGlmIChzbG90LVxcdTAwM2VzbG90X3R5cGVbal0gIT0gU1RBQ0tfSVRFUilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzOS1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTU1PXN0YXRpYyBpbnQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwLSAqICAgLSBkeW5wdHIgc3RhdGUgKFNUQUNLX0RZTlBUUik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExODE6ICogICAtIGl0ZXIgc3RhdGUgKFNUQUNLX0lURVIpLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyLSAqICAgLSBpcnEgZmxhZyBzdGF0ZSAoU1RBQ0tfSVJRX0ZMQUcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE4ND1zdGF0aWMgYm9vbCBpc19zdGFja19zbG90X3NwZWNpYWwoY29uc3Qgc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MC1cXHRjYXNlIFNUQUNLX0RZTlBUUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MTpcXHRjYXNlIFNUQUNLX0lURVI6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTItXFx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MDUxPXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1NS1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MDU2OlxcdHUzMiBjbGVhcl9tYXNrID0gKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfSVRFUik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjQ3LjUxODYyNTk0OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg4NzQxNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyJ3MgUkNVIFByb3RlY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWV0aGluZyB0aGF0J3MgYmVlbiBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgUkNVLXByb3RlY3RlZCByZWZlcmVuY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2Agd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgbG9naWMgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIG1lbW9yeSBzYWZldHkgYW5kIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVuIEJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIFJDVS1wcm90ZWN0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGl0cyBzcGVjaWZpYyBjaGVja3MgYW5kIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBpbnZhbGlkYXRlcyB0aG9zZSByZWZzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFdoYXQncyB0aGUgY29udGV4dCwgd2hhdCBvdGhlciBmdW5jdGlvbnMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJJ20gY3VyaW91cyB3aGF0IGtpbmQgb2YgYXNzdW1wdGlvbnMgdGhlIGRlc2lnbiBtYWtlcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjUwLjkwNzM2OTkwM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDUxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MDUxOlxcdHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuOTA1MjpcXHR7XFxuOTA1MzpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcXG45MDU0OlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XFxuOTA1NTpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbjkwNTY6XFx0XFx0dTMyIGNsZWFyX21hc2sgPSAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19JVEVSKTtcXG45MDU3OlxcdFxcbjkwNTg6XFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayhlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XFxuOTA1OTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1JDVSkge1xcbjkwNjA6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2V0eXBlIFxcdTAwMjY9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTtcXG45MDYxOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xcbjkwNjI6XFx0XFx0XFx0fVxcbjkwNjM6XFx0XFx0fSkpO1xcbjkwNjQ6XFx0fVxcbjkwNjU6XFx0XFxuOTA2NjpcXHRzdGF0aWMgaW50IHJlZl9jb252ZXJ0X2FsbG9jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkKVxcbjkwNjc6XFx0e1xcbjkwNjg6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG45MDY5OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuOTA3MDpcXHRcXHRpbnQgZXJyO1xcbjkwNzE6XFx0XFxuOTA3MjpcXHRcXHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVxcdTAwM2VjdXJfc3RhdGUsIGlkKTtcXG45MDczOlxcdFxcbjkwNzQ6XFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIHN0YXRlLCByZWcsICh7XFxuOTA3NTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VpZCAhPSBpZClcXG45MDc2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjkwNzc6XFx0XFx0XFx0aWYgKChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fQUxMT0MpIFxcdTAwMjZcXHUwMDI2IChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUEVSQ1BVKSkge1xcbjkwNzg6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2VpZCA9IDA7XFxuOTA3OTpcXHRcXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfk1FTV9BTExPQztcXG45MDgwOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSB8PSBNRU1fUkNVO1xcbjkwODE6XFx0XFx0XFx0fVxcbjkwODI6XFx0XFx0fSkpO1xcbjkwODM6XFx0XFxuOTA4NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjkwODU6XFx0fVxcbjkwODY6XFx0XFxuOTA4NzpcXHRzdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjkwODg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzKVxcbjkwODk6XFx0e1xcbjkwOTA6XFx0XFx0aW50IGk7XFxuOTA5MTpcXHRcXG45MDkyOlxcdFxcdC8qIGFmdGVyIHRoZSBjYWxsIHJlZ2lzdGVycyByMCAtIHI1IHdlcmUgc2NyYXRjaGVkICovXFxuOTA5MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkrKykge1xcbjkwOTQ6XFx0XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxuOTA5NTpcXHRcXHRcXHRfX2NoZWNrX3JlZ19hcmcoZW52LCByZWdzLCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG45MDk2OlxcdFxcdH1cXG45MDk3OlxcdH1cXG45MDk4OlxcdFxcbjkwOTk6XFx0c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuOTEwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTo1MC45MDgzOTQ2MjNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyMDc5OTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSQ1UgUmVmZXJlbmNlIEludmFsaWRhdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGlzIHRvdWNoaW5nIHJlZ2lzdGVycyB0YWdnZWQgd2l0aCBgTUVNX1JDVWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFzcCBob3cgaXQgZG9lcyB0aGF0LiBJdCdzIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByZWdpc3RlcnMgaW4gdGhlIHZlcmlmaWVyIHN0YXRlIOKAkyBpbnRlcmVzdGluZy4gQW5kIGl0J3MgaW5jbHVkaW5nIHN0YWNrIHNsb3RzIGlmIHRoZXkgbWF0Y2ggYGNsZWFyX21hc2tgLiBBaCwgcmlnaHQsIGBjbGVhcl9tYXNrYCBjb250YWlucyBgU1RBQ0tfSVRFUmAuIFRoaXMgbWVhbnMgaXQncyBsb29waW5nIHRocm91Z2ggYFNUQUNLX0lURVJgIHNsb3RzIHNwZWNpZmljYWxseSBhbmQgY2hlY2tpbmcgYHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVYC5cblxuQnV0IHRoZW4gaXQgaGl0IG1lOiBpZiBgcmVnLVx1MDAzZXR5cGVgIGlzIHNvbWV0aGluZyBsaWtlIGBQVFJfVE9fU1RBQ0tgLCB3b3VsZG4ndCB0aGF0IHBvdGVudGlhbGx5ICpub3QqIGhhdmUgYE1FTV9SQ1VgIHNldD8gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCwgYW5kIGl0IHN1Z2dlc3RzIGEgcG9zc2libGUgc3VidGxlIGJ1ZyBvciBhIG1pc3NlZCBjb25uZWN0aW9uIGluIG15IHVuZGVyc3RhbmRpbmcuXG5cbkkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgYHJlZy1cdTAwM2V0eXBlYCAqc2hvdWxkKiBiZSB3aGVuIGEgc2xvdCBpcyBtYXJrZWQgYFNUQUNLX0lURVJgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxpbmNocGluLiBCZXR0ZXIgY2hlY2sgdGhlIGNvZGUgZm9yIGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGFuc3dlciBsaWVzLiBUaGlzIGVudGlyZSBsb2dpYyBoaW5nZXMgb24gaG93IHRoYXQgZnVuY3Rpb24gc2V0cyB1cCB0aGUgdHlwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTo1NS40MjkxOTY3ODhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTE1OlxcdHN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDkxNjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbiA5MTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBpbnNuX2lkeCxcXG4gOTE4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsIGludCBucl9zbG90cylcXG4gOTE5OlxcdHtcXG4gOTIwOlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XFxuIDkyMTpcXHRcXHRpbnQgc3BpLCBpLCBqLCBpZDtcXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxuIDkyNDpcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4gOTI1OlxcdFxcdFxcdHJldHVybiBzcGk7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XFxuIDkyODpcXHRcXHRpZiAoaWQgXFx1MDAzYyAwKVxcbiA5Mjk6XFx0XFx0XFx0cmV0dXJuIGlkO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfc2xvdHM7IGkrKykge1xcbiA5MzI6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpIC0gaV07XFxuIDkzMzpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdFxcdF9fbWFya19yZWdfa25vd25femVybyhzdCk7XFxuIDkzNjpcXHRcXHRcXHRzdC1cXHUwMDNldHlwZSA9IFBUUl9UT19TVEFDSzsgLyogd2UgZG9uJ3QgaGF2ZSBkZWRpY2F0ZWQgcmVnIHR5cGUgKi9cXG4gOTM3OlxcdFxcdFxcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKG1ldGEpKSB7XFxuIDkzODpcXHRcXHRcXHRcXHRpZiAoaW5fcmN1X2NzKGVudikpXFxuIDkzOTpcXHRcXHRcXHRcXHRcXHRzdC1cXHUwMDNldHlwZSB8PSBNRU1fUkNVO1xcbiA5NDA6XFx0XFx0XFx0XFx0ZWxzZVxcbiA5NDE6XFx0XFx0XFx0XFx0XFx0c3QtXFx1MDAzZXR5cGUgfD0gUFRSX1VOVFJVU1RFRDtcXG4gOTQyOlxcdFxcdFxcdH1cXG4gOTQzOlxcdFxcdFxcdHN0LVxcdTAwM2VpZCA9IGkgPT0gMCA/IGlkIDogMDtcXG4gOTQ0OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLmJ0ZiA9IGJ0ZjtcXG4gOTQ1OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLmJ0Zl9pZCA9IGJ0Zl9pZDtcXG4gOTQ2OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLnN0YXRlID0gQlBGX0lURVJfU1RBVEVfQUNUSVZFO1xcbiA5NDc6XFx0XFx0XFx0c3QtXFx1MDAzZWl0ZXIuZGVwdGggPSAwO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxuIDk1MDpcXHRcXHRcXHRcXHRzbG90LVxcdTAwM2VzbG90X3R5cGVbal0gPSBTVEFDS19JVEVSO1xcbiA5NTE6XFx0XFxuIDk1MjpcXHRcXHRcXHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpIC0gaSk7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHJldHVybiAwO1xcbiA5NTY6XFx0fVxcbiA5NTc6XFx0XFxuIDk1ODpcXHRzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDk1OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXFxuIDk2MDpcXHR7XFxuIDk2MTpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xcbiA5NjI6XFx0XFx0aW50IHNwaSwgaSwgajtcXG4gOTYzOlxcdFxcbiA5NjQ6XFx0XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjU1LjQzMDgwODU5OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMyNTU2ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWZXJpZmllciBCdWc6IEluY29uc2lzdGVudCBTdGF0ZSBNZXJnaW5nIHdpdGggUkNVLVByb3RlY3RlZCBJdGVyYXRvcnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGBzdC1cdTAwM2V0eXBlYCBmaWVsZCwgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBhIHN0YWNrIHNsb3QsIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIGBQVFJfVE9fU1RBQ0tgLCBgTUVNX1JDVWAsIGFuZCBgUFRSX1VOVFJVU1RFRGAuICBTcGVjaWZpY2FsbHksIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMsIHRoZSB0eXBlIGNhbiBiZSBgUFRSX1RPX1NUQUNLYCwgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgLCBvciBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzdGF0ZSBtZXJnaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCBSQ1UtcHJvdGVjdGVkIGl0ZXJhdG9ycy5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIGluIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIHR3byBzdGF0ZXMgYXJlIGVxdWl2YWxlbnQgZHVyaW5nIHN0YXRlIG1lcmdpbmcuICBQcmlvciB0byB0aGlzIHBhdGNoLCBgc3RhY2tzYWZlYCAqd2Fzbid0KiBjaGVja2luZyBgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWAgZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gVGhpcyBtZWFucyB0aGF0IGlmIG9uZSBzdGF0ZSBoYWQgYE1FTV9SQ1VgIGFuZCB0aGUgb3RoZXIgaGFkIGBQVFJfVU5UUlVTVEVEYCwgdGhleSB3b3VsZCBiZSBpbmNvcnJlY3RseSBjb25zaWRlcmVkIGVxdWl2YWxlbnQhIFRoaXMgaXMgYSBjbGFzc2ljIHZlcmlmaWVyIGJ1Zy5cblxuVGhlIHRlc3QgY2FzZSBpbiB0aGUgcGF0Y2gsIGBpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nYCwgaWxsdXN0cmF0ZXMgdGhpcyBwZXJmZWN0bHkuICBJdCBzZXRzIHVwIGEgc2NlbmFyaW8gd2hlcmUgYW4gaXRlcmF0b3IgaXMgY3JlYXRlZCB3aXRoaW4gYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNvZGUgdGhlbiBicmFuY2hlcywgd2l0aCBvbmUgcGF0aCAqa2VlcGluZyogdGhlIFJDVSBsb2NrIGFuZCB0aGUgb3RoZXIgKnJlbGVhc2luZyogYW5kICpyZS1hY3F1aXJpbmcqIGl0LCB0aHVzIGNyZWF0aW5nIGFuIHVucHJvdGVjdGVkIHdpbmRvdy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoZSBzdWJzZXF1ZW50IG1lcmdlLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgdmVyaWZpZXIsIGVuY291bnRlcmluZyB0d28gYFNUQUNLX0lURVJgIHNsb3RzIHdpdGggdGhlIHNhbWUgQlRGIElELCBldGMuLCB3b3VsZCBpbmNvcnJlY3RseSBkZWVtIHRoZSBzdGF0ZXMgZXF1aXZhbGVudCwgZGVzcGl0ZSB0aGUgZGlmZmVyZW5jZSBpbiBSQ1UgcHJvdGVjdGlvbiAoYE1FTV9SQ1VgIHZzLiBgUFRSX1VOVFJVU1RFRGApLlxuXG5gaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGlzIGtleS4gIEl0IGNoYW5nZXMgYE1FTV9SQ1VgIHRvIGBQVFJfVU5UUlVTVEVEYCB3aGVuIHRoZSBSQ1UgcHJvdGVjdGlvbiBpcyBsb3N0LiAgVGhlcmVmb3JlLCB0aGUgcGF0Y2ggcHJldmVudHMgdGhlIHZlcmlmaWVyIGZyb20gbWVyZ2luZyBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciAqaXMqIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIGl0ICppcyBub3QqIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLlxuXG5Ob3csIGlmIHRoZSB2ZXJpZmllciAqZGlkKiBtZXJnZSB0aGVzZSBzdGF0ZXMsIGl0IGNvdWxkIGxlYWQgdG8gYSBzZXJpb3VzIGlzc3VlLiBgYnBmX2l0ZXJfdGFza19uZXh0YCwgY3J1Y2lhbGx5LCByZXF1aXJlcyBhbiAqUkNVLXByb3RlY3RlZCogaXRlcmF0b3IuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcsIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyBhIEJQRiBwcm9ncmFtIHRvIGNhbGwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgb24gYW4gaXRlcmF0b3IgdGhhdCdzIG5vIGxvbmdlciBSQ1UtcHJvdGVjdGVkLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgYSBrZXJuZWwgbWVtb3J5IHNhZmV0eSBidWcsIHdoZW4gYGJwZl9pdGVyX3Rhc2tfbmV4dGAgdHJpZXMgdG8gYWNjZXNzIHRoZSB0YXNrIHN0cnVjdCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgcGFzc2VkLiBUaGUgdGVzdCBjYXNlIGV4cGxvaXRzIHRoaXMgd2l0aCB0aGUgdW5wcm90ZWN0ZWQgd2luZG93LCBhbGxvd2luZyB0aGUgaXRlcmF0b3IgdG8gYmVjb21lIGBQVFJfVU5UUlVTVEVEYC5cblxuVGhpcyB1c2UtYWZ0ZXItZnJlZSBpcywgdGhhbmtmdWxseSwgc29tZXRoaW5nIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGNhbiBjYXRjaC4gIEFzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgYHN0YWNrc2FmZWAgZG9lcyBjaGVjayB0aGUgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXWAgdG8gYmUgYFNUQUNLX0lOVkFMSURgLCBzbyBpdCBkb2Vzbid0IGFsbG93IGNvbXBhcmluZyB1bnJlbGF0ZWQgZGF0YS4gIFRoZSBwYXRjaCBqdXN0IGludHJvZHVjZXMgYSBuZWNlc3NhcnkgY2hlY2sgb2YgYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgIGZvciB0aGUgYFNUQUNLX0lURVJgIHR5cGUgZHVyaW5nIGBzdGFja3NhZmVgLiBUaGlzIGVuc3VyZXMgY29ycmVjdCBzdGF0ZSBtZXJnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDowOC43NTYzODA5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMixcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDI6XFx0c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbiA3MDM6XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbiA3MDQ6XFx0XFx0XFx0ICAgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4gNzA1OlxcdHtcXG4gNzA2OlxcdFxcdGludCBpLCBzcGk7XFxuIDcwNzpcXHRcXG4gNzA4OlxcdFxcdC8qIHdhbGsgc2xvdHMgb2YgdGhlIGV4cGxvcmVkIHN0YWNrIGFuZCBpZ25vcmUgYW55IGFkZGl0aW9uYWxcXG4gNzA5OlxcdFxcdCAqIHNsb3RzIGluIHRoZSBjdXJyZW50IHN0YWNrLCBzaW5jZSBleHBsb3JlZChzYWZlKSBzdGF0ZVxcbiA3MTA6XFx0XFx0ICogZGlkbid0IHVzZSB0aGVtXFxuIDcxMTpcXHRcXHQgKi9cXG4gNzEyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvbGQtXFx1MDAzZWFsbG9jYXRlZF9zdGFjazsgaSsrKSB7XFxuIDcxMzpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkX3JlZywgKmN1cl9yZWc7XFxuIDcxNDpcXHRcXHRcXHRpbnQgaW0gPSBpICUgQlBGX1JFR19TSVpFO1xcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRcXHRzcGkgPSBpIC8gQlBGX1JFR19TSVpFO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRcXHRpZiAoZXhhY3QgPT0gRVhBQ1QpIHtcXG4gNzE5OlxcdFxcdFxcdFxcdHU4IG9sZF90eXBlID0gb2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXTtcXG4gNzIwOlxcdFxcdFxcdFxcdHU4IGN1cl90eXBlID0gaSBcXHUwMDNjIGN1ci1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrID9cXG4gNzIxOlxcdFxcdFxcdFxcdFxcdCAgICAgIGN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gOiBTVEFDS19JTlZBTElEO1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRcXHRcXHRcXHQvKiBTVEFDS19JTlZBTElEIGFuZCBTVEFDS19QT0lTT04gYXJlIGVxdWl2YWxlbnQgZm9yIHBydW5pbmcgKi9cXG4gNzI0OlxcdFxcdFxcdFxcdGlmIChvbGRfdHlwZSA9PSBTVEFDS19QT0lTT04pXFxuIDcyNTpcXHRcXHRcXHRcXHRcXHRvbGRfdHlwZSA9IFNUQUNLX0lOVkFMSUQ7XFxuIDcyNjpcXHRcXHRcXHRcXHRpZiAoY3VyX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxcbiA3Mjc6XFx0XFx0XFx0XFx0XFx0Y3VyX3R5cGUgPSBTVEFDS19JTlZBTElEO1xcbiA3Mjg6XFx0XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gY3VyLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgfHwgb2xkX3R5cGUgIT0gY3VyX3R5cGUpXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczMDpcXHRcXHRcXHR9XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdFxcdGlmIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX0lOVkFMSUQgfHxcXG4gNzMzOlxcdFxcdFxcdCAgICBvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1BPSVNPTilcXG4gNzM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRcXHRpZiAoZW52LVxcdTAwM2VhbGxvd191bmluaXRfc3RhY2sgXFx1MDAyNlxcdTAwMjZcXG4gNzM3OlxcdFxcdFxcdCAgICBvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MpXFxuIDczODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0XFx0LyogZXhwbG9yZWQgc3RhY2sgaGFzIG1vcmUgcG9wdWxhdGVkIHNsb3RzIHRoYW4gY3VycmVudCBzdGFja1xcbiA3NDE6XFx0XFx0XFx0ICogYW5kIHRoZXNlIHNsb3RzIHdlcmUgdXNlZFxcbiA3NDI6XFx0XFx0XFx0ICovXFxuIDc0MzpcXHRcXHRcXHRpZiAoaSBcXHUwMDNlPSBjdXItXFx1MDAzZWFsbG9jYXRlZF9zdGFjaylcXG4gNzQ0OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzQ1OlxcdFxcbiA3NDY6XFx0XFx0XFx0LypcXG4gNzQ3OlxcdFxcdFxcdCAqIDY0IGFuZCAzMi1iaXQgc2NhbGFyIHNwaWxscyB2cyBNSVNDL0lOVkFMSUQgc2xvdHMgYW5kIHZpY2UgdmVyc2EuXFxuIDc0ODpcXHRcXHRcXHQgKiBMb2FkIGZyb20gTUlTQy9JTlZBTElEIHNsb3RzIHByb2R1Y2VzIHVuYm91bmQgc2NhbGFyLlxcbiA3NDk6XFx0XFx0XFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxcbiA3NTA6XFx0XFx0XFx0ICogcmVnc2FmZSgpIHRvIGVuc3VyZSBzY2FsYXIgaWRzIGFyZSBjb21wYXJlZC5cXG4gNzUxOlxcdFxcdFxcdCAqL1xcbiA3NTI6XFx0XFx0XFx0aWYgKGltID09IDAgfHwgaW0gPT0gNCkge1xcbiA3NTM6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xcbiA3NTQ6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xcbiA3NTU6XFx0XFx0XFx0XFx0aWYgKG9sZF9yZWcgXFx1MDAyNlxcdTAwMjYgY3VyX3JlZykge1xcbiA3NTY6XFx0XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcXG4gNzU3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzU4OlxcdFxcdFxcdFxcdFxcdGkgKz0gKGltID09IDAgPyBCUEZfUkVHX1NJWkUgLSAxIDogMyk7XFxuIDc1OTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzYwOlxcdFxcdFxcdFxcdH1cXG4gNzYxOlxcdFxcdFxcdH1cXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0XFx0LyogaWYgb2xkIHN0YXRlIHdhcyBzYWZlIHdpdGggbWlzYyBkYXRhIGluIHRoZSBzdGFja1xcbiA3NjQ6XFx0XFx0XFx0ICogaXQgd2lsbCBiZSBzYWZlIHdpdGggemVyby1pbml0aWFsaXplZCBzdGFjay5cXG4gNzY1OlxcdFxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxcbiA3NjY6XFx0XFx0XFx0ICovXFxuIDc2NzpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFxcdTAwMjZcXHUwMDI2XFxuIDc2ODpcXHRcXHRcXHQgICAgY3VyLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19aRVJPKVxcbiA3Njk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc3MDpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPVxcbiA3NzE6XFx0XFx0XFx0ICAgIGN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0pXFxuIDc3MjpcXHRcXHRcXHRcXHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cXG4gNzczOlxcdFxcdFxcdFxcdCAqIHRoaXMgc3RhY2sgc2xvdCwgYnV0IGN1cnJlbnQgaGFzIFNUQUNLX01JU0MgLVxcdTAwM2VcXG4gNzc0OlxcdFxcdFxcdFxcdCAqIHRoaXMgdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudCxcXG4gNzc1OlxcdFxcdFxcdFxcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXFxuIDc3NjpcXHRcXHRcXHRcXHQgKi9cXG4gNzc3OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzc4OlxcdFxcdFxcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXFxuIDc3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzgwOlxcdFxcdFxcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xcbiA3ODE6XFx0XFx0XFx0c3dpdGNoIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdKSB7XFxuIDc4MjpcXHRcXHRcXHRjYXNlIFNUQUNLX1NQSUxMOlxcbiA3ODM6XFx0XFx0XFx0XFx0Lyogd2hlbiBleHBsb3JlZCBhbmQgY3VycmVudCBzdGFjayBzbG90IGFyZSBib3RoIHN0b3JpbmdcXG4gNzg0OlxcdFxcdFxcdFxcdCAqIHNwaWxsZWQgcmVnaXN0ZXJzLCBjaGVjayB0aGF0IHN0b3JlZCBwb2ludGVycyB0eXBlc1xcbiA3ODU6XFx0XFx0XFx0XFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXFxuIDc4NjpcXHRcXHRcXHRcXHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXFxuIDc4NzpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTh9XFxuIDc4ODpcXHRcXHRcXHRcXHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XFxuIDc4OTpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxcbiA3OTA6XFx0XFx0XFx0XFx0ICogc3VjaCB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LlxcbiA3OTE6XFx0XFx0XFx0XFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcXG4gNzkyOlxcdFxcdFxcdFxcdCAqL1xcbiA3OTM6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4gNzk1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzk2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3OTc6XFx0XFx0XFx0Y2FzZSBTVEFDS19EWU5QVFI6XFxuIDc5ODpcXHRcXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gNzk5OlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MDA6XFx0XFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZWR5bnB0ci50eXBlICE9IGN1cl9yZWctXFx1MDAzZWR5bnB0ci50eXBlIHx8XFxuIDgwMTpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgIT0gY3VyX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MDguNzU2NTc4OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA4OTMwNDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YWNrIFNhZmV0eSBDaGVjayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgc3RhY2tzYWZlYCBjaGVjazpcblxuYGBgY1xuXHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gIT1cblx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuYGBgXG5cblJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgY2hlY2sgaXMgY29tcGFyaW5nIHRoZSBgc2xvdF90eXBlYCBvZiBhIHN0YWNrIHNsb3QgYmV0d2VlbiB0d28gc3RhdGVzLCBgb2xkYCBhbmQgYGN1cmAuIEZvciB0aGlzIGNoZWNrIHRvIGV2ZW4gYmUgcmVsZXZhbnQsICpib3RoKiBgb2xkYCBhbmQgYGN1cmAgbXVzdCBoYXZlIGBTVEFDS19JVEVSYCBhcyB0aGVpciBgc2xvdF90eXBlYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC5cblxuSWYgYm90aCBzdGF0ZXMgaGF2ZSBgU1RBQ0tfSVRFUmAsIHRoZW4gdGhhdCBpbXBsaWVzIGBvbGRfcmVnYCBhbmQgYGN1cl9yZWdgIGFyZSBib3RoIGluaXRpYWxpemVkIGFzIGl0ZXJhdG9ycywgdGhhbmtzIHRvIGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGBzdC1cdTAwM2V0eXBlID0gUFRSX1RPX1NUQUNLYCBhbmQgYWRkaW5nIGVpdGhlciBgTUVNX1JDVWAgb3IgYFBUUl9VTlRSVVNURURgLiBDcnVjaWFsbHksIGl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIHRob3NlIGBpdGVyYCB1bmlvbiBmaWVsZHM6IGBidGZgLCBgYnRmX2lkYCwgZXRjLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gaW5oZXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlIGR1cmluZyB0aGUgaW5pdGlhbCBpbml0aWFsaXphdGlvbiwgYXMgdGhlIGZpZWxkcyBhcmUgYWxsIHNldC5cblxuU28sIHRoZSBpc3N1ZSBpcyBhIHZlcmlmaWVyIGxvZ2ljIGJ1Zy4gSXQncyBmYWlsaW5nIHRvIGFjY3VyYXRlbHkgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFuIFJDVS1wcm90ZWN0ZWQgaXRlcmF0b3IgYW5kIGFuIHVudHJ1c3RlZCBpdGVyYXRvci4gVGhpcywgb2YgY291cnNlLCBjcmVhdGVzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBzY2VuYXJpby4gSWYgdGhlIHZlcmlmaWVyIG1pc3Rha2VubHkgYWxsb3dzIGFuIHVudHJ1c3RlZCBpdGVyYXRvciB0byBiZSB1c2VkICphZnRlciogdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLCB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzLiBGb3J0dW5hdGVseSwgS0FTQU4gd291bGQgY2F0Y2ggdGhhdCwgd2hpY2ggaXMgZ29vZC5cblxuQnV0IGlzIHRoZXJlIGEgcG9zc2liaWxpdHkgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCAqcmVzdWx0aW5nKiBmcm9tIHRoZSBsb2dpYyBidWc/XG5cbklmIHRoZSB2ZXJpZmllciwgZXJyb25lb3VzbHksIHRoaW5rcyBhbiB1bnRydXN0ZWQgaXRlcmF0b3IgaXMgUkNVLXByb3RlY3RlZCwgdGhhdCBhbGxvd3MgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgdG8gYmUgY2FsbGVkLiBBbmQgdGhpcyBhY2Nlc3NlcyB0aGUgdGFzayBzdHJ1Y3QuIElmIHRoYXQgYHRhc2tgIHN0cnVjdCBpcyBmcmVlZCwgaXQncyBhIFVBRi4gQnV0IFVBRnMgYXJlbid0IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGlrZSB2YXJpYWJsZXMgb24gdGhlIHN0YWNrIG5vdCBpbml0aWFsaXplZCwgb3IgaGVhcCBhbGxvY2F0aW9ucyBub3QgemVyb2VkLlxuXG5BaCwgYnV0IHdhaXQuLi4gY291bGQgYG9sZF9yZWctXHUwMDNldHlwZWAgYmUgKmNvbXBsZXRlbHkqIGRpZmZlcmVudCBpZiB0aGUgc3RhY2sgc2xvdCB3YXMgb3ZlcndyaXR0ZW4/IElmIHdlIGhhdmUgYSBgU1RBQ0tfSVRFUmAgc2xvdCwgYW5kIHNvbWV0aGluZyAqbGF0ZXIqIHdyaXRlcyBvdmVyIGl0LCB0aGVuIHllcywgdGhlIGBzbG90X3R5cGVgIHdvdWxkIGNoYW5nZS4gVGhlIHZlcmlmaWVyIHdvdWxkIGNoYW5nZSBpdCBmcm9tIGBTVEFDS19JVEVSYC5cblxuQW5kIHdoYXQgaWYgYSBCUEYgcHJvZ3JhbSBkaXJlY3RseSB3cml0ZXMgdG8gdGhhdCBzdGFjayBzbG90IGJ5dGUtYnktYnl0ZT8gSWYgdGhhdCBoYXBwZW5zIHRvIGEgYFNUQUNLX0lURVJgIHNsb3QsIHRoZSB2ZXJpZmllciB3aWxsICpjaGFuZ2UqIGl0cyBgc2xvdF90eXBlYCB0byBgU1RBQ0tfTUlTQ2Agb3IgYFNUQUNLX1pFUk9gLiBIbW0sIHRoYXQgc3VnZ2VzdHMgdGhlIGNvcmUgbGllcyBpbiBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgb3ZlcndyaXRlcyBhbmQgaG93IHRoYXQgaW1wYWN0cyB0aGUgY29tcGFyaXNvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBsb29raW5nIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoxOC44NDU4ODU4MjlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYzODpcXHRcXHQgKiByZWdfdW1heChyZWcpIGNhbid0IGJlIGJpZ2dlciB0aGFuIE1BWF9QQUNLRVRfT0ZGIHdoaWNoIGlzIDB4ZmZmZixcXG40NjM5OlxcdFxcdCAqIG90aGVyd2lzZSBmaW5kX2dvb2RfcGt0X3BvaW50ZXJzIHdvdWxkIGhhdmUgcmVmdXNlZCB0byBzZXQgcmFuZ2UgaW5mb1xcbjQ2NDA6XFx0XFx0ICogdGhhdCBfX2NoZWNrX21lbV9hY2Nlc3Mgd291bGQgaGF2ZSByZWplY3RlZCB0aGlzIHBrdCBhY2Nlc3MuXFxuNDY0MTpcXHRcXHQgKiBUaGVyZWZvcmUsIFxcXCJvZmYgKyByZWdfdW1heChyZWcpICsgc2l6ZSAtIDFcXFwiIHdvbid0IG92ZXJmbG93IHUzMi5cXG40NjQyOlxcdFxcdCAqL1xcbjQ2NDM6XFx0XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9wa3Rfb2Zmc2V0ID1cXG40NjQ0OlxcdFxcdFxcdG1heF90KHUzMiwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9wa3Rfb2Zmc2V0LFxcbjQ2NDU6XFx0XFx0XFx0ICAgICAgb2ZmICsgcmVnX3VtYXgocmVnKSArIHNpemUgLSAxKTtcXG40NjQ2OlxcdFxcbjQ2NDc6XFx0XFx0cmV0dXJuIDA7XFxuNDY0ODpcXHR9XFxuNDY0OTpcXHRcXG40NjUwOlxcdHN0YXRpYyBib29sIGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjQ2NTE6XFx0e1xcbjQ2NTI6XFx0XFx0cmV0dXJuIHJlc29sdmVfcHJvZ190eXBlKHByb2cpID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTDtcXG40NjUzOlxcdH1cXG40NjU0OlxcdFxcbjQ2NTU6XFx0LyogY2hlY2sgYWNjZXNzIHRvICdzdHJ1Y3QgYnBmX2NvbnRleHQnIGZpZWxkcy4gIFN1cHBvcnRzIGZpeGVkIG9mZnNldHMgb25seSAqL1xcbjQ2NTY6XFx0c3RhdGljIGludCBfX2NoZWNrX2N0eF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBpbnQgb2ZmLCBpbnQgc2l6ZSxcXG40NjU3OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxcbjQ2NTg6XFx0e1xcbjQ2NTk6XFx0XFx0aWYgKGVudi1cXHUwMDNlb3BzLVxcdTAwM2Vpc192YWxpZF9hY2Nlc3MgXFx1MDAyNlxcdTAwMjZcXG40NjYwOlxcdFxcdCAgICBlbnYtXFx1MDAzZW9wcy1cXHUwMDNlaXNfdmFsaWRfYWNjZXNzKG9mZiwgc2l6ZSwgdCwgZW52LVxcdTAwM2Vwcm9nLCBpbmZvKSkge1xcbjQ2NjE6XFx0XFx0XFx0LyogQSBub24gemVybyBpbmZvLmN0eF9maWVsZF9zaXplIGluZGljYXRlcyB0aGF0IHRoaXMgZmllbGQgaXMgYVxcbjQ2NjI6XFx0XFx0XFx0ICogY2FuZGlkYXRlIGZvciBsYXRlciB2ZXJpZmllciB0cmFuc2Zvcm1hdGlvbiB0byBsb2FkIHRoZSB3aG9sZVxcbjQ2NjM6XFx0XFx0XFx0ICogZmllbGQgYW5kIHRoZW4gYXBwbHkgYSBtYXNrIHdoZW4gYWNjZXNzZWQgd2l0aCBhIG5hcnJvd2VyXFxuNDY2NDpcXHRcXHRcXHQgKiBhY2Nlc3MgdGhhbiBhY3R1YWwgY3R4IGFjY2VzcyBzaXplLiBBIHplcm8gaW5mby5jdHhfZmllbGRfc2l6ZVxcbjQ2NjU6XFx0XFx0XFx0ICogd2lsbCBvbmx5IGFsbG93IGZvciB3aG9sZSBmaWVsZCBhY2Nlc3MgYW5kIHJlamVjdHMgYW55IG90aGVyXFxuNDY2NjpcXHRcXHRcXHQgKiB0eXBlIG9mIG5hcnJvd2VyIGFjY2Vzcy5cXG40NjY3OlxcdFxcdFxcdCAqL1xcbjQ2Njg6XFx0XFx0XFx0aWYgKGJhc2VfdHlwZShpbmZvLVxcdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xcbjQ2Njk6XFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZXJlZl9pZCBcXHUwMDI2XFx1MDAyNlxcbjQ2NzA6XFx0XFx0XFx0XFx0ICAgICFmaW5kX3JlZmVyZW5jZV9zdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgaW5mby1cXHUwMDNlcmVmX2lkKSkge1xcbjQ2NzE6XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJpbnZhbGlkIGJwZl9jb250ZXh0IGFjY2VzcyBvZmY9JWQuIFJlZmVyZW5jZSBtYXkgYWxyZWFkeSBiZSByZWxlYXNlZFxcXFxuXFxcIixcXG40NjcyOlxcdFxcdFxcdFxcdFxcdFxcdG9mZik7XFxuNDY3MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG40Njc0OlxcdFxcdFxcdFxcdH1cXG40Njc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuNDY3NjpcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmN0eF9maWVsZF9zaXplID0gaW5mby1cXHUwMDNlY3R4X2ZpZWxkX3NpemU7XFxuNDY3NzpcXHRcXHRcXHR9XFxuNDY3ODpcXHRcXHRcXHQvKiByZW1lbWJlciB0aGUgb2Zmc2V0IG9mIGxhc3QgYnl0ZSBhY2Nlc3NlZCBpbiBjdHggKi9cXG40Njc5OlxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X2N0eF9vZmZzZXQgXFx1MDAzYyBvZmYgKyBzaXplKVxcbjQ2ODA6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9jdHhfb2Zmc2V0ID0gb2ZmICsgc2l6ZTtcXG40NjgxOlxcdFxcdFxcdHJldHVybiAwO1xcbjQ2ODI6XFx0XFx0fVxcbjQ2ODM6XFx0XFxuNDY4NDpcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgYnBmX2NvbnRleHQgYWNjZXNzIG9mZj0lZCBzaXplPSVkXFxcXG5cXFwiLCBvZmYsIHNpemUpO1xcbjQ2ODU6XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuNDY4NjpcXHR9XFxuNDY4NzpcXHRcXG40Njg4OlxcdHN0YXRpYyBpbnQgY2hlY2tfY3R4X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuNDY4OTpcXHRcXHRcXHRcXHQgICAgaW50IG9mZiwgaW50IGFjY2Vzc19zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0LFxcbjQ2OTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxcbjQ2OTE6XFx0e1xcbjQ2OTI6XFx0XFx0LypcXG40NjkzOlxcdFxcdCAqIFByb2dyYW0gdHlwZXMgdGhhdCBkb24ndCByZXdyaXRlIGN0eCBhY2Nlc3NlcyBjYW4gc2FmZWx5XFxuNDY5NDpcXHRcXHQgKiBkZXJlZmVyZW5jZSBjdHggcG9pbnRlcnMgd2l0aCBmaXhlZCBvZmZzZXRzLlxcbjQ2OTU6XFx0XFx0ICovXFxuNDY5NjpcXHRcXHRib29sIHZhcl9vZmZfb2sgPSBpc192YXJfY3R4X29mZl9hbGxvd2VkKGVudi1cXHUwMDNlcHJvZyk7XFxuNDY5NzpcXHRcXHRib29sIGZpeGVkX29mZl9vayA9ICFlbnYtXFx1MDAzZW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzO1xcbjQ2OTg6XFx0XFx0aW50IGVycjtcXG40Njk5OlxcdFxcbjQ3MDA6XFx0XFx0aWYgKHZhcl9vZmZfb2spXFxuNDcwMTpcXHRcXHRcXHRlcnIgPSBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgYWNjZXNzX3NpemUsIFUxNl9NQVgsIGZhbHNlKTtcXG40NzAyOlxcdFxcdGVsc2VcXG40NzAzOlxcdFxcdFxcdGVyciA9IF9fY2hlY2tfcHRyX29mZl9yZWcoZW52LCByZWcsIGFyZ25vLCBmaXhlZF9vZmZfb2spO1xcbjQ3MDQ6XFx0XFx0aWYgKGVycilcXG40NzA1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNDcwNjpcXHRcXHRvZmYgKz0gcmVnX3VtYXgocmVnKTtcXG40NzA3OlxcdFxcbjQ3MDg6XFx0XFx0ZXJyID0gX19jaGVja19jdHhfYWNjZXNzKGVudiwgaW5zbl9pZHgsIG9mZiwgYWNjZXNzX3NpemUsIHQsIGluZm8pO1xcbjQ3MDk6XFx0XFx0aWYgKGVycilcXG40NzEwOlxcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXFxcIjsgXFxcIik7XFxuNDcxMTpcXHRcXHRyZXR1cm4gZXJyO1xcbjQ3MTI6XFx0fVxcbjQ3MTM6XFx0XFxuNDcxNDpcXHRzdGF0aWMgaW50IGNoZWNrX2Zsb3dfa2V5c19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG40NzE1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG40NzE2OlxcdFxcdFxcdFxcdFxcdCAgaW50IG9mZiwgaW50IHNpemUpXFxuNDcxNzpcXHR7XFxuNDcxODpcXHRcXHQvKiBPbmx5IGEgY29uc3RhbnQgb2Zmc2V0IGlzIGFsbG93ZWQgaGVyZTsgZm9sZCBpdCBpbnRvIG9mZi4gKi9cXG40NzE5OlxcdFxcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuNDcyMDpcXHRcXHRcXHRjaGFyIHRuX2J1Zls0OF07XFxuNDcyMTpcXHRcXG40NzIyOlxcdFxcdFxcdHRudW1fc3Rybih0bl9idWYsIHNpemVvZih0bl9idWYpLCByZWctXFx1MDAzZXZhcl9vZmYpO1xcbjQ3MjM6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpbnZhbGlkIHZhcmlhYmxlIG9mZnNldCB0byBmbG93IGtleXM6IG9mZj0lZCwgdmFyX29mZj0lc1xcXFxuXFxcIixcXG40NzI0OlxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgb2ZmLCB0bl9idWYpO1xcbjQ3MjU6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuNDcyNjpcXHRcXHR9XFxuNDcyNzpcXHRcXHRvZmYgKz0gcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2MgMCB8fFxcbjQ3MzA6XFx0XFx0ICAgICh1NjQpb2ZmICsgc2l6ZSBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpIHtcXG40NzMxOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiaW52YWxpZCBhY2Nlc3MgdG8gZmxvdyBrZXlzIG9mZj0lZCBzaXplPSVkXFxcXG5cXFwiLFxcbjQ3MzI6XFx0XFx0XFx0XFx0b2ZmLCBzaXplKTtcXG40NzMzOlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjQ3MzQ6XFx0XFx0fVxcbjQ3MzU6XFx0XFx0cmV0dXJuIDA7XFxuNDczNjpcXHR9XFxuNDczNzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MTguODQ2NzQ0OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk0OTM5NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgbWVudGFsbHkgcmVjb25zdHJ1Y3QgaXRzIHB1cnBvc2UgYW5kIHdoYXQgaXQncyBndWFyZGluZyBhZ2FpbnN0LiBGcm9tIHRoZSBuYW1lIGFsb25lLCBpdCdzIGNsZWFybHkgcmVsYXRlZCB0byBzdGFjayB3cml0ZXMsIHdoaWNoIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgd2hlbiBjb25zaWRlcmluZyBzZWN1cml0eSwgZXNwZWNpYWxseSBpbiBtZW1vcnktbWFuYWdlZCBsYW5ndWFnZXMgKG9yIGluIGNvbnRleHRzIHdoZXJlIHRoYXQncyBhbiBpc3N1ZSkuIFRoZSBcImZpeGVkIG9mZnNldFwiIHBhcnQgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBhcyBpdCBoaW50cyBhdCB0aGUgcG9zc2liaWxpdHkgb2YgYSBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgc2l6ZSBhbmQgYm91bmRzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBlbmZvcmNpbmcsIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHNpemUgY2hlY2sgaXQgZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgXCJmaXhlZCBvZmZzZXRcIiBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuIElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIGNoZWNrcz8gV2hhdCBhc3N1bXB0aW9ucyBkb2VzIGl0IG1ha2UgYWJvdXQgdGhlIHN0YWNrIGxheW91dD8gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0IHdpdGggYW55IHByaW9yIGJ1ZmZlciBhbGxvY2F0aW9ucy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgYXR0YWNrIHZlY3RvcnMgbm93IOKAkyBob3cgYW4gYXR0YWNrZXIgbWlnaHQgYXR0ZW1wdCB0byBleHBsb2l0IGEgcG90ZW50aWFsIGZsYXcsIGxpa2UgbWFuaXB1bGF0aW5nIHRoZSBvZmZzZXQgb3IgYnlwYXNzaW5nIHRoZSBjaGVjay4gSXMgdGhlIGZpeGVkIG9mZnNldCB2dWxuZXJhYmxlIHRvIGEgcmFjZSBjb25kaXRpb24/IEkgbXVzdCBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIGRpZyBpbiBhbmQgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MjIuNTQxNjg3MjA3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQyMzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTMzODQ9c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM5OC0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM5OTpzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDAwLVxcdFxcdFxcdFxcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSdyZSB3cml0aW5nIHRvICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzkyNT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTcwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozOTcxOi8qIGNoZWNrX3N0YWNrX3dyaXRlIGRpc3BhdGNoZXMgdG8gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmIG9yXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5NzItICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zOTgwPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTg4LVxcdFxcdG9mZiArPSByZWctXFx1MDAzZXZhcl9vZmYudmFsdWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM5ODk6XFx0XFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzk5MC1cXHRcXHRcXHRcXHRcXHRcXHQgIHZhbHVlX3JlZ25vLCBpbnNuX2lkeCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDk4MT1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDEwLVxcdFxcdHBvaW50ZXJfZGVzYyA9IFxcXCJzdGFjayBcXFwiO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDExOlxcdFxcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDEyLVxcdFxcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoyMi42MjMxMTgwMzZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNTIxNDc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcidzIFN0YWNrIFdyaXRlIENoZWNrKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpc3NlY3QgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBtb3JlIGFjY3VyYXRlbHksIHdoZXJlIHdlIHByZXZlbnQgdGhlIG1hZ2ljIGZyb20gZ29pbmcgaGF5d2lyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhhdCBCUEYgcHJvZ3JhbXMgYXJlIHdyaXRpbmcgdG8gdGhlIHN0YWNrIGluIGEgc2FmZSBhbmQgcHJlZGljdGFibGUgbWFubmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpeGVkIG9mZnNldHMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyBmdW5jdGlvbiBhaW1zIHRvIG1pdGlnYXRlLiBMZXQncyBzZWUgaG93IHRoZXkndmUgYXBwcm9hY2hlZCB0aGlzIGNyaXRpY2FsIGFzcGVjdCBvZiBCUEYgc2VjdXJpdHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHNvbGlkIGRlZmVuc2UgaW4gcGxhY2UsIGhvcGVmdWxseSB3ZWxsLW9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UsIGdpdmVuIGhvdyBmcmVxdWVudGx5IHRoaXMgbXVzdCBnZXQgY2FsbGVkIGR1cmluZyBwcm9ncmFtIHZlcmlmaWNhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgY2hlY2tzIG9uIHRoZSBvZmZzZXRzLCB0aGUgc2l6ZSBjaGVja3MsIGFuZCBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIG92ZXJsYXAgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgaW5uZXIgd29ya2luZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MjYuMjI4MzM1MzIxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Njk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM5OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzOTk6XFx0c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4zNDAwOlxcdFxcdFxcdFxcdFxcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSdyZSB3cml0aW5nIHRvICovXFxuMzQwMTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSxcXG4zNDAyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgb2ZmLCBpbnQgc2l6ZSwgaW50IHZhbHVlX3JlZ25vLFxcbjM0MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBpbnNuX2lkeClcXG4zNDA0OlxcdHtcXG4zNDA1OlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyOyAvKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiAqL1xcbjM0MDY6XFx0XFx0aW50IGksIHNsb3QgPSAtb2ZmIC0gMSwgc3BpID0gc2xvdCAvIEJQRl9SRUdfU0laRSwgZXJyO1xcbjM0MDc6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXFx1MDAyNmVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpW2luc25faWR4XTtcXG4zNDA4OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSBOVUxMO1xcbjM0MDk6XFx0XFx0aW50IGluc25fZmxhZ3MgPSBJTlNOX0ZfU1RBQ0tfQUNDRVNTO1xcbjM0MTA6XFx0XFx0aW50IGhpc3Rfc3BpID0gc3BpLCBoaXN0X2ZyYW1lID0gc3RhdGUtXFx1MDAzZWZyYW1lbm87XFxuMzQxMTpcXHRcXG4zNDEyOlxcdFxcdC8qIGNhbGxlciBjaGVja2VkIHRoYXQgb2ZmICUgc2l6ZSA9PSAwIGFuZCAtTUFYX0JQRl9TVEFDSyBcXHUwMDNjPSBvZmYgXFx1MDAzYyAwLFxcbjM0MTM6XFx0XFx0ICogc28gaXQncyBhbGlnbmVkIGFjY2VzcyBhbmQgW29mZiwgb2ZmICsgc2l6ZSkgYXJlIHdpdGhpbiBzdGFjayBsaW1pdHNcXG4zNDE0OlxcdFxcdCAqL1xcbjM0MTU6XFx0XFx0aWYgKCFlbnYtXFx1MDAzZWFsbG93X3B0cl9sZWFrcyBcXHUwMDI2XFx1MDAyNlxcbjM0MTY6XFx0XFx0ICAgIGJwZl9pc19zcGlsbGVkX3JlZyhcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0pIFxcdTAwMjZcXHUwMDI2XFxuMzQxNzpcXHRcXHQgICAgIWJwZl9pc19zcGlsbGVkX3NjYWxhcl9yZWcoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldKSBcXHUwMDI2XFx1MDAyNlxcbjM0MTg6XFx0XFx0ICAgIHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XFxuMzQxOTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImF0dGVtcHQgdG8gY29ycnVwdCBzcGlsbGVkIHBvaW50ZXIgb24gc3RhY2tcXFxcblxcXCIpO1xcbjM0MjA6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMzQyMTpcXHRcXHR9XFxuMzQyMjpcXHRcXG4zNDIzOlxcdFxcdGN1ciA9IGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VmcmFtZVtlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbjM0MjQ6XFx0XFx0aWYgKHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxuMzQyNTpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VyZWdzW3ZhbHVlX3JlZ25vXTtcXG4zNDI2OlxcdFxcdGlmICghZW52LVxcdTAwM2VieXBhc3Nfc3BlY192NCkge1xcbjM0Mjc6XFx0XFx0XFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcXHUwMDI2XFx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKTtcXG4zNDI4OlxcdFxcbjM0Mjk6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbjM0MzA6XFx0XFx0XFx0XFx0dTggdHlwZSA9IHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVsoc2xvdCAtIGkpICVcXG4zNDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEJQRl9SRUdfU0laRV07XFxuMzQzMjpcXHRcXG4zNDMzOlxcdFxcdFxcdFxcdGlmICh0eXBlICE9IFNUQUNLX01JU0MgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBTVEFDS19aRVJPKSB7XFxuMzQzNDpcXHRcXHRcXHRcXHRcXHRzYW5pdGl6ZSA9IHRydWU7XFxuMzQzNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNDM2OlxcdFxcdFxcdFxcdH1cXG4zNDM3OlxcdFxcdFxcdH1cXG4zNDM4OlxcdFxcbjM0Mzk6XFx0XFx0XFx0aWYgKHNhbml0aXplKVxcbjM0NDA6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub3NwZWNfcmVzdWx0ID0gdHJ1ZTtcXG4zNDQxOlxcdFxcdH1cXG4zNDQyOlxcdFxcbjM0NDM6XFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xcbjM0NDQ6XFx0XFx0aWYgKGVycilcXG4zNDQ1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzQ0NjpcXHRcXG4zNDQ3OlxcdFxcdGNoZWNrX2Zhc3RjYWxsX3N0YWNrX2NvbnRyYWN0KGVudiwgc3RhdGUsIGluc25faWR4LCBvZmYpO1xcbjM0NDg6XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7XFxuMzQ0OTpcXHRcXHRpZiAocmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4zNDUwOlxcdFxcdFxcdGJvb2wgcmVnX3ZhbHVlX2ZpdHM7XFxuMzQ1MTpcXHRcXG4zNDUyOlxcdFxcdFxcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBzaXplO1xcbjM0NTM6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xcbjM0NTQ6XFx0XFx0XFx0aWYgKHJlZ192YWx1ZV9maXRzKVxcbjM0NTU6XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcXG4zNDU2OlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xcbjM0NTc6XFx0XFx0XFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xcbjM0NTg6XFx0XFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG4zNDU5OlxcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcXG4zNDYwOlxcdFxcdH0gZWxzZSBpZiAoIXJlZyBcXHUwMDI2XFx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXFx1MDAyNlxcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcXHUwMDI2XFx1MDAyNlxcbjM0NjE6XFx0XFx0XFx0ICAgZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbjM0NjI6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcXHUwMDI2ZW52LVxcdTAwM2VmYWtlX3JlZ1swXTtcXG4zNDYzOlxcdFxcbjM0NjQ6XFx0XFx0XFx0bWVtc2V0KHRtcF9yZWcsIDAsIHNpemVvZigqdG1wX3JlZykpO1xcbjM0NjU6XFx0XFx0XFx0X19tYXJrX3JlZ19rbm93bih0bXBfcmVnLCBpbnNuLVxcdTAwM2VpbW0pO1xcbjM0NjY6XFx0XFx0XFx0dG1wX3JlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4zNDY3OlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcXG4zNDY4OlxcdFxcdH0gZWxzZSBpZiAocmVnIFxcdTAwMjZcXHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpKSB7XFxuMzQ2OTpcXHRcXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuMzQ3MDpcXHRcXHRcXHRpZiAoc2l6ZSAhPSBCUEZfUkVHX1NJWkUpIHtcXG4zNDcxOlxcdFxcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXFxcIjsgXFxcIik7XFxuMzQ3MjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgc2l6ZSBvZiByZWdpc3RlciBzcGlsbFxcXFxuXFxcIik7XFxuMzQ3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4zNDc0OlxcdFxcdFxcdH1cXG4zNDc1OlxcdFxcdFxcdGlmIChzdGF0ZSAhPSBjdXIgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xcbjM0NzY6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgc3BpbGwgcG9pbnRlcnMgdG8gc3RhY2sgaW50byBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyXFxcXG5cXFwiKTtcXG4zNDc3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM0Nzg6XFx0XFx0XFx0fVxcbjM0Nzk6XFx0XFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XFxuMzQ4MDpcXHRcXHR9IGVsc2Uge1xcbjM0ODE6XFx0XFx0XFx0dTggdHlwZSA9IFNUQUNLX01JU0M7XFxuMzQ4MjpcXHRcXG4zNDgzOlxcdFxcdFxcdHNjcnViX3NwZWNpYWxfc2xvdChzdGF0ZSwgc3BpKTtcXG4zNDg0OlxcdFxcbjM0ODU6XFx0XFx0XFx0Lyogd2hlbiB3ZSB6ZXJvIGluaXRpYWxpemUgc3RhY2sgc2xvdHMgbWFyayB0aGVtIGFzIHN1Y2ggKi9cXG4zNDg2OlxcdFxcdFxcdGlmICgocmVnIFxcdTAwMjZcXHUwMDI2IGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykpIHx8XFxuMzQ4NzpcXHRcXHRcXHQgICAgKCFyZWcgXFx1MDAyNlxcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMCkpIHtcXG4zNDg4OlxcdFxcdFxcdFxcdC8qIFNUQUNLX1pFUk8gY2FzZSBoYXBwZW5lZCBiZWNhdXNlIHJlZ2lzdGVyIHNwaWxsXFxuMzQ4OTpcXHRcXHRcXHRcXHQgKiB3YXNuJ3QgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgc3RhY2sgc2xvdCBib3VuZGFyeSxcXG4zNDkwOlxcdFxcdFxcdFxcdCAqIHNvIGl0J3Mgbm90IGEgcmVnaXN0ZXIgc3BpbGwgYW55bW9yZTsgZm9yY2VcXG4zNDkxOlxcdFxcdFxcdFxcdCAqIG9yaWdpbmF0aW5nIHJlZ2lzdGVyIHRvIGJlIHByZWNpc2UgdG8gbWFrZVxcbjM0OTI6XFx0XFx0XFx0XFx0ICogU1RBQ0tfWkVSTyBjb3JyZWN0IGZvciBzdWJzZXF1ZW50IHN0YXRlc1xcbjM0OTM6XFx0XFx0XFx0XFx0ICovXFxuMzQ5NDpcXHRcXHRcXHRcXHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHZhbHVlX3JlZ25vKTtcXG4zNDk1OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMzQ5NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM0OTc6XFx0XFx0XFx0XFx0dHlwZSA9IFNUQUNLX1pFUk87XFxuMzQ5ODpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEwOjI2LjIyODkzNDMzMVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk1Nzk5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0IHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgYHNjcnViX3NwZWNpYWxfc2xvdGAgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dlciBqdXN0IGhpdCBhIGNhbGwgdG8gYHNjcnViX3NwZWNpYWxfc2xvdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCdzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcsIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBlZGdlIGNhc2VzIG9yIGRhdGEgdmFsaWRhdGlvbiBhcm91bmQgc3BlY2lmaWMgc2xvdHMgb3IgZmllbGRzLiBJ4oCZbGwgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGl0cyBkZWZpbml0aW9uLiBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIGhhbmRsaW5nIHNvbWV0aGluZyBcInNwZWNpYWwsXCIgd2hpY2ggb2Z0ZW4gbWVhbnMgcG90ZW50aWFsbHkgdHJvdWJsZXNvbWUgb3Igc2Vuc2l0aXZlIGRhdGEgdGhhdCByZXF1aXJlcyBleHRyYSBjYXJlIGR1cmluZyBjbGVhbmluZyBvciBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIFwic3BlY2lhbFwiIGNhc2VzIGFyZSwgd2h5IHRoZXnigJlyZSBwcm9ibGVtYXRpYywgYW5kIHdoYXQgYHNjcnViX3NwZWNpYWxfc2xvdGAgaXMgZG9pbmcgdG8gcmVzb2x2ZSB0aG9zZSBpc3N1ZXMuIEnigJlsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBtaXRpZ2F0ZS4gTm93LCBsZXTigJlzIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoyOS40MjQ3MzYzMTlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzg0LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzg0OlxcdHN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbjMzODU6XFx0e1xcbjMzODY6XFx0XFx0aW50IGk7XFxuMzM4NzpcXHRcXG4zMzg4OlxcdFxcdC8qIHJlZ3VsYXIgd3JpdGUgb2YgZGF0YSBpbnRvIHN0YWNrIGRlc3Ryb3lzIGFueSBzcGlsbGVkIHB0ciAqL1xcbjMzODk6XFx0XFx0c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIudHlwZSA9IE5PVF9JTklUO1xcbjMzOTA6XFx0XFx0LyogTWFyayBzbG90cyBhcyBTVEFDS19NSVNDIGlmIHRoZXkgYmVsb25nZWQgdG8gc3BpbGxlZCBwdHIvZHlucHRyL2l0ZXIuICovXFxuMzM5MTpcXHRcXHRpZiAoaXNfc3RhY2tfc2xvdF9zcGVjaWFsKFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXSkpXFxuMzM5MjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBpKyspXFxuMzM5MzpcXHRcXHRcXHRcXHRzY3J1Yl9zcGlsbGVkX3Nsb3QoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpXSk7XFxuMzM5NDpcXHR9XFxuMzM5NTpcXHRcXG4zMzk2OlxcdC8qIGNoZWNrX3N0YWNrX3tyZWFkLHdyaXRlfV9maXhlZF9vZmYgZnVuY3Rpb25zIHRyYWNrIHNwaWxsL2ZpbGwgb2YgcmVnaXN0ZXJzLFxcbjMzOTc6XFx0ICogc3RhY2sgYm91bmRhcnkgYW5kIGFsaWdubWVudCBhcmUgY2hlY2tlZCBpbiBjaGVja19tZW1fYWNjZXNzKClcXG4zMzk4OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoyOS40MjU2OTUxMVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTIyOTI3Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhY2sgU3RhdGUgYW5kIEl0ZXJhdG9yIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGhlcmUncyB3aGF0IEknbSB1bmRlcnN0YW5kaW5nOiBUaGUgY29kZSBpbml0aWFsbHkgc2V0cyBgc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci50eXBlID0gTk9UX0lOSVQ7YCBhbmQgc2V0cyB0aGUgYHNsb3RfdHlwZWAgdG8gYFNUQUNLX01JU0NgLiBJZiBhIGBTVEFDS19JVEVSYCBzbG90IGdldHMgb3ZlcndyaXR0ZW4sIGl0cyBgc2xvdF90eXBlYCBjaGFuZ2VzIHRvIGBTVEFDS19NSVNDYC4gVGhpcyBpcyBpbXBvcnRhbnQuIGBzdGFja3NhZmVgIHdpbGwgdGhlbiBjb21wYXJlIHRoZSBvbGQgYW5kIGN1cnJlbnQgc3RhY2sgc3RhdGVzLiBJdCBjaGVja3MgaWYgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPSBjdXItXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV1gIGFuZCByZXR1cm5zIGBmYWxzZWAuIFRoaXMgbWVhbnMgdGhhdCBgc3RhY2tzYWZlYCAqb25seSogY29tcGFyZXMgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgIGlmICpib3RoKiB0aGUgb2xkIGFuZCBjdXJyZW50IHN0YXRlcyBoYXZlIGEgYFNUQUNLX0lURVJgIHNsb3QgdHlwZS5cblxuTm93LCBiZWNhdXNlIG9mIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLCBpZiBib3RoIG9sZCBhbmQgY3VycmVudCBzdGF0ZXMgaGF2ZSBgU1RBQ0tfSVRFUmAsIHRoZW4gdGhleSB3ZXJlIGJvdGggaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAuIEFuZCBgbWFya19zdGFja19zbG90c19pdGVyYCBzcGVjaWZpY2FsbHkgc2V0cyBgc3QtXHUwMDNldHlwZSA9IFBUUl9UT19TVEFDS2AgYW5kIGluaXRpYWxpemVzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgbm8gd2F5IHdlJ3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhhdCdzIG9mZiB0aGUgdGFibGUuXG5cblNvLCB0aGlzIGJvaWxzIGRvd24gdG8gYSB2ZXJpZmllciBsb2dpYyBidWcuIEl0J3MgbWVyZ2luZyBzdGF0ZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBgcmVnLVx1MDAzZXR5cGVgIHZhbHVlcywgbGlrZSBgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWAgd2l0aCBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAuIFRoZSBidWcgaXMgdGhhdCBpdCBvbmx5IGNoZWNrcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcyBhbmQgaWdub3JlcyB0aGUgYHJlZy1cdTAwM2V0eXBlYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZS4gSXQncyBhbGxvd2luZyBhbiB1bnRydXN0ZWQgaXRlcmF0b3IgdG8gYmUgdHJlYXRlZCBhcyBpZiBpdCdzIFJDVS1wcm90ZWN0ZWQsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgd2hlbiBgYnBmX2l0ZXJfdGFza19uZXh0YCBpcyBjYWxsZWQgb24gdGhhdCB1bnRydXN0ZWQgaXRlcmF0b3IuXG5cblNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVzZS1hZnRlci1mcmVlLCBLQVNBTiB3aWxsIGNhdGNoIHRoaXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBubyBpbmZvcm1hdGlvbiBsZWFrLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBXZSBzaG91bGQgYmUgZ29vZCB3aXRoIHdoYXQgd2UndmUgZ290LlxuXG5Pa2F5LCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBTVEFDS19JVEVSYCBpcyAqb25seSogc2V0IGJ5IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgLiBZdXAsIHRoYXQncyB0aGUgb25seSBwbGFjZS4gR29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDozNi4zNDg2MjY4OTZaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjgwNjE1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1RBQ0tfSVRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xvZy5jPTQ5Nz1zdGF0aWMgY2hhciBzbG90X3R5cGVfY2hhcltdID0ge1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYy01MDItXFx0W1NUQUNLX0RZTlBUUl1cXHQ9ICdkJyxcXG5rZXJuZWwvYnBmL2xvZy5jOjUwMzpcXHRbU1RBQ0tfSVRFUl1cXHQ9ICdpJyxcXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cXHRbU1RBQ0tfSVJRX0ZMQUddID0gJ2YnLFxcbi0tXFxua2VybmVsL2JwZi9sb2cuYz03MTE9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL2xvZy5jOjc3NTpcXHRcXHRjYXNlIFNUQUNLX0lURVI6XFxua2VybmVsL2JwZi9sb2cuYy03NzYtXFx0XFx0XFx0Lyogb25seSBtYWluIHNsb3QgaGFzIGlkIHNldDsgc2tpcCBvdGhlcnMgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XFx0XFx0XFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzUtXFx0XFx0XFx0ICAgIHN0eXBlID09IFNUQUNLX0lSUV9GTEFHKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MDUtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTkwPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YXRlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIwMC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTU9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDktXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XFx0XFx0XFx0c2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTUxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Nj1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBCUEZfUkVHX1NJWkU7IGorKylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwNjpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTM9c3RhdGljIGludCBpc19pdGVyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzg6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM5LVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNTU9c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MTogKiAgIC0gaXRlciBzdGF0ZSAoU1RBQ0tfSVRFUikuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODItICogICAtIGlycSBmbGFnIHN0YXRlIChTVEFDS19JUlFfRkxBRylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg0PXN0YXRpYyBib29sIGlzX3N0YWNrX3Nsb3Rfc3BlY2lhbChjb25zdCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVxcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxOlxcdGNhc2UgU1RBQ0tfSVRFUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Mi1cXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwNTE9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU1LVxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNTY6XFx0dTMyIGNsZWFyX21hc2sgPSAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19JVEVSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MzcuNTE2Njk0MjA4WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTgwNjYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUncyBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgc28gSSd2ZSBwaW5wb2ludGVkIHRoZSBpc3N1ZS4gSXQncyBkZWZpbml0aXZlOiBgbWFya19zdGFja19zbG90c19pdGVyYCBpcyB0aGUgc29sZSBmdW5jdGlvbiBzZXR0aW5nIHRoZSBgc2xvdF90eXBlYCB0byBgU1RBQ0tfSVRFUmAuICBGdXJ0aGVybW9yZSwgaXQgdGhvcm91Z2hseSBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyB3aXRoaW4gdGhlIGBpdGVyYCB1bmlvbi4gVGhlcmVmb3JlLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoYXQncyBvZmYgdGhlIHRhYmxlLlxuXG5UaGlzIGlzIGEgdmVyaWZpZXIgbG9naWMgYnVnIHRoYXQgdWx0aW1hdGVseSByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uICBGb3J0dW5hdGVseSwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgY2F0Y2hpbmcgdGhlIHByb2JsZW0uICBLbm93aW5nIHRoaXMgYWxsb3dzIG1lIHRvIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZSB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gYW4gdW5jaGVja2VkIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSB3aWxsIG5vdyBhZGQgYSBjb21tZW50IGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgaXNzdWUgb2JzZXJ2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTMxLCJPdXRwdXRUb2tlbnMiOjM0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEwOjQzLjQ3NDc2Mzg3NFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nIChgc3RhY2tzYWZlYCkgZm9yIGl0ZXJhdG9yIHN0YWNrIHNsb3RzIChgU1RBQ0tfSVRFUmApLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIHZlcmlmaWVyIG9ubHkgY29tcGFyZWQgdGhlIGl0ZXJhdG9yLXNwZWNpZmljIGZpZWxkcyAobGlrZSBgYnRmYCBhbmQgYGJ0Zl9pZGApIGJ1dCBmYWlsZWQgdG8gY29tcGFyZSB0aGUgcmVnaXN0ZXIgdHlwZSAoYG9sZF9yZWctXFx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cXHUwMDNldHlwZWApLiBcXG5cXG5UaGlzIG9taXNzaW9uIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IG1lcmdlIGEgc3RhdGUgd2hlcmUgYW4gaXRlcmF0b3IgaXMgUkNVLXByb3RlY3RlZCAoYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgKSB3aXRoIGEgc3RhdGUgd2hlcmUgdGhlIGl0ZXJhdG9yIGlzIHVudHJ1c3RlZCAoYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgKS4gQXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBpbmNsdWRlZCB0ZXN0IGNhc2UsIGFuIHVucHJvdGVjdGVkIGdhcCAoZS5nLiwgdW5sb2NraW5nIGFuZCByZWxvY2tpbmcgUkNVKSBzdHJpcHMgdGhlIGBNRU1fUkNVYCBmbGFnLCBtYWtpbmcgdGhlIGl0ZXJhdG9yIHVudHJ1c3RlZC4gQnkgaW5jb3JyZWN0bHkgbWVyZ2luZyB0aGVzZSBzdGF0ZXMsIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyBhIEJQRiBwcm9ncmFtIHRvIGNhbGwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgb24gYW4gdW50cnVzdGVkIGl0ZXJhdG9yLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHdoZW4gdGhlIHRhc2sgc3RydWN0IGlzIGFjY2Vzc2VkIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbmRlZC5cXG5cXG5UaGlzIGlzIGEgdmVyaWZpZXIgbG9naWMgYnVnIHRoYXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGludm9sdmVkLCBhcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgd2hlbmV2ZXIgYSBzbG90IGlzIG1hcmtlZCBhcyBgU1RBQ0tfSVRFUmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIncyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZyAoYHN0YWNrc2FmZWApIGZvciBpdGVyYXRvciBzdGFjayBzbG90cyAoYFNUQUNLX0lURVJgKS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSB2ZXJpZmllciBvbmx5IGNvbXBhcmVkIHRoZSBpdGVyYXRvci1zcGVjaWZpYyBmaWVsZHMgKGxpa2UgYGJ0ZmAgYW5kIGBidGZfaWRgKSBidXQgZmFpbGVkIHRvIGNvbXBhcmUgdGhlIHJlZ2lzdGVyIHR5cGUgKGBvbGRfcmVnLVxcdTAwM2V0eXBlICE9IGN1cl9yZWctXFx1MDAzZXR5cGVgKS4gXFxuXFxuVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBtZXJnZSBhIHN0YXRlIHdoZXJlIGFuIGl0ZXJhdG9yIGlzIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciBpcyB1bnRydXN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYCkuIEFzIGRlbW9uc3RyYXRlZCBieSB0aGUgaW5jbHVkZWQgdGVzdCBjYXNlLCBhbiB1bnByb3RlY3RlZCBnYXAgKGUuZy4sIHVubG9ja2luZyBhbmQgcmVsb2NraW5nIFJDVSkgc3RyaXBzIHRoZSBgTUVNX1JDVWAgZmxhZywgbWFraW5nIHRoZSBpdGVyYXRvciB1bnRydXN0ZWQuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcgdGhlc2Ugc3RhdGVzLCB0aGUgdmVyaWZpZXIgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBjYWxsIGBicGZfaXRlcl90YXNrX25leHRgIG9uIGFuIHVudHJ1c3RlZCBpdGVyYXRvciwgbGVhZGluZyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB3aGVuIHRoZSB0YXNrIHN0cnVjdCBpcyBhY2Nlc3NlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQuXFxuXFxuVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGJ1ZyB0aGF0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbnZvbHZlZCwgYXMgdGhlIGBpdGVyYCB1bmlvbiBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIHdoZW5ldmVyIGEgc2xvdCBpcyBtYXJrZWQgYXMgYFNUQUNLX0lURVJgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 04:17:44 +0000 UTC FinishedAt: 2026-08-11 05:10:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ff359235-5e90-4606-93c9-6caa7aed96d7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_is_state_visited" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nIChgc3RhY2tzYWZlYCkgZm9yIGl0ZXJhdG9yIHN0YWNrIHNsb3RzIChgU1RBQ0tfSVRFUmApLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIHZlcmlmaWVyIG9ubHkgY29tcGFyZWQgdGhlIGl0ZXJhdG9yLXNwZWNpZmljIGZpZWxkcyAobGlrZSBgYnRmYCBhbmQgYGJ0Zl9pZGApIGJ1dCBmYWlsZWQgdG8gY29tcGFyZSB0aGUgcmVnaXN0ZXIgdHlwZSAoYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgKS4gXG5cblRoaXMgb21pc3Npb24gYWxsb3dlZCB0aGUgdmVyaWZpZXIgdG8gaW5jb3JyZWN0bHkgbWVyZ2UgYSBzdGF0ZSB3aGVyZSBhbiBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgdW50cnVzdGVkIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLiBBcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGluY2x1ZGVkIHRlc3QgY2FzZSwgYW4gdW5wcm90ZWN0ZWQgZ2FwIChlLmcuLCB1bmxvY2tpbmcgYW5kIHJlbG9ja2luZyBSQ1UpIHN0cmlwcyB0aGUgYE1FTV9SQ1VgIGZsYWcsIG1ha2luZyB0aGUgaXRlcmF0b3IgdW50cnVzdGVkLiBCeSBpbmNvcnJlY3RseSBtZXJnaW5nIHRoZXNlIHN0YXRlcywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiB1bnRydXN0ZWQgaXRlcmF0b3IsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgd2hlbiB0aGUgdGFzayBzdHJ1Y3QgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLlxuXG5UaGlzIGlzIGEgdmVyaWZpZXIgbG9naWMgYnVnIHRoYXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGludm9sdmVkLCBhcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgd2hlbmV2ZXIgYSBzbG90IGlzIG1hcmtlZCBhcyBgU1RBQ0tfSVRFUmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNzA1N2NiNTdiOWIwZDM0YTkzNjQ2OTFkNmM2Njk3MmNhNzgzMjc2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MDg6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4gXHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiBcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4mIzQzO1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4mIzQzO1x0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiBcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuaW5kZXggZmUzNjYzZGVkYmUxNC4uNTY2YTFkM2RmZmVhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDUyIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2V4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFwmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7aW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfcmN1X3N0YXRlX3BydW5pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcbiYjNDM7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMSA9ICVbaXRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjIgPSAwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjMgPSAwO1wmIzM0OyAvKiBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyAqL1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9pdGVyX3Rhc2tfbmV3XTtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtpZiB3MCA9PSAwIGdvdG8gdW5wcm90ZWN0ZWRfJT07XCYjMzQ7XG4mIzQzO1xuJiM0MztcdFx0LyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlIG9uIHRoZSBzdHJhaWdodC1saW5lIHBhdGguICovXG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Z290byBtZXJnZV8lPTtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XCYjMzQ7dW5wcm90ZWN0ZWRfJT06XCYjMzQ7XG4mIzQzO1x0XHQvKiBDcmVhdGUgYW4gdW5wcm90ZWN0ZWQgZ2FwIG9uIHRoZSB0YWtlbiBwYXRoLiAqL1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XCYjMzQ7bWVyZ2VfJT06IHIxID0gJVtpdF07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19uZXh0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gJVtpdF07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19kZXN0cm95XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTtcJiMzNDtcbiYjNDM7XHRcdDpcbiYjNDM7XHRcdDogX19pbW1fcHRyKGl0KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV3KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXh0KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX3JjdV9yZWFkX2xvY2spLFxuJiM0MztcdFx0ICBfX2ltbShicGZfcmN1X3JlYWRfdW5sb2NrKVxuJiM0MztcdFx0OiBfX2Nsb2JiZXJfY29tbW9uXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcJiMzNDspXG4gaW50IEJQRl9QUk9HKGl0ZXJfY3NzX2xvY2tfYW5kX3VubG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNzA1N2NiNTdiOWIwZDM0YTkzNjQ2OTFkNmM2Njk3MmNhNzgzMjc2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MDg6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuYwppbmRleCBlYTIxNTNjZjI4ZDBhLi40ZTZhYWZhZDMzYmQyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKQEAgLTgxMiw3ICYjNDM7ODEyLDggQEAgc3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLAogCQkJICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWUKIAkJCSAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKQogCQkJICovCi0JCQlpZiAob2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKJiM0MzsJCQlpZiAob2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlIHx8CiYjNDM7CQkJICAgIG9sZF9yZWctJmd0O2l0ZXIuYnRmICE9IGN1cl9yZWctJmd0O2l0ZXIuYnRmIHx8CiAJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGZfaWQgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGZfaWQgfHwKIAkJCSAgICBvbGRfcmVnLSZndDtpdGVyLnN0YXRlICE9IGN1cl9yZWctJmd0O2l0ZXIuc3RhdGUgfHwKIAkJCSAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tJmd0O2l0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jCmluZGV4IGZlMzY2M2RlZGJlMTQuLjU2NmExZDNkZmZlYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMKQEAgLTYxLDYgJiM0Mzs2MSw1MiBAQCBpbnQgQlBGX1BST0coaXRlcl90YXNrc19sb2NrX2FuZF91bmxvY2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/ZmVudHJ5LnMvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfdGFza19uZXh0JiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSkKJiM0MztpbnQgQlBGX1BST0coaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrIGl0OwomIzQzOwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gJVtpdF07JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O3IzID0gMDsmIzM0OyAvKiBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyAqLwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19uZXddOyYjMzQ7CiYjNDM7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsmIzM0OwomIzQzOwkJJiMzNDtpZiB3MCA9PSAwIGdvdG8gdW5wcm90ZWN0ZWRfJT07JiMzNDsKJiM0MzsKJiM0MzsJCS8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZSBvbiB0aGUgc3RyYWlnaHQtbGluZSBwYXRoLiAqLwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTsmIzM0OwomIzQzOwkJJiMzNDtnb3RvIG1lcmdlXyU9OyYjMzQ7CiYjNDM7CiYjNDM7CSYjMzQ7dW5wcm90ZWN0ZWRfJT06JiMzNDsKJiM0MzsJCS8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAgb24gdGhlIHRha2VuIHBhdGguICovCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdOyYjMzQ7CiYjNDM7CiYjNDM7CSYjMzQ7bWVyZ2VfJT06IHIxID0gJVtpdF07JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX3Rhc2tfbmV4dF07JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSAlW2l0XTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19kZXN0cm95XTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW1fcHRyKGl0KSwKJiM0MzsJCSAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV3KSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXh0KSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSwKJiM0MzsJCSAgX19pbW0oYnBmX3JjdV9yZWFkX2xvY2spLAomIzQzOwkJICBfX2ltbShicGZfcmN1X3JlYWRfdW5sb2NrKQomIzQzOwkJOiBfX2Nsb2JiZXJfY29tbW9uCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2V4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX2Nzc19uZXh0JiMzNDspCiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBuZXcgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGl0ZXJhdG9ycyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYHN0YWNrc2FmZSgpYCBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tzYWZlKClgIGJ5IGludHJvZHVjaW5nIGEgbmV3IHR5cGUgY2hlY2sgZHVyaW5nIHRoZSBjb21wYXJpc29uIG9mIGl0ZXJhdG9yczoKCmBgYGMKLQkJCWlmIChvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fAomIzQzOwkJCWlmIChvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGUgfHwKJiM0MzsJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKYGBgCgpFc3NlbnRpYWxseSwgaXQmIzM5O3Mgbm93IHZlcmlmeWluZyB0aGF0IHRoZSB0eXBlcyBvZiBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCBtYXRjaCBiZWZvcmUgY29uc2lkZXJpbmcgdGhlaXIgQlRGIChCVEYgLSBCUEYgVHlwZSBGb3JtYXQpIGluZm9ybWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVmaW5lbWVudCBpbiB0aGUgdHlwZS1zYWZldHkgb2YgdGhlIHZlcmlmaWVyLiBUaGUgaW5jbHVzaW9uIG9mIGEgbmV3IHRlc3QgY2FzZSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2AsIGluZGljYXRlcyB0aGUgcGF0Y2ggYXV0aG9ycyBoYXZlIGltcGxlbWVudGVkIGEgbmV3IHRlc3QgY2FzZSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGBzdGFja3NhZmUoKWAgaXMgdXNlZCwgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBndWFyYW50ZWUsIGFuZCB3aHkgdGhpcyBhZGRpdGlvbmFsIHR5cGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBpdGVyYXRvciBjb21wYXJpc29uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIG1pc21hdGNoZWQgdHlwZXMgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFuZCBob3cgdGhpcyBtaWdodCByZWxhdGUgdG8gcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGxvb2tzIGxpa2UgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBwaWVjZSBvZiBoYXJkZW5pbmcsIHNvIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGlzIGNhcmVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFja3NhZmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9NjkwPXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2NhbGFyX3JlZ19mb3Jfc3RhY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTcwMS1cbmtlcm5lbC9icGYvc3RhdGVzLmM6NzAyOnN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAzLVx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05NDU9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NjItXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk2MzpcdGlmICghc3RhY2tzYWZlKGVudiwgb2xkLCBjdXIsIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk2NC1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlY29uc3RydWN0aW5nIFN0YXRpYyBGdW5jdGlvbiBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgY29kZSBzbmlwcGV0IGludm9sdmluZyB0aGUgZnVuY3Rpb24gYHN0YWNrc2FmZWAuIFRoZSBjcnVjaWFsIGJpdCBpcyB0aGF0IGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBhYm91dCBzY29wZSBhbmQgbGlua2FnZS4gT2theSwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBsaWtlbHkgaGlkZGVuIGZyb20gZXh0ZXJuYWwgYWNjZXNzLgoKTm93LCBgc3RhY2tzYWZlYCBpcyAqY2FsbGVkKiBieSBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbGltaXRlZCBzY29wZSBvZiBpbnRlcmFjdGlvbi4gSXQgY2FuJiMzOTt0IGJlIGNhbGxlZCBmcm9tIHNvbWUgb3RoZXIgZmlsZSwgYXMgaXQgaXMgYWxzbyBgc3RhdGljYC4KClRoZSBxdWVzdGlvbiBiZWNvbWVzLCB3aGF0IGFyZSB0aGUgdXNlLWNhc2VzIG9mIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbj8gTm93IHRoYXQgYGZ1bmNfc3RhdGVzX2VxdWFsYCBoYXMgYmVlbiBpZGVudGlmaWVkIGFzIGEgY2FsbGVyLCBpdCBtaWdodCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgYGZ1bmNfc3RhdGVzX2VxdWFsYCBpcyB1c2VkLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHdobyBpcyB0aGUgcGFyZW50IG9mIHRoZSBjYWxsZXIuIFNvIGxldCYjMzk7cyB0cmFjZSBiYWNrLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBgZnVuY19zdGF0ZXNfZXF1YWxgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbS4gVGhhdCYjMzk7cyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVuY19zdGF0ZXNfZXF1YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05ODA9c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxMjpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBzdGF0ZXNfZXF1YWxgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBzdGF0ZXNfZXF1YWxgIGlzIGNhbGxpbmcgYGZ1bmNfc3RhdGVzX2VxdWFsYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBwaWVjZSBvZiB0aGUgcHV6emxlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHN0YXRlc19lcXVhbGAgaXRzZWxmIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlOyBrbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIHJlYWNoaW5nIG91dCB0byAqdGhpcyogZnVuY3Rpb24sIHRoZW4gSSYjMzk7bGwgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0NC0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQ1OnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDYtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk3Mj1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzktXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk4MDpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTgxLVx0XHRcdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxMjpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzk9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzMzItXHRcdFx0aWYgKGlzX2l0ZXJfbmV4dF9pbnNuKGVudiwgaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMzM6XHRcdFx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzM0LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDItXHRcdFx0XHRcdGl0ZXJfcmVnID0gXHUwMDI2Y3VyX2ZyYW1lLVx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0MzpcdFx0XHRcdFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDQtXHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1Ny1cdFx0XHRcdGlmIChzbC1cdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXHUwMDNlbWF5X2dvdG9fZGVwdGggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNTg6XHRcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU5LVx0XHRcdFx0XHRsb29wID0gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjMtXHRcdFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzY0Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2NS1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzcxLVx0XHRcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM3MjpcdFx0XHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgRVhBQ1QpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzczLVx0XHRcdCAgICAhaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MDQtXHRcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDU6XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBsb29wID8gUkFOR0VfV0lUSElOIDogTk9UX0VYQUNUKSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA2LWhpdDpcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDQtXHRcdFx0ICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0NTpcdFx0XHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDYtXHRcdFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIFN0YXRlIG9mIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSB2ZXJpZmllci4gSXQgc2VlbXMgdG8gYmUgdGhlIGdhdGVrZWVwZXIsIHRoZSBwbGFjZSB3aGVyZSB3ZSBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHByb2dyYW0gc3RhdGUgaGFzIGFscmVhZHkgYmVlbiBhbmFseXplZC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHN0YXRlIGV4cGxvcmF0aW9uLCBhdCBsZWFzdCBmcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpkcml2aW5nKiB0aGUgY2FsbHMgdG8gYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gV2hhdCBwYXJ0cyBvZiB0aGUgdmVyaWZpZXIgYXJlIGFjdHVhbGx5IGxldmVyYWdpbmcgdGhpcyBmdW5jdGlvbmFsaXR5PyBGaWd1cmluZyBvdXQgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCB0aGUgb3ZlcmFsbCB2ZXJpZmljYXRpb24gc3RyYXRlZ3kuIEJ5IGV4YW1pbmluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIGhvdyBzdGF0ZXMgYXJlIHRyYWNrZWQgYW5kIG1hbmFnZWQgZHVyaW5nIHRoZSBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBkZWNpZGVzIHdoZW4gdG8gZGVsdmUgZGVlcGVyIGludG8gYSBzdGF0ZSBhbmQgd2hlbiB0byBwcnVuZSBvciByZWNvZ25pemUgdGhhdCBhIHBhdGggaGFzIGJlZW4gZXhwbG9yZWQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSB2ZXJpZmllciYjMzk7cyBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMTQ9c3RhdGljIHZvaWQgbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM4LVxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMjM5OmludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzM0ND1zdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzgxLVx0XHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVx1MDAzZWluc25faWR4KSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzgyOlx0XHRcdGVyciA9IGJwZl9pc19zdGF0ZV92aXNpdGVkKGVudiwgZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4My1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIGBkb19jaGVja2AgaXMgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHRoZSBtYWluIGxvb3Agd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGFyZWE6IHN0YXRlIGVxdWl2YWxlbmNlLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSBpdGVyYXRvciByZWdpc3RlcnMgd2l0aGluIHRoZSBgc3RhY2tzYWZlYCBjb250ZXh0LgoKSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogV2UmIzM5O3JlIGFkZGluZyBhIGB0eXBlYCBjaGVjayAoYG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZWApICpiZWZvcmUqIHdlIGNvbXBhcmUgdGhlIEJURiBpbmZvcm1hdGlvbiBmb3IgdGhlIGl0ZXJhdG9yIChgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGZgKS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIHNoaWZ0LiBQcmV2aW91c2x5LCB0aGUgdmVyaWZpZXIgY291bGQmIzM5O3ZlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgYW4gaXRlcmF0b3IgcmVnaXN0ZXIgdGhlIHNhbWUgYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCByZWdpc3RlciAobm9uLWl0ZXJhdG9yIG9yIG9mIGEgZGlmZmVyZW50IHJlZ2lzdGVyIHR5cGUpIGlmLCBieSBwdXJlIGNvaW5jaWRlbmNlLCB0aGVpciBtZW1vcnkgbGF5b3V0cyBvciB1bmluaXRpYWxpemVkIGRhdGEgaGFwcGVuZWQgdG8gbWF0Y2ggdGhlIGl0ZXJhdG9yJiMzOTtzIEJURiBkYXRhLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuIFRoaXMgY2hhbmdlIGVmZmVjdGl2ZWx5IGd1YXJkcyBhZ2FpbnN0IGZhbHNlIHBvc2l0aXZlcyBpbiBlcXVpdmFsZW5jZSBjaGVja3MsIG1ha2luZyB0aGUgdmVyaWZpZXIgbW9yZSByb2J1c3QuCgpUaGUgYWRkZWQgdGVzdCBjYXNlLCBgaXRlcnNfdGFza19mYWlsdXJlLmNgLCB3aXRoIGBpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nYCBpcyBhIHdlbGNvbWUgYWRkaXRpb24uIFRoaXMgdGVzdCBsZXZlcmFnZXMgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAsIGFuZCBgYnBmX2l0ZXJfdGFza19kZXN0cm95YCwgYW5kIGlzIGFubm90YXRlZCB3aXRoIGEgYGZlbnRyeWAgaG9vayBvbiB0aGUgYHN5c19nZXRwZ2lkYCBzeXNjYWxsLiBUaGF0IHN1Z2dlc3RzIHRhcmdldGVkIHRlc3Rpbmcgb2YgdGhlIGl0ZXJhdG9yIHJlZ2lzdGVyIGludGVyYWN0aW9ucyB1bmRlciByZWFsaXN0aWMgY29uZGl0aW9ucy4KClRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYW5kIGBzdGFja3NhZmVgLiBIb3dldmVyLCB0aGUgbGFzdCB0aHJlZSBhcmUgdW5mb3J0dW5hdGVseSBgc3RhdGljYCwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBleHRlcm5hbGx5LiBUaGF0IGxlYXZlcyB1cyB3aXRoIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEl0JiMzOTtzICpub24tc3RhdGljKiBhbmQgZGVjbGFyZWQgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLCB3aGlsZSBiZWluZyBjYWxsZWQgZnJvbSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXMgdGhlcmVmb3JlLCByZWFjaGFibGUsIGFzIGl0IGNvdWxkIGJlIGV4cG9ydGVkIG9yIGp1c3Qgbm9uLXN0YXRpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz0xMjE0PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIzOTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjQwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczNDQ9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4MS1cdFx0aWYgKGJwZl9pc19wcnVuZV9wb2ludChlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM4MjpcdFx0XHRlcnIgPSBicGZfaXNfc3RhdGVfdmlzaXRlZChlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczODMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkJQRiBWZXJpZmljYXRpb24gRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gVGhlIGZ1bmN0aW9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBzdGF0ZSBjaGVja2luZy4gSXQgc2VlbXMgdG8gYmUgdGhlIGZvY3VzIHN5bWJvbCBJIG5lZWQuIE5vdywgYSBjcnVjaWFsIGFzcGVjdCB0byBub3RlIGhlcmUgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgYGRvX2NoZWNrYCBpcyBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIHN1Z2dlc3RzIGl0IGlzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gV2hpbGUgYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyb3BlcmF0ZSwgd2hpY2ggbWFrZXMgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBhIHBlcmZlY3QgZW50cnkgcG9pbnQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBpdCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIENoYW5jZXMgYXJlLCBpdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBvciBhdCBsZWFzdCBkZWNsYXJlZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IG1vcmUgZWZmZWN0aXZlbHkuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE4Nz1pbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4OC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4OTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE5MC1pbnQgYnBmX3VwZGF0ZV9icmFuY2hfY291bnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvY2F0aW5nIHRoZSBCUEYgVmVyaWZpZXImIzM5O3MgVml0YWxzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHdvcmtpbmdzLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHVuZGVyc3RhbmRpbmcgdGhlIHZpc2l0YXRpb24gcHJvY2Vzcy4gTGV0IG1lIGNvbmZpcm0gdGhhdDsgeWVzLCBhIHF1aWNrIHNlYXJjaCBjb25maXJtcyBpdCByZXNpZGVzIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBteSBhbmFseXNpcy4KCk5vdywgd2hhdCBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbj8gVGhlIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5IGlzbuKAmXQgYWx3YXlzIGVuYWJsZWQsIHJpZ2h0PyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvbiBidWlsZCBvcHRpb25zLiBJIHJlY2FsbCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGtleSByZXF1aXJlbWVudC4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc2VlIHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZW4gZXhwbG9yaW5nIHRoZSB2ZXJpZmllciYjMzk7cyBiZWhhdmlvciBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgQlBGIHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYsIGFuZCBsaWtlbHkgcG9pbnQgbWUgdG8gb3RoZXIsIG1vcmUgc3BlY2lmaWMgYEtjb25maWdgIGZpbGVzIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIHNwbGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCBwZXJoYXBzIGVCUEYsIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLCB2ZXJpZmllciBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgb3B0aW9ucyBmb3Igc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9ucyBvciBmZWF0dXJlcyBsaWtlIHRyYWNpbmcsIG5ldHdvcmtpbmcsIG9yIHNlY3VyaXR5LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgbWFwcGluZyBob3cgdGhlc2UgYXJlIHVzZWQgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqS2NvbmZpZyBMb2NhdGlvbiAtIEEgUXVpY2sgRGVkdWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgbGlrZWx5IGludm9sdmVzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB3aGVuIEkgc2VlIGBLY29uZmlnYCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gQW5kIHRoZSBwYXRoLi4uIGhtbSwgdGhlIG9sZGVyIGtlcm5lbHMsIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhpcyB3b3VsZCBiZSBgaW5pdC9LY29uZmlnYC4gSXQmIzM5O3MgYSBjbGFzc2ljIGxvY2F0aW9uLiBIb3dldmVyLCB3aXRoIHRoZSBldm9sdXRpb24gb2YgdGhlIGtlcm5lbCwgZXNwZWNpYWxseSBpbiBtb3JlIHJlY2VudCB2ZXJzaW9ucyB3aGVyZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGhhcyBleHBsb2RlZCBpbiBzaWduaWZpY2FuY2UsIHRoZXJlJiMzOTtzIGEgc3Ryb25nIGNoYW5jZSBpdCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbmV3ZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbGlrZWx5IHRvIHJlc2lkZS4gSXQmIzM5O3MgYWxtb3N0IGEga25lZS1qZXJrIHJlYWN0aW9uIG5vdyB0byB0aGluayBvZiBCUEYgY29uZmlnIGlmIEkgc2VlIGBLY29uZmlnYCBpbiB0aGUgY29udGV4dCBvZiBhIG1vZGVybiBrZXJuZWwuIEkgc2hvdWxkIGNoZWNrIGJvdGggYnV0IEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBuZXdlciBCUEYgcmVsYXRlZCBsb2NhdGlvbiBmaXJzdC4gSXQgaXMgcHJvYmFibHkgbW9yZSB1cCB0byBkYXRlIGFuZCBsZXNzIGN1bWJlcnNvbWUgdGhhbiBnb2luZyBpbnRvIG9sZGVyIGRpcmVjdG9yaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyB0aGUgY29uZmlnIGl0ZW0gd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBHb3QgaXQuIE5vdywgdGhlIGNvbm5lY3Rpb24gaXMuLi5haCwgcmlnaHQsIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgKm9ubHkqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRlcGVuZGVuY3ksIGxpbmtpbmcgdGhvc2UgdHdvIHRoaW5ncy4gSG1tLi4uIG1ha2VzIG1lIHdvbmRlciB3aGF0IGVsc2UgaGluZ2VzIG9uIHRoYXQgZmxhZy4gQmVzdCB0byBjaGVjayB0aGUgYnVpbGQgcnVsZXMgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpcyBpcyBhbGwgd2lyZWQgdG9nZXRoZXIuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZXMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkNoZWNraW5nIEJQRiBJdGVyYXRvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgc3RhdGVzLm9gIGlzIGRlZmluaXRlbHkgYnVpbHQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIHRlc3QgdGhhdCBsZXZlcmFnZXMgQlBGIGl0ZXJhdG9ycywgc3BlY2lmaWNhbGx5IHVzaW5nIGBicGZfaXRlcl90YXNrX25ld2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbmFpbCBkb3duIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGJleW9uZCBqdXN0IHRoZSBzeXNjYWxsIHN1cHBvcnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGBicGZfaXRlcl90YXNrX25ld2AgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjsgeW91IGNhbiYjMzk7dCBhc3N1bWUgYSBzaW5nbGUgb3B0aW9uIGd1YXJhbnRlZXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDkwMj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfY3NzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDMtI2VuZGlmXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTA0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9SQ1VfUFJPVEVDVEVEKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkwNS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGFza19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTExMTg9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE5LVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTIwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMjEtXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19fbnVsbGFibGUsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5Mzk9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyMzQtXHRcdFx0XHQgKiBJZiB0aGUgaXRlcmF0b3ImIzM5O3MgY29uc3RydWN0b3IgKHRoZSBfbmV3XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyMzU6XHRcdFx0XHQgKiBmdW5jdGlvbiBlLmcuLCBicGZfaXRlcl90YXNrX25ldykgaGFzIGJlZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzIzNi1cdFx0XHRcdCAqIGFubm90YXRlZCB3aXRoIEJQRiBrZnVuYyBmbGFnXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NDcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIHRoZSBicGZfaXRlcl90YXNrX25ldyBGdW5jdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBicGZfaXRlcl90YXNrX25ld2AgZnVuY3Rpb24uIEkgc2VlbSB0byByZWNhbGwgaXQgaGF2aW5nIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBCUEYgaXRlcmF0b3IgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBpdHMgbG9jYXRpb24uIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRhc2tzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4KCk5vdywganVzdCB0byBjb25maXJtIHRoYXQgdGhpcyBzb3VyY2UgZmlsZSBpcyBwYXJ0IG9mIHRoZSBmaW5hbCBidWlsZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBJJiMzOTtsbCBzY2FuIHRocm91Z2ggdGhhdCBxdWlja2x5IGFuZCBzZWUgaWYgYHRhc2tfaXRlci5vYCBpcyBiZWluZyBidWlsdCB0aGVyZS4gVGhpcyB3aWxsIGNvbmZpcm0gbXkgaHlwb3RoZXNpcyBhbmQgZ2l2ZSBtZSBjb25maWRlbmNlIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29ycmVjdCBjb21wb25lbnQuIFRoaXMgc2hvdWxkIGFsc28gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb2JqZWN0IGZpbGVzIGFuZCBzb3VyY2UgY29kZSBhcmUgcmVsYXRlZCB0byB0aGlzIG1vZHVsZS4gTm93IEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rhc2tfaXRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1NgoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQnVnIEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gVGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMsIGZvY3VzaW5nIG9uIGhvdyBpdGVyYXRvciByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGEgdHlwZSBjaGVjaywgcmVhbGx5LCB0byBwcmV2ZW50IHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IGVxdWF0aW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBtaWdodCBqdXN0ICpoYXBwZW4qIHRvIGxvb2sgdGhlIHNhbWUgaW4gbWVtb3J5IG9yIGhhdmUgdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZpeCwgaW1wYWN0aW5nIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZhbGlkYXRlZCBhbmQgdWx0aW1hdGVseSBsb2FkZWQgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuCgpNeSBmb2N1cyBzeW1ib2wgaXMgY2xlYXJseSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJiMzOTtzIHJlYWNoLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYHN0YWNrc2FmZWAsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGFuZCBgc3RhdGVzX2VxdWFsYCBhcmUgYWxsIHN0YXRpYy4gWWVwLCB0aGV5IGFyZS4gQnV0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgKm5vdCogc3RhdGljLCBhbmQgaXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIHRoZSByaWdodCBwb2ludCB0byBkcmlsbCBpbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgY2xvc2VseSBhdCB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYHN0YWNrc2FmZWAsIG5vdCBhbnl0aGluZyBlbHNlIGRpcmVjdGx5LiBUaGUgY2FsbCBjaGFpbiBpcyBwcmV0dHkgY2xlYXI6IGBzdGFja3NhZmVgIGlzIGNhbGxlZCBieSBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIHVsdGltYXRlbHkgY2FsbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIFRoaXMgY29uZmlybWF0aW9uIHJlaW5mb3JjZXMgdGhhdCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzIGRlZmluaXRlbHkgdGhlIG1vc3QgcmVsZXZhbnQgcG9pbnQgdG8gZm9jdXMgb24gZHVyaW5nIG15IGFuYWx5c2lzLiBJIGhhdmUgdGhlIHdob2xlIHBpY3R1cmUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyAoYHN0YWNrc2FmZSgpYCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2ApLiBJdCBhZGRzIGEgdHlwZSBjaGVjayBmb3IgcmVnaXN0ZXIgc3RhdGVzIHdoZW4gY29tcGFyaW5nIGl0ZXJhdG9yIHJlZ2lzdGVycywgcHJldmVudGluZyB0aGUgdmVyaWZpZXIgZnJvbSBpbmNvcnJlY3RseSBtYXRjaGluZyBhbiBpdGVyYXRvciByZWdpc3RlciB3aXRoIGEgbm9uLWl0ZXJhdG9yIHJlZ2lzdGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoZSBzYW1lIG1lbW9yeSBsYXlvdXQgb3IgdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSB2ZXJpZmllZCBhbmQgYWNjZXB0ZWQvcmVqZWN0ZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWApLiBcblxuVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBtZXJnZSBhIHN0YXRlIHdoZXJlIGFuIGl0ZXJhdG9yIGlzIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciBpcyB1bnRydXN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYCkuIEFzIGRlbW9uc3RyYXRlZCBieSB0aGUgaW5jbHVkZWQgdGVzdCBjYXNlLCBhbiB1bnByb3RlY3RlZCBnYXAgKGUuZy4sIHVubG9ja2luZyBhbmQgcmVsb2NraW5nIFJDVSkgc3RyaXBzIHRoZSBgTUVNX1JDVWAgZmxhZywgbWFraW5nIHRoZSBpdGVyYXRvciB1bnRydXN0ZWQuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcgdGhlc2Ugc3RhdGVzLCB0aGUgdmVyaWZpZXIgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBjYWxsIGBicGZfaXRlcl90YXNrX25leHRgIG9uIGFuIHVudHJ1c3RlZCBpdGVyYXRvciwgbGVhZGluZyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB3aGVuIHRoZSB0YXNrIHN0cnVjdCBpcyBhY2Nlc3NlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQuXG5cblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI3MDU3Y2I1N2I5YjBkMzRhOTM2NDY5MWQ2YzY2OTcyY2E3ODMyNzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTowODoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGF0ZXMuYwpAQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsCiAJCQkgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZQogCQkJICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpCiAJCQkgKi8KLQkJCWlmIChvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fAomIzQzOwkJCWlmIChvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGUgfHwKJiM0MzsJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKIAkJCSAgICBvbGRfcmVnLSZndDtpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0Zl9pZCB8fAogCQkJICAgIG9sZF9yZWctJmd0O2l0ZXIuc3RhdGUgIT0gY3VyX3JlZy0mZ3Q7aXRlci5zdGF0ZSB8fAogCQkJICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS0mZ3Q7aXRlci5kZXB0aCwgc2VlIGFib3ZlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMKaW5kZXggZmUzNjYzZGVkYmUxNC4uNTY2YTFkM2RmZmVhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYwpAQCAtNjEsNiAmIzQzOzYxLDUyIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHQmIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2sgaXQ7CiYjNDM7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSAlW2l0XTsmIzM0OwomIzQzOwkJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7cjMgPSAwOyYjMzQ7IC8qIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTICovCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl90YXNrX25ld107JiMzNDsKJiM0MzsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOyYjMzQ7CiYjNDM7CQkmIzM0O2lmIHcwID09IDAgZ290byB1bnByb3RlY3RlZF8lPTsmIzM0OwomIzQzOwomIzQzOwkJLyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlIG9uIHRoZSBzdHJhaWdodC1saW5lIHBhdGguICovCiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O2dvdG8gbWVyZ2VfJT07JiMzNDsKJiM0MzsKJiM0MzsJJiMzNDt1bnByb3RlY3RlZF8lPTomIzM0OwomIzQzOwkJLyogQ3JlYXRlIGFuIHVucHJvdGVjdGVkIGdhcCBvbiB0aGUgdGFrZW4gcGF0aC4gKi8KJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfbG9ja107JiMzNDsKJiM0MzsKJiM0MzsJJiMzNDttZXJnZV8lPTogcjEgPSAlW2l0XTsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfdGFza19uZXh0XTsmIzM0OwomIzQzOwkJJiMzNDtyMSA9ICVbaXRdOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl90YXNrX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTsmIzM0OwomIzQzOwkJOgomIzQzOwkJOiBfX2ltbV9wdHIoaXQpLAomIzQzOwkJICBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXcpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl90YXNrX25leHQpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl90YXNrX2Rlc3Ryb3kpLAomIzQzOwkJICBfX2ltbShicGZfcmN1X3JlYWRfbG9jayksCiYjNDM7CQkgIF9faW1tKGJwZl9yY3VfcmVhZF91bmxvY2spCiYjNDM7CQk6IF9fY2xvYmJlcl9jb21tb24KJiM0MzsJKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P2ZlbnRyeS5zLyYjMzQ7IFNZU19QUkVGSVggJiMzNDtzeXNfZ2V0cGdpZCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHQmIzM0OykKIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgY2hlY2s6IGBvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGVgICpiZWZvcmUqIGNvbXBhcmluZyBgb2xkX3JlZy0mZ3Q7aXRlci5idGZgIGFuZCBgY3VyX3JlZy0mZ3Q7aXRlci5idGZgLiBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBCUEYgdmVyaWZpZXIgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSByZWFsbSBvZiBpdGVyYXRvciBzdGF0ZSAoYGl0ZXJgKS4gTXkgaW1tZWRpYXRlIGd1ZXNzIGlzIHRoYXQgdGhpcyBhZGRyZXNzZXMgc29tZSBraW5kIG9mIHR5cGUgY29uZnVzaW9uIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgaXNzdWUuIEVzc2VudGlhbGx5LCB3ZSB3ZXJlIHRyeWluZyB0byBsb29rIGF0IGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgd2hlbiBgb2xkX3JlZy0mZ3Q7dHlwZWAgbWlnaHQgbm90IGV2ZW4gKmJlKiBhbiBpdGVyYXRvciB0eXBlLCBvciBwZXJoYXBzIHRoZSB0eXBlcyBkb24mIzM5O3QgbWF0Y2ggYmV0d2VlbiB0aGUgb2xkIGFuZCBjdXJyZW50IHJlZ2lzdGVycy4KCldhaXQgYSBzZWNvbmQsIGlmIGBvbGRfcmVnLSZndDt0eXBlYCAqaXNuJiMzOTt0KiBhbiBpdGVyYXRvciwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgZnJvbSBhIHVuaW9uIGZpZWxkIChgaXRlcmApIGluIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgdGhhdCYjMzk7cyAqbWVhbnQqIGZvciBzb21ldGhpbmcgZWxzZS4gVGhhdCBmaWVsZCBjb3VsZCBjb250YWluIGdhcmJhZ2UsIG9yIGV2ZW4gYmUgdW5pbml0aWFsaXplZC4gQnV0LCBpdCBzZWVtcyB0byBiZSBvbmx5IGEgdmFsdWUgY29tcGFyaXNvbiwgcmlnaHQ/IFNvIHdlIGFyZSBub3QgZGVyZWZlcmVuY2luZyBpdC4KCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCBpdCB1cCB3aXRoIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBnZXQgdGhlIGRlZmluaXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3RydWN0dXJlIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHR5cGVgIGFuZCB0aGF0IGBpdGVyYCBmaWVsZCB3aXRoaW4gdGhlIHVuaW9uLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHNwb3QsIGFzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyaWZpZXIgc3RhdGVzIGFuZCBpdGVyYXRvciBpbmZvcm1hdGlvbiwgd2hpY2ggYXJlIHByZXR0eSBzZW5zaXRpdmUgYXJlYXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MzI9ZW51bSBicGZfaXRlcl9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zNy1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6Mzg6c3RydWN0IGJwZl9yZWdfc3RhdGUge1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zOS1cdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSGVhZGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhlIEJQRiB2ZXJpZmllciBpcywgYXMgd2UgYWxsIGtub3csIGFic29sdXRlbHkgY3JpdGljYWwuIEl0JiMzOTtzIHRoZSBsaW5jaHBpbiBvZiBlQlBGJiMzOTtzIHNlY3VyaXR5IG1vZGVsLCBlbnN1cmluZyB0aGF0IHRoZSBwcm9ncmFtcyB3ZSBsb2FkIGFyZSBzYWZlIHRvIHJ1biBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFyb3VuZCBsaW5lIDM4IOKAkyB0aGlzIGlzIG9mdGVuIHdoZXJlIGtleSBkYXRhIHN0cnVjdHVyZXMgb3IgaW5pdGlhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXJlIGxvY2F0ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyB1c2VkIGJ5IHRoZSB2ZXJpZmllciBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIGhlcmU7IHRoaW5ncyBsaWtlIGluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9ucywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlcywgb3IgbWF5YmUgdGhlIGluaXRpYWwgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIGNvcmUgdmVyaWZpY2F0aW9uIGxvZ2ljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDM5Olx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA0MDpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNDE6XHRcdC8qXG4gIDQyOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDQzOlx0XHQgKi9cbiAgNDQ6XHRcdHMzMiBkZWx0YTtcbiAgNDU6XHRcdHVuaW9uIHtcbiAgNDY6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNDc6XHRcdFx0aW50IHJhbmdlO1xuICA0ODpcdFxuICA0OTpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA1MDpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA1MTpcdFx0XHQgKi9cbiAgNTI6XHRcdFx0c3RydWN0IHtcbiAgNTM6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNTQ6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA1NTpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNTY6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA1NzpcdFx0XHRcdCAqL1xuICA1ODpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA1OTpcdFx0XHR9O1xuICA2MDpcdFxuICA2MTpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA2MjpcdFx0XHRzdHJ1Y3Qge1xuICA2MzpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgNjQ6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA2NTpcdFx0XHR9O1xuICA2NjpcdFxuICA2NzpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA2ODpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgNjk6XHRcdFx0fTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA3MjpcdFx0XHRzdHJ1Y3Qge1xuICA3MzpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDc0Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgNzU6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgNzY6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA3NzpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDc4Olx0XHRcdFx0ICogZHlucHRyLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAgODE6XHRcdFx0fSBkeW5wdHI7XG4gIDgyOlx0XG4gIDgzOlx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuICA4NDpcdFx0XHRzdHJ1Y3Qge1xuICA4NTpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAgODY6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuICA4NzpcdFx0XHRcdCAqL1xuICA4ODpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODk6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA5MDpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuICA5MTpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAgOTI6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gIDkzOlx0XHRcdH0gaXRlcjtcbiAgOTQ6XHRcbiAgOTU6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuICA5NjpcdFx0XHRzdHJ1Y3Qge1xuICA5NzpcdFx0XHRcdGVudW0ge1xuICA5ODpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAgOTk6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEwMDpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTAxOlx0XHRcdH0gaXJxO1xuIDEwMjpcdFxuIDEwMzpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTA0Olx0XHRcdHN0cnVjdCB7XG4gMTA1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEwNjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMDc6XHRcdFx0fSByYXc7XG4gMTA4Olx0XG4gMTA5Olx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDExMDpcdFx0fTtcbiAxMTE6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTEyOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDExMzpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTE0Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDExNTpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuIDEyODpcdFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXG4gMTI5Olx0XHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxuIDEzMDpcdFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQmIzM5O3MgZnJlZWQuXG4gMTMxOlx0XHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxuIDEzMjpcdFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cbiAxMzM6XHRcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xuIDEzNDpcdFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzNTpcdFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcJiMzNDtiZWxvbmdpbmdcJiMzNDsgb2YgYSByZWZlcmVuY2VcbiAxMzY6XHRcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gMTM3Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZCBpbiBicGZfcmVnX3N0YXRlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGBpdGVyYCBzdHJ1Y3Qgd2l0aGluIHRoZSBgYnBmX3JlZ19zdGF0ZWAgdW5pb24uIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZXJlJiMzOTtzIHRoaXMgbmV3IGNoZWNrOiBgb2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlYCBiZWZvcmUgY29tcGFyaW5nIHNvbWUgYGl0ZXJgIGZpZWxkcywgbGlrZSBgYnRmYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gcHJldmVudCBhIGNvbXBhcmlzb24gaWYgdGhlIHJlZ2lzdGVyIHR5cGVzIGFyZSBkaWZmZXJlbnQsIHdoaWNoIHByb2JhYmx5IG1ha2VzIHNlbnNlIGluIG1vc3Qgc2NlbmFyaW9zLgoKTm93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJZiBgb2xkX3JlZy0mZ3Q7dHlwZWAgaXNuJiMzOTt0IGFuIGl0ZXJhdG9yIHR5cGUsIHRoZW4gYWNjZXNzaW5nIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgYmVjb21lcyBhIHJlYWQgZnJvbSB0aGUgdW5pb24uIFRoaXMgdW5pb24gaXMgcG9wdWxhdGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoYXQgYHR5cGVgIGlzIHNldCB0byBpbiBgYnBmX3JlZ19zdGF0ZWAuIFNvLCBpZiB0aGF0IHVuaW9uJiMzOTtzIGZpZWxkcyBhcmUgdW5pbml0aWFsaXplZCwgb3IgY29udGFpbiBnYXJiYWdlIGRhdGEgYmVjYXVzZSBvZiBob3cgdGhlIHN0cnVjdHVyZSBpcyB1c2VkLCB0aGVuIHdlIGNvdWxkIGJlIGxvb2tpbmcgYXQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgcG90ZW50aWFsbHkuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBhcmVuJiMzOTt0IGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgaW5zdGFuY2VzIHR5cGljYWxseSBmdWxseSBpbml0aWFsaXplZD8gT3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3aGVuIHRoZSBgdHlwZWAgaXMgc2V0LCB0aGUgYXNzb2NpYXRlZCB1bmlvbiBmaWVsZHMgKnNob3VsZCogYmUgd3JpdHRlbiB0bz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gTWF5YmUgaWYgdGhlIHR5cGUgaXMgYFNDQUxBUl9WQUxVRWAsIHRoZSB1bmlvbiBpc24mIzM5O3QgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBjaGVjayBob3cgYGJwZl9yZWdfc3RhdGVgIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoYXQgc3RydWN0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcmtfcmVnX3Vua25vd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTY2MT1zdGF0aWMgX19pbml0IGludCB1bmJvdW5kX3JlZ19pbml0KHZvaWQpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY2Mi17XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY2MzpcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShcdTAwMjZ1bmJvdW5kX3JlZyk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY2NC1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NDI9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2MS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NjI6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzYzLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzY1PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5LVx0ZWxzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3MDpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzEtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDk4PXN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEzMi0vKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMzM6dm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTM0LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0My0gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTQ0OnN0YXRpYyB2b2lkIF9fbWFya19yZWdfdW5rbm93bihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDUtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0Ni17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0NzpcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShyZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDgtXHRyZWctXHUwMDNlcHJlY2lzZSA9ICFlbnYtXHUwMDNlYnBmX2NhcGFibGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNTAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1MTpzdGF0aWMgdm9pZCBtYXJrX3JlZ191bmtub3duKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE1Mi1cdFx0XHQgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE1My17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1NDpcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MgJiM0MzsgcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNTUtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTc3PXZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNzkte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxODA6XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxODEtXHRyZWctXHUwMDNldHlwZSA9IE5PVF9JTklUO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTg0PXN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxOTEtXHRjYXNlIFNDQUxBUl9WQUxVRTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTkyOlx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxOTMtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMDczPXN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMwOTgtXHRcdGlmICh0ID09IERTVF9PUClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMDk5Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEwMC1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY2MD1zdGF0aWMgaW50IG1hcmtfcmVnX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzY5OS1cdFx0LyogaGF2ZSByZWFkIG1pc2MgZGF0YSBmcm9tIHRoZSBzdGFjayAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM3MDA6XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBzdGF0ZS1cdTAwM2VyZWdzLCBkc3RfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MDEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwOTA9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExNi1cdFx0aWYgKHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTE3Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExOC1cdH0gZWxzZSBpZiAocmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX01BUF9WQUxVRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTY3LVx0XHRcdH0gZWxzZSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE2ODpcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2OS1cdFx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMDAtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2ICh0ID09IEJQRl9SRUFEIHx8IHJkb25seV9tZW0pKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyMDE6XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjAyLVx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQ1RYKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMjMtXHRcdFx0XHRpZiAoaW5mby5pc19yZXR2YWwgXHUwMDI2XHUwMDI2IGdldF9mdW5jX3JldHZhbF9yYW5nZShlbnYtXHUwMDNlcHJvZywgXHUwMDI2cmFuZ2UpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjIyNDpcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjI1LVx0XHRcdFx0XHRlcnIgPSBfX21hcmtfcmVnX3MzMl9yYW5nZShlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjI5LVx0XHRcdFx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjMwOlx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMzEtXHRcdFx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNzAtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI3MTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNzItXHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19GTE9XX0tFWVMpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI4MS1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjgyOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI4My1cdH0gZWxzZSBpZiAodHlwZV9pc19za19wb2ludGVyKHJlZy1cdTAwM2V0eXBlKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjkwLVx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTE6XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjkyLVx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTQtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI5NTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTYtXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMyMi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgKHJkb25seV9tZW0gfHwgdCA9PSBCUEZfUkVBRCkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMyMzpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjQtXHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19BUkVOQSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjUtXHRcdGlmICh0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMyNjpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjctXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjEzPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3MDQtXHRcdFx0aWYgKGNsb2JiZXIpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzA1Olx0XHRcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjcwNi1cdFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1MDA9c3RhdGljIHZvaWQgbWF5YmVfd2lkZW5fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1MDgtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTA5Olx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmN1cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzUxMC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkzODM9c3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM0LVx0XHRpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDM1Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM2LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMjA1PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQ2MS1cdFx0Lyogc2V0cyB0eXBlIHRvIFNDQUxBUl9WQUxVRSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDYyOlx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQ2My1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjc4LVx0XHRcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDY3OTpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDY4MC1cdFx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTM5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTk1Olx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ni1cdFx0ZXJyID0gX19tYXJrX3JlZ19zMzJfcmFuZ2UoZW52LCByZWdzLCBCUEZfUkVHXzAsIC1NQVhfRVJSTk8sIC0xKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNjktXHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNzA6XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTcxLVx0XHRpZiAobWV0YS5idGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE4MS1cdFx0XHQvKiBrZnVuYyByZXR1cm5pbmcgJiMzOTt2b2lkIComIzM5OyBpcyBlcXVpdmFsZW50IHRvIHJldHVybmluZyBzY2FsYXIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE4MjpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE4My1cdFx0fSBlbHNlIGlmICghX19idGZfdHlwZV9pc19zdHJ1Y3QocHRyX3R5cGUpKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNDUwPXN0YXRpYyBpbnQgc2FuaXRpemVfc3BlY3VsYXRpdmVfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ2MC1cdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYxOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDYyLVx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYzOlx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDY0Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDY1LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNjgzPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MDUtXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzA2Olx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzcwNy1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzEyLVx0XHRpZiAob3Bjb2RlID09IEJQRl9TVUIgXHUwMDI2XHUwMDI2IGVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzcxMzpcdFx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzcxNC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2MTA9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyMC1cdGlmICghaXNfc2FmZV90b19jb21wdXRlX2RzdF9yZWdfcmFuZ2UoaW5zbiwgXHUwMDI2c3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYyMTpcdFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MjItXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDc2OD1zdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODE1LVx0XHRcdFx0aWYgKG9wY29kZSA9PSBCUEZfU1VCIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYWxsb3dfcHRyX2xlYWtzKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4MTY6XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODE3LVx0XHRcdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MzY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5My1cdFx0XHRcdFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk5NDpcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTUtXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAxKSAvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCkgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMjAtXHRcdFx0XHRcdH0gZWxzZSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwMjE6XHRcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMjItXHRcdFx0XHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNTUtXHRcdFx0XHR9IGVsc2Uge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDU2Olx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA1Ny1cdFx0XHRcdFx0XHRcdCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA2Ni1cdFx0XHQvKiBjbGVhciBhbnkgc3RhdGUgX19tYXJrX3JlZ19rbm93biBkb2VzbiYjMzk7dCBzZXQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA2NzpcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA2OC1cdFx0XHRyZWdzW2luc24tXHUwMDNlZHN0X3JlZ10udHlwZSA9IFNDQUxBUl9WQUxVRTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxOTE9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI2My1cdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI2NDpcdFx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI2NS1cdFx0XHRkc3RfcmVnLVx1MDAzZW1hcF9wdHIgPSBtYXA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzEzPXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNjktXHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM3MDpcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzcxLVx0Lypcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg0MTE9c3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDgzLVx0XHRcdFx0cmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg0ODQ6XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg0ODUtXHRcdFx0fSBlbHNlIGlmIChhcmctXHUwMDNlYXJnX3R5cGUgPT0gQVJHX1BUUl9UT19EWU5QVFIpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg1MDktXHRcdFx0XHQvKiBjYWxsZXIgY2FuIHBhc3MgZWl0aGVyIFBUUl9UT19BUkVOQSBvciBTQ0FMQVIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODUxMDpcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODUxMS1cdFx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGUgaW5zaWRlOgoKKipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllcjogQSBGb2N1cyBvbiBgX19tYXJrX3JlZ191bmtub3duYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fbWFya19yZWdfdW5rbm93bmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNyaXRpY2FsIHJvbGUgb2YgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgaW4gQlBGIHNhZmV0eS4gYF9fbWFya19yZWdfdW5rbm93bmAgbGlrZWx5IHBsYXlzIGEgcGFydCBpbiBpbml0aWFsaXppbmcgb3IgcmVzZXR0aW5nIGEgcmVnaXN0ZXImIzM5O3Mga25vd24gc3RhdGUgd2l0aGluIHRoZSB2ZXJpZmllci4gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBoYW5kbGluZyB1bmRlZmluZWQgdmFsdWVzIG9yIHVudHJ1c3RlZCBkYXRhIGNvbWluZyBpbnRvIGEgQlBGIHByb2dyYW0uIEkgaW1hZ2luZSBpdCYjMzk7cyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIGNvbnRyb2wgZmxvdyBleHBsb2l0cyBhbmQgZGF0YSBsZWFrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNpcmN1bXN0YW5jZXMgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZDogd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyB0cmlnZ2VyIGl0LCBhbmQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhdGUgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMga2V5IC0gd2hhdCBzZWN1cml0eSB0aHJlYXRzIGlzIGl0IGF0dGVtcHRpbmcgdG8gbWl0aWdhdGU/IEFsc28sIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/IElzIGl0IGVmZmljaWVudCwgb3IgaXMgaXQgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHZlcmlmaWVyIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEzMzpcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4yMTM0Olx0e1xuMjEzNTpcdFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbjIxMzY6XHRcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMjEzNzpcdFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4yMTM4Olx0XHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuMjEzOTpcdH1cbjIxNDA6XHRcbjIxNDE6XHQvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLFxuMjE0MjpcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cbjIxNDM6XHQgKi9cbjIxNDQ6XHRzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjIxNDU6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIxNDY6XHR7XG4yMTQ3Olx0XHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UocmVnKTtcbjIxNDg6XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gIWVudi1cdTAwM2VicGZfY2FwYWJsZTtcbjIxNDk6XHR9XG4yMTUwOlx0XG4yMTUxOlx0c3RhdGljIHZvaWQgbWFya19yZWdfdW5rbm93bihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjE1MjpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcbjIxNTM6XHR7XG4yMTU0Olx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICYjNDM7IHJlZ25vKTtcbjIxNTU6XHR9XG4yMTU2Olx0XG4yMTU3Olx0c3RhdGljIGludCBfX21hcmtfcmVnX3MzMl9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMjE1ODpcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4yMTU5Olx0XHRcdFx0XHR1MzIgcmVnbm8sXG4yMTYwOlx0XHRcdFx0XHRzMzIgczMyX21pbixcbjIxNjE6XHRcdFx0XHRcdHMzMiBzMzJfbWF4KVxuMjE2MjpcdHtcbjIxNjM6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICYjNDM7IHJlZ25vO1xuMjE2NDpcdFxuMjE2NTpcdFx0cmVnX3NldF9zcmFuZ2UzMihyZWcsXG4yMTY2Olx0XHRcdFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXG4yMTY3Olx0XHRcdFx0IG1pbl90KHMzMiwgcmVnX3MzMl9tYXgocmVnKSwgczMyX21heCkpO1xuMjE2ODpcdFx0cmVnX3NldF9zcmFuZ2U2NChyZWcsXG4yMTY5Olx0XHRcdFx0IG1heF90KHM2NCwgcmVnX3NtaW4ocmVnKSwgczMyX21pbiksXG4yMTcwOlx0XHRcdFx0IG1pbl90KHM2NCwgcmVnX3NtYXgocmVnKSwgczMyX21heCkpO1xuMjE3MTpcdFxuMjE3MjpcdFx0cmVnX2JvdW5kc19zeW5jKHJlZyk7XG4yMTczOlx0XG4yMTc0Olx0XHRyZXR1cm4gcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soZW52LCByZWcsIFwmIzM0O3MzMl9yYW5nZVwmIzM0Oyk7XG4yMTc1Olx0fVxuMjE3NjpcdFxuMjE3NzpcdHZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4yMTc4Olx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbjIxNzk6XHR7XG4yMTgwOlx0XHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWcpO1xuMjE4MTpcdFx0cmVnLVx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcbjIxODI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlZ2lzdGVyIFN0YXRlIEhhbmRsaW5nIGluIEJQRioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBtZW1zZXRgIG9uIHRoZSByZWdpc3Rlciwgc3BlY2lmaWNhbGx5IHplcm9pbmcgb3V0IHRoZSBlbnRpcmUgdW5pb24uIFRoYXQgbWFrZXMgaW1tZWRpYXRlIHNlbnNlOyBtYXJraW5nIHNvbWV0aGluZyAmIzM0O3Vua25vd24mIzM0OyBzaG91bGQgaW52b2x2ZSBjbGVhcmluZyBhbnkgcHJldmlvdXNseSBoZWxkIHZhbHVlLCByaWdodD8gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIHJlYWxseSBoaXRzIG1lOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBvdGhlciBkYXRhIHR5cGVzIHJlcHJlc2VudGVkIGJ5IHRoYXQgdW5pb24/IFRoaXMgemVyb2luZyBhY3Rpb24gYWZmZWN0cyBldmVyeXRoaW5nLiBBcmUgdGhlcmUgYW55IGNvZGUgcGF0aHMgd2hlcmUgYSByZWdpc3RlciYjMzk7cyBgcmVnLSZndDt0eXBlYCBpcyBtb2RpZmllZCB3aXRob3V0IGFsc28gZW5zdXJpbmcgdGhlIHVuaW9uIGlzIGNsZWFyZWQ/IFRoYXQgY291bGQgYmUgYSBzZXJpb3VzIGlzc3VlLiBUbyBwcm9wZXJseSBmaWd1cmUgdGhpcyBvdXQgSSBzaG91bGQgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBmaWxlOyB0aGF0JiMzOTtzIHdoZXJlIGBzdGFja3NhZmVgIGlzIGhhbmRsZWQsIGFuZCBsaWtlbHkgcmVsYXRlZCBzdGF0ZSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVnaXN0ZXIgbGlmZWN5Y2xlIG1vcmUgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdFx0XHQgKiBzdWNoIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQuXG4gNzkxOlx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3OTI6XHRcdFx0XHQgKi9cbiA3OTM6XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcbiA3OTQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4gNzk1Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzk2Olx0XHRcdFx0YnJlYWs7XG4gNzk3Olx0XHRcdGNhc2UgU1RBQ0tfRFlOUFRSOlxuIDc5ODpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA3OTk6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODAwOlx0XHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlZHlucHRyLnR5cGUgIT0gY3VyX3JlZy1cdTAwM2VkeW5wdHIudHlwZSB8fFxuIDgwMTpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90ICE9IGN1cl9yZWctXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcbiA4MDI6XHRcdFx0XHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVx1MDAzZWlkLCBjdXJfcmVnLVx1MDAzZWlkLCBpZG1hcCkgfHxcbiA4MDM6XHRcdFx0XHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVx1MDAzZXBhcmVudF9pZCwgY3VyX3JlZy1cdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSlcbiA4MDQ6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4MDU6XHRcdFx0XHRicmVhaztcbiA4MDY6XHRcdFx0Y2FzZSBTVEFDS19JVEVSOlxuIDgwNzpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA4MDg6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODA5Olx0XHRcdFx0LyogaXRlci5kZXB0aCBpcyBub3QgY29tcGFyZWQgYmV0d2VlbiBzdGF0ZXMgYXMgaXRcbiA4MTA6XHRcdFx0XHQgKiBkb2VzbiYjMzk7dCBtYXR0ZXIgZm9yIGNvcnJlY3RuZXNzIGFuZCB3b3VsZCBvdGhlcndpc2VcbiA4MTE6XHRcdFx0XHQgKiBwcmV2ZW50IGNvbnZlcmdlbmNlOyB3ZSBtYWludGFpbiBpdCBvbmx5IHRvIHByZXZlbnRcbiA4MTI6XHRcdFx0XHQgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZVxuIDgxMzpcdFx0XHRcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxuIDgxNDpcdFx0XHRcdCAqL1xuIDgxNTpcdFx0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4gODE2Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuIDgxNzpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGZfaWQgfHxcbiA4MTg6XHRcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLnN0YXRlICE9IGN1cl9yZWctXHUwMDNlaXRlci5zdGF0ZSB8fFxuIDgxOTpcdFx0XHRcdCAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXG4gODIwOlx0XHRcdFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VpZCwgY3VyX3JlZy1cdTAwM2VpZCwgaWRtYXApKVxuIDgyMTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgyMjpcdFx0XHRcdGJyZWFrO1xuIDgyMzpcdFx0XHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxuIDgyNDpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA4MjU6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODI2Olx0XHRcdFx0aWYgKCFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VpZCwgY3VyX3JlZy1cdTAwM2VpZCwgaWRtYXApIHx8XG4gODI3Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXJxLmtmdW5jX2NsYXNzICE9IGN1cl9yZWctXHUwMDNlaXJxLmtmdW5jX2NsYXNzKVxuIDgyODpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgyOTpcdFx0XHRcdGJyZWFrO1xuIDgzMDpcdFx0XHRjYXNlIFNUQUNLX01JU0M6XG4gODMxOlx0XHRcdGNhc2UgU1RBQ0tfWkVSTzpcbiA4MzI6XHRcdFx0Y2FzZSBTVEFDS19JTlZBTElEOlxuIDgzMzpcdFx0XHRjYXNlIFNUQUNLX1BPSVNPTjpcbiA4MzQ6XHRcdFx0XHRjb250aW51ZTtcbiA4MzU6XHRcdFx0LyogRW5zdXJlIHRoYXQgbmV3IHVuaGFuZGxlZCBzbG90IHR5cGVzIHJldHVybiBmYWxzZSBieSBkZWZhdWx0ICovXG4gODM2Olx0XHRcdGRlZmF1bHQ6XG4gODM3Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgzODpcdFx0XHR9XG4gODM5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHN0YWNrc2FmZWAgTG9naWMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgc3RhY2tzYWZlYCBpcyBoYW5kbGluZyB0aGUgY29tcGFyaXNvbi4gSXQmIzM5O3MgY2hlY2tpbmcgYG9sZC0mZ3Q7c3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV1gLiBJZiBpdCYjMzk7cyBhIGBTVEFDS19JVEVSYCwgdGhlbiBpdCBhY2Nlc3NlcyBgb2xkX3JlZyA9ICZhbXA7b2xkLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyYC4gQnV0IGhvbGQgb24sIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlYCBpcyBhbiBhcnJheSBvZiBgdThgLCBzbyBkb2VzIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgIG1lYW4gYG9sZF9yZWctJmd0O3R5cGVgIGlzIGFuIGl0ZXJhdG9yIHR5cGU/CgpBY3R1YWxseSwgYG9sZF9yZWdgIGlzbiYjMzk7dCBhIHJlZ2lzdGVyIGRpcmVjdGx5OyBpdCYjMzk7cyBgc3BpbGxlZF9wdHJgLiBIbW0sIG5vdyBJIHNlZSB0aGUgcG90ZW50aWFsIGlzc3VlLiBUaGUgY29kZSBzZWVtcyB0byBiZSBjb21wYXJpbmcgYG9sZF9yZWctJmd0O2l0ZXIuYnRmYCB3aXRoIGBjdXJfcmVnLSZndDtpdGVyLmJ0ZmAgd2l0aG91dCBleHBsaWNpdGx5IGNoZWNraW5nIGBvbGRfcmVnLSZndDt0eXBlYCBiZWZvcmVoYW5kLiBUaGUgcGF0Y2ggKmRvZXMqIGFkZCBhIGNoZWNrIGBvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGVgLCB3aGljaCBpcyBnb29kLiBCdXQgYmVmb3JlIHRoZSBwYXRjaCwgaWYgdGhlIHR5cGVzIHdlcmUgZGlmZmVyZW50LCB0aGUgY29tcGFyaXNvbiBjb3VsZCBoYXZlIHJldHVybmVkIHRydWUgYWNjaWRlbnRhbGx5IGlmIHRoZSBvdGhlciBmaWVsZHMsIGJ5IGNvaW5jaWRlbmNlLCBoYXBwZW5lZCB0byBiZSBlcXVhbC4KClRoZSBtYWluIGNvbmNlcm4gYmVmb3JlIHRoZSBwYXRjaCBpcyB0aGF0IGl0IHdhcyBzaW1wbHkgY29tcGFyaW5nIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgYW5kIGBjdXJfcmVnLSZndDtpdGVyLmJ0ZmAuIFRoaXMgbWVhbnMgaWYgdGhvc2UgYGJ0ZmAgdmFsdWVzIGhhcHBlbmVkIHRvIGJlIHRoZSBzYW1lLCB0aGUgY29kZSBjb3VsZCBoYXZlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgdGhlbSBlcXVpdmFsZW50LiBUaGUgZGFuZ2VyIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJZiBgb2xkX3JlZ2AgaXMgYSBgc3BpbGxlZF9wdHJgLCBhbmQgaXQgKmlzbiYjMzk7dCogYW4gaXRlcmF0b3IsIGl0cyB1bmlvbiBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkLCBsZWFkaW5nIHRvIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHdhaXQhIElmIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgLCB0aGVuIGBvbGRfcmVnYCBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGFzIGFuIGl0ZXJhdG9yLgoKSG93ZXZlciwgd2hhdCBpZiBgb2xkLSZndDtzdGFja1tzcGldLnNsb3RfdHlwZVswXSA9PSBTVEFDS19JVEVSYCBhbmQgYGN1ci0mZ3Q7c3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gPT0gU1RBQ0tfSVRFUmAgKmJ1dCogdGhlaXIgYHNwaWxsZWRfcHRyLnR5cGVgIHZhbHVlcyBhcmUgZGlmZmVyZW50PyBJcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBzcGlsbGVkX3B0ci50eXBlYCB0byBiZSBkaWZmZXJlbnQgd2hlbiBib3RoIHNsb3RzIGFyZSBtYXJrZWQgYXMgYFNUQUNLX0lURVJgPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBTVEFDS19JVEVSYCBpcyBzZXQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIHBvdGVudGlhbCBlZGdlIGNhc2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1RBQ0tfSVRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbG9nLmM9NDk3PXN0YXRpYyBjaGFyIHNsb3RfdHlwZV9jaGFyW10gPSB7XG4tLVxua2VybmVsL2JwZi9sb2cuYy01MDItXHRbU1RBQ0tfRFlOUFRSXVx0PSAmIzM5O2QmIzM5Oyxcbmtlcm5lbC9icGYvbG9nLmM6NTAzOlx0W1NUQUNLX0lURVJdXHQ9ICYjMzk7aSYjMzk7LFxua2VybmVsL2JwZi9sb2cuYy01MDQtXHRbU1RBQ0tfSVJRX0ZMQUddID0gJiMzOTtmJiMzOTssXG4tLVxua2VybmVsL2JwZi9sb2cuYz03MTE9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi9sb2cuYy03NzQtXHRcdFx0YnJlYWs7XG5rZXJuZWwvYnBmL2xvZy5jOjc3NTpcdFx0Y2FzZSBTVEFDS19JVEVSOlxua2VybmVsL2JwZi9sb2cuYy03NzYtXHRcdFx0Lyogb25seSBtYWluIHNsb3QgaGFzIGlkIHNldDsgc2tpcCBvdGhlcnMgKi9cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM5OD1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQzMy1cdFx0XHQgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDM0Olx0XHRcdGlmIChzdHlwZSA9PSBTVEFDS19EWU5QVFIgfHwgc3R5cGUgPT0gU1RBQ0tfSVRFUiB8fFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzUtXHRcdFx0ICAgIHN0eXBlID09IFNUQUNLX0lSUV9GTEFHKVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NzAyPXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgwNS1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODA2Olx0XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgwNy1cdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTkwPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTk4LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGF0ZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExOTk6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjAwLVx0XHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkxNT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDktXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTUwOlx0XHRcdHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NTEtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Nj1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDA2Olx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSA9PSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDctXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTM9c3RhdGljIGludCBpc19pdGVyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzctXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzODpcdFx0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbal0gIT0gU1RBQ0tfSVRFUilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM5LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNTU9c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwLSAqICAgLSBkeW5wdHIgc3RhdGUgKFNUQUNLX0RZTlBUUik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MTogKiAgIC0gaXRlciBzdGF0ZSAoU1RBQ0tfSVRFUikuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4Mi0gKiAgIC0gaXJxIGZsYWcgc3RhdGUgKFNUQUNLX0lSUV9GTEFHKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg0PXN0YXRpYyBib29sIGlzX3N0YWNrX3Nsb3Rfc3BlY2lhbChjb25zdCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MC1cdGNhc2UgU1RBQ0tfRFlOUFRSOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE6XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Mi1cdGNhc2UgU1RBQ0tfSVJRX0ZMQUc6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwNTE9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1NS1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA1NjpcdHUzMiBjbGVhcl9tYXNrID0gKDEgXHUwMDNjXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19JVEVSKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXImIzM5O3MgUkNVIFByb3RlY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBzb21ldGhpbmcgdGhhdCYjMzk7cyBiZWVuIG5hZ2dpbmcgYXQgbWUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbG9naWMgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIG1lbW9yeSBzYWZldHkgYW5kIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVuIEJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIFJDVS1wcm90ZWN0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGl0cyBzcGVjaWZpYyBjaGVja3MgYW5kIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBpbnZhbGlkYXRlcyB0aG9zZSByZWZzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSYjMzk7bSBjdXJpb3VzIHdoYXQga2luZCBvZiBhc3N1bXB0aW9ucyB0aGUgZGVzaWduIG1ha2VzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwNTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTA1MTpcdHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG45MDUyOlx0e1xuOTA1MzpcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG45MDU0Olx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTA1NTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkwNTY6XHRcdHUzMiBjbGVhcl9tYXNrID0gKDEgXHUwMDNjXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19JVEVSKTtcbjkwNTc6XHRcbjkwNTg6XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XG45MDU5Olx0XHRcdGlmIChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1JDVSkge1xuOTA2MDpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xuOTA2MTpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG45MDYyOlx0XHRcdH1cbjkwNjM6XHRcdH0pKTtcbjkwNjQ6XHR9XG45MDY1Olx0XG45MDY2Olx0c3RhdGljIGludCByZWZfY29udmVydF9hbGxvY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZClcbjkwNjc6XHR7XG45MDY4Olx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTA2OTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkwNzA6XHRcdGludCBlcnI7XG45MDcxOlx0XG45MDcyOlx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xuOTA3MzpcdFxuOTA3NDpcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgKHtcbjkwNzU6XHRcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBpZClcbjkwNzY6XHRcdFx0XHRjb250aW51ZTtcbjkwNzc6XHRcdFx0aWYgKChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX0FMTE9DKSBcdTAwMjZcdTAwMjYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSkge1xuOTA3ODpcdFx0XHRcdHJlZy1cdTAwM2VpZCA9IDA7XG45MDc5Olx0XHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+TUVNX0FMTE9DO1xuOTA4MDpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XG45MDgxOlx0XHRcdH1cbjkwODI6XHRcdH0pKTtcbjkwODM6XHRcbjkwODQ6XHRcdHJldHVybiBlcnI7XG45MDg1Olx0fVxuOTA4NjpcdFxuOTA4NzpcdHN0YXRpYyB2b2lkIGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG45MDg4Olx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXG45MDg5Olx0e1xuOTA5MDpcdFx0aW50IGk7XG45MDkxOlx0XG45MDkyOlx0XHQvKiBhZnRlciB0aGUgY2FsbCByZWdpc3RlcnMgcjAgLSByNSB3ZXJlIHNjcmF0Y2hlZCAqL1xuOTA5MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG45MDk0Olx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XG45MDk1Olx0XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuOTA5NjpcdFx0fVxuOTA5NzpcdH1cbjkwOTg6XHRcbjkwOTk6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjkxMDA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVIFJlZmVyZW5jZSBJbnZhbGlkYXRpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2AgaXMgdG91Y2hpbmcgcmVnaXN0ZXJzIHRhZ2dlZCB3aXRoIGBNRU1fUkNVYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdyYXNwIGhvdyBpdCBkb2VzIHRoYXQuIEl0JiMzOTtzIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByZWdpc3RlcnMgaW4gdGhlIHZlcmlmaWVyIHN0YXRlIOKAkyBpbnRlcmVzdGluZy4gQW5kIGl0JiMzOTtzIGluY2x1ZGluZyBzdGFjayBzbG90cyBpZiB0aGV5IG1hdGNoIGBjbGVhcl9tYXNrYC4gQWgsIHJpZ2h0LCBgY2xlYXJfbWFza2AgY29udGFpbnMgYFNUQUNLX0lURVJgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGxvb3BpbmcgdGhyb3VnaCBgU1RBQ0tfSVRFUmAgc2xvdHMgc3BlY2lmaWNhbGx5IGFuZCBjaGVja2luZyBgcmVnLSZndDt0eXBlICZhbXA7IE1FTV9SQ1VgLgoKQnV0IHRoZW4gaXQgaGl0IG1lOiBpZiBgcmVnLSZndDt0eXBlYCBpcyBzb21ldGhpbmcgbGlrZSBgUFRSX1RPX1NUQUNLYCwgd291bGRuJiMzOTt0IHRoYXQgcG90ZW50aWFsbHkgKm5vdCogaGF2ZSBgTUVNX1JDVWAgc2V0PyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludCwgYW5kIGl0IHN1Z2dlc3RzIGEgcG9zc2libGUgc3VidGxlIGJ1ZyBvciBhIG1pc3NlZCBjb25uZWN0aW9uIGluIG15IHVuZGVyc3RhbmRpbmcuCgpJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IGByZWctJmd0O3R5cGVgICpzaG91bGQqIGJlIHdoZW4gYSBzbG90IGlzIG1hcmtlZCBgU1RBQ0tfSVRFUmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbGluY2hwaW4uIEJldHRlciBjaGVjayB0aGUgY29kZSBmb3IgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBsaWVzLiBUaGlzIGVudGlyZSBsb2dpYyBoaW5nZXMgb24gaG93IHRoYXQgZnVuY3Rpb24gc2V0cyB1cCB0aGUgdHlwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNTpcdHN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gOTE2Olx0XHRcdFx0XHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIDkxNzpcdFx0XHRcdFx0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBpbnNuX2lkeCxcbiA5MTg6XHRcdFx0XHRcdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsIGludCBucl9zbG90cylcbiA5MTk6XHR7XG4gOTIwOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuIDkyMTpcdFx0aW50IHNwaSwgaSwgaiwgaWQ7XG4gOTIyOlx0XG4gOTIzOlx0XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbiA5MjQ6XHRcdGlmIChzcGkgXHUwMDNjIDApXG4gOTI1Olx0XHRcdHJldHVybiBzcGk7XG4gOTI2Olx0XG4gOTI3Olx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuIDkyODpcdFx0aWYgKGlkIFx1MDAzYyAwKVxuIDkyOTpcdFx0XHRyZXR1cm4gaWQ7XG4gOTMwOlx0XG4gOTMxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9zbG90czsgaSYjNDM7JiM0MzspIHtcbiA5MzI6XHRcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaSAtIGldO1xuIDkzMzpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuIDkzNDpcdFxuIDkzNTpcdFx0XHRfX21hcmtfcmVnX2tub3duX3plcm8oc3QpO1xuIDkzNjpcdFx0XHRzdC1cdTAwM2V0eXBlID0gUFRSX1RPX1NUQUNLOyAvKiB3ZSBkb24mIzM5O3QgaGF2ZSBkZWRpY2F0ZWQgcmVnIHR5cGUgKi9cbiA5Mzc6XHRcdFx0aWYgKGlzX2tmdW5jX3JjdV9wcm90ZWN0ZWQobWV0YSkpIHtcbiA5Mzg6XHRcdFx0XHRpZiAoaW5fcmN1X2NzKGVudikpXG4gOTM5Olx0XHRcdFx0XHRzdC1cdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XG4gOTQwOlx0XHRcdFx0ZWxzZVxuIDk0MTpcdFx0XHRcdFx0c3QtXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuIDk0MjpcdFx0XHR9XG4gOTQzOlx0XHRcdHN0LVx1MDAzZWlkID0gaSA9PSAwID8gaWQgOiAwO1xuIDk0NDpcdFx0XHRzdC1cdTAwM2VpdGVyLmJ0ZiA9IGJ0ZjtcbiA5NDU6XHRcdFx0c3QtXHUwMDNlaXRlci5idGZfaWQgPSBidGZfaWQ7XG4gOTQ2Olx0XHRcdHN0LVx1MDAzZWl0ZXIuc3RhdGUgPSBCUEZfSVRFUl9TVEFURV9BQ1RJVkU7XG4gOTQ3Olx0XHRcdHN0LVx1MDAzZWl0ZXIuZGVwdGggPSAwO1xuIDk0ODpcdFxuIDk0OTpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxuIDk1MDpcdFx0XHRcdHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcbiA5NTE6XHRcbiA5NTI6XHRcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xuIDk1MzpcdFx0fVxuIDk1NDpcdFxuIDk1NTpcdFx0cmV0dXJuIDA7XG4gOTU2Olx0fVxuIDk1NzpcdFxuIDk1ODpcdHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA5NTk6XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbiA5NjA6XHR7XG4gOTYxOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuIDk2MjpcdFx0aW50IHNwaSwgaSwgajtcbiA5NjM6XHRcbiA5NjQ6XHRcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVmVyaWZpZXIgQnVnOiBJbmNvbnNpc3RlbnQgU3RhdGUgTWVyZ2luZyB3aXRoIFJDVS1Qcm90ZWN0ZWQgSXRlcmF0b3JzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGBzdC0mZ3Q7dHlwZWAgZmllbGQsIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgYSBzdGFjayBzbG90LCBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiBgUFRSX1RPX1NUQUNLYCwgYE1FTV9SQ1VgLCBhbmQgYFBUUl9VTlRSVVNURURgLiAgU3BlY2lmaWNhbGx5LCBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLCB0aGUgdHlwZSBjYW4gYmUgYFBUUl9UT19TVEFDS2AsIGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCwgb3IgYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyBpbiBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgc3RhdGUgbWVyZ2luZywgc3BlY2lmaWNhbGx5IHdpdGggUkNVLXByb3RlY3RlZCBpdGVyYXRvcnMuCgpUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgaW4gdGhlIGBzdGFja3NhZmVgIGZ1bmN0aW9uLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgaWYgdHdvIHN0YXRlcyBhcmUgZXF1aXZhbGVudCBkdXJpbmcgc3RhdGUgbWVyZ2luZy4gIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGBzdGFja3NhZmVgICp3YXNuJiMzOTt0KiBjaGVja2luZyBgb2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlYCBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBUaGlzIG1lYW5zIHRoYXQgaWYgb25lIHN0YXRlIGhhZCBgTUVNX1JDVWAgYW5kIHRoZSBvdGhlciBoYWQgYFBUUl9VTlRSVVNURURgLCB0aGV5IHdvdWxkIGJlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgZXF1aXZhbGVudCEgVGhpcyBpcyBhIGNsYXNzaWMgdmVyaWZpZXIgYnVnLgoKVGhlIHRlc3QgY2FzZSBpbiB0aGUgcGF0Y2gsIGBpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nYCwgaWxsdXN0cmF0ZXMgdGhpcyBwZXJmZWN0bHkuICBJdCBzZXRzIHVwIGEgc2NlbmFyaW8gd2hlcmUgYW4gaXRlcmF0b3IgaXMgY3JlYXRlZCB3aXRoaW4gYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNvZGUgdGhlbiBicmFuY2hlcywgd2l0aCBvbmUgcGF0aCAqa2VlcGluZyogdGhlIFJDVSBsb2NrIGFuZCB0aGUgb3RoZXIgKnJlbGVhc2luZyogYW5kICpyZS1hY3F1aXJpbmcqIGl0LCB0aHVzIGNyZWF0aW5nIGFuIHVucHJvdGVjdGVkIHdpbmRvdy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoZSBzdWJzZXF1ZW50IG1lcmdlLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgdmVyaWZpZXIsIGVuY291bnRlcmluZyB0d28gYFNUQUNLX0lURVJgIHNsb3RzIHdpdGggdGhlIHNhbWUgQlRGIElELCBldGMuLCB3b3VsZCBpbmNvcnJlY3RseSBkZWVtIHRoZSBzdGF0ZXMgZXF1aXZhbGVudCwgZGVzcGl0ZSB0aGUgZGlmZmVyZW5jZSBpbiBSQ1UgcHJvdGVjdGlvbiAoYE1FTV9SQ1VgIHZzLiBgUFRSX1VOVFJVU1RFRGApLgoKYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCBpcyBrZXkuICBJdCBjaGFuZ2VzIGBNRU1fUkNVYCB0byBgUFRSX1VOVFJVU1RFRGAgd2hlbiB0aGUgUkNVIHByb3RlY3Rpb24gaXMgbG9zdC4gIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHByZXZlbnRzIHRoZSB2ZXJpZmllciBmcm9tIG1lcmdpbmcgYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgKmlzKiBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSBpdCAqaXMgbm90KiAoYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgKS4KCk5vdywgaWYgdGhlIHZlcmlmaWVyICpkaWQqIG1lcmdlIHRoZXNlIHN0YXRlcywgaXQgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgaXNzdWUuIGBicGZfaXRlcl90YXNrX25leHRgLCBjcnVjaWFsbHksIHJlcXVpcmVzIGFuICpSQ1UtcHJvdGVjdGVkKiBpdGVyYXRvci4gQnkgaW5jb3JyZWN0bHkgbWVyZ2luZywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiBpdGVyYXRvciB0aGF0JiMzOTtzIG5vIGxvbmdlciBSQ1UtcHJvdGVjdGVkLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgYSBrZXJuZWwgbWVtb3J5IHNhZmV0eSBidWcsIHdoZW4gYGJwZl9pdGVyX3Rhc2tfbmV4dGAgdHJpZXMgdG8gYWNjZXNzIHRoZSB0YXNrIHN0cnVjdCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgcGFzc2VkLiBUaGUgdGVzdCBjYXNlIGV4cGxvaXRzIHRoaXMgd2l0aCB0aGUgdW5wcm90ZWN0ZWQgd2luZG93LCBhbGxvd2luZyB0aGUgaXRlcmF0b3IgdG8gYmVjb21lIGBQVFJfVU5UUlVTVEVEYC4KClRoaXMgdXNlLWFmdGVyLWZyZWUgaXMsIHRoYW5rZnVsbHksIHNvbWV0aGluZyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBjYW4gY2F0Y2guICBBcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIGBzdGFja3NhZmVgIGRvZXMgY2hlY2sgdGhlIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCB0byBiZSBgU1RBQ0tfSU5WQUxJRGAsIHNvIGl0IGRvZXNuJiMzOTt0IGFsbG93IGNvbXBhcmluZyB1bnJlbGF0ZWQgZGF0YS4gIFRoZSBwYXRjaCBqdXN0IGludHJvZHVjZXMgYSBuZWNlc3NhcnkgY2hlY2sgb2YgYG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZWAgZm9yIHRoZSBgU1RBQ0tfSVRFUmAgdHlwZSBkdXJpbmcgYHN0YWNrc2FmZWAuIFRoaXMgZW5zdXJlcyBjb3JyZWN0IHN0YXRlIG1lcmdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMjpcdHN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbiA3MDM6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxuIDcwNDpcdFx0XHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuIDcwNTpcdHtcbiA3MDY6XHRcdGludCBpLCBzcGk7XG4gNzA3Olx0XG4gNzA4Olx0XHQvKiB3YWxrIHNsb3RzIG9mIHRoZSBleHBsb3JlZCBzdGFjayBhbmQgaWdub3JlIGFueSBhZGRpdGlvbmFsXG4gNzA5Olx0XHQgKiBzbG90cyBpbiB0aGUgY3VycmVudCBzdGFjaywgc2luY2UgZXhwbG9yZWQoc2FmZSkgc3RhdGVcbiA3MTA6XHRcdCAqIGRpZG4mIzM5O3QgdXNlIHRoZW1cbiA3MTE6XHRcdCAqL1xuIDcxMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2xkLVx1MDAzZWFsbG9jYXRlZF9zdGFjazsgaSYjNDM7JiM0MzspIHtcbiA3MTM6XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZF9yZWcsICpjdXJfcmVnO1xuIDcxNDpcdFx0XHRpbnQgaW0gPSBpICUgQlBGX1JFR19TSVpFO1xuIDcxNTpcdFxuIDcxNjpcdFx0XHRzcGkgPSBpIC8gQlBGX1JFR19TSVpFO1xuIDcxNzpcdFxuIDcxODpcdFx0XHRpZiAoZXhhY3QgPT0gRVhBQ1QpIHtcbiA3MTk6XHRcdFx0XHR1OCBvbGRfdHlwZSA9IG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXTtcbiA3MjA6XHRcdFx0XHR1OCBjdXJfdHlwZSA9IGkgXHUwMDNjIGN1ci1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgP1xuIDcyMTpcdFx0XHRcdFx0ICAgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdIDogU1RBQ0tfSU5WQUxJRDtcbiA3MjI6XHRcbiA3MjM6XHRcdFx0XHQvKiBTVEFDS19JTlZBTElEIGFuZCBTVEFDS19QT0lTT04gYXJlIGVxdWl2YWxlbnQgZm9yIHBydW5pbmcgKi9cbiA3MjQ6XHRcdFx0XHRpZiAob2xkX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxuIDcyNTpcdFx0XHRcdFx0b2xkX3R5cGUgPSBTVEFDS19JTlZBTElEO1xuIDcyNjpcdFx0XHRcdGlmIChjdXJfdHlwZSA9PSBTVEFDS19QT0lTT04pXG4gNzI3Olx0XHRcdFx0XHRjdXJfdHlwZSA9IFNUQUNLX0lOVkFMSUQ7XG4gNzI4Olx0XHRcdFx0aWYgKGkgXHUwMDNlPSBjdXItXHUwMDNlYWxsb2NhdGVkX3N0YWNrIHx8IG9sZF90eXBlICE9IGN1cl90eXBlKVxuIDcyOTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczMDpcdFx0XHR9XG4gNzMxOlx0XG4gNzMyOlx0XHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gPT0gU1RBQ0tfSU5WQUxJRCB8fFxuIDczMzpcdFx0XHQgICAgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1BPSVNPTilcbiA3MzQ6XHRcdFx0XHRjb250aW51ZTtcbiA3MzU6XHRcbiA3MzY6XHRcdFx0aWYgKGVudi1cdTAwM2VhbGxvd191bmluaXRfc3RhY2sgXHUwMDI2XHUwMDI2XG4gNzM3Olx0XHRcdCAgICBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gPT0gU1RBQ0tfTUlTQylcbiA3Mzg6XHRcdFx0XHRjb250aW51ZTtcbiA3Mzk6XHRcbiA3NDA6XHRcdFx0LyogZXhwbG9yZWQgc3RhY2sgaGFzIG1vcmUgcG9wdWxhdGVkIHNsb3RzIHRoYW4gY3VycmVudCBzdGFja1xuIDc0MTpcdFx0XHQgKiBhbmQgdGhlc2Ugc2xvdHMgd2VyZSB1c2VkXG4gNzQyOlx0XHRcdCAqL1xuIDc0MzpcdFx0XHRpZiAoaSBcdTAwM2U9IGN1ci1cdTAwM2VhbGxvY2F0ZWRfc3RhY2spXG4gNzQ0Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc0NTpcdFxuIDc0NjpcdFx0XHQvKlxuIDc0NzpcdFx0XHQgKiA2NCBhbmQgMzItYml0IHNjYWxhciBzcGlsbHMgdnMgTUlTQy9JTlZBTElEIHNsb3RzIGFuZCB2aWNlIHZlcnNhLlxuIDc0ODpcdFx0XHQgKiBMb2FkIGZyb20gTUlTQy9JTlZBTElEIHNsb3RzIHByb2R1Y2VzIHVuYm91bmQgc2NhbGFyLlxuIDc0OTpcdFx0XHQgKiBDb25zdHJ1Y3QgYSBmYWtlIHJlZ2lzdGVyIGZvciBzdWNoIHN0YWNrIGFuZCBjYWxsXG4gNzUwOlx0XHRcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXG4gNzUxOlx0XHRcdCAqL1xuIDc1MjpcdFx0XHRpZiAoaW0gPT0gMCB8fCBpbSA9PSA0KSB7XG4gNzUzOlx0XHRcdFx0b2xkX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0sIGltKTtcbiA3NTQ6XHRcdFx0XHRjdXJfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xuIDc1NTpcdFx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG4gNzU2Olx0XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxuIDc1NzpcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzU4Olx0XHRcdFx0XHRpICYjNDM7PSAoaW0gPT0gMCA/IEJQRl9SRUdfU0laRSAtIDEgOiAzKTtcbiA3NTk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDc2MDpcdFx0XHRcdH1cbiA3NjE6XHRcdFx0fVxuIDc2MjpcdFxuIDc2MzpcdFx0XHQvKiBpZiBvbGQgc3RhdGUgd2FzIHNhZmUgd2l0aCBtaXNjIGRhdGEgaW4gdGhlIHN0YWNrXG4gNzY0Olx0XHRcdCAqIGl0IHdpbGwgYmUgc2FmZSB3aXRoIHplcm8taW5pdGlhbGl6ZWQgc3RhY2suXG4gNzY1Olx0XHRcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxuIDc2NjpcdFx0XHQgKi9cbiA3Njc6XHRcdFx0aWYgKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFx1MDAyNlx1MDAyNlxuIDc2ODpcdFx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1pFUk8pXG4gNzY5Olx0XHRcdFx0Y29udGludWU7XG4gNzcwOlx0XHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gIT1cbiA3NzE6XHRcdFx0ICAgIGN1ci1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSlcbiA3NzI6XHRcdFx0XHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cbiA3NzM6XHRcdFx0XHQgKiB0aGlzIHN0YWNrIHNsb3QsIGJ1dCBjdXJyZW50IGhhcyBTVEFDS19NSVNDIC1cdTAwM2VcbiA3NzQ6XHRcdFx0XHQgKiB0aGlzIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQsXG4gNzc1Olx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3NzY6XHRcdFx0XHQgKi9cbiA3Nzc6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzc4Olx0XHRcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXG4gNzc5Olx0XHRcdFx0Y29udGludWU7XG4gNzgwOlx0XHRcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xuIDc4MTpcdFx0XHRzd2l0Y2ggKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtCUEZfUkVHX1NJWkUgLSAxXSkge1xuIDc4MjpcdFx0XHRjYXNlIFNUQUNLX1NQSUxMOlxuIDc4MzpcdFx0XHRcdC8qIHdoZW4gZXhwbG9yZWQgYW5kIGN1cnJlbnQgc3RhY2sgc2xvdCBhcmUgYm90aCBzdG9yaW5nXG4gNzg0Olx0XHRcdFx0ICogc3BpbGxlZCByZWdpc3RlcnMsIGNoZWNrIHRoYXQgc3RvcmVkIHBvaW50ZXJzIHR5cGVzXG4gNzg1Olx0XHRcdFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXG4gNzg2Olx0XHRcdFx0ICogRXg6IGV4cGxvcmVkIHNhZmUgcGF0aCBjb3VsZCBoYXZlIHN0b3JlZFxuIDc4NzpcdFx0XHRcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtOH1cbiA3ODg6XHRcdFx0XHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XG4gNzg5Olx0XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC0xNn1cbiA3OTA6XHRcdFx0XHQgKiBzdWNoIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQuXG4gNzkxOlx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3OTI6XHRcdFx0XHQgKi9cbiA3OTM6XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcbiA3OTQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4gNzk1Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzk2Olx0XHRcdFx0YnJlYWs7XG4gNzk3Olx0XHRcdGNhc2UgU1RBQ0tfRFlOUFRSOlxuIDc5ODpcdFx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbiA3OTk6XHRcdFx0XHRjdXJfcmVnID0gXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODAwOlx0XHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlZHlucHRyLnR5cGUgIT0gY3VyX3JlZy1cdTAwM2VkeW5wdHIudHlwZSB8fFxuIDgwMTpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90ICE9IGN1cl9yZWctXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGFjayBTYWZldHkgQ2hlY2sqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgc3RhY2tzYWZlYCBjaGVjazoKCmBgYGMKCQlpZiAob2xkLSZndDtzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPQoJCSAgICBjdXItJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdKQoJCQlyZXR1cm4gZmFsc2U7CmBgYAoKUmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoZSBjaGVjayBpcyBjb21wYXJpbmcgdGhlIGBzbG90X3R5cGVgIG9mIGEgc3RhY2sgc2xvdCBiZXR3ZWVuIHR3byBzdGF0ZXMsIGBvbGRgIGFuZCBgY3VyYC4gRm9yIHRoaXMgY2hlY2sgdG8gZXZlbiBiZSByZWxldmFudCwgKmJvdGgqIGBvbGRgIGFuZCBgY3VyYCBtdXN0IGhhdmUgYFNUQUNLX0lURVJgIGFzIHRoZWlyIGBzbG90X3R5cGVgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4KCklmIGJvdGggc3RhdGVzIGhhdmUgYFNUQUNLX0lURVJgLCB0aGVuIHRoYXQgaW1wbGllcyBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCBhcmUgYm90aCBpbml0aWFsaXplZCBhcyBpdGVyYXRvcnMsIHRoYW5rcyB0byBgbWFya19zdGFja19zbG90c19pdGVyYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgc3QtJmd0O3R5cGUgPSBQVFJfVE9fU1RBQ0tgIGFuZCBhZGRpbmcgZWl0aGVyIGBNRU1fUkNVYCBvciBgUFRSX1VOVFJVU1RFRGAuIENydWNpYWxseSwgaXQgYWxzbyBpbml0aWFsaXplcyBhbGwgdGhvc2UgYGl0ZXJgIHVuaW9uIGZpZWxkczogYGJ0ZmAsIGBidGZfaWRgLCBldGMuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gaW5oZXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlIGR1cmluZyB0aGUgaW5pdGlhbCBpbml0aWFsaXphdGlvbiwgYXMgdGhlIGZpZWxkcyBhcmUgYWxsIHNldC4KClNvLCB0aGUgaXNzdWUgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcuIEl0JiMzOTtzIGZhaWxpbmcgdG8gYWNjdXJhdGVseSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYW4gUkNVLXByb3RlY3RlZCBpdGVyYXRvciBhbmQgYW4gdW50cnVzdGVkIGl0ZXJhdG9yLiBUaGlzLCBvZiBjb3Vyc2UsIGNyZWF0ZXMgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIChVQUYpIHNjZW5hcmlvLiBJZiB0aGUgdmVyaWZpZXIgbWlzdGFrZW5seSBhbGxvd3MgYW4gdW50cnVzdGVkIGl0ZXJhdG9yIHRvIGJlIHVzZWQgKmFmdGVyKiB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzLiBGb3J0dW5hdGVseSwgS0FTQU4gd291bGQgY2F0Y2ggdGhhdCwgd2hpY2ggaXMgZ29vZC4KCkJ1dCBpcyB0aGVyZSBhIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgKnJlc3VsdGluZyogZnJvbSB0aGUgbG9naWMgYnVnPwoKSWYgdGhlIHZlcmlmaWVyLCBlcnJvbmVvdXNseSwgdGhpbmtzIGFuIHVudHJ1c3RlZCBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkLCB0aGF0IGFsbG93cyBgYnBmX2l0ZXJfdGFza19uZXh0YCB0byBiZSBjYWxsZWQuIEFuZCB0aGlzIGFjY2Vzc2VzIHRoZSB0YXNrIHN0cnVjdC4gSWYgdGhhdCBgdGFza2Agc3RydWN0IGlzIGZyZWVkLCBpdCYjMzk7cyBhIFVBRi4gQnV0IFVBRnMgYXJlbiYjMzk7dCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGxpa2UgdmFyaWFibGVzIG9uIHRoZSBzdGFjayBub3QgaW5pdGlhbGl6ZWQsIG9yIGhlYXAgYWxsb2NhdGlvbnMgbm90IHplcm9lZC4KCkFoLCBidXQgd2FpdC4uLiBjb3VsZCBgb2xkX3JlZy0mZ3Q7dHlwZWAgYmUgKmNvbXBsZXRlbHkqIGRpZmZlcmVudCBpZiB0aGUgc3RhY2sgc2xvdCB3YXMgb3ZlcndyaXR0ZW4/IElmIHdlIGhhdmUgYSBgU1RBQ0tfSVRFUmAgc2xvdCwgYW5kIHNvbWV0aGluZyAqbGF0ZXIqIHdyaXRlcyBvdmVyIGl0LCB0aGVuIHllcywgdGhlIGBzbG90X3R5cGVgIHdvdWxkIGNoYW5nZS4gVGhlIHZlcmlmaWVyIHdvdWxkIGNoYW5nZSBpdCBmcm9tIGBTVEFDS19JVEVSYC4KCkFuZCB3aGF0IGlmIGEgQlBGIHByb2dyYW0gZGlyZWN0bHkgd3JpdGVzIHRvIHRoYXQgc3RhY2sgc2xvdCBieXRlLWJ5LWJ5dGU/IElmIHRoYXQgaGFwcGVucyB0byBhIGBTVEFDS19JVEVSYCBzbG90LCB0aGUgdmVyaWZpZXIgd2lsbCAqY2hhbmdlKiBpdHMgYHNsb3RfdHlwZWAgdG8gYFNUQUNLX01JU0NgIG9yIGBTVEFDS19aRVJPYC4gSG1tLCB0aGF0IHN1Z2dlc3RzIHRoZSBjb3JlIGxpZXMgaW4gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIG92ZXJ3cml0ZXMgYW5kIGhvdyB0aGF0IGltcGFjdHMgdGhlIGNvbXBhcmlzb24uIExldCBtZSBkb3VibGUtY2hlY2sgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzODpcdFx0ICogcmVnX3VtYXgocmVnKSBjYW4mIzM5O3QgYmUgYmlnZ2VyIHRoYW4gTUFYX1BBQ0tFVF9PRkYgd2hpY2ggaXMgMHhmZmZmLFxuNDYzOTpcdFx0ICogb3RoZXJ3aXNlIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMgd291bGQgaGF2ZSByZWZ1c2VkIHRvIHNldCByYW5nZSBpbmZvXG40NjQwOlx0XHQgKiB0aGF0IF9fY2hlY2tfbWVtX2FjY2VzcyB3b3VsZCBoYXZlIHJlamVjdGVkIHRoaXMgcGt0IGFjY2Vzcy5cbjQ2NDE6XHRcdCAqIFRoZXJlZm9yZSwgXCYjMzQ7b2ZmICYjNDM7IHJlZ191bWF4KHJlZykgJiM0Mzsgc2l6ZSAtIDFcJiMzNDsgd29uJiMzOTt0IG92ZXJmbG93IHUzMi5cbjQ2NDI6XHRcdCAqL1xuNDY0MzpcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9wa3Rfb2Zmc2V0ID1cbjQ2NDQ6XHRcdFx0bWF4X3QodTMyLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3BrdF9vZmZzZXQsXG40NjQ1Olx0XHRcdCAgICAgIG9mZiAmIzQzOyByZWdfdW1heChyZWcpICYjNDM7IHNpemUgLSAxKTtcbjQ2NDY6XHRcbjQ2NDc6XHRcdHJldHVybiAwO1xuNDY0ODpcdH1cbjQ2NDk6XHRcbjQ2NTA6XHRzdGF0aWMgYm9vbCBpc192YXJfY3R4X29mZl9hbGxvd2VkKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjQ2NTE6XHR7XG40NjUyOlx0XHRyZXR1cm4gcmVzb2x2ZV9wcm9nX3R5cGUocHJvZykgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMO1xuNDY1MzpcdH1cbjQ2NTQ6XHRcbjQ2NTU6XHQvKiBjaGVjayBhY2Nlc3MgdG8gJiMzOTtzdHJ1Y3QgYnBmX2NvbnRleHQmIzM5OyBmaWVsZHMuICBTdXBwb3J0cyBmaXhlZCBvZmZzZXRzIG9ubHkgKi9cbjQ2NTY6XHRzdGF0aWMgaW50IF9fY2hlY2tfY3R4X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIGludCBvZmYsIGludCBzaXplLFxuNDY1NzpcdFx0XHRcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxuNDY1ODpcdHtcbjQ2NTk6XHRcdGlmIChlbnYtXHUwMDNlb3BzLVx1MDAzZWlzX3ZhbGlkX2FjY2VzcyBcdTAwMjZcdTAwMjZcbjQ2NjA6XHRcdCAgICBlbnYtXHUwMDNlb3BzLVx1MDAzZWlzX3ZhbGlkX2FjY2VzcyhvZmYsIHNpemUsIHQsIGVudi1cdTAwM2Vwcm9nLCBpbmZvKSkge1xuNDY2MTpcdFx0XHQvKiBBIG5vbiB6ZXJvIGluZm8uY3R4X2ZpZWxkX3NpemUgaW5kaWNhdGVzIHRoYXQgdGhpcyBmaWVsZCBpcyBhXG40NjYyOlx0XHRcdCAqIGNhbmRpZGF0ZSBmb3IgbGF0ZXIgdmVyaWZpZXIgdHJhbnNmb3JtYXRpb24gdG8gbG9hZCB0aGUgd2hvbGVcbjQ2NjM6XHRcdFx0ICogZmllbGQgYW5kIHRoZW4gYXBwbHkgYSBtYXNrIHdoZW4gYWNjZXNzZWQgd2l0aCBhIG5hcnJvd2VyXG40NjY0Olx0XHRcdCAqIGFjY2VzcyB0aGFuIGFjdHVhbCBjdHggYWNjZXNzIHNpemUuIEEgemVybyBpbmZvLmN0eF9maWVsZF9zaXplXG40NjY1Olx0XHRcdCAqIHdpbGwgb25seSBhbGxvdyBmb3Igd2hvbGUgZmllbGQgYWNjZXNzIGFuZCByZWplY3RzIGFueSBvdGhlclxuNDY2NjpcdFx0XHQgKiB0eXBlIG9mIG5hcnJvd2VyIGFjY2Vzcy5cbjQ2Njc6XHRcdFx0ICovXG40NjY4Olx0XHRcdGlmIChiYXNlX3R5cGUoaW5mby1cdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xuNDY2OTpcdFx0XHRcdGlmIChpbmZvLVx1MDAzZXJlZl9pZCBcdTAwMjZcdTAwMjZcbjQ2NzA6XHRcdFx0XHQgICAgIWZpbmRfcmVmZXJlbmNlX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIGluZm8tXHUwMDNlcmVmX2lkKSkge1xuNDY3MTpcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ludmFsaWQgYnBmX2NvbnRleHQgYWNjZXNzIG9mZj0lZC4gUmVmZXJlbmNlIG1heSBhbHJlYWR5IGJlIHJlbGVhc2VkXFxuXCYjMzQ7LFxuNDY3MjpcdFx0XHRcdFx0XHRvZmYpO1xuNDY3MzpcdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG40Njc0Olx0XHRcdFx0fVxuNDY3NTpcdFx0XHR9IGVsc2Uge1xuNDY3NjpcdFx0XHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5jdHhfZmllbGRfc2l6ZSA9IGluZm8tXHUwMDNlY3R4X2ZpZWxkX3NpemU7XG40Njc3Olx0XHRcdH1cbjQ2Nzg6XHRcdFx0LyogcmVtZW1iZXIgdGhlIG9mZnNldCBvZiBsYXN0IGJ5dGUgYWNjZXNzZWQgaW4gY3R4ICovXG40Njc5Olx0XHRcdGlmIChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X2N0eF9vZmZzZXQgXHUwMDNjIG9mZiAmIzQzOyBzaXplKVxuNDY4MDpcdFx0XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VtYXhfY3R4X29mZnNldCA9IG9mZiAmIzQzOyBzaXplO1xuNDY4MTpcdFx0XHRyZXR1cm4gMDtcbjQ2ODI6XHRcdH1cbjQ2ODM6XHRcbjQ2ODQ6XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtpbnZhbGlkIGJwZl9jb250ZXh0IGFjY2VzcyBvZmY9JWQgc2l6ZT0lZFxcblwmIzM0Oywgb2ZmLCBzaXplKTtcbjQ2ODU6XHRcdHJldHVybiAtRUFDQ0VTO1xuNDY4NjpcdH1cbjQ2ODc6XHRcbjQ2ODg6XHRzdGF0aWMgaW50IGNoZWNrX2N0eF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuNDY4OTpcdFx0XHRcdCAgICBpbnQgb2ZmLCBpbnQgYWNjZXNzX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsXG40NjkwOlx0XHRcdFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxuNDY5MTpcdHtcbjQ2OTI6XHRcdC8qXG40NjkzOlx0XHQgKiBQcm9ncmFtIHR5cGVzIHRoYXQgZG9uJiMzOTt0IHJld3JpdGUgY3R4IGFjY2Vzc2VzIGNhbiBzYWZlbHlcbjQ2OTQ6XHRcdCAqIGRlcmVmZXJlbmNlIGN0eCBwb2ludGVycyB3aXRoIGZpeGVkIG9mZnNldHMuXG40Njk1Olx0XHQgKi9cbjQ2OTY6XHRcdGJvb2wgdmFyX29mZl9vayA9IGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoZW52LVx1MDAzZXByb2cpO1xuNDY5NzpcdFx0Ym9vbCBmaXhlZF9vZmZfb2sgPSAhZW52LVx1MDAzZW9wcy1cdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XG40Njk4Olx0XHRpbnQgZXJyO1xuNDY5OTpcdFxuNDcwMDpcdFx0aWYgKHZhcl9vZmZfb2spXG40NzAxOlx0XHRcdGVyciA9IGNoZWNrX21lbV9yZWdpb25fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBhY2Nlc3Nfc2l6ZSwgVTE2X01BWCwgZmFsc2UpO1xuNDcwMjpcdFx0ZWxzZVxuNDcwMzpcdFx0XHRlcnIgPSBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTtcbjQ3MDQ6XHRcdGlmIChlcnIpXG40NzA1Olx0XHRcdHJldHVybiBlcnI7XG40NzA2Olx0XHRvZmYgJiM0Mzs9IHJlZ191bWF4KHJlZyk7XG40NzA3Olx0XG40NzA4Olx0XHRlcnIgPSBfX2NoZWNrX2N0eF9hY2Nlc3MoZW52LCBpbnNuX2lkeCwgb2ZmLCBhY2Nlc3Nfc2l6ZSwgdCwgaW5mbyk7XG40NzA5Olx0XHRpZiAoZXJyKVxuNDcxMDpcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsIFwmIzM0OzsgXCYjMzQ7KTtcbjQ3MTE6XHRcdHJldHVybiBlcnI7XG40NzEyOlx0fVxuNDcxMzpcdFxuNDcxNDpcdHN0YXRpYyBpbnQgY2hlY2tfZmxvd19rZXlzX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuNDcxNTpcdFx0XHRcdFx0ICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuNDcxNjpcdFx0XHRcdFx0ICBpbnQgb2ZmLCBpbnQgc2l6ZSlcbjQ3MTc6XHR7XG40NzE4Olx0XHQvKiBPbmx5IGEgY29uc3RhbnQgb2Zmc2V0IGlzIGFsbG93ZWQgaGVyZTsgZm9sZCBpdCBpbnRvIG9mZi4gKi9cbjQ3MTk6XHRcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbjQ3MjA6XHRcdFx0Y2hhciB0bl9idWZbNDhdO1xuNDcyMTpcdFxuNDcyMjpcdFx0XHR0bnVtX3N0cm4odG5fYnVmLCBzaXplb2YodG5fYnVmKSwgcmVnLVx1MDAzZXZhcl9vZmYpO1xuNDcyMzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaW52YWxpZCB2YXJpYWJsZSBvZmZzZXQgdG8gZmxvdyBrZXlzOiBvZmY9JWQsIHZhcl9vZmY9JXNcXG5cJiMzNDssXG40NzI0Olx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBvZmYsIHRuX2J1Zik7XG40NzI1Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNDcyNjpcdFx0fVxuNDcyNzpcdFx0b2ZmICYjNDM7PSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbjQ3Mjg6XHRcbjQ3Mjk6XHRcdGlmIChzaXplIFx1MDAzYyAwIHx8IG9mZiBcdTAwM2MgMCB8fFxuNDczMDpcdFx0ICAgICh1NjQpb2ZmICYjNDM7IHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpIHtcbjQ3MzE6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ludmFsaWQgYWNjZXNzIHRvIGZsb3cga2V5cyBvZmY9JWQgc2l6ZT0lZFxcblwmIzM0OyxcbjQ3MzI6XHRcdFx0XHRvZmYsIHNpemUpO1xuNDczMzpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjQ3MzQ6XHRcdH1cbjQ3MzU6XHRcdHJldHVybiAwO1xuNDczNjpcdH1cbjQ3Mzc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBtZW50YWxseSByZWNvbnN0cnVjdCBpdHMgcHVycG9zZSBhbmQgd2hhdCBpdCYjMzk7cyBndWFyZGluZyBhZ2FpbnN0LiBGcm9tIHRoZSBuYW1lIGFsb25lLCBpdCYjMzk7cyBjbGVhcmx5IHJlbGF0ZWQgdG8gc3RhY2sgd3JpdGVzLCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIHdoZW4gY29uc2lkZXJpbmcgc2VjdXJpdHksIGVzcGVjaWFsbHkgaW4gbWVtb3J5LW1hbmFnZWQgbGFuZ3VhZ2VzIChvciBpbiBjb250ZXh0cyB3aGVyZSB0aGF0JiMzOTtzIGFuIGlzc3VlKS4gVGhlICYjMzQ7Zml4ZWQgb2Zmc2V0JiMzNDsgcGFydCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcsIGFzIGl0IGhpbnRzIGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgc2l6ZSBhbmQgYm91bmRzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBlbmZvcmNpbmcsIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHNpemUgY2hlY2sgaXQgZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgJiMzNDtmaXhlZCBvZmZzZXQmIzM0OyBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuIElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIGNoZWNrcz8gV2hhdCBhc3N1bXB0aW9ucyBkb2VzIGl0IG1ha2UgYWJvdXQgdGhlIHN0YWNrIGxheW91dD8gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlcmFjdCB3aXRoIGFueSBwcmlvciBidWZmZXIgYWxsb2NhdGlvbnMuIEnigJltIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIGF0dGFjayB2ZWN0b3JzIG5vdyDigJMgaG93IGFuIGF0dGFja2VyIG1pZ2h0IGF0dGVtcHQgdG8gZXhwbG9pdCBhIHBvdGVudGlhbCBmbGF3LCBsaWtlIG1hbmlwdWxhdGluZyB0aGUgb2Zmc2V0IG9yIGJ5cGFzc2luZyB0aGUgY2hlY2suIElzIHRoZSBmaXhlZCBvZmZzZXQgdnVsbmVyYWJsZSB0byBhIHJhY2UgY29uZGl0aW9uPyBJIG11c3QgY29uc2lkZXIgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzg0PXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzk4LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMzOTk6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDAwLVx0XHRcdFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJiMzOTtyZSB3cml0aW5nIHRvICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5MjU9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5NzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzk3MTovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5NzItICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzk4MD1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5ODgtXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzk4OTpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTkwLVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDk4MT1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTAxMC1cdFx0cG9pbnRlcl9kZXNjID0gXCYjMzQ7c3RhY2sgXCYjMzQ7O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMTE6XHRcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMTItXHRcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXImIzM5O3MgU3RhY2sgV3JpdGUgQ2hlY2sqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpc3NlY3QgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBtb3JlIGFjY3VyYXRlbHksIHdoZXJlIHdlIHByZXZlbnQgdGhlIG1hZ2ljIGZyb20gZ29pbmcgaGF5d2lyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhhdCBCUEYgcHJvZ3JhbXMgYXJlIHdyaXRpbmcgdG8gdGhlIHN0YWNrIGluIGEgc2FmZSBhbmQgcHJlZGljdGFibGUgbWFubmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpeGVkIG9mZnNldHMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoaXMgZnVuY3Rpb24gYWltcyB0byBtaXRpZ2F0ZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgYXBwcm9hY2hlZCB0aGlzIGNyaXRpY2FsIGFzcGVjdCBvZiBCUEYgc2VjdXJpdHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzb2xpZCBkZWZlbnNlIGluIHBsYWNlLCBob3BlZnVsbHkgd2VsbC1vcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLCBnaXZlbiBob3cgZnJlcXVlbnRseSB0aGlzIG11c3QgZ2V0IGNhbGxlZCBkdXJpbmcgcHJvZ3JhbSB2ZXJpZmljYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjaGVja3Mgb24gdGhlIG9mZnNldHMsIHRoZSBzaXplIGNoZWNrcywgYW5kIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgb3ZlcmxhcCBpc3N1ZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBpbm5lciB3b3JraW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzk5Olx0c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjM0MDA6XHRcdFx0XHRcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSYjMzk7cmUgd3JpdGluZyB0byAqL1xuMzQwMTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG4zNDAyOlx0XHRcdFx0XHQgICAgICAgaW50IG9mZiwgaW50IHNpemUsIGludCB2YWx1ZV9yZWdubyxcbjM0MDM6XHRcdFx0XHRcdCAgICAgICBpbnQgaW5zbl9pZHgpXG4zNDA0Olx0e1xuMzQwNTpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXI7IC8qIHN0YXRlIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uICovXG4zNDA2Olx0XHRpbnQgaSwgc2xvdCA9IC1vZmYgLSAxLCBzcGkgPSBzbG90IC8gQlBGX1JFR19TSVpFLCBlcnI7XG4zNDA3Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcdTAwMjZlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbaW5zbl9pZHhdO1xuMzQwODpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IE5VTEw7XG4zNDA5Olx0XHRpbnQgaW5zbl9mbGFncyA9IElOU05fRl9TVEFDS19BQ0NFU1M7XG4zNDEwOlx0XHRpbnQgaGlzdF9zcGkgPSBzcGksIGhpc3RfZnJhbWUgPSBzdGF0ZS1cdTAwM2VmcmFtZW5vO1xuMzQxMTpcdFxuMzQxMjpcdFx0LyogY2FsbGVyIGNoZWNrZWQgdGhhdCBvZmYgJSBzaXplID09IDAgYW5kIC1NQVhfQlBGX1NUQUNLIFx1MDAzYz0gb2ZmIFx1MDAzYyAwLFxuMzQxMzpcdFx0ICogc28gaXQmIzM5O3MgYWxpZ25lZCBhY2Nlc3MgYW5kIFtvZmYsIG9mZiAmIzQzOyBzaXplKSBhcmUgd2l0aGluIHN0YWNrIGxpbWl0c1xuMzQxNDpcdFx0ICovXG4zNDE1Olx0XHRpZiAoIWVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MgXHUwMDI2XHUwMDI2XG4zNDE2Olx0XHQgICAgYnBmX2lzX3NwaWxsZWRfcmVnKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pIFx1MDAyNlx1MDAyNlxuMzQxNzpcdFx0ICAgICFicGZfaXNfc3BpbGxlZF9zY2FsYXJfcmVnKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pIFx1MDAyNlx1MDAyNlxuMzQxODpcdFx0ICAgIHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XG4zNDE5Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDthdHRlbXB0IHRvIGNvcnJ1cHQgc3BpbGxlZCBwb2ludGVyIG9uIHN0YWNrXFxuXCYjMzQ7KTtcbjM0MjA6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4zNDIxOlx0XHR9XG4zNDIyOlx0XG4zNDIzOlx0XHRjdXIgPSBlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWZyYW1lW2Vudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlY3VyZnJhbWVdO1xuMzQyNDpcdFx0aWYgKHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbjM0MjU6XHRcdFx0cmVnID0gXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbdmFsdWVfcmVnbm9dO1xuMzQyNjpcdFx0aWYgKCFlbnYtXHUwMDNlYnlwYXNzX3NwZWNfdjQpIHtcbjM0Mjc6XHRcdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbjM0Mjg6XHRcbjM0Mjk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjM0MzA6XHRcdFx0XHR1OCB0eXBlID0gc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbKHNsb3QgLSBpKSAlXG4zNDMxOlx0XHRcdFx0XHRcdFx0XHQgICAgICBCUEZfUkVHX1NJWkVdO1xuMzQzMjpcdFxuMzQzMzpcdFx0XHRcdGlmICh0eXBlICE9IFNUQUNLX01JU0MgXHUwMDI2XHUwMDI2IHR5cGUgIT0gU1RBQ0tfWkVSTykge1xuMzQzNDpcdFx0XHRcdFx0c2FuaXRpemUgPSB0cnVlO1xuMzQzNTpcdFx0XHRcdFx0YnJlYWs7XG4zNDM2Olx0XHRcdFx0fVxuMzQzNzpcdFx0XHR9XG4zNDM4Olx0XG4zNDM5Olx0XHRcdGlmIChzYW5pdGl6ZSlcbjM0NDA6XHRcdFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9zcGVjX3Jlc3VsdCA9IHRydWU7XG4zNDQxOlx0XHR9XG4zNDQyOlx0XG4zNDQzOlx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG4zNDQ0Olx0XHRpZiAoZXJyKVxuMzQ0NTpcdFx0XHRyZXR1cm4gZXJyO1xuMzQ0NjpcdFxuMzQ0NzpcdFx0Y2hlY2tfZmFzdGNhbGxfc3RhY2tfY29udHJhY3QoZW52LCBzdGF0ZSwgaW5zbl9pZHgsIG9mZik7XG4zNDQ4Olx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbjM0NDk6XHRcdGlmIChyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbjM0NTA6XHRcdFx0Ym9vbCByZWdfdmFsdWVfZml0cztcbjM0NTE6XHRcbjM0NTI6XHRcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbjM0NTM6XHRcdFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xuMzQ1NDpcdFx0XHRpZiAocmVnX3ZhbHVlX2ZpdHMpXG4zNDU1Olx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbjM0NTY6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4zNDU3Olx0XHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbjM0NTg6XHRcdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbjM0NTk6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbjM0NjA6XHRcdH0gZWxzZSBpZiAoIXJlZyBcdTAwMjZcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNlxuMzQ2MTpcdFx0XHQgICBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbjM0NjI6XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcdTAwMjZlbnYtXHUwMDNlZmFrZV9yZWdbMF07XG4zNDYzOlx0XG4zNDY0Olx0XHRcdG1lbXNldCh0bXBfcmVnLCAwLCBzaXplb2YoKnRtcF9yZWcpKTtcbjM0NjU6XHRcdFx0X19tYXJrX3JlZ19rbm93bih0bXBfcmVnLCBpbnNuLVx1MDAzZWltbSk7XG4zNDY2Olx0XHRcdHRtcF9yZWctXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcbjM0Njc6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpO1xuMzQ2ODpcdFx0fSBlbHNlIGlmIChyZWcgXHUwMDI2XHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSkpIHtcbjM0Njk6XHRcdFx0LyogcmVnaXN0ZXIgY29udGFpbmluZyBwb2ludGVyIGlzIGJlaW5nIHNwaWxsZWQgaW50byBzdGFjayAqL1xuMzQ3MDpcdFx0XHRpZiAoc2l6ZSAhPSBCUEZfUkVHX1NJWkUpIHtcbjM0NzE6XHRcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsIFwmIzM0OzsgXCYjMzQ7KTtcbjM0NzI6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7aW52YWxpZCBzaXplIG9mIHJlZ2lzdGVyIHNwaWxsXFxuXCYjMzQ7KTtcbjM0NzM6XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjM0NzQ6XHRcdFx0fVxuMzQ3NTpcdFx0XHRpZiAoc3RhdGUgIT0gY3VyIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fU1RBQ0spIHtcbjM0NzY6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHNwaWxsIHBvaW50ZXJzIHRvIHN0YWNrIGludG8gc3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxlclxcblwmIzM0Oyk7XG4zNDc3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNDc4Olx0XHRcdH1cbjM0Nzk6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4zNDgwOlx0XHR9IGVsc2Uge1xuMzQ4MTpcdFx0XHR1OCB0eXBlID0gU1RBQ0tfTUlTQztcbjM0ODI6XHRcbjM0ODM6XHRcdFx0c2NydWJfc3BlY2lhbF9zbG90KHN0YXRlLCBzcGkpO1xuMzQ4NDpcdFxuMzQ4NTpcdFx0XHQvKiB3aGVuIHdlIHplcm8gaW5pdGlhbGl6ZSBzdGFjayBzbG90cyBtYXJrIHRoZW0gYXMgc3VjaCAqL1xuMzQ4NjpcdFx0XHRpZiAoKHJlZyBcdTAwMjZcdTAwMjYgYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSkgfHxcbjM0ODc6XHRcdFx0ICAgICghcmVnIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAwKSkge1xuMzQ4ODpcdFx0XHRcdC8qIFNUQUNLX1pFUk8gY2FzZSBoYXBwZW5lZCBiZWNhdXNlIHJlZ2lzdGVyIHNwaWxsXG4zNDg5Olx0XHRcdFx0ICogd2FzbiYjMzk7dCBwcm9wZXJseSBhbGlnbmVkIGF0IHRoZSBzdGFjayBzbG90IGJvdW5kYXJ5LFxuMzQ5MDpcdFx0XHRcdCAqIHNvIGl0JiMzOTtzIG5vdCBhIHJlZ2lzdGVyIHNwaWxsIGFueW1vcmU7IGZvcmNlXG4zNDkxOlx0XHRcdFx0ICogb3JpZ2luYXRpbmcgcmVnaXN0ZXIgdG8gYmUgcHJlY2lzZSB0byBtYWtlXG4zNDkyOlx0XHRcdFx0ICogU1RBQ0tfWkVSTyBjb3JyZWN0IGZvciBzdWJzZXF1ZW50IHN0YXRlc1xuMzQ5MzpcdFx0XHRcdCAqL1xuMzQ5NDpcdFx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgdmFsdWVfcmVnbm8pO1xuMzQ5NTpcdFx0XHRcdGlmIChlcnIpXG4zNDk2Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzQ5NzpcdFx0XHRcdHR5cGUgPSBTVEFDS19aRVJPO1xuMzQ5ODpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gdGhlIGV4cGVydCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgc2NydWJfc3BlY2lhbF9zbG90YCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHRoZSBkZWJ1Z2dlciBqdXN0IGhpdCBhIGNhbGwgdG8gYHNjcnViX3NwZWNpYWxfc2xvdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgZWRnZSBjYXNlcyBvciBkYXRhIHZhbGlkYXRpb24gYXJvdW5kIHNwZWNpZmljIHNsb3RzIG9yIGZpZWxkcy4gSeKAmWxsIGltbWVkaWF0ZWx5IGRpdmUgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgc29tZXRoaW5nICYjMzQ7c3BlY2lhbCwmIzM0OyB3aGljaCBvZnRlbiBtZWFucyBwb3RlbnRpYWxseSB0cm91Ymxlc29tZSBvciBzZW5zaXRpdmUgZGF0YSB0aGF0IHJlcXVpcmVzIGV4dHJhIGNhcmUgZHVyaW5nIGNsZWFuaW5nIG9yIHByb2Nlc3NpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlICYjMzQ7c3BlY2lhbCYjMzQ7IGNhc2VzIGFyZSwgd2h5IHRoZXnigJlyZSBwcm9ibGVtYXRpYywgYW5kIHdoYXQgYHNjcnViX3NwZWNpYWxfc2xvdGAgaXMgZG9pbmcgdG8gcmVzb2x2ZSB0aG9zZSBpc3N1ZXMuIEnigJlsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBtaXRpZ2F0ZS4gTm93LCBsZXTigJlzIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzg0Olx0c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4zMzg1Olx0e1xuMzM4NjpcdFx0aW50IGk7XG4zMzg3Olx0XG4zMzg4Olx0XHQvKiByZWd1bGFyIHdyaXRlIG9mIGRhdGEgaW50byBzdGFjayBkZXN0cm95cyBhbnkgc3BpbGxlZCBwdHIgKi9cbjMzODk6XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIudHlwZSA9IE5PVF9JTklUO1xuMzM5MDpcdFx0LyogTWFyayBzbG90cyBhcyBTVEFDS19NSVNDIGlmIHRoZXkgYmVsb25nZWQgdG8gc3BpbGxlZCBwdHIvZHlucHRyL2l0ZXIuICovXG4zMzkxOlx0XHRpZiAoaXNfc3RhY2tfc2xvdF9zcGVjaWFsKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pKVxuMzM5MjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KVxuMzM5MzpcdFx0XHRcdHNjcnViX3NwaWxsZWRfc2xvdChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpXSk7XG4zMzk0Olx0fVxuMzM5NTpcdFxuMzM5NjpcdC8qIGNoZWNrX3N0YWNrX3tyZWFkLHdyaXRlfV9maXhlZF9vZmYgZnVuY3Rpb25zIHRyYWNrIHNwaWxsL2ZpbGwgb2YgcmVnaXN0ZXJzLFxuMzM5NzpcdCAqIHN0YWNrIGJvdW5kYXJ5IGFuZCBhbGlnbm1lbnQgYXJlIGNoZWNrZWQgaW4gY2hlY2tfbWVtX2FjY2VzcygpXG4zMzk4Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhY2sgU3RhdGUgYW5kIEl0ZXJhdG9yIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdW5kZXJzdGFuZGluZzogVGhlIGNvZGUgaW5pdGlhbGx5IHNldHMgYHN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLnR5cGUgPSBOT1RfSU5JVDtgIGFuZCBzZXRzIHRoZSBgc2xvdF90eXBlYCB0byBgU1RBQ0tfTUlTQ2AuIElmIGEgYFNUQUNLX0lURVJgIHNsb3QgZ2V0cyBvdmVyd3JpdHRlbiwgaXRzIGBzbG90X3R5cGVgIGNoYW5nZXMgdG8gYFNUQUNLX01JU0NgLiBUaGlzIGlzIGltcG9ydGFudC4gYHN0YWNrc2FmZWAgd2lsbCB0aGVuIGNvbXBhcmUgdGhlIG9sZCBhbmQgY3VycmVudCBzdGFjayBzdGF0ZXMuIEl0IGNoZWNrcyBpZiBgb2xkLSZndDtzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPSBjdXItJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdYCBhbmQgcmV0dXJucyBgZmFsc2VgLiBUaGlzIG1lYW5zIHRoYXQgYHN0YWNrc2FmZWAgKm9ubHkqIGNvbXBhcmVzIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgaWYgKmJvdGgqIHRoZSBvbGQgYW5kIGN1cnJlbnQgc3RhdGVzIGhhdmUgYSBgU1RBQ0tfSVRFUmAgc2xvdCB0eXBlLgoKTm93LCBiZWNhdXNlIG9mIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLCBpZiBib3RoIG9sZCBhbmQgY3VycmVudCBzdGF0ZXMgaGF2ZSBgU1RBQ0tfSVRFUmAsIHRoZW4gdGhleSB3ZXJlIGJvdGggaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAuIEFuZCBgbWFya19zdGFja19zbG90c19pdGVyYCBzcGVjaWZpY2FsbHkgc2V0cyBgc3QtJmd0O3R5cGUgPSBQVFJfVE9fU1RBQ0tgIGFuZCBpbml0aWFsaXplcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcy4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBubyB3YXkgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhhdCYjMzk7cyBvZmYgdGhlIHRhYmxlLgoKU28sIHRoaXMgYm9pbHMgZG93biB0byBhIHZlcmlmaWVyIGxvZ2ljIGJ1Zy4gSXQmIzM5O3MgbWVyZ2luZyBzdGF0ZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBgcmVnLSZndDt0eXBlYCB2YWx1ZXMsIGxpa2UgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgIHdpdGggYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgLiBUaGUgYnVnIGlzIHRoYXQgaXQgb25seSBjaGVja3MgdGhlIGBpdGVyYCB1bmlvbiBmaWVsZHMgYW5kIGlnbm9yZXMgdGhlIGByZWctJmd0O3R5cGVgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBwaWVjZS4gSXQmIzM5O3MgYWxsb3dpbmcgYW4gdW50cnVzdGVkIGl0ZXJhdG9yIHRvIGJlIHRyZWF0ZWQgYXMgaWYgaXQmIzM5O3MgUkNVLXByb3RlY3RlZCwgd2hpY2ggdGhlbiBsZWFkcyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB3aGVuIGBicGZfaXRlcl90YXNrX25leHRgIGlzIGNhbGxlZCBvbiB0aGF0IHVudHJ1c3RlZCBpdGVyYXRvci4KClNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSB1c2UtYWZ0ZXItZnJlZSwgS0FTQU4gd2lsbCBjYXRjaCB0aGlzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm8gaW5mb3JtYXRpb24gbGVhay4gVGhlcmVmb3JlLCB3ZSBkb24mIzM5O3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFdlIHNob3VsZCBiZSBnb29kIHdpdGggd2hhdCB3ZSYjMzk7dmUgZ290LgoKT2theSwganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgU1RBQ0tfSVRFUmAgaXMgKm9ubHkqIHNldCBieSBgbWFya19zdGFja19zbG90c19pdGVyYC4gWXVwLCB0aGF0JiMzOTtzIHRoZSBvbmx5IHBsYWNlLiBHb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVEFDS19JVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9sb2cuYz00OTc9c3RhdGljIGNoYXIgc2xvdF90eXBlX2NoYXJbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTUwMi1cdFtTVEFDS19EWU5QVFJdXHQ9ICYjMzk7ZCYjMzk7LFxua2VybmVsL2JwZi9sb2cuYzo1MDM6XHRbU1RBQ0tfSVRFUl1cdD0gJiMzOTtpJiMzOTssXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cdFtTVEFDS19JUlFfRkxBR10gPSAmIzM5O2YmIzM5Oyxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTcxMT12b2lkIHByaW50X3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvbG9nLmM6Nzc1Olx0XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL2xvZy5jLTc3Ni1cdFx0XHQvKiBvbmx5IG1haW4gc2xvdCBoYXMgaWQgc2V0OyBza2lwIG90aGVycyAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMzLVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XHRcdFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQzNS1cdFx0XHQgICAgc3R5cGUgPT0gU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtODA1LVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XHRcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExOTA9c3RhdGljIGJvb2wgaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cilcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXRlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RhY2tbaV0uc2xvdF90eXBlWzBdICE9IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE1PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XHRcdFx0c2xvdC1cdTAwM2VzbG90X3R5cGVbal0gPSBTVEFDS19JVEVSO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTk1MS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTg2PXN0YXRpYyBib29sIGlzX2l0ZXJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDY6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNy1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxMz1zdGF0aWMgaW50IGlzX2l0ZXJfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM4Olx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzktXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1NT1zdGF0aWMgaW50IGlzX2lycV9mbGFnX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTgxOiAqICAgLSBpdGVyIHN0YXRlIChTVEFDS19JVEVSKS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyLSAqICAgLSBpcnEgZmxhZyBzdGF0ZSAoU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODQ9c3RhdGljIGJvb2wgaXNfc3RhY2tfc2xvdF9zcGVjaWFsKGNvbnN0IHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVx0Y2FzZSBTVEFDS19EWU5QVFI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MTpcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyLVx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1MT1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU1LVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MDU2Olx0dTMyIGNsZWFyX21hc2sgPSAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXHUwMDNjXHUwMDNjIFNUQUNLX0lURVIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTMxCgkJCQkJCQlvdXRwdXQ6IDM0MwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIE1lbW9yeSBTYWZldHkqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCB0aGUgaXNzdWUuIEl0JiMzOTtzIGRlZmluaXRpdmU6IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIGlzIHRoZSBzb2xlIGZ1bmN0aW9uIHNldHRpbmcgdGhlIGBzbG90X3R5cGVgIHRvIGBTVEFDS19JVEVSYC4gIEZ1cnRoZXJtb3JlLCBpdCB0aG9yb3VnaGx5IGluaXRpYWxpemVzIGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYGl0ZXJgIHVuaW9uLiBUaGVyZWZvcmUsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoYXQmIzM5O3Mgb2ZmIHRoZSB0YWJsZS4KClRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCB1bHRpbWF0ZWx5IHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gIEZvcnR1bmF0ZWx5LCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBjYXRjaGluZyB0aGUgcHJvYmxlbS4gIEtub3dpbmcgdGhpcyBhbGxvd3MgbWUgdG8gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBpc3N1ZSBpcyBub3QgcmVsYXRlZCB0byBhbiB1bmNoZWNrZWQgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIHdpbGwgbm93IGFkZCBhIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBpc3N1ZSBvYnNlcnZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZyAoYHN0YWNrc2FmZWApIGZvciBpdGVyYXRvciBzdGFjayBzbG90cyAoYFNUQUNLX0lURVJgKS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSB2ZXJpZmllciBvbmx5IGNvbXBhcmVkIHRoZSBpdGVyYXRvci1zcGVjaWZpYyBmaWVsZHMgKGxpa2UgYGJ0ZmAgYW5kIGBidGZfaWRgKSBidXQgZmFpbGVkIHRvIGNvbXBhcmUgdGhlIHJlZ2lzdGVyIHR5cGUgKGBvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlYCkuIFxuXG5UaGlzIG9taXNzaW9uIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IG1lcmdlIGEgc3RhdGUgd2hlcmUgYW4gaXRlcmF0b3IgaXMgUkNVLXByb3RlY3RlZCAoYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgKSB3aXRoIGEgc3RhdGUgd2hlcmUgdGhlIGl0ZXJhdG9yIGlzIHVudHJ1c3RlZCAoYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgKS4gQXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBpbmNsdWRlZCB0ZXN0IGNhc2UsIGFuIHVucHJvdGVjdGVkIGdhcCAoZS5nLiwgdW5sb2NraW5nIGFuZCByZWxvY2tpbmcgUkNVKSBzdHJpcHMgdGhlIGBNRU1fUkNVYCBmbGFnLCBtYWtpbmcgdGhlIGl0ZXJhdG9yIHVudHJ1c3RlZC4gQnkgaW5jb3JyZWN0bHkgbWVyZ2luZyB0aGVzZSBzdGF0ZXMsIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyBhIEJQRiBwcm9ncmFtIHRvIGNhbGwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgb24gYW4gdW50cnVzdGVkIGl0ZXJhdG9yLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHdoZW4gdGhlIHRhc2sgc3RydWN0IGlzIGFjY2Vzc2VkIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbmRlZC5cblxuVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGJ1ZyB0aGF0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbnZvbHZlZCwgYXMgdGhlIGBpdGVyYCB1bmlvbiBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIHdoZW5ldmVyIGEgc2xvdCBpcyBtYXJrZWQgYXMgYFNUQUNLX0lURVJgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWApLiBcblxuVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBtZXJnZSBhIHN0YXRlIHdoZXJlIGFuIGl0ZXJhdG9yIGlzIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciBpcyB1bnRydXN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYCkuIEFzIGRlbW9uc3RyYXRlZCBieSB0aGUgaW5jbHVkZWQgdGVzdCBjYXNlLCBhbiB1bnByb3RlY3RlZCBnYXAgKGUuZy4sIHVubG9ja2luZyBhbmQgcmVsb2NraW5nIFJDVSkgc3RyaXBzIHRoZSBgTUVNX1JDVWAgZmxhZywgbWFraW5nIHRoZSBpdGVyYXRvciB1bnRydXN0ZWQuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcgdGhlc2Ugc3RhdGVzLCB0aGUgdmVyaWZpZXIgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBjYWxsIGBicGZfaXRlcl90YXNrX25leHRgIG9uIGFuIHVudHJ1c3RlZCBpdGVyYXRvciwgbGVhZGluZyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB3aGVuIHRoZSB0YXNrIHN0cnVjdCBpcyBhY2Nlc3NlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQuXG5cblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjIxLjg2ODg1MDEwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTYwNTk1Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cXHUwMDNldHlwZSAhPSBjdXJfcmVnLVxcdTAwM2V0eXBlYCkuIFxcblxcblRoaXMgb21pc3Npb24gYWxsb3dlZCB0aGUgdmVyaWZpZXIgdG8gaW5jb3JyZWN0bHkgbWVyZ2UgYSBzdGF0ZSB3aGVyZSBhbiBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgdW50cnVzdGVkIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLiBBcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGluY2x1ZGVkIHRlc3QgY2FzZSwgYW4gdW5wcm90ZWN0ZWQgZ2FwIChlLmcuLCB1bmxvY2tpbmcgYW5kIHJlbG9ja2luZyBSQ1UpIHN0cmlwcyB0aGUgYE1FTV9SQ1VgIGZsYWcsIG1ha2luZyB0aGUgaXRlcmF0b3IgdW50cnVzdGVkLiBCeSBpbmNvcnJlY3RseSBtZXJnaW5nIHRoZXNlIHN0YXRlcywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiB1bnRydXN0ZWQgaXRlcmF0b3IsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgd2hlbiB0aGUgdGFzayBzdHJ1Y3QgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLlxcblxcblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjIxLjg2ODg1NzE4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTc4MjgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI3MDU3Y2I1N2I5YjBkMzRhOTM2NDY5MWQ2YzY2OTcyY2E3ODMyNzZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MDg6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5pbmRleCBlYTIxNTNjZjI4ZDBhLi40ZTZhYWZhZDMzYmQyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuQEAgLTgxMiw3ICs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuIFxcdFxcdFxcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXFxuIFxcdFxcdFxcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmIHx8XFxuK1xcdFxcdFxcdGlmIChvbGRfcmVnLVxcdTAwM2V0eXBlICE9IGN1cl9yZWctXFx1MDAzZXR5cGUgfHxcXG4rXFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmIHx8XFxuIFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCB8fFxcbiBcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLnN0YXRlIHx8XFxuIFxcdFxcdFxcdCAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tXFx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcXG5pbmRleCBmZTM2NjNkZWRiZTE0Li41NjZhMWQzZGZmZWFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xcbkBAIC02MSw2ICs2MSw1MiBAQCBpbnQgQlBGX1BST0coaXRlcl90YXNrc19sb2NrX2FuZF91bmxvY2spXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcIj9mZW50cnkucy9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHRcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxcbitpbnQgQlBGX1BST0coaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1xcXCJcXG4rXFx0XFx0XFxcInIxID0gJVtpdF07XFxcIlxcbitcXHRcXHRcXFwicjIgPSAwO1xcXCJcXG4rXFx0XFx0XFxcInIzID0gMDtcXFwiIC8qIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTICovXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfdGFza19uZXddO1xcXCJcXG4rXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFxcIlxcbitcXHRcXHRcXFwiaWYgdzAgPT0gMCBnb3RvIHVucHJvdGVjdGVkXyU9O1xcXCJcXG4rXFxuK1xcdFxcdC8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZSBvbiB0aGUgc3RyYWlnaHQtbGluZSBwYXRoLiAqL1xcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XFxcIlxcbitcXHRcXHRcXFwiZ290byBtZXJnZV8lPTtcXFwiXFxuK1xcbitcXHRcXFwidW5wcm90ZWN0ZWRfJT06XFxcIlxcbitcXHRcXHQvKiBDcmVhdGUgYW4gdW5wcm90ZWN0ZWQgZ2FwIG9uIHRoZSB0YWtlbiBwYXRoLiAqL1xcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfcmN1X3JlYWRfbG9ja107XFxcIlxcbitcXG4rXFx0XFxcIm1lcmdlXyU9OiByMSA9ICVbaXRdO1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl90YXNrX25leHRdO1xcXCJcXG4rXFx0XFx0XFxcInIxID0gJVtpdF07XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX3Rhc2tfZGVzdHJveV07XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1xcXCJcXG4rXFx0XFx0OlxcbitcXHRcXHQ6IF9faW1tX3B0cihpdCksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXcpLFxcbitcXHRcXHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV4dCksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSxcXG4rXFx0XFx0ICBfX2ltbShicGZfcmN1X3JlYWRfbG9jayksXFxuK1xcdFxcdCAgX19pbW0oYnBmX3JjdV9yZWFkX3VubG9jaylcXG4rXFx0XFx0OiBfX2Nsb2JiZXJfY29tbW9uXFxuK1xcdCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/ZmVudHJ5LnMvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcXFwiKVxcbiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODoyMy4wMDUzNzk2NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NTcyNzMyODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI3MDU3Y2I1N2I5YjBkMzRhOTM2NDY5MWQ2YzY2OTcyY2E3ODMyNzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTowODoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCBlYTIxNTNjZjI4ZDBhLi40ZTZhYWZhZDMzYmQyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTgxMiw3ICs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4gXHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiBcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4rXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGUgfHxcbitcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGZfaWQgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCB8fFxuIFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLnN0YXRlIHx8XG4gXHRcdFx0ICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS1cdTAwM2VpdGVyLmRlcHRoLCBzZWUgYWJvdmUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcbmluZGV4IGZlMzY2M2RlZGJlMTQuLjU2NmExZDNkZmZlYWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuQEAgLTYxLDYgKzYxLDUyIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfdGFza19uZXh0XCIpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitpbnQgQlBGX1BST0coaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZylcbit7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcbitcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcIlxuK1x0XHRcInIxID0gJVtpdF07XCJcbitcdFx0XCJyMiA9IDA7XCJcbitcdFx0XCJyMyA9IDA7XCIgLyogQlBGX1RBU0tfSVRFUl9BTExfUFJPQ1MgKi9cbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfdGFza19uZXddO1wiXG4rXG4rXHRcdFwiY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1wiXG4rXHRcdFwiaWYgdzAgPT0gMCBnb3RvIHVucHJvdGVjdGVkXyU9O1wiXG4rXG4rXHRcdC8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZSBvbiB0aGUgc3RyYWlnaHQtbGluZSBwYXRoLiAqL1xuK1x0XHRcImNhbGwgJVticGZfcmN1X3JlYWRfbG9ja107XCJcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XCJcbitcdFx0XCJnb3RvIG1lcmdlXyU9O1wiXG4rXG4rXHRcInVucHJvdGVjdGVkXyU9OlwiXG4rXHRcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAgb24gdGhlIHRha2VuIHBhdGguICovXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcIlxuK1xuK1x0XCJtZXJnZV8lPTogcjEgPSAlW2l0XTtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl90YXNrX25leHRdO1wiXG4rXHRcdFwicjEgPSAlW2l0XTtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl90YXNrX2Rlc3Ryb3ldO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF91bmxvY2tdO1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbV9wdHIoaXQpLFxuK1x0XHQgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV3KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl90YXNrX25leHQpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfZGVzdHJveSksXG4rXHRcdCAgX19pbW0oYnBmX3JjdV9yZWFkX2xvY2spLFxuK1x0XHQgIF9faW1tKGJwZl9yY3VfcmVhZF91bmxvY2spXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vblxuK1x0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcIilcbiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MjMuMDA1MzgyMjQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2NTEzNjE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIG5ldyBwYXRjaCwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBpdGVyYXRvcnMgYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrc2FmZSgpYCBieSBpbnRyb2R1Y2luZyBhIG5ldyB0eXBlIGNoZWNrIGR1cmluZyB0aGUgY29tcGFyaXNvbiBvZiBpdGVyYXRvcnM6XG5cbmBgYGNcbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4rXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGUgfHxcbitcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG5gYGBcblxuRXNzZW50aWFsbHksIGl0J3Mgbm93IHZlcmlmeWluZyB0aGF0IHRoZSB0eXBlcyBvZiBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCBtYXRjaCBiZWZvcmUgY29uc2lkZXJpbmcgdGhlaXIgQlRGIChCVEYgLSBCUEYgVHlwZSBGb3JtYXQpIGluZm9ybWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVmaW5lbWVudCBpbiB0aGUgdHlwZS1zYWZldHkgb2YgdGhlIHZlcmlmaWVyLiBUaGUgaW5jbHVzaW9uIG9mIGEgbmV3IHRlc3QgY2FzZSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2AsIGluZGljYXRlcyB0aGUgcGF0Y2ggYXV0aG9ycyBoYXZlIGltcGxlbWVudGVkIGEgbmV3IHRlc3QgY2FzZSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgYHN0YWNrc2FmZSgpYCBpcyB1c2VkLCB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZ3VhcmFudGVlLCBhbmQgd2h5IHRoaXMgYWRkaXRpb25hbCB0eXBlIGNoZWNrIGlzIG5lY2Vzc2FyeSBmb3IgaXRlcmF0b3IgY29tcGFyaXNvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBtaXNtYXRjaGVkIHR5cGVzIGluIHRoZSBjb250ZXh0IG9mIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgaG93IHRoaXMgbWlnaHQgcmVsYXRlIHRvIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhpcyBsb29rcyBsaWtlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgcGllY2Ugb2YgaGFyZGVuaW5nLCBzbyBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGlzIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjI4LjY3MDUyMDU1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU0MzIyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2tzYWZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz02OTA9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDEtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MDI6c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAzLVxcdFxcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTQ1PXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NjItXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NjM6XFx0aWYgKCFzdGFja3NhZmUoZW52LCBvbGQsIGN1ciwgXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MjkuMDk1OTU4NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY5NjY3MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgU3RhdGljIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBjb2RlIHNuaXBwZXQgaW52b2x2aW5nIHRoZSBmdW5jdGlvbiBgc3RhY2tzYWZlYC4gVGhlIGNydWNpYWwgYml0IGlzIHRoYXQgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBzb21lIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgYWJvdXQgc2NvcGUgYW5kIGxpbmthZ2UuIE9rYXksIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQncyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIGxpa2VseSBoaWRkZW4gZnJvbSBleHRlcm5hbCBhY2Nlc3MuXG5cbk5vdywgYHN0YWNrc2FmZWAgaXMgKmNhbGxlZCogYnkgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgd2hpY2ggaXMgKmFsc28qIHN0YXRpYy4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGxpbWl0ZWQgc2NvcGUgb2YgaW50ZXJhY3Rpb24uIEl0IGNhbid0IGJlIGNhbGxlZCBmcm9tIHNvbWUgb3RoZXIgZmlsZSwgYXMgaXQgaXMgYWxzbyBgc3RhdGljYC5cblxuVGhlIHF1ZXN0aW9uIGJlY29tZXMsIHdoYXQgYXJlIHRoZSB1c2UtY2FzZXMgb2YgdGhlIGBzdGFja3NhZmVgIGZ1bmN0aW9uPyBOb3cgdGhhdCBgZnVuY19zdGF0ZXNfZXF1YWxgIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgYSBjYWxsZXIsIGl0IG1pZ2h0IGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyBgZnVuY19zdGF0ZXNfZXF1YWxgIGlzIHVzZWQuIFdlIG5lZWQgdG8gaWRlbnRpZnkgd2hvIGlzIHRoZSBwYXJlbnQgb2YgdGhlIGNhbGxlci4gU28gbGV0J3MgdHJhY2UgYmFjay4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogYGZ1bmNfc3RhdGVzX2VxdWFsYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20uIFRoYXQncyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODozMi40NjU2MjgxNDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVuY19zdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTg2OT1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NDU6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTgwPXN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MzIuNTE2MDUxMjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE0OTIyMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHN0YXRlc19lcXVhbGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgc3RhdGVzX2VxdWFsYCBpcyBjYWxsaW5nIGBmdW5jX3N0YXRlc19lcXVhbGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBwaWVjZSBvZiB0aGUgcHV6emxlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHN0YXRlc19lcXVhbGAgaXRzZWxmIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlOyBrbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcuIExldCdzIHNlZSB3aG8ncyByZWFjaGluZyBvdXQgdG8gKnRoaXMqIGZ1bmN0aW9uLCB0aGVuIEknbGwgdW5kZXJzdGFuZCB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjM1LjQzMDk3NTYxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODExOTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ0LSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTQ1OnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk3Mj1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk3OS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk4MDpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cXHRcXHRcXHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzMyLVxcdFxcdFxcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTMzMzpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzM0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyX2ZyYW1lO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQyLVxcdFxcdFxcdFxcdFxcdGl0ZXJfcmVnID0gXFx1MDAyNmN1cl9mcmFtZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzFdO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0MzpcXHRcXHRcXHRcXHRcXHQvKiBjdXJyZW50IHN0YXRlIGlzIHZhbGlkIGR1ZSB0byBzdGF0ZXNfZXF1YWwoKSxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDQtXFx0XFx0XFx0XFx0XFx0ICogc28gd2UgY2FuIGFzc3VtZSB2YWxpZCBpdGVyIGFuZCByZWcgc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTctXFx0XFx0XFx0XFx0aWYgKHNsLVxcdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXFx1MDAzZW1heV9nb3RvX2RlcHRoIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU4OlxcdFxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTktXFx0XFx0XFx0XFx0XFx0bG9vcCA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjMtXFx0XFx0XFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NDpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY1LVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzcxLVxcdFxcdFxcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzcyOlxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3My1cXHRcXHRcXHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA0LVxcdFxcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDU6XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MDYtaGl0Olxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ0LVxcdFxcdFxcdCAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDQ1OlxcdFxcdFxcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIGVuY291bnRlcnMgYSBgc3RhdGVzX2VxdWFsKC4uLixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDYtXFx0XFx0XFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6MzUuNDc5MDk4MTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NTkxNjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFN0YXRlIG9mIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaW4gdGhlIHZlcmlmaWVyLiBJdCBzZWVtcyB0byBiZSB0aGUgZ2F0ZWtlZXBlciwgdGhlIHBsYWNlIHdoZXJlIHdlIGRldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBzdGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGFuYWx5emVkLiBJdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBzdGF0ZSBleHBsb3JhdGlvbiwgYXQgbGVhc3QgZnJvbSB3aGF0IEkgY2FuIGdhdGhlci5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmRyaXZpbmcqIHRoZSBjYWxscyB0byBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLiBXaGF0IHBhcnRzIG9mIHRoZSB2ZXJpZmllciBhcmUgYWN0dWFsbHkgbGV2ZXJhZ2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/IEZpZ3VyaW5nIG91dCB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIHRoZSBvdmVyYWxsIHZlcmlmaWNhdGlvbiBzdHJhdGVneS4gQnkgZXhhbWluaW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IHN0YXRlcyBhcmUgdHJhY2tlZCBhbmQgbWFuYWdlZCBkdXJpbmcgdGhlIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHZlcmlmaWVyIGRlY2lkZXMgd2hlbiB0byBkZWx2ZSBkZWVwZXIgaW50byBhIHN0YXRlIGFuZCB3aGVuIHRvIHBydW5lIG9yIHJlY29nbml6ZSB0aGF0IGEgcGF0aCBoYXMgYmVlbiBleHBsb3JlZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gdGhlIHN0YXRlIG1hY2hpbmUgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHZlcmlmaWVyJ3MgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODozOC45MzUwMTczOTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTg3MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzQ0PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4MS1cXHRcXHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczODI6XFx0XFx0XFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczODMtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjM4Ljk4MTYwODc3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjEzNTQ4MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKipcblxuT2theSwgc28gYGRvX2NoZWNrYCBpcyB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllciwgdGhlIG1haW4gbG9vcCB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gVGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGEgY3JpdGljYWwgYXJlYTogc3RhdGUgZXF1aXZhbGVuY2UsIHNwZWNpZmljYWxseSBob3cgd2UgaGFuZGxlIGl0ZXJhdG9yIHJlZ2lzdGVycyB3aXRoaW4gdGhlIGBzdGFja3NhZmVgIGNvbnRleHQuXG5cbkkgc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IFdlJ3JlIGFkZGluZyBhIGB0eXBlYCBjaGVjayAoYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgKSAqYmVmb3JlKiB3ZSBjb21wYXJlIHRoZSBCVEYgaW5mb3JtYXRpb24gZm9yIHRoZSBpdGVyYXRvciAoYG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmApLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgc2hpZnQuIFByZXZpb3VzbHksIHRoZSB2ZXJpZmllciBjb3VsZCd2ZSBpbmNvcnJlY3RseSBjb25zaWRlcmVkIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHRoZSBzYW1lIGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgcmVnaXN0ZXIgKG5vbi1pdGVyYXRvciBvciBvZiBhIGRpZmZlcmVudCByZWdpc3RlciB0eXBlKSBpZiwgYnkgcHVyZSBjb2luY2lkZW5jZSwgdGhlaXIgbWVtb3J5IGxheW91dHMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGhhcHBlbmVkIHRvIG1hdGNoIHRoZSBpdGVyYXRvcidzIEJURiBkYXRhLiBUaGF0J3MgYSBjbGFzc2ljIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4gVGhpcyBjaGFuZ2UgZWZmZWN0aXZlbHkgZ3VhcmRzIGFnYWluc3QgZmFsc2UgcG9zaXRpdmVzIGluIGVxdWl2YWxlbmNlIGNoZWNrcywgbWFraW5nIHRoZSB2ZXJpZmllciBtb3JlIHJvYnVzdC5cblxuVGhlIGFkZGVkIHRlc3QgY2FzZSwgYGl0ZXJzX3Rhc2tfZmFpbHVyZS5jYCwgd2l0aCBgaXRlcl90YXNrc19yY3Vfc3RhdGVfcHJ1bmluZ2AgaXMgYSB3ZWxjb21lIGFkZGl0aW9uLiBUaGlzIHRlc3QgbGV2ZXJhZ2VzIGBicGZfaXRlcl90YXNrX25ld2AsIGBicGZfaXRlcl90YXNrX25leHRgLCBhbmQgYGJwZl9pdGVyX3Rhc2tfZGVzdHJveWAsIGFuZCBpcyBhbm5vdGF0ZWQgd2l0aCBhIGBmZW50cnlgIGhvb2sgb24gdGhlIGBzeXNfZ2V0cGdpZGAgc3lzY2FsbC4gVGhhdCBzdWdnZXN0cyB0YXJnZXRlZCB0ZXN0aW5nIG9mIHRoZSBpdGVyYXRvciByZWdpc3RlciBpbnRlcmFjdGlvbnMgdW5kZXIgcmVhbGlzdGljIGNvbmRpdGlvbnMuXG5cblRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgc3RhdGVzX2VxdWFsYCwgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYW5kIGBzdGFja3NhZmVgLiBIb3dldmVyLCB0aGUgbGFzdCB0aHJlZSBhcmUgdW5mb3J0dW5hdGVseSBgc3RhdGljYCwgbWVhbmluZyB0aGV5J3JlIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGV4dGVybmFsbHkuIFRoYXQgbGVhdmVzIHVzIHdpdGggYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSXQncyAqbm9uLXN0YXRpYyogYW5kIGRlY2xhcmVkIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgd2hpbGUgYmVpbmcgY2FsbGVkIGZyb20gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGlzIHRoZXJlZm9yZSwgcmVhY2hhYmxlLCBhcyBpdCBjb3VsZCBiZSBleHBvcnRlZCBvciBqdXN0IG5vbi1zdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjQ2LjE5NTE2MDAzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwMzM0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMjE0PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM4LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIzOTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczNDQ9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzgxLVxcdFxcdGlmIChicGZfaXNfcHJ1bmVfcG9pbnQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM4MjpcXHRcXHRcXHRlcnIgPSBicGZfaXNfc3RhdGVfdmlzaXRlZChlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4My1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6NDYuMjgxMTk3NTUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzM4NTU1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQlBGIFZlcmlmaWNhdGlvbiBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gVGhlIGZ1bmN0aW9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBzdGF0ZSBjaGVja2luZy4gSXQgc2VlbXMgdG8gYmUgdGhlIGZvY3VzIHN5bWJvbCBJIG5lZWQuIE5vdywgYSBjcnVjaWFsIGFzcGVjdCB0byBub3RlIGhlcmUgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBmdW5jdGlvbnMuIEknbSBzZWVpbmcgdGhhdCBgZG9fY2hlY2tgIGlzIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggc3VnZ2VzdHMgaXQgaXMgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBXaGlsZSBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJvcGVyYXRlLCB3aGljaCBtYWtlcyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGEgcGVyZmVjdCBlbnRyeSBwb2ludC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb2NhdGUgdGhlIGRlY2xhcmF0aW9uIG9mIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBpdCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIENoYW5jZXMgYXJlLCBpdCdzIGRlZmluZWQgdGhlcmUsIG9yIGF0IGxlYXN0IGRlY2xhcmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZm9sbG93IHRoZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgbW9yZSBlZmZlY3RpdmVseS4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODo0OS43NTUwNTY0OTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjUwMjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTExODc9aW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyk7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTg4LVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4OTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExOTAtaW50IGJwZl91cGRhdGVfYnJhbmNoX2NvdW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjQ5Ljg4MTU2MzExOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3MjQ3MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkxvY2F0aW5nIHRoZSBCUEYgVmVyaWZpZXIncyBWaXRhbHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEJQRiB2ZXJpZmllcidzIHdvcmtpbmdzLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHVuZGVyc3RhbmRpbmcgdGhlIHZpc2l0YXRpb24gcHJvY2Vzcy4gTGV0IG1lIGNvbmZpcm0gdGhhdDsgeWVzLCBhIHF1aWNrIHNlYXJjaCBjb25maXJtcyBpdCByZXNpZGVzIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IFRoZSBCUEYgdmVyaWZpZXIgZnVuY3Rpb25hbGl0eSBpc27igJl0IGFsd2F5cyBlbmFibGVkLCByaWdodD8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvbiBidWlsZCBvcHRpb25zLiBJIHJlY2FsbCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGtleSByZXF1aXJlbWVudC4gVG8gYmUgY2VydGFpbiwgSSdsbCBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzZWUgd2hhdCBJIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBleHBsb3JpbmcgdGhlIHZlcmlmaWVyJ3MgYmVoYXZpb3IgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjUzLjE4ODgxNDEzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxOTI1NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA4OjUzLjIzOTAxNjM3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk5MzE3Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IEJQRiBzdXBwb3J0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCdsbCBnaXZlIG1lIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiwgYW5kIGxpa2VseSBwb2ludCBtZSB0byBvdGhlciwgbW9yZSBzcGVjaWZpYyBgS2NvbmZpZ2AgZmlsZXMgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BsaXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSwgcGVyaGFwcyBlQlBGLCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucywgdmVyaWZpZXIgY29uZmlndXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IG9wdGlvbnMgZm9yIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgb3IgZmVhdHVyZXMgbGlrZSB0cmFjaW5nLCBuZXR3b3JraW5nLCBvciBzZWN1cml0eS4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgbWFwcGluZyBob3cgdGhlc2UgYXJlIHVzZWQgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODo1Ni4wMzgzMzcyMjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg1MDI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowODo1Ni4wODI0MzE0NDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMDkzMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipLY29uZmlnIExvY2F0aW9uIC0gQSBRdWljayBEZWR1Y3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgbGlrZWx5IGludm9sdmVzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB3aGVuIEkgc2VlIGBLY29uZmlnYCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLiBBbmQgdGhlIHBhdGguLi4gaG1tLCB0aGUgb2xkZXIga2VybmVscywgdGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIGBpbml0L0tjb25maWdgLiBJdCdzIGEgY2xhc3NpYyBsb2NhdGlvbi4gSG93ZXZlciwgd2l0aCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgaW4gbW9yZSByZWNlbnQgdmVyc2lvbnMgd2hlcmUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBoYXMgZXhwbG9kZWQgaW4gc2lnbmlmaWNhbmNlLCB0aGVyZSdzIGEgc3Ryb25nIGNoYW5jZSBpdCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBuZXdlciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBsaWtlbHkgdG8gcmVzaWRlLiBJdCdzIGFsbW9zdCBhIGtuZWUtamVyayByZWFjdGlvbiBub3cgdG8gdGhpbmsgb2YgQlBGIGNvbmZpZyBpZiBJIHNlZSBgS2NvbmZpZ2AgaW4gdGhlIGNvbnRleHQgb2YgYSBtb2Rlcm4ga2VybmVsLiBJIHNob3VsZCBjaGVjayBib3RoIGJ1dCBJJ2xsIGZvY3VzIG9uIHRoZSBuZXdlciBCUEYgcmVsYXRlZCBsb2NhdGlvbiBmaXJzdC4gSXQgaXMgcHJvYmFibHkgbW9yZSB1cCB0byBkYXRlIGFuZCBsZXNzIGN1bWJlcnNvbWUgdGhhbiBnb2luZyBpbnRvIG9sZGVyIGRpcmVjdG9yaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDg6NTkuNDgzMzY0Nzg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2NTc5MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTowMS4wOTk5NDkxNjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTQ0MTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gdGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyB0aGUgY29uZmlnIGl0ZW0gd2UncmUgZm9jdXNpbmcgb24uIEdvdCBpdC4gTm93LCB0aGUgY29ubmVjdGlvbiBpcy4uLmFoLCByaWdodCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqb25seSogY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5LCBsaW5raW5nIHRob3NlIHR3byB0aGluZ3MuIEhtbS4uLiBtYWtlcyBtZSB3b25kZXIgd2hhdCBlbHNlIGhpbmdlcyBvbiB0aGF0IGZsYWcuIEJlc3QgdG8gY2hlY2sgdGhlIGJ1aWxkIHJ1bGVzIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLiBMZXQncyBkaWcgaW50byB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6MDUuMDYxMzk0NzgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM1MDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTUtb2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjA1LjEyNzc0OTE0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyNDc1MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipDaGVja2luZyBCUEYgSXRlcmF0b3IgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgc3RhdGVzLm9gIGlzIGRlZmluaXRlbHkgYnVpbHQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ20gd29ya2luZyB3aXRoIGEgdGVzdCB0aGF0IGxldmVyYWdlcyBCUEYgaXRlcmF0b3JzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGJwZl9pdGVyX3Rhc2tfbmV3YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biBpZiB0aGVyZSBhcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBiZXlvbmQganVzdCB0aGUgc3lzY2FsbCBzdXBwb3J0LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBgYnBmX2l0ZXJfdGFza19uZXdgIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb247IHlvdSBjYW4ndCBhc3N1bWUgYSBzaW5nbGUgb3B0aW9uIGd1YXJhbnRlZXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTowOC40MjAyMjczODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDY5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ5MDI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2Nzc19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkwMy0jZW5kaWZcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTA0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9SQ1VfUFJPVEVDVEVEKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rhc2tfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTExMTg9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExOS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMjA6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMjEtXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTM5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyMzQtXFx0XFx0XFx0XFx0ICogSWYgdGhlIGl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgKHRoZSBfbmV3XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMjM1OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIGUuZy4sIGJwZl9pdGVyX3Rhc2tfbmV3KSBoYXMgYmVlblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzIzNi1cXHRcXHRcXHRcXHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTowOC40NzAzMDA4MDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDk2OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRlYnVnZ2luZyB0aGUgYnBmX2l0ZXJfdGFza19uZXcgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGJwZl9pdGVyX3Rhc2tfbmV3YCBmdW5jdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCBpdCBoYXZpbmcgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIEJQRiBpdGVyYXRvciBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggaXRzIGxvY2F0aW9uLiBUaGUgY29kZSBzZWVtcyB0byBiZSBpbiBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRhc2tzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy5cblxuTm93LCBqdXN0IHRvIGNvbmZpcm0gdGhhdCB0aGlzIHNvdXJjZSBmaWxlIGlzIHBhcnQgb2YgdGhlIGZpbmFsIGJ1aWxkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCB3aGljaCBpcywgb2YgY291cnNlLCBga2VybmVsL2JwZi9NYWtlZmlsZWAuIEknbGwgc2NhbiB0aHJvdWdoIHRoYXQgcXVpY2tseSBhbmQgc2VlIGlmIGB0YXNrX2l0ZXIub2AgaXMgYmVpbmcgYnVpbHQgdGhlcmUuIFRoaXMgd2lsbCBjb25maXJtIG15IGh5cG90aGVzaXMgYW5kIGdpdmUgbWUgY29uZmlkZW5jZSBJJ20gbG9va2luZyBhdCB0aGUgY29ycmVjdCBjb21wb25lbnQuIFRoaXMgc2hvdWxkIGFsc28gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb2JqZWN0IGZpbGVzIGFuZCBzb3VyY2UgY29kZSBhcmUgcmVsYXRlZCB0byB0aGlzIG1vZHVsZS4gTm93IEknbSByZWFkeSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjExLjcwNTI3Mjc4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMDUxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFza19pdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjExLjc1MTM4NDExN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA1NjUyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gVGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgc3RhdGUgZXF1aXZhbGVuY2UgbG9naWMsIGZvY3VzaW5nIG9uIGhvdyBpdGVyYXRvciByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIEl0J3MgYSB0eXBlIGNoZWNrLCByZWFsbHksIHRvIHByZXZlbnQgdGhlIHZlcmlmaWVyIGZyb20gaW5jb3JyZWN0bHkgZXF1YXRpbmcgYW4gaXRlcmF0b3IgcmVnaXN0ZXIgd2l0aCBhIG5vbi1pdGVyYXRvciByZWdpc3RlciB0aGF0IG1pZ2h0IGp1c3QgKmhhcHBlbiogdG8gbG9vayB0aGUgc2FtZSBpbiBtZW1vcnkgb3IgaGF2ZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZml4LCBpbXBhY3RpbmcgaG93IEJQRiBwcm9ncmFtcyBhcmUgdmFsaWRhdGVkIGFuZCB1bHRpbWF0ZWx5IGxvYWRlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC5cblxuTXkgZm9jdXMgc3ltYm9sIGlzIGNsZWFybHkgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYW5kIHRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgcmVhY2guIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgc3RhY2tzYWZlYCwgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgYW5kIGBzdGF0ZXNfZXF1YWxgIGFyZSBhbGwgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBCdXQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCdzIGV4cG9ydGVkLCBzbyBpdCdzIHRoZSByaWdodCBwb2ludCB0byBkcmlsbCBpbi5cblxuTm93LCBsZXQncyBsb29rIGNsb3NlbHkgYXQgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGBzdGFja3NhZmVgLCBub3QgYW55dGhpbmcgZWxzZSBkaXJlY3RseS4gVGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IGNsZWFyOiBgc3RhY2tzYWZlYCBpcyBjYWxsZWQgYnkgYGZ1bmNfc3RhdGVzX2VxdWFsYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLiBUaGlzIGNvbmZpcm1hdGlvbiByZWluZm9yY2VzIHRoYXQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyBkZWZpbml0ZWx5IHRoZSBtb3N0IHJlbGV2YW50IHBvaW50IHRvIGZvY3VzIG9uIGR1cmluZyBteSBhbmFseXNpcy4gSSBoYXZlIHRoZSB3aG9sZSBwaWN0dXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTYsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjE4LjY1NzAzOTAxMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjY2ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGxvZ2ljIChgc3RhY2tzYWZlKClgIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCkuIEl0IGFkZHMgYSB0eXBlIGNoZWNrIGZvciByZWdpc3RlciBzdGF0ZXMgd2hlbiBjb21wYXJpbmcgaXRlcmF0b3IgcmVnaXN0ZXJzLCBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGluY29ycmVjdGx5IG1hdGNoaW5nIGFuIGl0ZXJhdG9yIHJlZ2lzdGVyIHdpdGggYSBub24taXRlcmF0b3IgcmVnaXN0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlIHNhbWUgbWVtb3J5IGxheW91dCBvciB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHZlcmlmaWVkIGFuZCBhY2NlcHRlZC9yZWplY3RlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBzdGF0ZSBlcXVpdmFsZW5jZSBsb2dpYyAoYHN0YWNrc2FmZSgpYCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2ApLiBJdCBhZGRzIGEgdHlwZSBjaGVjayBmb3IgcmVnaXN0ZXIgc3RhdGVzIHdoZW4gY29tcGFyaW5nIGl0ZXJhdG9yIHJlZ2lzdGVycywgcHJldmVudGluZyB0aGUgdmVyaWZpZXIgZnJvbSBpbmNvcnJlY3RseSBtYXRjaGluZyBhbiBpdGVyYXRvciByZWdpc3RlciB3aXRoIGEgbm9uLWl0ZXJhdG9yIHJlZ2lzdGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoZSBzYW1lIG1lbW9yeSBsYXlvdXQgb3IgdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSB2ZXJpZmllZCBhbmQgYWNjZXB0ZWQvcmVqZWN0ZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOToxOC43MzI3MTE5NDdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzQyMDgxNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6MTguNzMzMTM0NDY4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0NzQxNjU0MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tpbmcgKGBzdGFja3NhZmVgKSBmb3IgaXRlcmF0b3Igc3RhY2sgc2xvdHMgKGBTVEFDS19JVEVSYCkuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgdmVyaWZpZXIgb25seSBjb21wYXJlZCB0aGUgaXRlcmF0b3Itc3BlY2lmaWMgZmllbGRzIChsaWtlIGBidGZgIGFuZCBgYnRmX2lkYCkgYnV0IGZhaWxlZCB0byBjb21wYXJlIHRoZSByZWdpc3RlciB0eXBlIChgb2xkX3JlZy1cXHUwMDNldHlwZSAhPSBjdXJfcmVnLVxcdTAwM2V0eXBlYCkuIFxcblxcblRoaXMgb21pc3Npb24gYWxsb3dlZCB0aGUgdmVyaWZpZXIgdG8gaW5jb3JyZWN0bHkgbWVyZ2UgYSBzdGF0ZSB3aGVyZSBhbiBpdGVyYXRvciBpcyBSQ1UtcHJvdGVjdGVkIChgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWApIHdpdGggYSBzdGF0ZSB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgdW50cnVzdGVkIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLiBBcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGluY2x1ZGVkIHRlc3QgY2FzZSwgYW4gdW5wcm90ZWN0ZWQgZ2FwIChlLmcuLCB1bmxvY2tpbmcgYW5kIHJlbG9ja2luZyBSQ1UpIHN0cmlwcyB0aGUgYE1FTV9SQ1VgIGZsYWcsIG1ha2luZyB0aGUgaXRlcmF0b3IgdW50cnVzdGVkLiBCeSBpbmNvcnJlY3RseSBtZXJnaW5nIHRoZXNlIHN0YXRlcywgdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gY2FsbCBgYnBmX2l0ZXJfdGFza19uZXh0YCBvbiBhbiB1bnRydXN0ZWQgaXRlcmF0b3IsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgd2hlbiB0aGUgdGFzayBzdHJ1Y3QgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLlxcblxcblRoaXMgaXMgYSB2ZXJpZmllciBsb2dpYyBidWcgdGhhdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaW52b2x2ZWQsIGFzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbWFya19zdGFja19zbG90c19pdGVyYCB3aGVuZXZlciBhIHNsb3QgaXMgbWFya2VkIGFzIGBTVEFDS19JVEVSYC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjcwNTdjYjU3YjliMGQzNGE5MzY0NjkxZDZjNjY5NzJjYTc4MzI3NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjA4OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtODEyLDcgKzgxMiw4IEBAIHN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbiBcdFx0XHQgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZVxuIFx0XHRcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbitcdFx0XHRpZiAob2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZSB8fFxuK1x0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiBcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuaW5kZXggZmUzNjYzZGVkYmUxNC4uNTY2YTFkM2RmZmVhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5AQCAtNjEsNiArNjEsNTIgQEAgaW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfbG9ja19hbmRfdW5sb2NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHRcIilcbitfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuK2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKVxuK3tcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIGl0O1xuK1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1wiXG4rXHRcdFwicjEgPSAlW2l0XTtcIlxuK1x0XHRcInIyID0gMDtcIlxuK1x0XHRcInIzID0gMDtcIiAvKiBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyAqL1xuK1x0XHRcImNhbGwgJVticGZfaXRlcl90YXNrX25ld107XCJcbitcbitcdFx0XCJjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XCJcbitcdFx0XCJpZiB3MCA9PSAwIGdvdG8gdW5wcm90ZWN0ZWRfJT07XCJcbitcbitcdFx0LyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlIG9uIHRoZSBzdHJhaWdodC1saW5lIHBhdGguICovXG4rXHRcdFwiY2FsbCAlW2JwZl9yY3VfcmVhZF9sb2NrXTtcIlxuK1x0XHRcImNhbGwgJVticGZfcmN1X3JlYWRfdW5sb2NrXTtcIlxuK1x0XHRcImdvdG8gbWVyZ2VfJT07XCJcbitcbitcdFwidW5wcm90ZWN0ZWRfJT06XCJcbitcdFx0LyogQ3JlYXRlIGFuIHVucHJvdGVjdGVkIGdhcCBvbiB0aGUgdGFrZW4gcGF0aC4gKi9cbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XCJcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX2xvY2tdO1wiXG4rXG4rXHRcIm1lcmdlXyU9OiByMSA9ICVbaXRdO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX3Rhc2tfbmV4dF07XCJcbitcdFx0XCJyMSA9ICVbaXRdO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX3Rhc2tfZGVzdHJveV07XCJcbitcdFx0XCJjYWxsICVbYnBmX3JjdV9yZWFkX3VubG9ja107XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tX3B0cihpdCksXG4rXHRcdCAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19uZXcpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX3Rhc2tfbmV4dCksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfdGFza19kZXN0cm95KSxcbitcdFx0ICBfX2ltbShicGZfcmN1X3JlYWRfbG9jayksXG4rXHRcdCAgX19pbW0oYnBmX3JjdV9yZWFkX3VubG9jaylcbitcdFx0OiBfX2Nsb2JiZXJfY29tbW9uXG4rXHQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl9jc3NfbmV4dFwiKVxuIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOToxOC43MzMxMzUzNjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4NzU0MTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIG5ldyBjaGVjazogYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgICpiZWZvcmUqIGNvbXBhcmluZyBgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgYW5kIGBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgQlBGIHZlcmlmaWVyIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgaXRlcmF0b3Igc3RhdGUgKGBpdGVyYCkuIE15IGltbWVkaWF0ZSBndWVzcyBpcyB0aGF0IHRoaXMgYWRkcmVzc2VzIHNvbWUga2luZCBvZiB0eXBlIGNvbmZ1c2lvbiBvciBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzIGlzc3VlLiBFc3NlbnRpYWxseSwgd2Ugd2VyZSB0cnlpbmcgdG8gbG9vayBhdCBgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgd2hlbiBgb2xkX3JlZy1cdTAwM2V0eXBlYCBtaWdodCBub3QgZXZlbiAqYmUqIGFuIGl0ZXJhdG9yIHR5cGUsIG9yIHBlcmhhcHMgdGhlIHR5cGVzIGRvbid0IG1hdGNoIGJldHdlZW4gdGhlIG9sZCBhbmQgY3VycmVudCByZWdpc3RlcnMuXG5cbldhaXQgYSBzZWNvbmQsIGlmIGBvbGRfcmVnLVx1MDAzZXR5cGVgICppc24ndCogYW4gaXRlcmF0b3IsIHdlJ3JlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgZnJvbSBhIHVuaW9uIGZpZWxkIChgaXRlcmApIGluIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAgdGhhdCdzICptZWFudCogZm9yIHNvbWV0aGluZyBlbHNlLiBUaGF0IGZpZWxkIGNvdWxkIGNvbnRhaW4gZ2FyYmFnZSwgb3IgZXZlbiBiZSB1bmluaXRpYWxpemVkLiBCdXQsIGl0IHNlZW1zIHRvIGJlIG9ubHkgYSB2YWx1ZSBjb21wYXJpc29uLCByaWdodD8gU28gd2UgYXJlIG5vdCBkZXJlZmVyZW5jaW5nIGl0LlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCBpdHNlbGYuIEknbSBnb2luZyB0byBwdWxsIGl0IHVwIHdpdGggYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdHlwZWAgYW5kIHRoYXQgYGl0ZXJgIGZpZWxkIHdpdGhpbiB0aGUgdW5pb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgc3BvdCwgYXMgd2UncmUgZGVhbGluZyB3aXRoIHZlcmlmaWVyIHN0YXRlcyBhbmQgaXRlcmF0b3IgaW5mb3JtYXRpb24sIHdoaWNoIGFyZSBwcmV0dHkgc2Vuc2l0aXZlIGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjIzLjgyMDY4MDQ5OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0ODg1NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBicGZfcmVnX3N0YXRlIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0zMj1lbnVtIGJwZl9pdGVyX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDozODpzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zOS1cXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOToyNC40OTU1NzQwMjNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3Njc1NDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyIEhlYWRlcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoZSBCUEYgdmVyaWZpZXIgaXMsIGFzIHdlIGFsbCBrbm93LCBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJdCdzIHRoZSBsaW5jaHBpbiBvZiBlQlBGJ3Mgc2VjdXJpdHkgbW9kZWwsIGVuc3VyaW5nIHRoYXQgdGhlIHByb2dyYW1zIHdlIGxvYWQgYXJlIHNhZmUgdG8gcnVuIGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgYXJvdW5kIGxpbmUgMzgg4oCTIHRoaXMgaXMgb2Z0ZW4gd2hlcmUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBpbml0aWFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgbG9jYXRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIHVzZWQgYnkgdGhlIHZlcmlmaWVyIGJlZm9yZSBnb2luZyBhbnkgZnVydGhlci4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBoZXJlOyB0aGluZ3MgbGlrZSBpbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbnMsIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZXMsIG9yIG1heWJlIHRoZSBpbml0aWFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBsb2dpYy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6MjcuNDcyMzMwODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTE4OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcbiAxMTk6XFx0XFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cXG4gMTIwOlxcdFxcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXFxuIDEyMTpcXHRcXHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXFxuIDEyMjpcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXFxuIDEyNDpcXHRcXHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjU6XFx0XFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXFxuIDEyNjpcXHRcXHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cXG4gMTI3OlxcdFxcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxcbiAxMjg6XFx0XFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXFxuIDEyOTpcXHRcXHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxcbiAxMzA6XFx0XFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQncyBmcmVlZC5cXG4gMTMxOlxcdFxcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXFxuIDEzMjpcXHRcXHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzM6XFx0XFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXFxuIDEzNDpcXHRcXHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXFxuIDEzNTpcXHRcXHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFxcXCJiZWxvbmdpbmdcXFwiIG9mIGEgcmVmZXJlbmNlXFxuIDEzNjpcXHRcXHQgKiB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIGJwZl9pdGVyLlxcbiAxMzc6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjI3LjQ3MjQ1NTc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTA5NTU0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gYnBmX3JlZ19zdGF0ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIHRoZSBgaXRlcmAgc3RydWN0IHdpdGhpbiB0aGUgYGJwZl9yZWdfc3RhdGVgIHVuaW9uLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGVyZSdzIHRoaXMgbmV3IGNoZWNrOiBgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWAgYmVmb3JlIGNvbXBhcmluZyBzb21lIGBpdGVyYCBmaWVsZHMsIGxpa2UgYGJ0ZmAuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gcHJldmVudCBhIGNvbXBhcmlzb24gaWYgdGhlIHJlZ2lzdGVyIHR5cGVzIGFyZSBkaWZmZXJlbnQsIHdoaWNoIHByb2JhYmx5IG1ha2VzIHNlbnNlIGluIG1vc3Qgc2NlbmFyaW9zLlxuXG5Ob3cgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gSWYgYG9sZF9yZWctXHUwMDNldHlwZWAgaXNuJ3QgYW4gaXRlcmF0b3IgdHlwZSwgdGhlbiBhY2Nlc3NpbmcgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgIGJlY29tZXMgYSByZWFkIGZyb20gdGhlIHVuaW9uLiBUaGlzIHVuaW9uIGlzIHBvcHVsYXRlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiB3aGF0IGB0eXBlYCBpcyBzZXQgdG8gaW4gYGJwZl9yZWdfc3RhdGVgLiBTbywgaWYgdGhhdCB1bmlvbidzIGZpZWxkcyBhcmUgdW5pbml0aWFsaXplZCwgb3IgY29udGFpbiBnYXJiYWdlIGRhdGEgYmVjYXVzZSBvZiBob3cgdGhlIHN0cnVjdHVyZSBpcyB1c2VkLCB0aGVuIHdlIGNvdWxkIGJlIGxvb2tpbmcgYXQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgcG90ZW50aWFsbHkuXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGFyZW4ndCBgc3RydWN0IGJwZl9yZWdfc3RhdGVgIGluc3RhbmNlcyB0eXBpY2FsbHkgZnVsbHkgaW5pdGlhbGl6ZWQ/IE9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlbiB0aGUgYHR5cGVgIGlzIHNldCwgdGhlIGFzc29jaWF0ZWQgdW5pb24gZmllbGRzICpzaG91bGQqIGJlIHdyaXR0ZW4gdG8/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIE1heWJlIGlmIHRoZSB0eXBlIGlzIGBTQ0FMQVJfVkFMVUVgLCB0aGUgdW5pb24gaXNuJ3QgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBjaGVjayBob3cgYGJwZl9yZWdfc3RhdGVgIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoYXQgc3RydWN0IGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTozMi41MjM0MTMyMzJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTM2MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcmtfcmVnX3Vua25vd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz02NjE9c3RhdGljIF9faW5pdCBpbnQgdW5ib3VuZF9yZWdfaW5pdCh2b2lkKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjYyLXtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjY2MzpcXHRicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2UoXFx1MDAyNnVuYm91bmRfcmVnKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTY2NC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NDI9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzYxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NjI6c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2My1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzY1PXN0YXRpYyB2b2lkIG1hcmtfcmVnX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NjktXFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NzA6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcxLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDk4PXN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTMyLS8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMzM6dm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEzNC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0My0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0NDpzdGF0aWMgdm9pZCBfX21hcmtfcmVnX3Vua25vd24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0Ni17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNDc6XFx0YnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDgtXFx0cmVnLVxcdTAwM2VwcmVjaXNlID0gIWVudi1cXHUwMDNlYnBmX2NhcGFibGU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE1MC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1MTpzdGF0aWMgdm9pZCBtYXJrX3JlZ191bmtub3duKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNTItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTUzLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE1NDpcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCByZWdzICsgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTU1LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTc3PXZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE3OS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxODA6XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE4MS1cXHRyZWctXFx1MDAzZXR5cGUgPSBOT1RfSU5JVDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTg0PXN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE5MS1cXHRjYXNlIFNDQUxBUl9WQUxVRTpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE5MjpcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTkzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMwNzM9c3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk4LVxcdFxcdGlmICh0ID09IERTVF9PUClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzA5OTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTAwLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjYwPXN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2OTktXFx0XFx0LyogaGF2ZSByZWFkIG1pc2MgZGF0YSBmcm9tIHRoZSBzdGFjayAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzAwOlxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCBzdGF0ZS1cXHUwMDNlcmVncywgZHN0X3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzcwMS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5MD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMTYtXFx0XFx0aWYgKHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYxMTc6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExOC1cXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2Ny1cXHRcXHRcXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTY4OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxNjktXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMDAtXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiAodCA9PSBCUEZfUkVBRCB8fCByZG9ubHlfbWVtKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjIwMTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjAyLVxcdH0gZWxzZSBpZiAocmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19DVFgpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjIzLVxcdFxcdFxcdFxcdGlmIChpbmZvLmlzX3JldHZhbCBcXHUwMDI2XFx1MDAyNiBnZXRfZnVuY19yZXR2YWxfcmFuZ2UoZW52LVxcdTAwM2Vwcm9nLCBcXHUwMDI2cmFuZ2UpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyMjQ6XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjIyNS1cXHRcXHRcXHRcXHRcXHRlcnIgPSBfX21hcmtfcmVnX3MzMl9yYW5nZShlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyMjktXFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjIzMDpcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjMxLVxcdFxcdFxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjcwLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI3MTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjcyLVxcdH0gZWxzZSBpZiAocmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19GTE9XX0tFWVMpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjgxLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI4MjpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjgzLVxcdH0gZWxzZSBpZiAodHlwZV9pc19za19wb2ludGVyKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjkwLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTE6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI5Mi1cXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI5NC1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiB0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTU6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI5Ni1cXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzIyLVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgKHJkb25seV9tZW0gfHwgdCA9PSBCUEZfUkVBRCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMjM6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMyNC1cXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fQVJFTkEpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMyNS1cXHRcXHRpZiAodCA9PSBCUEZfUkVBRCBcXHUwMDI2XFx1MDAyNiB2YWx1ZV9yZWdubyBcXHUwMDNlPSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzI2OlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMjctXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjEzPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjcwNC1cXHRcXHRcXHRpZiAoY2xvYmJlcikge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzA1OlxcdFxcdFxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3MDYtXFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1MDA9c3RhdGljIHZvaWQgbWF5YmVfd2lkZW5fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzUwOC1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc1MDk6XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmN1cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1MTAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkzODM9c3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0MzQtXFx0XFx0aWYgKCFzdWJwcm9nX3JldHVybnNfdm9pZChlbnYsIHN1YnByb2cpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0MzU6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci1cXHUwMDNlcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQzNi1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyMDU9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0NjEtXFx0XFx0Lyogc2V0cyB0eXBlIHRvIFNDQUxBUl9WQUxVRSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQ2MjpcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2NzgtXFx0XFx0XFx0Y2xlYXJfYWxsX3BrdF9wb2ludGVycyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDY3OTpcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2ODAtXFx0XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5Mzk9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTU6XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk2LVxcdFxcdGVyciA9IF9fbWFya19yZWdfczMyX3JhbmdlKGVudiwgcmVncywgQlBGX1JFR18wLCAtTUFYX0VSUk5PLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNjktXFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE3MDpcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNzEtXFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTgxLVxcdFxcdFxcdC8qIGtmdW5jIHJldHVybmluZyAndm9pZCAqJyBpcyBlcXVpdmFsZW50IHRvIHJldHVybmluZyBzY2FsYXIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxODI6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTgzLVxcdFxcdH0gZWxzZSBpZiAoIV9fYnRmX3R5cGVfaXNfc3RydWN0KHB0cl90eXBlKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNDUwPXN0YXRpYyBpbnQgc2FuaXRpemVfc3BlY3VsYXRpdmVfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDYwLVxcdFxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYxOlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NjItXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDYzOlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NjQ6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ2NS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM2ODM9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzA1LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzcwNjpcXHRcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MDctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MTItXFx0XFx0aWYgKG9wY29kZSA9PSBCUEZfU1VCIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzEzOlxcdFxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzcxNC1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDYxMD1zdGF0aWMgaW50IGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MjAtXFx0aWYgKCFpc19zYWZlX3RvX2NvbXB1dGVfZHN0X3JlZ19yYW5nZShpbnNuLCBcXHUwMDI2c3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2MjE6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjIyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NzY4PXN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxNS1cXHRcXHRcXHRcXHRpZiAob3Bjb2RlID09IEJQRl9TVUIgXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2VhbGxvd19wdHJfbGVha3MpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4MTY6XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxNy1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkzNj1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTMtXFx0XFx0XFx0XFx0XFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5OTQ6XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5NS1cXHRcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IDEpIC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDIwLVxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDIxOlxcdFxcdFxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMjItXFx0XFx0XFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDU1LVxcdFxcdFxcdFxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDU2OlxcdFxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA1Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNjYtXFx0XFx0XFx0LyogY2xlYXIgYW55IHN0YXRlIF9fbWFya19yZWdfa25vd24gZG9lc24ndCBzZXQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNjc6XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA2OC1cXHRcXHRcXHRyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLnR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxOTE9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjYzLVxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9BUkVOQSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI2NDpcXHRcXHRcXHRfX21hcmtfcmVnX3Vua25vd24oZW52LCBkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNjUtXFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlbWFwX3B0ciA9IG1hcDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjMxMz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNjktXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzcwOlxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM3MS1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NDExPXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NDgzLVxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg0ODQ6XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODQ4NS1cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZy1cXHUwMDNlYXJnX3R5cGUgPT0gQVJHX1BUUl9UT19EWU5QVFIpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODUwOS1cXHRcXHRcXHRcXHQvKiBjYWxsZXIgY2FuIHBhc3MgZWl0aGVyIFBUUl9UT19BUkVOQSBvciBTQ0FMQVIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg1MTA6XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODUxMS1cXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTozMi41NzM1NTI3NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMzAwMTYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCB3ZSdyZSBsb29raW5nIGF0LCBzdW1tYXJpemVkIGZyb20gdGhlIGluc2lkZTpcblxuKipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllcjogQSBGb2N1cyBvbiBgX19tYXJrX3JlZ191bmtub3duYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX21hcmtfcmVnX3Vua25vd25gIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBCUEYgdmVyaWZpZXIncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgY3JpdGljYWwgcm9sZSBvZiByZWdpc3RlciBzdGF0ZSB0cmFja2luZyBpbiBCUEYgc2FmZXR5LiBgX19tYXJrX3JlZ191bmtub3duYCBsaWtlbHkgcGxheXMgYSBwYXJ0IGluIGluaXRpYWxpemluZyBvciByZXNldHRpbmcgYSByZWdpc3RlcidzIGtub3duIHN0YXRlIHdpdGhpbiB0aGUgdmVyaWZpZXIuIEl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBoYW5kbGluZyB1bmRlZmluZWQgdmFsdWVzIG9yIHVudHJ1c3RlZCBkYXRhIGNvbWluZyBpbnRvIGEgQlBGIHByb2dyYW0uIEkgaW1hZ2luZSBpdCdzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgY29udHJvbCBmbG93IGV4cGxvaXRzIGFuZCBkYXRhIGxlYWtzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY2lyY3Vtc3RhbmNlcyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkOiB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIHRyaWdnZXIgaXQsIGFuZCB3aGF0J3MgdGhlIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIHZlcmlmaWVyJ3Mgc3RhdGUgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMga2V5IC0gd2hhdCBzZWN1cml0eSB0aHJlYXRzIGlzIGl0IGF0dGVtcHRpbmcgdG8gbWl0aWdhdGU/IEFsc28sIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/IElzIGl0IGVmZmljaWVudCwgb3IgaXMgaXQgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHZlcmlmaWVyIGZ1bmN0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjM2LjQ3NjU1Njc1NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTMzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTMzOlxcdHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMjEzNDpcXHR7XFxuMjEzNTpcXHRcXHRtZW1zZXQocmVnLCAwLCBzaXplb2YoKnJlZykpO1xcbjIxMzY6XFx0XFx0cmVnLVxcdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xcbjIxMzc6XFx0XFx0cmVnLVxcdTAwM2V2YXJfb2ZmID0gdG51bV91bmtub3duO1xcbjIxMzg6XFx0XFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcXG4yMTM5OlxcdH1cXG4yMTQwOlxcdFxcbjIxNDE6XFx0LyogTWFyayBhIHJlZ2lzdGVyIGFzIGhhdmluZyBhIGNvbXBsZXRlbHkgdW5rbm93biAoc2NhbGFyKSB2YWx1ZSxcXG4yMTQyOlxcdCAqIGluaXRpYWxpemUgLnByZWNpc2UgYXMgdHJ1ZSB3aGVuIG5vdCBicGYgY2FwYWJsZS5cXG4yMTQzOlxcdCAqL1xcbjIxNDQ6XFx0c3RhdGljIHZvaWQgX19tYXJrX3JlZ191bmtub3duKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMjE0NTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4yMTQ2OlxcdHtcXG4yMTQ3OlxcdFxcdGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShyZWcpO1xcbjIxNDg6XFx0XFx0cmVnLVxcdTAwM2VwcmVjaXNlID0gIWVudi1cXHUwMDNlYnBmX2NhcGFibGU7XFxuMjE0OTpcXHR9XFxuMjE1MDpcXHRcXG4yMTUxOlxcdHN0YXRpYyB2b2lkIG1hcmtfcmVnX3Vua25vd24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMTUyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubylcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdF9fbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MgKyByZWdubyk7XFxuMjE1NTpcXHR9XFxuMjE1NjpcXHRcXG4yMTU3OlxcdHN0YXRpYyBpbnQgX19tYXJrX3JlZ19zMzJfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4yMTU4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLFxcbjIxNTk6XFx0XFx0XFx0XFx0XFx0dTMyIHJlZ25vLFxcbjIxNjA6XFx0XFx0XFx0XFx0XFx0czMyIHMzMl9taW4sXFxuMjE2MTpcXHRcXHRcXHRcXHRcXHRzMzIgczMyX21heClcXG4yMTYyOlxcdHtcXG4yMTYzOlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdzICsgcmVnbm87XFxuMjE2NDpcXHRcXG4yMTY1OlxcdFxcdHJlZ19zZXRfc3JhbmdlMzIocmVnLFxcbjIxNjY6XFx0XFx0XFx0XFx0IG1heF90KHMzMiwgcmVnX3MzMl9taW4ocmVnKSwgczMyX21pbiksXFxuMjE2NzpcXHRcXHRcXHRcXHQgbWluX3QoczMyLCByZWdfczMyX21heChyZWcpLCBzMzJfbWF4KSk7XFxuMjE2ODpcXHRcXHRyZWdfc2V0X3NyYW5nZTY0KHJlZyxcXG4yMTY5OlxcdFxcdFxcdFxcdCBtYXhfdChzNjQsIHJlZ19zbWluKHJlZyksIHMzMl9taW4pLFxcbjIxNzA6XFx0XFx0XFx0XFx0IG1pbl90KHM2NCwgcmVnX3NtYXgocmVnKSwgczMyX21heCkpO1xcbjIxNzE6XFx0XFxuMjE3MjpcXHRcXHRyZWdfYm91bmRzX3N5bmMocmVnKTtcXG4yMTczOlxcdFxcbjIxNzQ6XFx0XFx0cmV0dXJuIHJlZ19ib3VuZHNfc2FuaXR5X2NoZWNrKGVudiwgcmVnLCBcXFwiczMyX3JhbmdlXFxcIik7XFxuMjE3NTpcXHR9XFxuMjE3NjpcXHRcXG4yMTc3OlxcdHZvaWQgYnBmX21hcmtfcmVnX25vdF9pbml0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMjE3ODpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjIxNzk6XFx0e1xcbjIxODA6XFx0XFx0X19tYXJrX3JlZ191bmtub3duKGVudiwgcmVnKTtcXG4yMTgxOlxcdFxcdHJlZy1cXHUwMDNldHlwZSA9IE5PVF9JTklUO1xcbjIxODI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTozNi40Nzc3MzIwNzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2OTY3OTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVnaXN0ZXIgU3RhdGUgSGFuZGxpbmcgaW4gQlBGKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2VgIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxpbmcgYG1lbXNldGAgb24gdGhlIHJlZ2lzdGVyLCBzcGVjaWZpY2FsbHkgemVyb2luZyBvdXQgdGhlIGVudGlyZSB1bmlvbi4gVGhhdCBtYWtlcyBpbW1lZGlhdGUgc2Vuc2U7IG1hcmtpbmcgc29tZXRoaW5nIFwidW5rbm93blwiIHNob3VsZCBpbnZvbHZlIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IGhlbGQgdmFsdWUsIHJpZ2h0PyBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gcmVhbGx5IGhpdHMgbWU6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG90aGVyIGRhdGEgdHlwZXMgcmVwcmVzZW50ZWQgYnkgdGhhdCB1bmlvbj8gVGhpcyB6ZXJvaW5nIGFjdGlvbiBhZmZlY3RzIGV2ZXJ5dGhpbmcuIEFyZSB0aGVyZSBhbnkgY29kZSBwYXRocyB3aGVyZSBhIHJlZ2lzdGVyJ3MgYHJlZy1cdTAwM2V0eXBlYCBpcyBtb2RpZmllZCB3aXRob3V0IGFsc28gZW5zdXJpbmcgdGhlIHVuaW9uIGlzIGNsZWFyZWQ/IFRoYXQgY291bGQgYmUgYSBzZXJpb3VzIGlzc3VlLiBUbyBwcm9wZXJseSBmaWd1cmUgdGhpcyBvdXQgSSBzaG91bGQgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBmaWxlOyB0aGF0J3Mgd2hlcmUgYHN0YWNrc2FmZWAgaXMgaGFuZGxlZCwgYW5kIGxpa2VseSByZWxhdGVkIHN0YXRlIG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWdpc3RlciBsaWZlY3ljbGUgbW9yZSB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6NDAuMDQ3NDE0NDlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdFxcdFxcdCAqIHN1Y2ggdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudC5cXG4gNzkxOlxcdFxcdFxcdFxcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXFxuIDc5MjpcXHRcXHRcXHRcXHQgKi9cXG4gNzkzOlxcdFxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXFxuIDc5NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXFxuIDc5NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc5NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzk3OlxcdFxcdFxcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbiA3OTg6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDc5OTpcXHRcXHRcXHRcXHRjdXJfcmVnID0gXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODAwOlxcdFxcdFxcdFxcdGlmIChvbGRfcmVnLVxcdTAwM2VkeW5wdHIudHlwZSAhPSBjdXJfcmVnLVxcdTAwM2VkeW5wdHIudHlwZSB8fFxcbiA4MDE6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWR5bnB0ci5maXJzdF9zbG90ICE9IGN1cl9yZWctXFx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XFxuIDgwMjpcXHRcXHRcXHRcXHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VpZCwgY3VyX3JlZy1cXHUwMDNlaWQsIGlkbWFwKSB8fFxcbiA4MDM6XFx0XFx0XFx0XFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cXHUwMDNlcGFyZW50X2lkLCBjdXJfcmVnLVxcdTAwM2VwYXJlbnRfaWQsIGlkbWFwKSlcXG4gODA0OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODA1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4MDY6XFx0XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbiA4MDc6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgwODpcXHRcXHRcXHRcXHRjdXJfcmVnID0gXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODA5OlxcdFxcdFxcdFxcdC8qIGl0ZXIuZGVwdGggaXMgbm90IGNvbXBhcmVkIGJldHdlZW4gc3RhdGVzIGFzIGl0XFxuIDgxMDpcXHRcXHRcXHRcXHQgKiBkb2Vzbid0IG1hdHRlciBmb3IgY29ycmVjdG5lc3MgYW5kIHdvdWxkIG90aGVyd2lzZVxcbiA4MTE6XFx0XFx0XFx0XFx0ICogcHJldmVudCBjb252ZXJnZW5jZTsgd2UgbWFpbnRhaW4gaXQgb25seSB0byBwcmV2ZW50XFxuIDgxMjpcXHRcXHRcXHRcXHQgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZVxcbiA4MTM6XFx0XFx0XFx0XFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXFxuIDgxNDpcXHRcXHRcXHRcXHQgKi9cXG4gODE1OlxcdFxcdFxcdFxcdGlmIChvbGRfcmVnLVxcdTAwM2V0eXBlICE9IGN1cl9yZWctXFx1MDAzZXR5cGUgfHxcXG4gODE2OlxcdFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLmJ0ZiB8fFxcbiA4MTc6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkIHx8XFxuIDgxODpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLnN0YXRlIHx8XFxuIDgxOTpcXHRcXHRcXHRcXHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVxcdTAwM2VpdGVyLmRlcHRoLCBzZWUgYWJvdmUgKi9cXG4gODIwOlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZWlkLCBjdXJfcmVnLVxcdTAwM2VpZCwgaWRtYXApKVxcbiA4MjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgyMzpcXHRcXHRcXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbiA4MjQ6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgyNTpcXHRcXHRcXHRcXHRjdXJfcmVnID0gXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gODI2OlxcdFxcdFxcdFxcdGlmICghY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZWlkLCBjdXJfcmVnLVxcdTAwM2VpZCwgaWRtYXApIHx8XFxuIDgyNzpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXJxLmtmdW5jX2NsYXNzICE9IGN1cl9yZWctXFx1MDAzZWlycS5rZnVuY19jbGFzcylcXG4gODI4OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODI5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4MzA6XFx0XFx0XFx0Y2FzZSBTVEFDS19NSVNDOlxcbiA4MzE6XFx0XFx0XFx0Y2FzZSBTVEFDS19aRVJPOlxcbiA4MzI6XFx0XFx0XFx0Y2FzZSBTVEFDS19JTlZBTElEOlxcbiA4MzM6XFx0XFx0XFx0Y2FzZSBTVEFDS19QT0lTT046XFxuIDgzNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODM1OlxcdFxcdFxcdC8qIEVuc3VyZSB0aGF0IG5ldyB1bmhhbmRsZWQgc2xvdCB0eXBlcyByZXR1cm4gZmFsc2UgYnkgZGVmYXVsdCAqL1xcbiA4MzY6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gODM3OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODM4OlxcdFxcdFxcdH1cXG4gODM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MDk6NDAuMDQ3NTcwMzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4NTEyMzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzdGFja3NhZmVgIExvZ2ljKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGBzdGFja3NhZmVgIGlzIGhhbmRsaW5nIHRoZSBjb21wYXJpc29uLiBJdCdzIGNoZWNraW5nIGBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV1gLiBJZiBpdCdzIGEgYFNUQUNLX0lURVJgLCB0aGVuIGl0IGFjY2Vzc2VzIGBvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHJgLiBCdXQgaG9sZCBvbiwgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZWAgaXMgYW4gYXJyYXkgb2YgYHU4YCwgc28gZG9lcyBgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgIG1lYW4gYG9sZF9yZWctXHUwMDNldHlwZWAgaXMgYW4gaXRlcmF0b3IgdHlwZT9cblxuQWN0dWFsbHksIGBvbGRfcmVnYCBpc24ndCBhIHJlZ2lzdGVyIGRpcmVjdGx5OyBpdCdzIGBzcGlsbGVkX3B0cmAuIEhtbSwgbm93IEkgc2VlIHRoZSBwb3RlbnRpYWwgaXNzdWUuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGNvbXBhcmluZyBgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgd2l0aCBgY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmAgd2l0aG91dCBleHBsaWNpdGx5IGNoZWNraW5nIGBvbGRfcmVnLVx1MDAzZXR5cGVgIGJlZm9yZWhhbmQuIFRoZSBwYXRjaCAqZG9lcyogYWRkIGEgY2hlY2sgYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgLCB3aGljaCBpcyBnb29kLiBCdXQgYmVmb3JlIHRoZSBwYXRjaCwgaWYgdGhlIHR5cGVzIHdlcmUgZGlmZmVyZW50LCB0aGUgY29tcGFyaXNvbiBjb3VsZCBoYXZlIHJldHVybmVkIHRydWUgYWNjaWRlbnRhbGx5IGlmIHRoZSBvdGhlciBmaWVsZHMsIGJ5IGNvaW5jaWRlbmNlLCBoYXBwZW5lZCB0byBiZSBlcXVhbC5cblxuVGhlIG1haW4gY29uY2VybiBiZWZvcmUgdGhlIHBhdGNoIGlzIHRoYXQgaXQgd2FzIHNpbXBseSBjb21wYXJpbmcgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgIGFuZCBgY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmAuIFRoaXMgbWVhbnMgaWYgdGhvc2UgYGJ0ZmAgdmFsdWVzIGhhcHBlbmVkIHRvIGJlIHRoZSBzYW1lLCB0aGUgY29kZSBjb3VsZCBoYXZlIGluY29ycmVjdGx5IGNvbnNpZGVyZWQgdGhlbSBlcXVpdmFsZW50LiBUaGUgZGFuZ2VyIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJZiBgb2xkX3JlZ2AgaXMgYSBgc3BpbGxlZF9wdHJgLCBhbmQgaXQgKmlzbid0KiBhbiBpdGVyYXRvciwgaXRzIHVuaW9uIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIGxlYWRpbmcgdG8gYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgd2FpdCEgSWYgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXSA9PSBTVEFDS19JVEVSYCwgdGhlbiBgb2xkX3JlZ2Agc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCBhcyBhbiBpdGVyYXRvci5cblxuSG93ZXZlciwgd2hhdCBpZiBgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgIGFuZCBgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdID09IFNUQUNLX0lURVJgICpidXQqIHRoZWlyIGBzcGlsbGVkX3B0ci50eXBlYCB2YWx1ZXMgYXJlIGRpZmZlcmVudD8gSXMgaXQgZXZlbiAqcG9zc2libGUqIGZvciBgc3BpbGxlZF9wdHIudHlwZWAgdG8gYmUgZGlmZmVyZW50IHdoZW4gYm90aCBzbG90cyBhcmUgbWFya2VkIGFzIGBTVEFDS19JVEVSYD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgU1RBQ0tfSVRFUmAgaXMgc2V0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBwb3RlbnRpYWwgZWRnZSBjYXNlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTo0Ny40MzI2OTYxOTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTI1ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNUQUNLX0lURVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9sb2cuYz00OTc9c3RhdGljIGNoYXIgc2xvdF90eXBlX2NoYXJbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNTAyLVxcdFtTVEFDS19EWU5QVFJdXFx0PSAnZCcsXFxua2VybmVsL2JwZi9sb2cuYzo1MDM6XFx0W1NUQUNLX0lURVJdXFx0PSAnaScsXFxua2VybmVsL2JwZi9sb2cuYy01MDQtXFx0W1NUQUNLX0lSUV9GTEFHXSA9ICdmJyxcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmM9NzExPXZvaWQgcHJpbnRfdmVyaWZpZXJfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9sb2cuYy03NzQtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9sb2cuYzo3NzU6XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbmtlcm5lbC9icGYvbG9nLmMtNzc2LVxcdFxcdFxcdC8qIG9ubHkgbWFpbiBzbG90IGhhcyBpZCBzZXQ7IHNraXAgb3RoZXJzICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM5OD1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMzLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDM0OlxcdFxcdFxcdGlmIChzdHlwZSA9PSBTVEFDS19EWU5QVFIgfHwgc3R5cGUgPT0gU1RBQ0tfSVRFUiB8fFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDM1LVxcdFxcdFxcdCAgICBzdHlwZSA9PSBTVEFDS19JUlFfRkxBRylcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9NzAyPXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA1LVxcdFxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODA2OlxcdFxcdGNhc2UgU1RBQ0tfSVRFUjpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgwNy1cXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTE5MD1zdGF0aWMgYm9vbCBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTk4LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGF0ZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExOTk6XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzdGFja1tpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfSVRFUilcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDAtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE1PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBCUEZfUkVHX1NJWkU7IGorKylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTUwOlxcdFxcdFxcdHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSA9IFNUQUNLX0lURVI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk1MS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05ODY9c3RhdGljIGJvb2wgaXNfaXRlcl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNS1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDY6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSA9PSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA3LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDEzPXN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzctXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM4OlxcdFxcdFxcdGlmIChzbG90LVxcdTAwM2VzbG90X3R5cGVbal0gIT0gU1RBQ0tfSVRFUilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzOS1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTU1PXN0YXRpYyBpbnQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwLSAqICAgLSBkeW5wdHIgc3RhdGUgKFNUQUNLX0RZTlBUUik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExODE6ICogICAtIGl0ZXIgc3RhdGUgKFNUQUNLX0lURVIpLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyLSAqICAgLSBpcnEgZmxhZyBzdGF0ZSAoU1RBQ0tfSVJRX0ZMQUcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE4ND1zdGF0aWMgYm9vbCBpc19zdGFja19zbG90X3NwZWNpYWwoY29uc3Qgc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MC1cXHRjYXNlIFNUQUNLX0RZTlBUUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MTpcXHRjYXNlIFNUQUNLX0lURVI6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTItXFx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MDUxPXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1NS1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MDU2OlxcdHUzMiBjbGVhcl9tYXNrID0gKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfSVRFUik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjQ3LjUxODYyNTk0OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg4NzQxNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyJ3MgUkNVIFByb3RlY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWV0aGluZyB0aGF0J3MgYmVlbiBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgUkNVLXByb3RlY3RlZCByZWZlcmVuY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2Agd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgbG9naWMgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIG1lbW9yeSBzYWZldHkgYW5kIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVuIEJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIFJDVS1wcm90ZWN0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGl0cyBzcGVjaWZpYyBjaGVja3MgYW5kIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBpbnZhbGlkYXRlcyB0aG9zZSByZWZzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFdoYXQncyB0aGUgY29udGV4dCwgd2hhdCBvdGhlciBmdW5jdGlvbnMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJJ20gY3VyaW91cyB3aGF0IGtpbmQgb2YgYXNzdW1wdGlvbnMgdGhlIGRlc2lnbiBtYWtlcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjUwLjkwNzM2OTkwM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDUxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MDUxOlxcdHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuOTA1MjpcXHR7XFxuOTA1MzpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcXG45MDU0OlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XFxuOTA1NTpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbjkwNTY6XFx0XFx0dTMyIGNsZWFyX21hc2sgPSAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19JVEVSKTtcXG45MDU3OlxcdFxcbjkwNTg6XFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayhlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XFxuOTA1OTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1JDVSkge1xcbjkwNjA6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2V0eXBlIFxcdTAwMjY9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTtcXG45MDYxOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xcbjkwNjI6XFx0XFx0XFx0fVxcbjkwNjM6XFx0XFx0fSkpO1xcbjkwNjQ6XFx0fVxcbjkwNjU6XFx0XFxuOTA2NjpcXHRzdGF0aWMgaW50IHJlZl9jb252ZXJ0X2FsbG9jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkKVxcbjkwNjc6XFx0e1xcbjkwNjg6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG45MDY5OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuOTA3MDpcXHRcXHRpbnQgZXJyO1xcbjkwNzE6XFx0XFxuOTA3MjpcXHRcXHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVxcdTAwM2VjdXJfc3RhdGUsIGlkKTtcXG45MDczOlxcdFxcbjkwNzQ6XFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIHN0YXRlLCByZWcsICh7XFxuOTA3NTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VpZCAhPSBpZClcXG45MDc2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjkwNzc6XFx0XFx0XFx0aWYgKChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fQUxMT0MpIFxcdTAwMjZcXHUwMDI2IChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUEVSQ1BVKSkge1xcbjkwNzg6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2VpZCA9IDA7XFxuOTA3OTpcXHRcXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfk1FTV9BTExPQztcXG45MDgwOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSB8PSBNRU1fUkNVO1xcbjkwODE6XFx0XFx0XFx0fVxcbjkwODI6XFx0XFx0fSkpO1xcbjkwODM6XFx0XFxuOTA4NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjkwODU6XFx0fVxcbjkwODY6XFx0XFxuOTA4NzpcXHRzdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjkwODg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzKVxcbjkwODk6XFx0e1xcbjkwOTA6XFx0XFx0aW50IGk7XFxuOTA5MTpcXHRcXG45MDkyOlxcdFxcdC8qIGFmdGVyIHRoZSBjYWxsIHJlZ2lzdGVycyByMCAtIHI1IHdlcmUgc2NyYXRjaGVkICovXFxuOTA5MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkrKykge1xcbjkwOTQ6XFx0XFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxuOTA5NTpcXHRcXHRcXHRfX2NoZWNrX3JlZ19hcmcoZW52LCByZWdzLCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG45MDk2OlxcdFxcdH1cXG45MDk3OlxcdH1cXG45MDk4OlxcdFxcbjkwOTk6XFx0c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuOTEwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTo1MC45MDgzOTQ2MjNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyMDc5OTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSQ1UgUmVmZXJlbmNlIEludmFsaWRhdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGlzIHRvdWNoaW5nIHJlZ2lzdGVycyB0YWdnZWQgd2l0aCBgTUVNX1JDVWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFzcCBob3cgaXQgZG9lcyB0aGF0LiBJdCdzIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByZWdpc3RlcnMgaW4gdGhlIHZlcmlmaWVyIHN0YXRlIOKAkyBpbnRlcmVzdGluZy4gQW5kIGl0J3MgaW5jbHVkaW5nIHN0YWNrIHNsb3RzIGlmIHRoZXkgbWF0Y2ggYGNsZWFyX21hc2tgLiBBaCwgcmlnaHQsIGBjbGVhcl9tYXNrYCBjb250YWlucyBgU1RBQ0tfSVRFUmAuIFRoaXMgbWVhbnMgaXQncyBsb29waW5nIHRocm91Z2ggYFNUQUNLX0lURVJgIHNsb3RzIHNwZWNpZmljYWxseSBhbmQgY2hlY2tpbmcgYHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVYC5cblxuQnV0IHRoZW4gaXQgaGl0IG1lOiBpZiBgcmVnLVx1MDAzZXR5cGVgIGlzIHNvbWV0aGluZyBsaWtlIGBQVFJfVE9fU1RBQ0tgLCB3b3VsZG4ndCB0aGF0IHBvdGVudGlhbGx5ICpub3QqIGhhdmUgYE1FTV9SQ1VgIHNldD8gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCwgYW5kIGl0IHN1Z2dlc3RzIGEgcG9zc2libGUgc3VidGxlIGJ1ZyBvciBhIG1pc3NlZCBjb25uZWN0aW9uIGluIG15IHVuZGVyc3RhbmRpbmcuXG5cbkkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgYHJlZy1cdTAwM2V0eXBlYCAqc2hvdWxkKiBiZSB3aGVuIGEgc2xvdCBpcyBtYXJrZWQgYFNUQUNLX0lURVJgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxpbmNocGluLiBCZXR0ZXIgY2hlY2sgdGhlIGNvZGUgZm9yIGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGFuc3dlciBsaWVzLiBUaGlzIGVudGlyZSBsb2dpYyBoaW5nZXMgb24gaG93IHRoYXQgZnVuY3Rpb24gc2V0cyB1cCB0aGUgdHlwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTowOTo1NS40MjkxOTY3ODhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTE1OlxcdHN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDkxNjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbiA5MTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBpbnNuX2lkeCxcXG4gOTE4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQsIGludCBucl9zbG90cylcXG4gOTE5OlxcdHtcXG4gOTIwOlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XFxuIDkyMTpcXHRcXHRpbnQgc3BpLCBpLCBqLCBpZDtcXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxuIDkyNDpcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4gOTI1OlxcdFxcdFxcdHJldHVybiBzcGk7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XFxuIDkyODpcXHRcXHRpZiAoaWQgXFx1MDAzYyAwKVxcbiA5Mjk6XFx0XFx0XFx0cmV0dXJuIGlkO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfc2xvdHM7IGkrKykge1xcbiA5MzI6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpIC0gaV07XFxuIDkzMzpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdFxcdF9fbWFya19yZWdfa25vd25femVybyhzdCk7XFxuIDkzNjpcXHRcXHRcXHRzdC1cXHUwMDNldHlwZSA9IFBUUl9UT19TVEFDSzsgLyogd2UgZG9uJ3QgaGF2ZSBkZWRpY2F0ZWQgcmVnIHR5cGUgKi9cXG4gOTM3OlxcdFxcdFxcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKG1ldGEpKSB7XFxuIDkzODpcXHRcXHRcXHRcXHRpZiAoaW5fcmN1X2NzKGVudikpXFxuIDkzOTpcXHRcXHRcXHRcXHRcXHRzdC1cXHUwMDNldHlwZSB8PSBNRU1fUkNVO1xcbiA5NDA6XFx0XFx0XFx0XFx0ZWxzZVxcbiA5NDE6XFx0XFx0XFx0XFx0XFx0c3QtXFx1MDAzZXR5cGUgfD0gUFRSX1VOVFJVU1RFRDtcXG4gOTQyOlxcdFxcdFxcdH1cXG4gOTQzOlxcdFxcdFxcdHN0LVxcdTAwM2VpZCA9IGkgPT0gMCA/IGlkIDogMDtcXG4gOTQ0OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLmJ0ZiA9IGJ0ZjtcXG4gOTQ1OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLmJ0Zl9pZCA9IGJ0Zl9pZDtcXG4gOTQ2OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLnN0YXRlID0gQlBGX0lURVJfU1RBVEVfQUNUSVZFO1xcbiA5NDc6XFx0XFx0XFx0c3QtXFx1MDAzZWl0ZXIuZGVwdGggPSAwO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxuIDk1MDpcXHRcXHRcXHRcXHRzbG90LVxcdTAwM2VzbG90X3R5cGVbal0gPSBTVEFDS19JVEVSO1xcbiA5NTE6XFx0XFxuIDk1MjpcXHRcXHRcXHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpIC0gaSk7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHJldHVybiAwO1xcbiA5NTY6XFx0fVxcbiA5NTc6XFx0XFxuIDk1ODpcXHRzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDk1OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXFxuIDk2MDpcXHR7XFxuIDk2MTpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xcbiA5NjI6XFx0XFx0aW50IHNwaSwgaSwgajtcXG4gOTYzOlxcdFxcbiA5NjQ6XFx0XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjA5OjU1LjQzMDgwODU5OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMyNTU2ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWZXJpZmllciBCdWc6IEluY29uc2lzdGVudCBTdGF0ZSBNZXJnaW5nIHdpdGggUkNVLVByb3RlY3RlZCBJdGVyYXRvcnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGBzdC1cdTAwM2V0eXBlYCBmaWVsZCwgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBhIHN0YWNrIHNsb3QsIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIGBQVFJfVE9fU1RBQ0tgLCBgTUVNX1JDVWAsIGFuZCBgUFRSX1VOVFJVU1RFRGAuICBTcGVjaWZpY2FsbHksIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMsIHRoZSB0eXBlIGNhbiBiZSBgUFRSX1RPX1NUQUNLYCwgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgLCBvciBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzdGF0ZSBtZXJnaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCBSQ1UtcHJvdGVjdGVkIGl0ZXJhdG9ycy5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIGluIHRoZSBgc3RhY2tzYWZlYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIHR3byBzdGF0ZXMgYXJlIGVxdWl2YWxlbnQgZHVyaW5nIHN0YXRlIG1lcmdpbmcuICBQcmlvciB0byB0aGlzIHBhdGNoLCBgc3RhY2tzYWZlYCAqd2Fzbid0KiBjaGVja2luZyBgb2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZWAgZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gVGhpcyBtZWFucyB0aGF0IGlmIG9uZSBzdGF0ZSBoYWQgYE1FTV9SQ1VgIGFuZCB0aGUgb3RoZXIgaGFkIGBQVFJfVU5UUlVTVEVEYCwgdGhleSB3b3VsZCBiZSBpbmNvcnJlY3RseSBjb25zaWRlcmVkIGVxdWl2YWxlbnQhIFRoaXMgaXMgYSBjbGFzc2ljIHZlcmlmaWVyIGJ1Zy5cblxuVGhlIHRlc3QgY2FzZSBpbiB0aGUgcGF0Y2gsIGBpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nYCwgaWxsdXN0cmF0ZXMgdGhpcyBwZXJmZWN0bHkuICBJdCBzZXRzIHVwIGEgc2NlbmFyaW8gd2hlcmUgYW4gaXRlcmF0b3IgaXMgY3JlYXRlZCB3aXRoaW4gYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNvZGUgdGhlbiBicmFuY2hlcywgd2l0aCBvbmUgcGF0aCAqa2VlcGluZyogdGhlIFJDVSBsb2NrIGFuZCB0aGUgb3RoZXIgKnJlbGVhc2luZyogYW5kICpyZS1hY3F1aXJpbmcqIGl0LCB0aHVzIGNyZWF0aW5nIGFuIHVucHJvdGVjdGVkIHdpbmRvdy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoZSBzdWJzZXF1ZW50IG1lcmdlLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgdmVyaWZpZXIsIGVuY291bnRlcmluZyB0d28gYFNUQUNLX0lURVJgIHNsb3RzIHdpdGggdGhlIHNhbWUgQlRGIElELCBldGMuLCB3b3VsZCBpbmNvcnJlY3RseSBkZWVtIHRoZSBzdGF0ZXMgZXF1aXZhbGVudCwgZGVzcGl0ZSB0aGUgZGlmZmVyZW5jZSBpbiBSQ1UgcHJvdGVjdGlvbiAoYE1FTV9SQ1VgIHZzLiBgUFRSX1VOVFJVU1RFRGApLlxuXG5gaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGlzIGtleS4gIEl0IGNoYW5nZXMgYE1FTV9SQ1VgIHRvIGBQVFJfVU5UUlVTVEVEYCB3aGVuIHRoZSBSQ1UgcHJvdGVjdGlvbiBpcyBsb3N0LiAgVGhlcmVmb3JlLCB0aGUgcGF0Y2ggcHJldmVudHMgdGhlIHZlcmlmaWVyIGZyb20gbWVyZ2luZyBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciAqaXMqIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIGl0ICppcyBub3QqIChgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGApLlxuXG5Ob3csIGlmIHRoZSB2ZXJpZmllciAqZGlkKiBtZXJnZSB0aGVzZSBzdGF0ZXMsIGl0IGNvdWxkIGxlYWQgdG8gYSBzZXJpb3VzIGlzc3VlLiBgYnBmX2l0ZXJfdGFza19uZXh0YCwgY3J1Y2lhbGx5LCByZXF1aXJlcyBhbiAqUkNVLXByb3RlY3RlZCogaXRlcmF0b3IuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcsIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyBhIEJQRiBwcm9ncmFtIHRvIGNhbGwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgb24gYW4gaXRlcmF0b3IgdGhhdCdzIG5vIGxvbmdlciBSQ1UtcHJvdGVjdGVkLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgYSBrZXJuZWwgbWVtb3J5IHNhZmV0eSBidWcsIHdoZW4gYGJwZl9pdGVyX3Rhc2tfbmV4dGAgdHJpZXMgdG8gYWNjZXNzIHRoZSB0YXNrIHN0cnVjdCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgcGFzc2VkLiBUaGUgdGVzdCBjYXNlIGV4cGxvaXRzIHRoaXMgd2l0aCB0aGUgdW5wcm90ZWN0ZWQgd2luZG93LCBhbGxvd2luZyB0aGUgaXRlcmF0b3IgdG8gYmVjb21lIGBQVFJfVU5UUlVTVEVEYC5cblxuVGhpcyB1c2UtYWZ0ZXItZnJlZSBpcywgdGhhbmtmdWxseSwgc29tZXRoaW5nIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGNhbiBjYXRjaC4gIEFzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgYHN0YWNrc2FmZWAgZG9lcyBjaGVjayB0aGUgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXWAgdG8gYmUgYFNUQUNLX0lOVkFMSURgLCBzbyBpdCBkb2Vzbid0IGFsbG93IGNvbXBhcmluZyB1bnJlbGF0ZWQgZGF0YS4gIFRoZSBwYXRjaCBqdXN0IGludHJvZHVjZXMgYSBuZWNlc3NhcnkgY2hlY2sgb2YgYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgIGZvciB0aGUgYFNUQUNLX0lURVJgIHR5cGUgZHVyaW5nIGBzdGFja3NhZmVgLiBUaGlzIGVuc3VyZXMgY29ycmVjdCBzdGF0ZSBtZXJnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDowOC43NTYzODA5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMixcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDI6XFx0c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbiA3MDM6XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbiA3MDQ6XFx0XFx0XFx0ICAgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4gNzA1OlxcdHtcXG4gNzA2OlxcdFxcdGludCBpLCBzcGk7XFxuIDcwNzpcXHRcXG4gNzA4OlxcdFxcdC8qIHdhbGsgc2xvdHMgb2YgdGhlIGV4cGxvcmVkIHN0YWNrIGFuZCBpZ25vcmUgYW55IGFkZGl0aW9uYWxcXG4gNzA5OlxcdFxcdCAqIHNsb3RzIGluIHRoZSBjdXJyZW50IHN0YWNrLCBzaW5jZSBleHBsb3JlZChzYWZlKSBzdGF0ZVxcbiA3MTA6XFx0XFx0ICogZGlkbid0IHVzZSB0aGVtXFxuIDcxMTpcXHRcXHQgKi9cXG4gNzEyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvbGQtXFx1MDAzZWFsbG9jYXRlZF9zdGFjazsgaSsrKSB7XFxuIDcxMzpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkX3JlZywgKmN1cl9yZWc7XFxuIDcxNDpcXHRcXHRcXHRpbnQgaW0gPSBpICUgQlBGX1JFR19TSVpFO1xcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRcXHRzcGkgPSBpIC8gQlBGX1JFR19TSVpFO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRcXHRpZiAoZXhhY3QgPT0gRVhBQ1QpIHtcXG4gNzE5OlxcdFxcdFxcdFxcdHU4IG9sZF90eXBlID0gb2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXTtcXG4gNzIwOlxcdFxcdFxcdFxcdHU4IGN1cl90eXBlID0gaSBcXHUwMDNjIGN1ci1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrID9cXG4gNzIxOlxcdFxcdFxcdFxcdFxcdCAgICAgIGN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gOiBTVEFDS19JTlZBTElEO1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRcXHRcXHRcXHQvKiBTVEFDS19JTlZBTElEIGFuZCBTVEFDS19QT0lTT04gYXJlIGVxdWl2YWxlbnQgZm9yIHBydW5pbmcgKi9cXG4gNzI0OlxcdFxcdFxcdFxcdGlmIChvbGRfdHlwZSA9PSBTVEFDS19QT0lTT04pXFxuIDcyNTpcXHRcXHRcXHRcXHRcXHRvbGRfdHlwZSA9IFNUQUNLX0lOVkFMSUQ7XFxuIDcyNjpcXHRcXHRcXHRcXHRpZiAoY3VyX3R5cGUgPT0gU1RBQ0tfUE9JU09OKVxcbiA3Mjc6XFx0XFx0XFx0XFx0XFx0Y3VyX3R5cGUgPSBTVEFDS19JTlZBTElEO1xcbiA3Mjg6XFx0XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gY3VyLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgfHwgb2xkX3R5cGUgIT0gY3VyX3R5cGUpXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczMDpcXHRcXHRcXHR9XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdFxcdGlmIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX0lOVkFMSUQgfHxcXG4gNzMzOlxcdFxcdFxcdCAgICBvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1BPSVNPTilcXG4gNzM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRcXHRpZiAoZW52LVxcdTAwM2VhbGxvd191bmluaXRfc3RhY2sgXFx1MDAyNlxcdTAwMjZcXG4gNzM3OlxcdFxcdFxcdCAgICBvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MpXFxuIDczODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0XFx0LyogZXhwbG9yZWQgc3RhY2sgaGFzIG1vcmUgcG9wdWxhdGVkIHNsb3RzIHRoYW4gY3VycmVudCBzdGFja1xcbiA3NDE6XFx0XFx0XFx0ICogYW5kIHRoZXNlIHNsb3RzIHdlcmUgdXNlZFxcbiA3NDI6XFx0XFx0XFx0ICovXFxuIDc0MzpcXHRcXHRcXHRpZiAoaSBcXHUwMDNlPSBjdXItXFx1MDAzZWFsbG9jYXRlZF9zdGFjaylcXG4gNzQ0OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzQ1OlxcdFxcbiA3NDY6XFx0XFx0XFx0LypcXG4gNzQ3OlxcdFxcdFxcdCAqIDY0IGFuZCAzMi1iaXQgc2NhbGFyIHNwaWxscyB2cyBNSVNDL0lOVkFMSUQgc2xvdHMgYW5kIHZpY2UgdmVyc2EuXFxuIDc0ODpcXHRcXHRcXHQgKiBMb2FkIGZyb20gTUlTQy9JTlZBTElEIHNsb3RzIHByb2R1Y2VzIHVuYm91bmQgc2NhbGFyLlxcbiA3NDk6XFx0XFx0XFx0ICogQ29uc3RydWN0IGEgZmFrZSByZWdpc3RlciBmb3Igc3VjaCBzdGFjayBhbmQgY2FsbFxcbiA3NTA6XFx0XFx0XFx0ICogcmVnc2FmZSgpIHRvIGVuc3VyZSBzY2FsYXIgaWRzIGFyZSBjb21wYXJlZC5cXG4gNzUxOlxcdFxcdFxcdCAqL1xcbiA3NTI6XFx0XFx0XFx0aWYgKGltID09IDAgfHwgaW0gPT0gNCkge1xcbiA3NTM6XFx0XFx0XFx0XFx0b2xkX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xcbiA3NTQ6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xcbiA3NTU6XFx0XFx0XFx0XFx0aWYgKG9sZF9yZWcgXFx1MDAyNlxcdTAwMjYgY3VyX3JlZykge1xcbiA3NTY6XFx0XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgb2xkX3JlZywgY3VyX3JlZywgaWRtYXAsIGV4YWN0KSlcXG4gNzU3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzU4OlxcdFxcdFxcdFxcdFxcdGkgKz0gKGltID09IDAgPyBCUEZfUkVHX1NJWkUgLSAxIDogMyk7XFxuIDc1OTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzYwOlxcdFxcdFxcdFxcdH1cXG4gNzYxOlxcdFxcdFxcdH1cXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0XFx0LyogaWYgb2xkIHN0YXRlIHdhcyBzYWZlIHdpdGggbWlzYyBkYXRhIGluIHRoZSBzdGFja1xcbiA3NjQ6XFx0XFx0XFx0ICogaXQgd2lsbCBiZSBzYWZlIHdpdGggemVyby1pbml0aWFsaXplZCBzdGFjay5cXG4gNzY1OlxcdFxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxcbiA3NjY6XFx0XFx0XFx0ICovXFxuIDc2NzpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFxcdTAwMjZcXHUwMDI2XFxuIDc2ODpcXHRcXHRcXHQgICAgY3VyLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19aRVJPKVxcbiA3Njk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc3MDpcXHRcXHRcXHRpZiAob2xkLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPVxcbiA3NzE6XFx0XFx0XFx0ICAgIGN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0pXFxuIDc3MjpcXHRcXHRcXHRcXHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cXG4gNzczOlxcdFxcdFxcdFxcdCAqIHRoaXMgc3RhY2sgc2xvdCwgYnV0IGN1cnJlbnQgaGFzIFNUQUNLX01JU0MgLVxcdTAwM2VcXG4gNzc0OlxcdFxcdFxcdFxcdCAqIHRoaXMgdmVyaWZpZXIgc3RhdGVzIGFyZSBub3QgZXF1aXZhbGVudCxcXG4gNzc1OlxcdFxcdFxcdFxcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXFxuIDc3NjpcXHRcXHRcXHRcXHQgKi9cXG4gNzc3OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzc4OlxcdFxcdFxcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXFxuIDc3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzgwOlxcdFxcdFxcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xcbiA3ODE6XFx0XFx0XFx0c3dpdGNoIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdKSB7XFxuIDc4MjpcXHRcXHRcXHRjYXNlIFNUQUNLX1NQSUxMOlxcbiA3ODM6XFx0XFx0XFx0XFx0Lyogd2hlbiBleHBsb3JlZCBhbmQgY3VycmVudCBzdGFjayBzbG90IGFyZSBib3RoIHN0b3JpbmdcXG4gNzg0OlxcdFxcdFxcdFxcdCAqIHNwaWxsZWQgcmVnaXN0ZXJzLCBjaGVjayB0aGF0IHN0b3JlZCBwb2ludGVycyB0eXBlc1xcbiA3ODU6XFx0XFx0XFx0XFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXFxuIDc4NjpcXHRcXHRcXHRcXHQgKiBFeDogZXhwbG9yZWQgc2FmZSBwYXRoIGNvdWxkIGhhdmUgc3RvcmVkXFxuIDc4NzpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTh9XFxuIDc4ODpcXHRcXHRcXHRcXHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XFxuIDc4OTpcXHRcXHRcXHRcXHQgKiAoYnBmX3JlZ19zdGF0ZSkgey50eXBlID0gUFRSX1RPX1NUQUNLLCAub2ZmID0gLTE2fVxcbiA3OTA6XFx0XFx0XFx0XFx0ICogc3VjaCB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LlxcbiA3OTE6XFx0XFx0XFx0XFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcXG4gNzkyOlxcdFxcdFxcdFxcdCAqL1xcbiA3OTM6XFx0XFx0XFx0XFx0aWYgKCFyZWdzYWZlKGVudiwgXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1ci1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciwgaWRtYXAsIGV4YWN0KSlcXG4gNzk1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzk2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3OTc6XFx0XFx0XFx0Y2FzZSBTVEFDS19EWU5QVFI6XFxuIDc5ODpcXHRcXHRcXHRcXHRvbGRfcmVnID0gXFx1MDAyNm9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4gNzk5OlxcdFxcdFxcdFxcdGN1cl9yZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MDA6XFx0XFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZWR5bnB0ci50eXBlICE9IGN1cl9yZWctXFx1MDAzZWR5bnB0ci50eXBlIHx8XFxuIDgwMTpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgIT0gY3VyX3JlZy1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MDguNzU2NTc4OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA4OTMwNDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YWNrIFNhZmV0eSBDaGVjayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgc3RhY2tzYWZlYCBjaGVjazpcblxuYGBgY1xuXHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gIT1cblx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuYGBgXG5cblJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgY2hlY2sgaXMgY29tcGFyaW5nIHRoZSBgc2xvdF90eXBlYCBvZiBhIHN0YWNrIHNsb3QgYmV0d2VlbiB0d28gc3RhdGVzLCBgb2xkYCBhbmQgYGN1cmAuIEZvciB0aGlzIGNoZWNrIHRvIGV2ZW4gYmUgcmVsZXZhbnQsICpib3RoKiBgb2xkYCBhbmQgYGN1cmAgbXVzdCBoYXZlIGBTVEFDS19JVEVSYCBhcyB0aGVpciBgc2xvdF90eXBlYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC5cblxuSWYgYm90aCBzdGF0ZXMgaGF2ZSBgU1RBQ0tfSVRFUmAsIHRoZW4gdGhhdCBpbXBsaWVzIGBvbGRfcmVnYCBhbmQgYGN1cl9yZWdgIGFyZSBib3RoIGluaXRpYWxpemVkIGFzIGl0ZXJhdG9ycywgdGhhbmtzIHRvIGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGBzdC1cdTAwM2V0eXBlID0gUFRSX1RPX1NUQUNLYCBhbmQgYWRkaW5nIGVpdGhlciBgTUVNX1JDVWAgb3IgYFBUUl9VTlRSVVNURURgLiBDcnVjaWFsbHksIGl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIHRob3NlIGBpdGVyYCB1bmlvbiBmaWVsZHM6IGBidGZgLCBgYnRmX2lkYCwgZXRjLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gaW5oZXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlIGR1cmluZyB0aGUgaW5pdGlhbCBpbml0aWFsaXphdGlvbiwgYXMgdGhlIGZpZWxkcyBhcmUgYWxsIHNldC5cblxuU28sIHRoZSBpc3N1ZSBpcyBhIHZlcmlmaWVyIGxvZ2ljIGJ1Zy4gSXQncyBmYWlsaW5nIHRvIGFjY3VyYXRlbHkgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFuIFJDVS1wcm90ZWN0ZWQgaXRlcmF0b3IgYW5kIGFuIHVudHJ1c3RlZCBpdGVyYXRvci4gVGhpcywgb2YgY291cnNlLCBjcmVhdGVzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBzY2VuYXJpby4gSWYgdGhlIHZlcmlmaWVyIG1pc3Rha2VubHkgYWxsb3dzIGFuIHVudHJ1c3RlZCBpdGVyYXRvciB0byBiZSB1c2VkICphZnRlciogdGhlIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVuZGVkLCB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzLiBGb3J0dW5hdGVseSwgS0FTQU4gd291bGQgY2F0Y2ggdGhhdCwgd2hpY2ggaXMgZ29vZC5cblxuQnV0IGlzIHRoZXJlIGEgcG9zc2liaWxpdHkgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCAqcmVzdWx0aW5nKiBmcm9tIHRoZSBsb2dpYyBidWc/XG5cbklmIHRoZSB2ZXJpZmllciwgZXJyb25lb3VzbHksIHRoaW5rcyBhbiB1bnRydXN0ZWQgaXRlcmF0b3IgaXMgUkNVLXByb3RlY3RlZCwgdGhhdCBhbGxvd3MgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgdG8gYmUgY2FsbGVkLiBBbmQgdGhpcyBhY2Nlc3NlcyB0aGUgdGFzayBzdHJ1Y3QuIElmIHRoYXQgYHRhc2tgIHN0cnVjdCBpcyBmcmVlZCwgaXQncyBhIFVBRi4gQnV0IFVBRnMgYXJlbid0IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGlrZSB2YXJpYWJsZXMgb24gdGhlIHN0YWNrIG5vdCBpbml0aWFsaXplZCwgb3IgaGVhcCBhbGxvY2F0aW9ucyBub3QgemVyb2VkLlxuXG5BaCwgYnV0IHdhaXQuLi4gY291bGQgYG9sZF9yZWctXHUwMDNldHlwZWAgYmUgKmNvbXBsZXRlbHkqIGRpZmZlcmVudCBpZiB0aGUgc3RhY2sgc2xvdCB3YXMgb3ZlcndyaXR0ZW4/IElmIHdlIGhhdmUgYSBgU1RBQ0tfSVRFUmAgc2xvdCwgYW5kIHNvbWV0aGluZyAqbGF0ZXIqIHdyaXRlcyBvdmVyIGl0LCB0aGVuIHllcywgdGhlIGBzbG90X3R5cGVgIHdvdWxkIGNoYW5nZS4gVGhlIHZlcmlmaWVyIHdvdWxkIGNoYW5nZSBpdCBmcm9tIGBTVEFDS19JVEVSYC5cblxuQW5kIHdoYXQgaWYgYSBCUEYgcHJvZ3JhbSBkaXJlY3RseSB3cml0ZXMgdG8gdGhhdCBzdGFjayBzbG90IGJ5dGUtYnktYnl0ZT8gSWYgdGhhdCBoYXBwZW5zIHRvIGEgYFNUQUNLX0lURVJgIHNsb3QsIHRoZSB2ZXJpZmllciB3aWxsICpjaGFuZ2UqIGl0cyBgc2xvdF90eXBlYCB0byBgU1RBQ0tfTUlTQ2Agb3IgYFNUQUNLX1pFUk9gLiBIbW0sIHRoYXQgc3VnZ2VzdHMgdGhlIGNvcmUgbGllcyBpbiBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgb3ZlcndyaXRlcyBhbmQgaG93IHRoYXQgaW1wYWN0cyB0aGUgY29tcGFyaXNvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBsb29raW5nIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoxOC44NDU4ODU4MjlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYzODpcXHRcXHQgKiByZWdfdW1heChyZWcpIGNhbid0IGJlIGJpZ2dlciB0aGFuIE1BWF9QQUNLRVRfT0ZGIHdoaWNoIGlzIDB4ZmZmZixcXG40NjM5OlxcdFxcdCAqIG90aGVyd2lzZSBmaW5kX2dvb2RfcGt0X3BvaW50ZXJzIHdvdWxkIGhhdmUgcmVmdXNlZCB0byBzZXQgcmFuZ2UgaW5mb1xcbjQ2NDA6XFx0XFx0ICogdGhhdCBfX2NoZWNrX21lbV9hY2Nlc3Mgd291bGQgaGF2ZSByZWplY3RlZCB0aGlzIHBrdCBhY2Nlc3MuXFxuNDY0MTpcXHRcXHQgKiBUaGVyZWZvcmUsIFxcXCJvZmYgKyByZWdfdW1heChyZWcpICsgc2l6ZSAtIDFcXFwiIHdvbid0IG92ZXJmbG93IHUzMi5cXG40NjQyOlxcdFxcdCAqL1xcbjQ2NDM6XFx0XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9wa3Rfb2Zmc2V0ID1cXG40NjQ0OlxcdFxcdFxcdG1heF90KHUzMiwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9wa3Rfb2Zmc2V0LFxcbjQ2NDU6XFx0XFx0XFx0ICAgICAgb2ZmICsgcmVnX3VtYXgocmVnKSArIHNpemUgLSAxKTtcXG40NjQ2OlxcdFxcbjQ2NDc6XFx0XFx0cmV0dXJuIDA7XFxuNDY0ODpcXHR9XFxuNDY0OTpcXHRcXG40NjUwOlxcdHN0YXRpYyBib29sIGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjQ2NTE6XFx0e1xcbjQ2NTI6XFx0XFx0cmV0dXJuIHJlc29sdmVfcHJvZ190eXBlKHByb2cpID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTDtcXG40NjUzOlxcdH1cXG40NjU0OlxcdFxcbjQ2NTU6XFx0LyogY2hlY2sgYWNjZXNzIHRvICdzdHJ1Y3QgYnBmX2NvbnRleHQnIGZpZWxkcy4gIFN1cHBvcnRzIGZpeGVkIG9mZnNldHMgb25seSAqL1xcbjQ2NTY6XFx0c3RhdGljIGludCBfX2NoZWNrX2N0eF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBpbnQgb2ZmLCBpbnQgc2l6ZSxcXG40NjU3OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxcbjQ2NTg6XFx0e1xcbjQ2NTk6XFx0XFx0aWYgKGVudi1cXHUwMDNlb3BzLVxcdTAwM2Vpc192YWxpZF9hY2Nlc3MgXFx1MDAyNlxcdTAwMjZcXG40NjYwOlxcdFxcdCAgICBlbnYtXFx1MDAzZW9wcy1cXHUwMDNlaXNfdmFsaWRfYWNjZXNzKG9mZiwgc2l6ZSwgdCwgZW52LVxcdTAwM2Vwcm9nLCBpbmZvKSkge1xcbjQ2NjE6XFx0XFx0XFx0LyogQSBub24gemVybyBpbmZvLmN0eF9maWVsZF9zaXplIGluZGljYXRlcyB0aGF0IHRoaXMgZmllbGQgaXMgYVxcbjQ2NjI6XFx0XFx0XFx0ICogY2FuZGlkYXRlIGZvciBsYXRlciB2ZXJpZmllciB0cmFuc2Zvcm1hdGlvbiB0byBsb2FkIHRoZSB3aG9sZVxcbjQ2NjM6XFx0XFx0XFx0ICogZmllbGQgYW5kIHRoZW4gYXBwbHkgYSBtYXNrIHdoZW4gYWNjZXNzZWQgd2l0aCBhIG5hcnJvd2VyXFxuNDY2NDpcXHRcXHRcXHQgKiBhY2Nlc3MgdGhhbiBhY3R1YWwgY3R4IGFjY2VzcyBzaXplLiBBIHplcm8gaW5mby5jdHhfZmllbGRfc2l6ZVxcbjQ2NjU6XFx0XFx0XFx0ICogd2lsbCBvbmx5IGFsbG93IGZvciB3aG9sZSBmaWVsZCBhY2Nlc3MgYW5kIHJlamVjdHMgYW55IG90aGVyXFxuNDY2NjpcXHRcXHRcXHQgKiB0eXBlIG9mIG5hcnJvd2VyIGFjY2Vzcy5cXG40NjY3OlxcdFxcdFxcdCAqL1xcbjQ2Njg6XFx0XFx0XFx0aWYgKGJhc2VfdHlwZShpbmZvLVxcdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xcbjQ2Njk6XFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZXJlZl9pZCBcXHUwMDI2XFx1MDAyNlxcbjQ2NzA6XFx0XFx0XFx0XFx0ICAgICFmaW5kX3JlZmVyZW5jZV9zdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgaW5mby1cXHUwMDNlcmVmX2lkKSkge1xcbjQ2NzE6XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJpbnZhbGlkIGJwZl9jb250ZXh0IGFjY2VzcyBvZmY9JWQuIFJlZmVyZW5jZSBtYXkgYWxyZWFkeSBiZSByZWxlYXNlZFxcXFxuXFxcIixcXG40NjcyOlxcdFxcdFxcdFxcdFxcdFxcdG9mZik7XFxuNDY3MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG40Njc0OlxcdFxcdFxcdFxcdH1cXG40Njc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuNDY3NjpcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmN0eF9maWVsZF9zaXplID0gaW5mby1cXHUwMDNlY3R4X2ZpZWxkX3NpemU7XFxuNDY3NzpcXHRcXHRcXHR9XFxuNDY3ODpcXHRcXHRcXHQvKiByZW1lbWJlciB0aGUgb2Zmc2V0IG9mIGxhc3QgYnl0ZSBhY2Nlc3NlZCBpbiBjdHggKi9cXG40Njc5OlxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X2N0eF9vZmZzZXQgXFx1MDAzYyBvZmYgKyBzaXplKVxcbjQ2ODA6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9jdHhfb2Zmc2V0ID0gb2ZmICsgc2l6ZTtcXG40NjgxOlxcdFxcdFxcdHJldHVybiAwO1xcbjQ2ODI6XFx0XFx0fVxcbjQ2ODM6XFx0XFxuNDY4NDpcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgYnBmX2NvbnRleHQgYWNjZXNzIG9mZj0lZCBzaXplPSVkXFxcXG5cXFwiLCBvZmYsIHNpemUpO1xcbjQ2ODU6XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuNDY4NjpcXHR9XFxuNDY4NzpcXHRcXG40Njg4OlxcdHN0YXRpYyBpbnQgY2hlY2tfY3R4X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuNDY4OTpcXHRcXHRcXHRcXHQgICAgaW50IG9mZiwgaW50IGFjY2Vzc19zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0LFxcbjQ2OTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbl9hY2Nlc3NfYXV4ICppbmZvKVxcbjQ2OTE6XFx0e1xcbjQ2OTI6XFx0XFx0LypcXG40NjkzOlxcdFxcdCAqIFByb2dyYW0gdHlwZXMgdGhhdCBkb24ndCByZXdyaXRlIGN0eCBhY2Nlc3NlcyBjYW4gc2FmZWx5XFxuNDY5NDpcXHRcXHQgKiBkZXJlZmVyZW5jZSBjdHggcG9pbnRlcnMgd2l0aCBmaXhlZCBvZmZzZXRzLlxcbjQ2OTU6XFx0XFx0ICovXFxuNDY5NjpcXHRcXHRib29sIHZhcl9vZmZfb2sgPSBpc192YXJfY3R4X29mZl9hbGxvd2VkKGVudi1cXHUwMDNlcHJvZyk7XFxuNDY5NzpcXHRcXHRib29sIGZpeGVkX29mZl9vayA9ICFlbnYtXFx1MDAzZW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzO1xcbjQ2OTg6XFx0XFx0aW50IGVycjtcXG40Njk5OlxcdFxcbjQ3MDA6XFx0XFx0aWYgKHZhcl9vZmZfb2spXFxuNDcwMTpcXHRcXHRcXHRlcnIgPSBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgYWNjZXNzX3NpemUsIFUxNl9NQVgsIGZhbHNlKTtcXG40NzAyOlxcdFxcdGVsc2VcXG40NzAzOlxcdFxcdFxcdGVyciA9IF9fY2hlY2tfcHRyX29mZl9yZWcoZW52LCByZWcsIGFyZ25vLCBmaXhlZF9vZmZfb2spO1xcbjQ3MDQ6XFx0XFx0aWYgKGVycilcXG40NzA1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNDcwNjpcXHRcXHRvZmYgKz0gcmVnX3VtYXgocmVnKTtcXG40NzA3OlxcdFxcbjQ3MDg6XFx0XFx0ZXJyID0gX19jaGVja19jdHhfYWNjZXNzKGVudiwgaW5zbl9pZHgsIG9mZiwgYWNjZXNzX3NpemUsIHQsIGluZm8pO1xcbjQ3MDk6XFx0XFx0aWYgKGVycilcXG40NzEwOlxcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXFxcIjsgXFxcIik7XFxuNDcxMTpcXHRcXHRyZXR1cm4gZXJyO1xcbjQ3MTI6XFx0fVxcbjQ3MTM6XFx0XFxuNDcxNDpcXHRzdGF0aWMgaW50IGNoZWNrX2Zsb3dfa2V5c19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG40NzE1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG40NzE2OlxcdFxcdFxcdFxcdFxcdCAgaW50IG9mZiwgaW50IHNpemUpXFxuNDcxNzpcXHR7XFxuNDcxODpcXHRcXHQvKiBPbmx5IGEgY29uc3RhbnQgb2Zmc2V0IGlzIGFsbG93ZWQgaGVyZTsgZm9sZCBpdCBpbnRvIG9mZi4gKi9cXG40NzE5OlxcdFxcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuNDcyMDpcXHRcXHRcXHRjaGFyIHRuX2J1Zls0OF07XFxuNDcyMTpcXHRcXG40NzIyOlxcdFxcdFxcdHRudW1fc3Rybih0bl9idWYsIHNpemVvZih0bl9idWYpLCByZWctXFx1MDAzZXZhcl9vZmYpO1xcbjQ3MjM6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpbnZhbGlkIHZhcmlhYmxlIG9mZnNldCB0byBmbG93IGtleXM6IG9mZj0lZCwgdmFyX29mZj0lc1xcXFxuXFxcIixcXG40NzI0OlxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgb2ZmLCB0bl9idWYpO1xcbjQ3MjU6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuNDcyNjpcXHRcXHR9XFxuNDcyNzpcXHRcXHRvZmYgKz0gcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2MgMCB8fFxcbjQ3MzA6XFx0XFx0ICAgICh1NjQpb2ZmICsgc2l6ZSBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpIHtcXG40NzMxOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiaW52YWxpZCBhY2Nlc3MgdG8gZmxvdyBrZXlzIG9mZj0lZCBzaXplPSVkXFxcXG5cXFwiLFxcbjQ3MzI6XFx0XFx0XFx0XFx0b2ZmLCBzaXplKTtcXG40NzMzOlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjQ3MzQ6XFx0XFx0fVxcbjQ3MzU6XFx0XFx0cmV0dXJuIDA7XFxuNDczNjpcXHR9XFxuNDczNzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MTguODQ2NzQ0OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk0OTM5NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgbWVudGFsbHkgcmVjb25zdHJ1Y3QgaXRzIHB1cnBvc2UgYW5kIHdoYXQgaXQncyBndWFyZGluZyBhZ2FpbnN0LiBGcm9tIHRoZSBuYW1lIGFsb25lLCBpdCdzIGNsZWFybHkgcmVsYXRlZCB0byBzdGFjayB3cml0ZXMsIHdoaWNoIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgd2hlbiBjb25zaWRlcmluZyBzZWN1cml0eSwgZXNwZWNpYWxseSBpbiBtZW1vcnktbWFuYWdlZCBsYW5ndWFnZXMgKG9yIGluIGNvbnRleHRzIHdoZXJlIHRoYXQncyBhbiBpc3N1ZSkuIFRoZSBcImZpeGVkIG9mZnNldFwiIHBhcnQgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBhcyBpdCBoaW50cyBhdCB0aGUgcG9zc2liaWxpdHkgb2YgYSBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgc2l6ZSBhbmQgYm91bmRzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBlbmZvcmNpbmcsIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHNpemUgY2hlY2sgaXQgZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgXCJmaXhlZCBvZmZzZXRcIiBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuIElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIGNoZWNrcz8gV2hhdCBhc3N1bXB0aW9ucyBkb2VzIGl0IG1ha2UgYWJvdXQgdGhlIHN0YWNrIGxheW91dD8gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0IHdpdGggYW55IHByaW9yIGJ1ZmZlciBhbGxvY2F0aW9ucy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgYXR0YWNrIHZlY3RvcnMgbm93IOKAkyBob3cgYW4gYXR0YWNrZXIgbWlnaHQgYXR0ZW1wdCB0byBleHBsb2l0IGEgcG90ZW50aWFsIGZsYXcsIGxpa2UgbWFuaXB1bGF0aW5nIHRoZSBvZmZzZXQgb3IgYnlwYXNzaW5nIHRoZSBjaGVjay4gSXMgdGhlIGZpeGVkIG9mZnNldCB2dWxuZXJhYmxlIHRvIGEgcmFjZSBjb25kaXRpb24/IEkgbXVzdCBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIGRpZyBpbiBhbmQgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MjIuNTQxNjg3MjA3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQyMzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTMzODQ9c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM5OC0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM5OTpzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDAwLVxcdFxcdFxcdFxcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSdyZSB3cml0aW5nIHRvICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzkyNT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTcwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozOTcxOi8qIGNoZWNrX3N0YWNrX3dyaXRlIGRpc3BhdGNoZXMgdG8gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmIG9yXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5NzItICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zOTgwPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTg4LVxcdFxcdG9mZiArPSByZWctXFx1MDAzZXZhcl9vZmYudmFsdWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM5ODk6XFx0XFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzk5MC1cXHRcXHRcXHRcXHRcXHRcXHQgIHZhbHVlX3JlZ25vLCBpbnNuX2lkeCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDk4MT1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDEwLVxcdFxcdHBvaW50ZXJfZGVzYyA9IFxcXCJzdGFjayBcXFwiO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDExOlxcdFxcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDEyLVxcdFxcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoyMi42MjMxMTgwMzZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNTIxNDc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcidzIFN0YWNrIFdyaXRlIENoZWNrKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpc3NlY3QgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBtb3JlIGFjY3VyYXRlbHksIHdoZXJlIHdlIHByZXZlbnQgdGhlIG1hZ2ljIGZyb20gZ29pbmcgaGF5d2lyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhhdCBCUEYgcHJvZ3JhbXMgYXJlIHdyaXRpbmcgdG8gdGhlIHN0YWNrIGluIGEgc2FmZSBhbmQgcHJlZGljdGFibGUgbWFubmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpeGVkIG9mZnNldHMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyBmdW5jdGlvbiBhaW1zIHRvIG1pdGlnYXRlLiBMZXQncyBzZWUgaG93IHRoZXkndmUgYXBwcm9hY2hlZCB0aGlzIGNyaXRpY2FsIGFzcGVjdCBvZiBCUEYgc2VjdXJpdHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHNvbGlkIGRlZmVuc2UgaW4gcGxhY2UsIGhvcGVmdWxseSB3ZWxsLW9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UsIGdpdmVuIGhvdyBmcmVxdWVudGx5IHRoaXMgbXVzdCBnZXQgY2FsbGVkIGR1cmluZyBwcm9ncmFtIHZlcmlmaWNhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgY2hlY2tzIG9uIHRoZSBvZmZzZXRzLCB0aGUgc2l6ZSBjaGVja3MsIGFuZCBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIG92ZXJsYXAgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgaW5uZXIgd29ya2luZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MjYuMjI4MzM1MzIxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Njk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM5OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzOTk6XFx0c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4zNDAwOlxcdFxcdFxcdFxcdFxcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSdyZSB3cml0aW5nIHRvICovXFxuMzQwMTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSxcXG4zNDAyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgb2ZmLCBpbnQgc2l6ZSwgaW50IHZhbHVlX3JlZ25vLFxcbjM0MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBpbnNuX2lkeClcXG4zNDA0OlxcdHtcXG4zNDA1OlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyOyAvKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiAqL1xcbjM0MDY6XFx0XFx0aW50IGksIHNsb3QgPSAtb2ZmIC0gMSwgc3BpID0gc2xvdCAvIEJQRl9SRUdfU0laRSwgZXJyO1xcbjM0MDc6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXFx1MDAyNmVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpW2luc25faWR4XTtcXG4zNDA4OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSBOVUxMO1xcbjM0MDk6XFx0XFx0aW50IGluc25fZmxhZ3MgPSBJTlNOX0ZfU1RBQ0tfQUNDRVNTO1xcbjM0MTA6XFx0XFx0aW50IGhpc3Rfc3BpID0gc3BpLCBoaXN0X2ZyYW1lID0gc3RhdGUtXFx1MDAzZWZyYW1lbm87XFxuMzQxMTpcXHRcXG4zNDEyOlxcdFxcdC8qIGNhbGxlciBjaGVja2VkIHRoYXQgb2ZmICUgc2l6ZSA9PSAwIGFuZCAtTUFYX0JQRl9TVEFDSyBcXHUwMDNjPSBvZmYgXFx1MDAzYyAwLFxcbjM0MTM6XFx0XFx0ICogc28gaXQncyBhbGlnbmVkIGFjY2VzcyBhbmQgW29mZiwgb2ZmICsgc2l6ZSkgYXJlIHdpdGhpbiBzdGFjayBsaW1pdHNcXG4zNDE0OlxcdFxcdCAqL1xcbjM0MTU6XFx0XFx0aWYgKCFlbnYtXFx1MDAzZWFsbG93X3B0cl9sZWFrcyBcXHUwMDI2XFx1MDAyNlxcbjM0MTY6XFx0XFx0ICAgIGJwZl9pc19zcGlsbGVkX3JlZyhcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0pIFxcdTAwMjZcXHUwMDI2XFxuMzQxNzpcXHRcXHQgICAgIWJwZl9pc19zcGlsbGVkX3NjYWxhcl9yZWcoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldKSBcXHUwMDI2XFx1MDAyNlxcbjM0MTg6XFx0XFx0ICAgIHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XFxuMzQxOTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImF0dGVtcHQgdG8gY29ycnVwdCBzcGlsbGVkIHBvaW50ZXIgb24gc3RhY2tcXFxcblxcXCIpO1xcbjM0MjA6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMzQyMTpcXHRcXHR9XFxuMzQyMjpcXHRcXG4zNDIzOlxcdFxcdGN1ciA9IGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VmcmFtZVtlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbjM0MjQ6XFx0XFx0aWYgKHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxuMzQyNTpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2Y3VyLVxcdTAwM2VyZWdzW3ZhbHVlX3JlZ25vXTtcXG4zNDI2OlxcdFxcdGlmICghZW52LVxcdTAwM2VieXBhc3Nfc3BlY192NCkge1xcbjM0Mjc6XFx0XFx0XFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcXHUwMDI2XFx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKTtcXG4zNDI4OlxcdFxcbjM0Mjk6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbjM0MzA6XFx0XFx0XFx0XFx0dTggdHlwZSA9IHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVsoc2xvdCAtIGkpICVcXG4zNDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEJQRl9SRUdfU0laRV07XFxuMzQzMjpcXHRcXG4zNDMzOlxcdFxcdFxcdFxcdGlmICh0eXBlICE9IFNUQUNLX01JU0MgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBTVEFDS19aRVJPKSB7XFxuMzQzNDpcXHRcXHRcXHRcXHRcXHRzYW5pdGl6ZSA9IHRydWU7XFxuMzQzNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNDM2OlxcdFxcdFxcdFxcdH1cXG4zNDM3OlxcdFxcdFxcdH1cXG4zNDM4OlxcdFxcbjM0Mzk6XFx0XFx0XFx0aWYgKHNhbml0aXplKVxcbjM0NDA6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub3NwZWNfcmVzdWx0ID0gdHJ1ZTtcXG4zNDQxOlxcdFxcdH1cXG4zNDQyOlxcdFxcbjM0NDM6XFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xcbjM0NDQ6XFx0XFx0aWYgKGVycilcXG4zNDQ1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzQ0NjpcXHRcXG4zNDQ3OlxcdFxcdGNoZWNrX2Zhc3RjYWxsX3N0YWNrX2NvbnRyYWN0KGVudiwgc3RhdGUsIGluc25faWR4LCBvZmYpO1xcbjM0NDg6XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7XFxuMzQ0OTpcXHRcXHRpZiAocmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4zNDUwOlxcdFxcdFxcdGJvb2wgcmVnX3ZhbHVlX2ZpdHM7XFxuMzQ1MTpcXHRcXG4zNDUyOlxcdFxcdFxcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBzaXplO1xcbjM0NTM6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xcbjM0NTQ6XFx0XFx0XFx0aWYgKHJlZ192YWx1ZV9maXRzKVxcbjM0NTU6XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcXG4zNDU2OlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xcbjM0NTc6XFx0XFx0XFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xcbjM0NTg6XFx0XFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG4zNDU5OlxcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcXG4zNDYwOlxcdFxcdH0gZWxzZSBpZiAoIXJlZyBcXHUwMDI2XFx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXFx1MDAyNlxcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcXHUwMDI2XFx1MDAyNlxcbjM0NjE6XFx0XFx0XFx0ICAgZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbjM0NjI6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcXHUwMDI2ZW52LVxcdTAwM2VmYWtlX3JlZ1swXTtcXG4zNDYzOlxcdFxcbjM0NjQ6XFx0XFx0XFx0bWVtc2V0KHRtcF9yZWcsIDAsIHNpemVvZigqdG1wX3JlZykpO1xcbjM0NjU6XFx0XFx0XFx0X19tYXJrX3JlZ19rbm93bih0bXBfcmVnLCBpbnNuLVxcdTAwM2VpbW0pO1xcbjM0NjY6XFx0XFx0XFx0dG1wX3JlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4zNDY3OlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcXG4zNDY4OlxcdFxcdH0gZWxzZSBpZiAocmVnIFxcdTAwMjZcXHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpKSB7XFxuMzQ2OTpcXHRcXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuMzQ3MDpcXHRcXHRcXHRpZiAoc2l6ZSAhPSBCUEZfUkVHX1NJWkUpIHtcXG4zNDcxOlxcdFxcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXFxcIjsgXFxcIik7XFxuMzQ3MjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgc2l6ZSBvZiByZWdpc3RlciBzcGlsbFxcXFxuXFxcIik7XFxuMzQ3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4zNDc0OlxcdFxcdFxcdH1cXG4zNDc1OlxcdFxcdFxcdGlmIChzdGF0ZSAhPSBjdXIgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xcbjM0NzY6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgc3BpbGwgcG9pbnRlcnMgdG8gc3RhY2sgaW50byBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyXFxcXG5cXFwiKTtcXG4zNDc3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM0Nzg6XFx0XFx0XFx0fVxcbjM0Nzk6XFx0XFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XFxuMzQ4MDpcXHRcXHR9IGVsc2Uge1xcbjM0ODE6XFx0XFx0XFx0dTggdHlwZSA9IFNUQUNLX01JU0M7XFxuMzQ4MjpcXHRcXG4zNDgzOlxcdFxcdFxcdHNjcnViX3NwZWNpYWxfc2xvdChzdGF0ZSwgc3BpKTtcXG4zNDg0OlxcdFxcbjM0ODU6XFx0XFx0XFx0Lyogd2hlbiB3ZSB6ZXJvIGluaXRpYWxpemUgc3RhY2sgc2xvdHMgbWFyayB0aGVtIGFzIHN1Y2ggKi9cXG4zNDg2OlxcdFxcdFxcdGlmICgocmVnIFxcdTAwMjZcXHUwMDI2IGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykpIHx8XFxuMzQ4NzpcXHRcXHRcXHQgICAgKCFyZWcgXFx1MDAyNlxcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMCkpIHtcXG4zNDg4OlxcdFxcdFxcdFxcdC8qIFNUQUNLX1pFUk8gY2FzZSBoYXBwZW5lZCBiZWNhdXNlIHJlZ2lzdGVyIHNwaWxsXFxuMzQ4OTpcXHRcXHRcXHRcXHQgKiB3YXNuJ3QgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgc3RhY2sgc2xvdCBib3VuZGFyeSxcXG4zNDkwOlxcdFxcdFxcdFxcdCAqIHNvIGl0J3Mgbm90IGEgcmVnaXN0ZXIgc3BpbGwgYW55bW9yZTsgZm9yY2VcXG4zNDkxOlxcdFxcdFxcdFxcdCAqIG9yaWdpbmF0aW5nIHJlZ2lzdGVyIHRvIGJlIHByZWNpc2UgdG8gbWFrZVxcbjM0OTI6XFx0XFx0XFx0XFx0ICogU1RBQ0tfWkVSTyBjb3JyZWN0IGZvciBzdWJzZXF1ZW50IHN0YXRlc1xcbjM0OTM6XFx0XFx0XFx0XFx0ICovXFxuMzQ5NDpcXHRcXHRcXHRcXHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHZhbHVlX3JlZ25vKTtcXG4zNDk1OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMzQ5NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM0OTc6XFx0XFx0XFx0XFx0dHlwZSA9IFNUQUNLX1pFUk87XFxuMzQ5ODpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEwOjI2LjIyODkzNDMzMVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk1Nzk5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0IHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgYHNjcnViX3NwZWNpYWxfc2xvdGAgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dlciBqdXN0IGhpdCBhIGNhbGwgdG8gYHNjcnViX3NwZWNpYWxfc2xvdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCdzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcsIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBlZGdlIGNhc2VzIG9yIGRhdGEgdmFsaWRhdGlvbiBhcm91bmQgc3BlY2lmaWMgc2xvdHMgb3IgZmllbGRzLiBJ4oCZbGwgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGl0cyBkZWZpbml0aW9uLiBUaGUgbmFtZSBzdWdnZXN0cyBpdCdzIGhhbmRsaW5nIHNvbWV0aGluZyBcInNwZWNpYWwsXCIgd2hpY2ggb2Z0ZW4gbWVhbnMgcG90ZW50aWFsbHkgdHJvdWJsZXNvbWUgb3Igc2Vuc2l0aXZlIGRhdGEgdGhhdCByZXF1aXJlcyBleHRyYSBjYXJlIGR1cmluZyBjbGVhbmluZyBvciBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIFwic3BlY2lhbFwiIGNhc2VzIGFyZSwgd2h5IHRoZXnigJlyZSBwcm9ibGVtYXRpYywgYW5kIHdoYXQgYHNjcnViX3NwZWNpYWxfc2xvdGAgaXMgZG9pbmcgdG8gcmVzb2x2ZSB0aG9zZSBpc3N1ZXMuIEnigJlsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBtaXRpZ2F0ZS4gTm93LCBsZXTigJlzIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoyOS40MjQ3MzYzMTlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzg0LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzg0OlxcdHN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbjMzODU6XFx0e1xcbjMzODY6XFx0XFx0aW50IGk7XFxuMzM4NzpcXHRcXG4zMzg4OlxcdFxcdC8qIHJlZ3VsYXIgd3JpdGUgb2YgZGF0YSBpbnRvIHN0YWNrIGRlc3Ryb3lzIGFueSBzcGlsbGVkIHB0ciAqL1xcbjMzODk6XFx0XFx0c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIudHlwZSA9IE5PVF9JTklUO1xcbjMzOTA6XFx0XFx0LyogTWFyayBzbG90cyBhcyBTVEFDS19NSVNDIGlmIHRoZXkgYmVsb25nZWQgdG8gc3BpbGxlZCBwdHIvZHlucHRyL2l0ZXIuICovXFxuMzM5MTpcXHRcXHRpZiAoaXNfc3RhY2tfc2xvdF9zcGVjaWFsKFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXSkpXFxuMzM5MjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBpKyspXFxuMzM5MzpcXHRcXHRcXHRcXHRzY3J1Yl9zcGlsbGVkX3Nsb3QoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpXSk7XFxuMzM5NDpcXHR9XFxuMzM5NTpcXHRcXG4zMzk2OlxcdC8qIGNoZWNrX3N0YWNrX3tyZWFkLHdyaXRlfV9maXhlZF9vZmYgZnVuY3Rpb25zIHRyYWNrIHNwaWxsL2ZpbGwgb2YgcmVnaXN0ZXJzLFxcbjMzOTc6XFx0ICogc3RhY2sgYm91bmRhcnkgYW5kIGFsaWdubWVudCBhcmUgY2hlY2tlZCBpbiBjaGVja19tZW1fYWNjZXNzKClcXG4zMzk4OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDoyOS40MjU2OTUxMVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTIyOTI3Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhY2sgU3RhdGUgYW5kIEl0ZXJhdG9yIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGhlcmUncyB3aGF0IEknbSB1bmRlcnN0YW5kaW5nOiBUaGUgY29kZSBpbml0aWFsbHkgc2V0cyBgc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci50eXBlID0gTk9UX0lOSVQ7YCBhbmQgc2V0cyB0aGUgYHNsb3RfdHlwZWAgdG8gYFNUQUNLX01JU0NgLiBJZiBhIGBTVEFDS19JVEVSYCBzbG90IGdldHMgb3ZlcndyaXR0ZW4sIGl0cyBgc2xvdF90eXBlYCBjaGFuZ2VzIHRvIGBTVEFDS19NSVNDYC4gVGhpcyBpcyBpbXBvcnRhbnQuIGBzdGFja3NhZmVgIHdpbGwgdGhlbiBjb21wYXJlIHRoZSBvbGQgYW5kIGN1cnJlbnQgc3RhY2sgc3RhdGVzLiBJdCBjaGVja3MgaWYgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSAhPSBjdXItXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV1gIGFuZCByZXR1cm5zIGBmYWxzZWAuIFRoaXMgbWVhbnMgdGhhdCBgc3RhY2tzYWZlYCAqb25seSogY29tcGFyZXMgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgIGlmICpib3RoKiB0aGUgb2xkIGFuZCBjdXJyZW50IHN0YXRlcyBoYXZlIGEgYFNUQUNLX0lURVJgIHNsb3QgdHlwZS5cblxuTm93LCBiZWNhdXNlIG9mIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLCBpZiBib3RoIG9sZCBhbmQgY3VycmVudCBzdGF0ZXMgaGF2ZSBgU1RBQ0tfSVRFUmAsIHRoZW4gdGhleSB3ZXJlIGJvdGggaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAuIEFuZCBgbWFya19zdGFja19zbG90c19pdGVyYCBzcGVjaWZpY2FsbHkgc2V0cyBgc3QtXHUwMDNldHlwZSA9IFBUUl9UT19TVEFDS2AgYW5kIGluaXRpYWxpemVzIHRoZSBgaXRlcmAgdW5pb24gZmllbGRzLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgbm8gd2F5IHdlJ3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgdGhhdCdzIG9mZiB0aGUgdGFibGUuXG5cblNvLCB0aGlzIGJvaWxzIGRvd24gdG8gYSB2ZXJpZmllciBsb2dpYyBidWcuIEl0J3MgbWVyZ2luZyBzdGF0ZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBgcmVnLVx1MDAzZXR5cGVgIHZhbHVlcywgbGlrZSBgUFRSX1RPX1NUQUNLIHwgTUVNX1JDVWAgd2l0aCBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAuIFRoZSBidWcgaXMgdGhhdCBpdCBvbmx5IGNoZWNrcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcyBhbmQgaWdub3JlcyB0aGUgYHJlZy1cdTAwM2V0eXBlYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZS4gSXQncyBhbGxvd2luZyBhbiB1bnRydXN0ZWQgaXRlcmF0b3IgdG8gYmUgdHJlYXRlZCBhcyBpZiBpdCdzIFJDVS1wcm90ZWN0ZWQsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgd2hlbiBgYnBmX2l0ZXJfdGFza19uZXh0YCBpcyBjYWxsZWQgb24gdGhhdCB1bnRydXN0ZWQgaXRlcmF0b3IuXG5cblNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVzZS1hZnRlci1mcmVlLCBLQVNBTiB3aWxsIGNhdGNoIHRoaXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBubyBpbmZvcm1hdGlvbiBsZWFrLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBXZSBzaG91bGQgYmUgZ29vZCB3aXRoIHdoYXQgd2UndmUgZ290LlxuXG5Pa2F5LCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBTVEFDS19JVEVSYCBpcyAqb25seSogc2V0IGJ5IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgLiBZdXAsIHRoYXQncyB0aGUgb25seSBwbGFjZS4gR29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMDozNi4zNDg2MjY4OTZaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjgwNjE1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1RBQ0tfSVRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xvZy5jPTQ5Nz1zdGF0aWMgY2hhciBzbG90X3R5cGVfY2hhcltdID0ge1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYy01MDItXFx0W1NUQUNLX0RZTlBUUl1cXHQ9ICdkJyxcXG5rZXJuZWwvYnBmL2xvZy5jOjUwMzpcXHRbU1RBQ0tfSVRFUl1cXHQ9ICdpJyxcXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cXHRbU1RBQ0tfSVJRX0ZMQUddID0gJ2YnLFxcbi0tXFxua2VybmVsL2JwZi9sb2cuYz03MTE9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL2xvZy5jOjc3NTpcXHRcXHRjYXNlIFNUQUNLX0lURVI6XFxua2VybmVsL2JwZi9sb2cuYy03NzYtXFx0XFx0XFx0Lyogb25seSBtYWluIHNsb3QgaGFzIGlkIHNldDsgc2tpcCBvdGhlcnMgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XFx0XFx0XFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzUtXFx0XFx0XFx0ICAgIHN0eXBlID09IFNUQUNLX0lSUV9GTEFHKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MDUtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTkwPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YXRlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIwMC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTU9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDktXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XFx0XFx0XFx0c2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTUxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Nj1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBCUEZfUkVHX1NJWkU7IGorKylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwNjpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTM9c3RhdGljIGludCBpc19pdGVyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzg6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM5LVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNTU9c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MTogKiAgIC0gaXRlciBzdGF0ZSAoU1RBQ0tfSVRFUikuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODItICogICAtIGlycSBmbGFnIHN0YXRlIChTVEFDS19JUlFfRkxBRylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg0PXN0YXRpYyBib29sIGlzX3N0YWNrX3Nsb3Rfc3BlY2lhbChjb25zdCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVxcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxOlxcdGNhc2UgU1RBQ0tfSVRFUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Mi1cXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwNTE9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU1LVxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNTY6XFx0dTMyIGNsZWFyX21hc2sgPSAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19JVEVSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTA6MzcuNTE2Njk0MjA4WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTgwNjYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUncyBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgc28gSSd2ZSBwaW5wb2ludGVkIHRoZSBpc3N1ZS4gSXQncyBkZWZpbml0aXZlOiBgbWFya19zdGFja19zbG90c19pdGVyYCBpcyB0aGUgc29sZSBmdW5jdGlvbiBzZXR0aW5nIHRoZSBgc2xvdF90eXBlYCB0byBgU1RBQ0tfSVRFUmAuICBGdXJ0aGVybW9yZSwgaXQgdGhvcm91Z2hseSBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyB3aXRoaW4gdGhlIGBpdGVyYCB1bmlvbi4gVGhlcmVmb3JlLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoYXQncyBvZmYgdGhlIHRhYmxlLlxuXG5UaGlzIGlzIGEgdmVyaWZpZXIgbG9naWMgYnVnIHRoYXQgdWx0aW1hdGVseSByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uICBGb3J0dW5hdGVseSwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgY2F0Y2hpbmcgdGhlIHByb2JsZW0uICBLbm93aW5nIHRoaXMgYWxsb3dzIG1lIHRvIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZSB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gYW4gdW5jaGVja2VkIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSB3aWxsIG5vdyBhZGQgYSBjb21tZW50IGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgaXNzdWUgb2JzZXJ2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTMxLCJPdXRwdXRUb2tlbnMiOjM0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEwOjQzLjQ3NDc2Mzg3NFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllcidzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNraW5nIChgc3RhY2tzYWZlYCkgZm9yIGl0ZXJhdG9yIHN0YWNrIHNsb3RzIChgU1RBQ0tfSVRFUmApLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIHZlcmlmaWVyIG9ubHkgY29tcGFyZWQgdGhlIGl0ZXJhdG9yLXNwZWNpZmljIGZpZWxkcyAobGlrZSBgYnRmYCBhbmQgYGJ0Zl9pZGApIGJ1dCBmYWlsZWQgdG8gY29tcGFyZSB0aGUgcmVnaXN0ZXIgdHlwZSAoYG9sZF9yZWctXFx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cXHUwMDNldHlwZWApLiBcXG5cXG5UaGlzIG9taXNzaW9uIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IG1lcmdlIGEgc3RhdGUgd2hlcmUgYW4gaXRlcmF0b3IgaXMgUkNVLXByb3RlY3RlZCAoYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgKSB3aXRoIGEgc3RhdGUgd2hlcmUgdGhlIGl0ZXJhdG9yIGlzIHVudHJ1c3RlZCAoYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgKS4gQXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBpbmNsdWRlZCB0ZXN0IGNhc2UsIGFuIHVucHJvdGVjdGVkIGdhcCAoZS5nLiwgdW5sb2NraW5nIGFuZCByZWxvY2tpbmcgUkNVKSBzdHJpcHMgdGhlIGBNRU1fUkNVYCBmbGFnLCBtYWtpbmcgdGhlIGl0ZXJhdG9yIHVudHJ1c3RlZC4gQnkgaW5jb3JyZWN0bHkgbWVyZ2luZyB0aGVzZSBzdGF0ZXMsIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyBhIEJQRiBwcm9ncmFtIHRvIGNhbGwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgb24gYW4gdW50cnVzdGVkIGl0ZXJhdG9yLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHdoZW4gdGhlIHRhc2sgc3RydWN0IGlzIGFjY2Vzc2VkIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbmRlZC5cXG5cXG5UaGlzIGlzIGEgdmVyaWZpZXIgbG9naWMgYnVnIHRoYXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGludm9sdmVkLCBhcyB0aGUgYGl0ZXJgIHVuaW9uIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgd2hlbmV2ZXIgYSBzbG90IGlzIG1hcmtlZCBhcyBgU1RBQ0tfSVRFUmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIncyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja2luZyAoYHN0YWNrc2FmZWApIGZvciBpdGVyYXRvciBzdGFjayBzbG90cyAoYFNUQUNLX0lURVJgKS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSB2ZXJpZmllciBvbmx5IGNvbXBhcmVkIHRoZSBpdGVyYXRvci1zcGVjaWZpYyBmaWVsZHMgKGxpa2UgYGJ0ZmAgYW5kIGBidGZfaWRgKSBidXQgZmFpbGVkIHRvIGNvbXBhcmUgdGhlIHJlZ2lzdGVyIHR5cGUgKGBvbGRfcmVnLVxcdTAwM2V0eXBlICE9IGN1cl9yZWctXFx1MDAzZXR5cGVgKS4gXFxuXFxuVGhpcyBvbWlzc2lvbiBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBtZXJnZSBhIHN0YXRlIHdoZXJlIGFuIGl0ZXJhdG9yIGlzIFJDVS1wcm90ZWN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCkgd2l0aCBhIHN0YXRlIHdoZXJlIHRoZSBpdGVyYXRvciBpcyB1bnRydXN0ZWQgKGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYCkuIEFzIGRlbW9uc3RyYXRlZCBieSB0aGUgaW5jbHVkZWQgdGVzdCBjYXNlLCBhbiB1bnByb3RlY3RlZCBnYXAgKGUuZy4sIHVubG9ja2luZyBhbmQgcmVsb2NraW5nIFJDVSkgc3RyaXBzIHRoZSBgTUVNX1JDVWAgZmxhZywgbWFraW5nIHRoZSBpdGVyYXRvciB1bnRydXN0ZWQuIEJ5IGluY29ycmVjdGx5IG1lcmdpbmcgdGhlc2Ugc3RhdGVzLCB0aGUgdmVyaWZpZXIgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBjYWxsIGBicGZfaXRlcl90YXNrX25leHRgIG9uIGFuIHVudHJ1c3RlZCBpdGVyYXRvciwgbGVhZGluZyB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB3aGVuIHRoZSB0YXNrIHN0cnVjdCBpcyBhY2Nlc3NlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgZW5kZWQuXFxuXFxuVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGJ1ZyB0aGF0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbnZvbHZlZCwgYXMgdGhlIGBpdGVyYCB1bmlvbiBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgIHdoZW5ldmVyIGEgc2xvdCBpcyBtYXJrZWQgYXMgYFNUQUNLX0lURVJgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[1] Phase: Succeeded StartedAt: 2026-08-11 05:10:54 +0000 UTC FinishedAt: 2026-08-11 05:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 05:10:54 +0000 UTC FinishedAt: 2026-08-11 05:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2] Phase: Succeeded StartedAt: 2026-08-11 05:10:54 +0000 UTC FinishedAt: 2026-08-11 08:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 05:10:54 +0000 UTC FinishedAt: 2026-08-11 08:52:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 05:10:54 +0000 UTC FinishedAt: 2026-08-11 05:11:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 05:10:54 +0000 UTC FinishedAt: 2026-08-11 05:10:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowq2qj8/series-workflowq2qj8-convert-artifact-903305613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 05:11:05 +0000 UTC FinishedAt: 2026-08-11 05:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 05:11:05 +0000 UTC FinishedAt: 2026-08-11 05:27:14 +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:*22f0cfc4-d437-4226-92b6-06acc691d37d,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-workflowq2qj8/series-workflowq2qj8-convert-artifact-903305613/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": "946a2dcd-699d-4a5c-aba9-67223d9bf805", "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-workflowq2qj8/series-workflowq2qj8-build-action-646886659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 05:11:05 +0000 UTC FinishedAt: 2026-08-11 05:27:03 +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:*22f0cfc4-d437-4226-92b6-06acc691d37d,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-workflowq2qj8/series-workflowq2qj8-convert-artifact-903305613/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": "946a2dcd-699d-4a5c-aba9-67223d9bf805", "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-workflowq2qj8/series-workflowq2qj8-build-action-646886659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 05:27:14 +0000 UTC FinishedAt: 2026-08-11 05:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 05:27:14 +0000 UTC FinishedAt: 2026-08-11 05:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 05:27:14 +0000 UTC FinishedAt: 2026-08-11 05:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 05:27:14 +0000 UTC FinishedAt: 2026-08-11 05:27:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowq2qj8/series-workflowq2qj8-convert-artifact-1228748008/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 05:27:24 +0000 UTC FinishedAt: 2026-08-11 05:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 05:27:24 +0000 UTC FinishedAt: 2026-08-11 05:29:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*946a2dcd-699d-4a5c-aba9-67223d9bf805,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-workflowq2qj8/series-workflowq2qj8-build-action-646886659/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-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 05:29:24 +0000 UTC FinishedAt: 2026-08-11 05:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 05:29:24 +0000 UTC FinishedAt: 2026-08-11 05:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 05:29:24 +0000 UTC FinishedAt: 2026-08-11 05:45:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 05:29:24 +0000 UTC FinishedAt: 2026-08-11 05:45:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*22f0cfc4-d437-4226-92b6-06acc691d37d,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-workflowq2qj8/series-workflowq2qj8-convert-artifact-1228748008/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": "a8758472-0a44-4520-a376-97c59681a74b", "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-workflowq2qj8/series-workflowq2qj8-build-action-1898572948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 05:29:24 +0000 UTC FinishedAt: 2026-08-11 05:45:21 +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:*22f0cfc4-d437-4226-92b6-06acc691d37d,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-workflowq2qj8/series-workflowq2qj8-convert-artifact-1228748008/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": "a8758472-0a44-4520-a376-97c59681a74b", "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-workflowq2qj8/series-workflowq2qj8-build-action-1898572948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 05:45:31 +0000 UTC FinishedAt: 2026-08-11 05:45:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 05:45:31 +0000 UTC FinishedAt: 2026-08-11 05:45:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 05:45:31 +0000 UTC FinishedAt: 2026-08-11 05:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 05:45:31 +0000 UTC FinishedAt: 2026-08-11 05:47:20 +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:*a8758472-0a44-4520-a376-97c59681a74b,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-workflowq2qj8/series-workflowq2qj8-build-action-1898572948/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-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 05:47:30 +0000 UTC FinishedAt: 2026-08-11 08:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 05:47:30 +0000 UTC FinishedAt: 2026-08-11 08:52:33 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*946a2dcd-699d-4a5c-aba9-67223d9bf805,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8758472-0a44-4520-a376-97c59681a74b,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-workflowq2qj8/series-workflowq2qj8-build-action-646886659/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-workflowq2qj8/series-workflowq2qj8-build-action-1898572948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 05:47:30 +0000 UTC FinishedAt: 2026-08-11 05:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 05:47:30 +0000 UTC FinishedAt: 2026-08-11 05:47:35 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq2qj8/series-workflowq2qj8-convert-artifact-3221383969/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 05:47:30 +0000 UTC FinishedAt: 2026-08-11 05:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 05:47:30 +0000 UTC FinishedAt: 2026-08-11 05:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 05:47:31 +0000 UTC FinishedAt: 2026-08-11 05:47:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 05:47:41 +0000 UTC FinishedAt: 2026-08-11 08:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qj8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_is_state_visited"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff359235-5e90-4606-93c9-6caa7aed96d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 05:47:41 +0000 UTC FinishedAt: 2026-08-11 08:52:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*946a2dcd-699d-4a5c-aba9-67223d9bf805,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8758472-0a44-4520-a376-97c59681a74b,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-workflowq2qj8/series-workflowq2qj8-build-action-646886659/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-workflowq2qj8/series-workflowq2qj8-build-action-1898572948/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-workflowq2qj8/series-workflowq2qj8-convert-artifact-3221383969/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,}