Name: series-workflowvkljc Phase: Succeeded StartedAt: 2026-09-07 08:29:57 +0000 UTC FinishedAt: 2026-09-07 12:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[0] Phase: Succeeded StartedAt: 2026-09-07 08:29:57 +0000 UTC FinishedAt: 2026-09-07 09:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 08:29:57 +0000 UTC FinishedAt: 2026-09-07 09:14:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_DEFLATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_DEFLATE" ], "series_id": "81f33a57-1fd4-43ed-a89f-b9f8958f40ca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "z_compress", "z_decompress", "pad_compress_skb", "ppp_prepare_tx_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfREVGTEFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pfY29tcHJlc3MmIzM0OywKICAgICYjMzQ7el9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAgICYjMzQ7cHBwX3ByZXBhcmVfdHhfc2tiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XG4xLiBJbiBgcHBwX2dlbmVyaWMuYzpwYWRfY29tcHJlc3Nfc2tiKClgLCBgUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXHUwMDNjPSBvbGVuYCBvciB0aGUgb3V0cHV0IGJ1ZmZlciBmaWxscyB1cCBieSByb3V0aW5nIGNvbXByZXNzZWQgb3V0cHV0IGludG8gYSBsb2NhbCBzY3JhdGNoIGJ1ZmZlciBgZGlzY2FyZF9idWZgIHRvIGtlZXAgY29tcHJlc3NvciBzdGF0ZSBzeW5jaHJvbml6ZWQgd2hpbGUgZGlzY2FyZGluZyB0aGUgb3V0cHV0LCByZXBsYWNpbmcgYnVnZ3kgYmVoYXZpb3Igd2hlcmUgYG5leHRfb3V0YCB3YXMgc2V0IHRvIE5VTEwuIGBkaXNjYXJkX2J1ZmAgaXMgd3JpdGUtb25seSBmb3IgYHpsaWJfZGVmbGF0ZWAgYW5kIG5ldmVyIHJlYWQuXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbG9naWMgaW4gUFBQIGRlZmxhdGUgKHpfY29tcHJlc3MsIHpfZGVjb21wcmVzcykgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIGFuZCBwcm9wZXJseSBoYW5kbGUgc21hbGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCB1cGRhdGVzIHBhZF9jb21wcmVzc19za2IgaW4gcHBwX2dlbmVyaWMgdG8gc2FmZWx5IHJlYWQgZGV2LVx1MDAzZW10dS4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgdmlydHVhbCBuZXR3b3JraW5nIGNvZGUgcGF0aHMgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBQUFAgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYzBhMjkwYWExNWFlNzkxZmJlNmFlOTQ2ZTBlYTE1ZTIxMjc2Zjc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwOToxMToyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5AQCAtMTg2LDcgJiM0MzsxODYsOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIHtcbiBcdHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICopIGFyZztcbiBcdGludCByLCBwcm90bywgb2ZmLCBvbGVuLCBvYXZhaWw7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkaXNjYXJkX2J1Zls2NF07XG4gXHR1bnNpZ25lZCBjaGFyICp3cHRyO1xuJiM0MztcdGJvb2wgZGlzY2FyZDtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB0aGF0IHRoZSBwcm90b2NvbCBpcyBpbiB0aGUgcmFuZ2Ugd2UgaGFuZGxlLlxuQEAgLTIwMCwyMCAmIzQzOzIwMiwyOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0aWYgKG9zaXplIFx1MDAzZSBpc2l6ZSlcbiBcdFx0b3NpemUgPSBpc2l6ZTtcbiBcbi1cdHdwdHIgPSBvYnVmO1xuLVxuIFx0Lypcbi1cdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzO1x0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlciBvbmx5IGlmXG4mIzQzO1x0ICogdGhlcmUgaXMgcm9vbSBmb3IgY29tcHJlc3NlZCBkYXRhLiAgT3RoZXJ3aXNlIGRpc2NhcmQgdGhlIGNvbXByZXNzZWRcbiYjNDM7XHQgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zXG4mIzQzO1x0ICogc3luY2hyb25pemVkIHdpdGggdGhlIHBlZXIuXG4gXHQgKi9cbi1cdHdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTtcbi1cdHdwdHJbMV0gPSBQUFBfQ09OVFJPTChycHRyKTtcbi1cdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciAmIzQzOyAyKTtcbi1cdHdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47XG4tXHRwdXRfdW5hbGlnbmVkX2JlMTYoc3RhdGUtXHUwMDNlc2Vxbm8sIHdwdHIpO1xuLVx0d3B0ciAmIzQzOz0gREVGTEFURV9PVkhEO1xuIFx0b2xlbiA9IFBQUF9IRFJMRU4gJiM0MzsgREVGTEFURV9PVkhEO1xuLVx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4tXHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IG9zaXplIC0gb2xlbjtcbiYjNDM7XHRkaXNjYXJkID0gb3NpemUgXHUwMDNjPSBvbGVuO1xuJiM0MztcdGlmIChkaXNjYXJkKSB7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4mIzQzO1x0XHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR3cHRyID0gb2J1ZjtcbiYjNDM7XHRcdHdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTtcbiYjNDM7XHRcdHdwdHJbMV0gPSBQUFBfQ09OVFJPTChycHRyKTtcbiYjNDM7XHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciAmIzQzOyAyKTtcbiYjNDM7XHRcdHdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47XG4mIzQzO1x0XHRwdXRfdW5hbGlnbmVkX2JlMTYoc3RhdGUtXHUwMDNlc2Vxbm8sIHdwdHIpO1xuJiM0MztcdFx0d3B0ciAmIzQzOz0gREVGTEFURV9PVkhEO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4mIzQzO1x0XHRvYXZhaWwgPSBvc2l6ZSAtIG9sZW47XG4mIzQzO1x0fVxuJiM0MztcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0JiM0MzsmIzQzO3N0YXRlLVx1MDAzZXNlcW5vO1xuIFxuIFx0b2ZmID0gKHByb3RvIFx1MDAzZSAweGZmKSA/IDIgOiAzO1x0Lyogc2tpcCAxc3QgcHJvdG8gYnl0ZSBpZiAwICovXG5AQCAtMjMxLDggJiM0MzsyNDIsMTAgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZixcbiBcdFx0fVxuIFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPT0gMCkge1xuIFx0XHRcdG9sZW4gJiM0Mzs9IG9hdmFpbDtcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gTlVMTDtcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IDEwMDAwMDA7XG4mIzQzO1x0XHRcdGRpc2NhcmQgPSB0cnVlO1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4mIzQzO1x0XHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyZWFrO1x0XHQvKiBhbGwgZG9uZSAqL1xuIFx0XHR9XG5AQCAtMjQyLDcgJiM0MzsyNTUsNyBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0LypcbiBcdCAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LlxuIFx0ICovXG4tXHRpZiAob2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuJiM0MztcdGlmICghZGlzY2FyZCBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX2J5dGVzICYjNDM7PSBvbGVuO1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7O1xuIFx0fSBlbHNlIHtcbkBAIC00MjAsNiAmIzQzOzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuIFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCBpc2l6ZSk7XG4gXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXHR9XG4mIzQzO1x0aWYgKG9zaXplIFx1MDAzYyBQUFBfSERSTEVOKVxuJiM0MztcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiBcbiBcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXG4gXHRzZXEgPSBnZXRfdW5hbGlnbmVkX2JlMTYoaWJ1ZiAmIzQzOyBQUFBfSERSTEVOKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTcxOSwxMCAmIzQzOzE3MTksMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuJiM0MztcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSk7XG4gXHRpbnQgbGVuO1xuLVx0aW50IG5ld19za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgJiM0MztcbiYjNDM7XHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7XG4gXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgJiM0MztcbiYjNDM7XHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzO1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBQUFBfSERSTEVOO1xuIFxuIFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX0RFRkxBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6X2NvbXByZXNzJiMzNDssCiAgICAmIzM0O3pfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDtwYWRfY29tcHJlc3Nfc2tiJiMzNDssCiAgICAmIzM0O3BwcF9wcmVwYXJlX3R4X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cdTAwM2VtdHUuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHZpcnR1YWwgbmV0d29ya2luZyBjb2RlIHBhdGhzIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgUFBQIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCmluZGV4IGQ2ZDVlNjU2YjNmNGIuLjk2ZDY4OWI5N2ZkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCkBAIC0xODYsNyAmIzQzOzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiB7CiAJc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnOwogCWludCByLCBwcm90bywgb2ZmLCBvbGVuLCBvYXZhaWw7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdOwogCXVuc2lnbmVkIGNoYXIgKndwdHI7CiYjNDM7CWJvb2wgZGlzY2FyZDsKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS4KQEAgLTIwMCwyMCAmIzQzOzIwMiwyOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLAogCWlmIChvc2l6ZSAmZ3Q7IGlzaXplKQogCQlvc2l6ZSA9IGlzaXplOwogCi0Jd3B0ciA9IG9idWY7Ci0KIAkvKgotCSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuCiYjNDM7CSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZgomIzQzOwkgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZAomIzQzOwkgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zCiYjNDM7CSAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLgogCSAqLwotCXdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTsKLQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KFBQUF9DT01QLCB3cHRyICYjNDM7IDIpOwotCXdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7Ci0Jd3B0ciAmIzQzOz0gREVGTEFURV9PVkhEOwogCW9sZW4gPSBQUFBfSERSTEVOICYjNDM7IERFRkxBVEVfT1ZIRDsKLQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7Ci0Jc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gb3NpemUgLSBvbGVuOwomIzQzOwlkaXNjYXJkID0gb3NpemUgJmx0Oz0gb2xlbjsKJiM0MzsJaWYgKGRpc2NhcmQpIHsKJiM0MzsJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQlvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJd3B0ciA9IG9idWY7CiYjNDM7CQl3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7CiYjNDM7CQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7CiYjNDM7CQlwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgJiM0MzsgMik7CiYjNDM7CQl3cHRyICYjNDM7PSBQUFBfSERSTEVOOwomIzQzOwkJcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7CiYjNDM7CQl3cHRyICYjNDM7PSBERUZMQVRFX09WSEQ7CiYjNDM7CQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7CiYjNDM7CQlvYXZhaWwgPSBvc2l6ZSAtIG9sZW47CiYjNDM7CX0KJiM0MzsJc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsOwogCSYjNDM7JiM0MztzdGF0ZS0mZ3Q7c2Vxbm87CiAKIAlvZmYgPSAocHJvdG8gJmd0OyAweGZmKSA/IDIgOiAzOwkvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi8KQEAgLTIzMSw4ICYjNDM7MjQyLDEwIEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiAJCX0KIAkJaWYgKHN0YXRlLSZndDtzdHJtLmF2YWlsX291dCA9PSAwKSB7CiAJCQlvbGVuICYjNDM7PSBvYXZhaWw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IE5VTEw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwOwomIzQzOwkJCWRpc2NhcmQgPSB0cnVlOwomIzQzOwkJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQkJb2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTsKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7CiAJCX0gZWxzZSB7CiAJCQlicmVhazsJCS8qIGFsbCBkb25lICovCiAJCX0KQEAgLTI0Miw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZiwKIAkvKgogCSAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LgogCSAqLwotCWlmIChvbGVuICZsdDsgaXNpemUgJmFtcDsmYW1wOyBvbGVuICZsdDs9IG9zaXplKSB7CiYjNDM7CWlmICghZGlzY2FyZCAmYW1wOyZhbXA7IG9sZW4gJmx0OyBpc2l6ZSAmYW1wOyZhbXA7IG9sZW4gJmx0Oz0gb3NpemUpIHsKIAkJc3RhdGUtJmd0O3N0YXRzLmNvbXBfYnl0ZXMgJiM0Mzs9IG9sZW47CiAJCXN0YXRlLSZndDtzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7OwogCX0gZWxzZSB7CkBAIC00MjAsNiAmIzQzOzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLAogCQkJICAgICAgIHN0YXRlLSZndDt1bml0LCBpc2l6ZSk7CiAJCXJldHVybiBERUNPTVBfRVJST1I7CiAJfQomIzQzOwlpZiAob3NpemUgJmx0OyBQUFBfSERSTEVOKQomIzQzOwkJcmV0dXJuIERFQ09NUF9FUlJPUjsKIAogCS8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovCiAJc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgJiM0MzsgUFBQX0hEUkxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjA0NDNhZjIzMWU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC0xNzE5LDEwICYjNDM7MTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwomIzQzOwlpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi0mZ3Q7bXR1KTsKIAlpbnQgbGVuOwotCWludCBuZXdfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47Ci0JaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzOwogCQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47CiAKIAlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5emthbGxlciBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgUFBQIGNvZGUuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jYCBhbmQgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYC4KCkZpcnN0LCBpbiBgcHBwX2RlZmxhdGUuY2AsIHRoZSBmb2N1cyBpcyBvbiBgel9jb21wcmVzcygpYCBhbmQgYHpfZGVjb21wcmVzcygpYC4gSSBzZWUgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGB6X2NvbXByZXNzKClgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHNtYWxsIG91dHB1dCBzaXplcyAoYG9zaXplYCkuIFRoZSBvbGQgY29kZSAoYHN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gTlVMTDsgc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gMTAwMDAwMDtgKSBsb29rcyBkaWNleS4gSWYgemxpYiB0cmllcyB0byB3cml0ZSB0byBhIG51bGwgcG9pbnRlciB0aGF0JiMzOTtzIGJhZCBuZXdzISBUaGUgZml4IG1ha2VzIHN1cmUgd2UgZG9uJiMzOTt0IGVuZCB1cCB3cml0aW5nIHRvIG51bGwuIEluIGB6X2RlY29tcHJlc3MoKWAsIGEgbmV3IGNoZWNrIGBpZiAob3NpemUgJmx0OyBQUFBfSERSTEVOKSByZXR1cm4gREVDT01QX0VSUk9SO2AgaGFzIGJlZW4gYWRkZWQsIHdoaWNoIHNlZW1zIHNlbnNpYmxlIHRvIHByZXZlbnQgYW4gZXJyb3IgdGhlcmUuCgpUaGVuLCBtb3ZpbmcgdG8gYHBwcF9nZW5lcmljLmNgLCB0aGUgcGF0Y2ggaW52b2x2ZXMgYHBhZF9jb21wcmVzc19za2IoKWAsIHdoZXJlIHRoZXkmIzM5O3JlIG5vdyByZWFkaW5nIGBSRUFEX09OQ0UoZGV2LSZndDttdHUpYC4gTm90aGluZyBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIG9idmlvdXNseSBwcm9ibGVtYXRpYyBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgYW4gZXllIG9uIHdoYXQgaXMgYmVpbmcgdXBkYXRlZC4KCk5vdywgdG8gZ2l2ZSB0aGlzIGEgcHJvcGVyIGV2YWx1YXRpb24sIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHN5bWJvbHMuIExldCYjMzk7cyBzZWUgaG93IGBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZ2VuZXJpY2AgYXJlIGNvbmZpZ3VyZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCB1c2UgbXkgdG9vbHMgdG8gc2VlIHdoYXQgaXMgZW5hYmxlZCwgYW5kIHdoZXJlIHRoZXNlIGNvbXBvbmVudHMgc2l0IGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUF9ERUZMQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM3PWNvbmZpZyBQUFBfQlNEQ09NUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTU0LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSAmIzQzOz0gYnNkX2NvbXAub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSAmIzQzOz0gcHBwX2RlZmxhdGUub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19QUFBfTVBQRSkgJiM0Mzs9IHBwcF9tcHBlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQUFAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlc2UgUFBQIGNvbXBvbmVudHMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFBQUCBzdWJzeXN0ZW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEkgbmVlZCB0byBzZWUgaG93IGBQUFBgLCBgUFBQX0RFRkxBVEVgLCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgc2V0IHVwLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoaWNoIG90aGVyIG9wdGlvbnMgZW5hYmxlIHRoZXNlLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHdoZXJlIGFyZSB0aGUgY29uZGl0aW9uYWwgYnVpbGRzIGhhcHBlbmluZz8gR290dGEgdHJhY2UgZG93biB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHBhdGh3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzIGNvbXBsZXRlbHkuIFRoaXMgaXMgdGhlIGJlZHJvY2sgdG8gdW5kZXJzdGFuZGluZyBhbmQsIGlmIG5lY2Vzc2FyeSwgbW9kaWZ5aW5nIHRoZXNlIFBQUCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIFBQUF9CU0RDT01QXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcbiAgNDE6XHRcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xuICA0MjpcdFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXG4gIDQzOlx0XHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXG4gIDQ0Olx0XHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbiYjMzk7dCBzdXBwb3J0IGl0LFxuICA0NTpcdFx0ICBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuXG4gIDQ2Olx0XG4gIDQ3Olx0XHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7LFxuICA0ODpcdFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcbiAgNDk6XHRcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxuICA1MDpcdFxuICA1MTpcdFx0ICBOb3RlIHRoYXQgdGhlIEJTRCBjb21wcmVzc2lvbiBjb2RlIHdpbGwgYWx3YXlzIGJlIGNvbXBpbGVkIGFzIGFcbiAgNTI6XHRcdCAgbW9kdWxlOyBpdCBpcyBjYWxsZWQgYnNkX2NvbXAgYW5kIHdpbGwgc2hvdyB1cCBpbiB0aGUgZGlyZWN0b3J5XG4gIDUzOlx0XHQgIG1vZHVsZXMgb25jZSB5b3UgaGF2ZSBzYWlkIFwmIzM0O21ha2UgbW9kdWxlc1wmIzM0Oy4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTQ6XHRcbiAgNTU6XHRjb25maWcgUFBQX0RFRkxBVEVcbiAgNTY6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDU3Olx0XHRzZWxlY3QgWkxJQl9JTkZMQVRFXG4gIDU4Olx0XHRzZWxlY3QgWkxJQl9ERUZMQVRFXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzIHRoZVxuICA2MTpcdFx0ICBEZWZsYXRlIGFsZ29yaXRobSAodGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgZ3ppcCB1c2VzKSB0byBjb21wcmVzc1xuICA2MjpcdFx0ICBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZS4gIFRoZSBtYWNoaW5lIGF0IHRoZVxuICA2MzpcdFx0ICBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgNjQ6XHRcdCAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuICBFdmVuIGlmXG4gIDY1Olx0XHQgIHRoZXkgZG9uJiMzOTt0IHN1cHBvcnQgaXQsIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgUFBQX0ZJTFRFUlxuICA3MDpcdFx0Ym9vbCBcJiMzNDtQUFAgZmlsdGVyaW5nXCYjMzQ7XG4gIDcxOlx0XHRoZWxwXG4gIDcyOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBmaWx0ZXIgdGhlIHBhY2tldHMgcGFzc2luZyBvdmVyXG4gIDczOlx0XHQgIFBQUCBpbnRlcmZhY2VzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hpY2ggcGFja2V0cyBjb3VudCBhc1xuICA3NDpcdFx0ICBhY3Rpdml0eSAoaS5lLiB3aGljaCBwYWNrZXRzIHdpbGwgcmVzZXQgdGhlIGlkbGUgdGltZXIgb3IgYnJpbmcgdXBcbiAgNzU6XHRcdCAgYSBkZW1hbmQtZGlhbGVkIGxpbmspIGFuZCB3aGljaCBwYWNrZXRzIGFyZSB0byBiZSBkcm9wcGVkIGVudGlyZWx5LlxuICA3NjpcdFx0ICBZb3UgbmVlZCB0byBzYXkgWSBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgcGFzcy1maWx0ZXIgYW5kXG4gIDc3Olx0XHQgIGFjdGl2ZS1maWx0ZXIgb3B0aW9ucyB0byBwcHBkLlxuICA3ODpcdFxuICA3OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBgcHBwX2RlZmxhdGUuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGFyZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGlzIFBQUCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgZnJvbSB0aGUgemxpYiBsaWJyYXJ5IGFyZSBpbnZva2VkIHdpdGhpbiBgcHBwX2RlZmxhdGUuY2AuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGxpbmcgc3RydWN0dXJlLCB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQsIGFuZCB0aGUgb3ZlcmFsbCB3b3JrZmxvdy4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUgdGhhdCBjb250cmlidXRlIHRvIHRoZSBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIHByb2Nlc3Nlcy4gS25vd2luZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pfY29tcHJlc3N8el9kZWNvbXByZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jPTQzPXN0YXRpYyBpbnRcdHpfZGVjb21wX2luaXQodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDUtXHRcdFx0XHQgICBpbnQgdW5pdCwgaW50IGhkcmxlbiwgaW50IG1ydSwgaW50IGRlYnVnKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQ2OnN0YXRpYyBpbnRcdHpfY29tcHJlc3Modm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKnJwdHIsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00Ny1cdFx0XHRcdHVuc2lnbmVkIGNoYXIgKm9idWYsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NDk9c3RhdGljIHZvaWRcdHpfaW5jb21wKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgaWNudCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1MDpzdGF0aWMgaW50XHR6X2RlY29tcHJlc3Modm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01MS1cdFx0XHRcdGludCBpc2l6ZSwgdW5zaWduZWQgY2hhciAqb2J1ZiwgaW50IG9zaXplKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz0xNjU9c3RhdGljIHZvaWQgel9jb21wX3Jlc2V0KHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0xNzMtLyoqXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzoxNzQ6ICpcdHpfY29tcHJlc3MgLSBjb21wcmVzcyBhIFBQUCBwYWNrZXQgd2l0aCBEZWZsYXRlIGNvbXByZXNzaW9uLlxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTc1LSAqXHRAYXJnOlx0cG9pbnRlciB0byBwcml2YXRlIHN0YXRlIGZvciB0aGUgY29tcHJlc3NvclxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTE4My0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjE4NDpzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTg1LVx0ICAgICAgIGludCBpc2l6ZSwgaW50IG9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTIzOS1cdFx0XHRcdHByaW50ayhLRVJOX0VSUlxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6MjQwOlx0XHRcdFx0ICAgICAgIFwmIzM0O3pfY29tcHJlc3M6IGRlZmxhdGUgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHIpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMjQxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jPTM5Mz1zdGF0aWMgdm9pZCB6X2RlY29tcF9yZXNldCh2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDAxLS8qKlxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDAyOiAqXHR6X2RlY29tcHJlc3MgLSBkZWNvbXByZXNzIGEgRGVmbGF0ZS1jb21wcmVzc2VkIHBhY2tldC5cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQwMy0gKlx0QGFyZzpcdHBvaW50ZXIgdG8gcHJpdmF0ZSBzdGF0ZSBmb3IgdGhlIGRlY29tcHJlc3NvclxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQyMS0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQyMjpzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQyMy1cdFx0IHVuc2lnbmVkIGNoYXIgKm9idWYsIGludCBvc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00MzEtXHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQzMjpcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogc2hvcnQgcGt0ICglZClcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00MzMtXHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQsIGlzaXplKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NDItXHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQ0MzpcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQ0NC1cdFx0XHQgICAgICAgc3RhdGUtXHUwMDNldW5pdCwgc2VxLCBzdGF0ZS1cdTAwM2VzZXFubyBcdTAwMjYgMHhmZmZmKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NzUtXHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDc2Olx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IGluZmxhdGUgcmV0dXJuZWQgJWQgKCVzKVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQ3Ny1cdFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCByLCAoc3RhdGUtXHUwMDNlc3RybS5tc2c/IHN0YXRlLVx1MDAzZXN0cm0ubXNnOiBcJiMzNDtcJiMzNDspKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01MDEtXHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTAyOlx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTAzLVx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTUwOS1cdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTEwOlx0XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O3pfZGVjb21wcmVzcyVkOiBkaWRuJiMzOTt0IGdldCBwcm90b1xcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTUxMS1cdFx0XHQgICAgICAgc3RhdGUtXHUwMDNldW5pdCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NTg1PXN0YXRpYyBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZSA9IHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01OTAtXHQuY29tcF9yZXNldCA9XHRcdHpfY29tcF9yZXNldCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjU5MTpcdC5jb21wcmVzcyA9XHRcdHpfY29tcHJlc3MsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01OTItXHQuY29tcF9zdGF0ID1cdFx0el9jb21wX3N0YXRzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU5Ni1cdC5kZWNvbXBfcmVzZXQgPVx0XHR6X2RlY29tcF9yZXNldCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjU5NzpcdC5kZWNvbXByZXNzID1cdFx0el9kZWNvbXByZXNzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTk4LVx0LmluY29tcCA9XHRcdHpfaW5jb21wLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jPTYwMz1zdGF0aWMgc3RydWN0IGNvbXByZXNzb3IgcHBwX2RlZmxhdGVfZHJhZnQgPSB7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjA4LVx0LmNvbXBfcmVzZXQgPVx0XHR6X2NvbXBfcmVzZXQsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo2MDk6XHQuY29tcHJlc3MgPVx0XHR6X2NvbXByZXNzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjEwLVx0LmNvbXBfc3RhdCA9XHRcdHpfY29tcF9zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy02MTQtXHQuZGVjb21wX3Jlc2V0ID1cdFx0el9kZWNvbXBfcmVzZXQsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo2MTU6XHQuZGVjb21wcmVzcyA9XHRcdHpfZGVjb21wcmVzcyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTYxNi1cdC5pbmNvbXAgPVx0XHR6X2luY29tcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgYHBhZF9jb21wcmVzc19za2JgIGluIFBQUCBHZW5lcmljIERyaXZlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgdGFzayBhdCBoYW5kIGludm9sdmVzIG5ldHdvcmsgY29tcHJlc3Npb24sIGFuZCBnaXZlbiB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlbHkgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGZyYW1pbmcsIG15IGludHVpdGlvbiBpcyBsZWFkaW5nIG1lIGRpcmVjdGx5IHRvIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBsYXllci4gU28sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgcHBwX2dlbmVyaWMuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9wcHBgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRhcmdldGluZyB0aGUgYHBhZF9jb21wcmVzc19za2JgIGZ1bmN0aW9uLiBUaGlzIG5hbWluZyBzdWdnZXN0cyBpdCBoYW5kbGVzIHBhZGRpbmcgb3IgY29tcHJlc3Npb24gb2Ygc29ja2V0IGJ1ZmZlciBza2JzLCB3aGljaCwgaW4gYSBQUFAgY29udGV4dCwgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBvcHRpbWl6aW5nIG5ldHdvcmsgdHJhbnNtaXNzaW9uLCBwZXJoYXBzIGZvciBsb3dlciBiYW5kd2lkdGggb3IgZXJyb3ItcHJvbmUgbGlua3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIFBQUCBkYXRhIGZsb3cgYW5kIGhvdyBpdCBpbXBhY3RzIHBhY2tldCBzaXplLCBwZXJmb3JtYW5jZSwgYW5kIG1heWJlIGV2ZW4gc2VjdXJpdHkuIEkgc3VzcGVjdCB1bmRlcnN0YW5kaW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdGhlIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTcxNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE3MTg6cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNzE5LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzc4PXBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODcyLVx0XHR9XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxODczOlx0XHRuZXdfc2tiID0gcGFkX2NvbXByZXNzX3NrYihwcHAsIHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODc0LVx0XHRpZiAoIW5ld19za2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gUFBQIENvbXByZXNzaW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHBhZF9jb21wcmVzc19za2JgIHdpdGhpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzICp1c2VkKi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbXByZXNzaW9uIHdpdGhpbiB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBzdWJ0bGUgaGFwcGVuaW5nIHRoYXQgaXMgY29udHJpYnV0aW5nIHRvIGFuIGlzc3VlIEkmIzM5O3ZlIGJlZW4gbXVsbGluZyBvdmVyLCBhbmQgdGhpcyBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCBjbHVlcy4gCgpJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgcGFkX2NvbXByZXNzX3NrYmAuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBldmFsdWF0ZSBpdHMgaW1wYWN0LiBJJiMzOTttIGltYWdpbmluZyB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgcGFkZGluZyBtYW5pcHVsYXRpb24gZ29pbmcgb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgU0tCIGl0c2VsZiBhbmQgaG93IGNvbXByZXNzZWQgZGF0YSBpcyBpbnNlcnRlZCBvciBoYW5kbGVkLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBlbnN1cmluZyBhbGlnbm1lbnQsIGRlYWxpbmcgd2l0aCBoZWFkZXIgbGVuZ3Rocywgb3IgcGVyaGFwcyBldmVuIGhhbmRsaW5nIGRhdGEgYm91bmRhcmllcyBpbiB0aGUgcGFja2V0LiBJ4oCZbSBleHBlY3RpbmcgYSBmZXcga2V5IGNhbGxlciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgcmVzcG9uc2libGUgZm9yIHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzdGFnZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQsIGhvdyBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYnkgdGhlIGNvZGUuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBteSBodW5jaCBpcyBjb3JyZWN0LiBJIHNob3VsZCBhbHNvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIGhpZGRlbiB3aXRoaW4gdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MTU6XHR9XG4xNzE2Olx0XG4xNzE3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXG4xNzE4Olx0cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4xNzE5Olx0e1xuMTcyMDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbjE3MjE6XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuMTcyMjpcdFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXHUwMDNlbXR1KTtcbjE3MjM6XHRcdGludCBsZW47XG4xNzI0Olx0XHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7XG4xNzI1Olx0XHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4xNzI2Olx0XHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzO1xuMTcyNzpcdFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBQUFBfSERSTEVOO1xuMTcyODpcdFxuMTcyOTpcdFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbjE3MzA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNzMxOlx0XG4xNzMyOlx0XHRuZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7XG4xNzMzOlx0XHRpZiAoIW5ld19za2IpIHtcbjE3MzQ6XHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3MzU6XHRcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBubyBtZW1vcnkgKGNvbXAgcGt0KVxcblwmIzM0Oyk7XG4xNzM2Olx0XHRcdHJldHVybiBOVUxMO1xuMTczNzpcdFx0fVxuMTczODpcdFx0aWYgKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gXHUwMDNlIFBQUF9IRFJMRU4pXG4xNzM5Olx0XHRcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTtcbjE3NDA6XHRcbjE3NDE6XHRcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXG4xNzQyOlx0XHRsZW4gPSBwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcHJlc3MocHBwLVx1MDAzZXhjX3N0YXRlLCBza2ItXHUwMDNlZGF0YSAtIDIsXG4xNzQzOlx0XHRcdFx0XHQgICBuZXdfc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4gJiM0MzsgMixcbjE3NDQ6XHRcdFx0XHRcdCAgIGNvbXByZXNzb3Jfc2tiX3NpemUpO1xuMTc0NTpcdFx0aWYgKGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ0NQX1VQKSkge1xuMTc0NjpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuMTc0NzpcdFx0XHRza2IgPSBuZXdfc2tiO1xuMTc0ODpcdFx0XHRza2JfcHV0KHNrYiwgbGVuKTtcbjE3NDk6XHRcdFx0c2tiX3B1bGwoc2tiLCAyKTtcdC8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqL1xuMTc1MDpcdFx0fSBlbHNlIGlmIChsZW4gPT0gMCkge1xuMTc1MTpcdFx0XHQvKiBkaWRuJiMzOTt0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqL1xuMTc1MjpcdFx0XHRjb25zdW1lX3NrYihuZXdfc2tiKTtcbjE3NTM6XHRcdFx0bmV3X3NrYiA9IHNrYjtcbjE3NTQ6XHRcdH0gZWxzZSB7XG4xNzU1Olx0XHRcdC8qXG4xNzU2Olx0XHRcdCAqIChsZW4gXHUwMDNjIDApXG4xNzU3Olx0XHRcdCAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZFxuMTc1ODpcdFx0XHQgKiBmcmFtZXMuICBUaGUgY29tcHJlc3NvciB3aWxsIHJldHVybiAtMSBpZiB3ZVxuMTc1OTpcdFx0XHQgKiBzaG91bGQgZHJvcCB0aGUgZnJhbWUuICBXZSBjYW5ub3Qgc2ltcGx5IHRlc3RcbjE3NjA6XHRcdFx0ICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZVxuMTc2MTpcdFx0XHQgKiB0aGUgc2FtZSBudW1iZXIuXG4xNzYyOlx0XHRcdCAqL1xuMTc2MzpcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuMTc2NDpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXG5cJiMzNDspO1xuMTc2NTpcdFx0XHRjb25zdW1lX3NrYihuZXdfc2tiKTtcbjE3NjY6XHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4xNzY3Olx0XHR9XG4xNzY4Olx0XHRyZXR1cm4gbmV3X3NrYjtcbjE3Njk6XHR9XG4xNzcwOlx0XG4xNzcxOlx0LypcbjE3NzI6XHQgKiBDb21wcmVzcyBhbmQgcHJlcGFyZSB0byBzZW5kIGEgZnJhbWUuXG4xNzczOlx0ICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aC5cbjE3NzQ6XHQgKiBSZXR1cm5zIDEgaWYgdGhlIHNrYiB3YXMgY29uc3VtZWQsIDAgaWYgaXQgY2FuIGJlIHBhc3NlZCB0byBwcHBfcHVzaCgpLlxuMTc3NTpcdCAqIEBwc2tiIGlzIHVwZGF0ZWQgaWYgYSBjb21wcmVzc29yIGlzIGluIHVzZS5cbjE3NzY6XHQgKi9cbjE3Nzc6XHRzdGF0aWMgaW50XG4xNzc4Olx0cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuMTc3OTpcdHtcbjE3ODA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4xNzgxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XG4xNzgyOlx0XHRpbnQgcHJvdG8gPSBQUFBfUFJPVE8oc2tiKTtcbjE3ODM6XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuMTc4NDpcdFx0aW50IGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHNuaXBwZXQ6CgoqKkRlY29tcHJlc3Npb24gYW5kIENvbXByZXNzaW9uIFdvcmtmbG93IGluIFBQUCB3aXRoIERlZmxhdGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBEZWZsYXRlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcGxheXMgb3V0IGluIFBQUC4gSSBzZWUgYHBhZF9jb21wcmVzc19za2JgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcyBieSBjYWxsaW5nIGBwcHAtJmd0O3hjb21wLSZndDtjb21wcmVzc2AuIFdoZW4gd2UmIzM5O3JlIHVzaW5nIERlZmxhdGUsIHRoYXQgYWN0dWFsbHkgcmVzb2x2ZXMgdG8gYHpfY29tcHJlc3NgLiBOb3csIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgel9kZWNvbXByZXNzYCBpcyB0aGUgY291bnRlcnBhcnQsIGhhbmRsaW5nIHRoZSB1bnBhY2tpbmcgc2lkZSBvZiB0aGluZ3Mgd2hlbiByZWNlaXZpbmcgZnJhbWVzLCBzcGVjaWZpY2FsbHkgZnJvbSBlaXRoZXIgdGhlIGdlbmVyaWMgUFBQIGludGVyZmFjZSBvciBhc3luY2hyb25vdXMvc3luY2hyb25vdXMgVFRZIFBQUCBjb25uZWN0aW9ucy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIHN0cnVjdHVyZSBvZiB0aGUgYGRlY29tcHJlc3NgIGZ1bmN0aW9uLiBUbyBmdWxseSBncmFzcCB0aGlzIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gd2hlcmUgYGRlY29tcHJlc3NgICh3aGljaCBpcyBgel9kZWNvbXByZXNzYCBpbiB0aGlzIGNhc2UpIGlzIGNhbGxlZC4gSXQgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIERlZmxhdGUgZGVjb21wcmVzc2lvbiBzaWRlIG9mIFBQUCBvcGVyYXRpb25zLiBXaGVyZSBpcyBpdCBiZWluZyBpbml0aWF0ZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWRlY29tcHJlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjU0Nz1wcHBfZGVjb21wcmVzc19mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjU3Ny1cdFx0LyogdGhlIGRlY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIHRoZSBBL0MgYnl0ZXMgaW4gdGhlIGhkciAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjU3ODpcdFx0bGVuID0gcHBwLVx1MDAzZXJjb21wLVx1MDAzZWRlY29tcHJlc3MocHBwLVx1MDAzZXJjX3N0YXRlLCBza2ItXHUwMDNlZGF0YSAtIDIsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNTc5LVx0XHRcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOyAyLCBucy1cdTAwM2VkYXRhLCBvYnVmZl9zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUFBQIEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBQUFAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBQUFAgaXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nIGRyaXZlciBpbiBMaW51eCwgZXNzZW50aWFsbHkgYSB2aXJ0dWFsIGRldmljZSwgYWNjZXNzaWJsZSB2aWEgYC9kZXYvcHBwYCBhbmQgaW9jdGxzIGxpa2UgYFBQUElPQ1NDT01QUkVTU2AsIHdoaWNoIG1ha2VzIGl0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBHb29kLCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgZGVzY3JpcHRpb25zIGZvciBgL2Rldi9wcHBgIGFuZCB0aG9zZSBpb2N0bHM7IHRoYXQmIzM5O3MgYSBrZXkgZmlyc3Qgc3RlcC4gU2luY2UgaXQmIzM5O3MgYSB2aXJ0dWFsIGRldmljZSwgdGhpcyBzaG91bGQgYmUgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBhbmQgaW9jdGxzIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBzbyB0aGF0JiMzOTtzIGEgYmlnIHBsdXMuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgYFdvcnRoRnV6emluZ2AuIEFoLCBleGNlbGxlbnQhIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHRvdWNoaW5nIGV4ZWN1dGFibGUgY29kZSBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIHNwZWNpZmljYWxseSwgZm9jdXNpbmcgb24gYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYC4gQWxzbyBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgIHdpdGggYHBhZF9jb21wcmVzc19za2JgLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeSwgYW5kIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBmaXhlcyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZHMgYW5kIGNvbXByZXNzZWQgb3V0cHV0IGRpc2NhcmRpbmcgaW4gYHpfY29tcHJlc3NgL2B6X2RlY29tcHJlc3NgIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IGZ1enppbmcgd2lsbCBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcgY29uZmlybXMgdGhhdCEKCkZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcmlnaHQuIFdlIGhhdmUgYFBQUGAgYW5kIGBQUFBfREVGTEFURWAsIGdvb2QuIEkmIzM5O2xsIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgc2VhcmNoIGZvciBgQ09ORklHX1BQUGAgaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB3aWxsIHRlbGwgbWUgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Njpjb25maWcgUFBQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM1PWlmIFBQUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzYtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzozNzpjb25maWcgUFBQX0JTRENPTVBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTU0LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNjgtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OTpjb25maWcgUFBQX0ZJTFRFUlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNzAtXHRib29sIFwmIzM0O1BQUCBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04MC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjgxOmNvbmZpZyBQUFBfTVBQRVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODItXHR0cmlzdGF0ZSBcJiMzNDtQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbilcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05MS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjkyOmNvbmZpZyBQUFBfTVVMVElMSU5LXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7UFBQIG11bHRpbGluayBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTAzLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTA0OmNvbmZpZyBQUFBPQVRNXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBBVE1cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTM6Y29uZmlnIFBQUE9YXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTQtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE1LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTE2OmNvbmZpZyBQUFBPRVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE3LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgRXRoZXJuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMjc9Y2hvaWNlXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTM4LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTM5OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQwLVx0Ym9vbCBcJiMzNDsxIGJpdCAoMiBidWNrZXRzKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQxLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQyOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDsyIGJpdHMgKDQgYnVja2V0cylcJiMzNDtcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0NC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE0NTpjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7NCBiaXRzICgxNiBidWNrZXRzKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ3LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ4OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDs4IGJpdHMgKDI1NiBidWNrZXRzKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1MT1lbmRjaG9pY2VcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1Mzpjb25maWcgUFBQT0VfSEFTSF9CSVRTXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTQtXHRpbnRcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjAtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNjE6Y29uZmlnIFBQVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2Mi1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIElQdjQgKFBQVFApXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTcyLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTczOmNvbmZpZyBQUFBPTDJUUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgTDJUUFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE4MT1pZiBUVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE4Mzpjb25maWcgUFBQX0FTWU5DXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODQtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk1LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTk2OmNvbmZpZyBQUFBfU1lOQ19UVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIGZvciBQUFAmIzM5O3MgUGFyZW50IERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgUFBQIHN0YW5kcyBpbiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldHdvcmtpbmcgZHJpdmVycyBhbmQgdGhlaXIgYnVpbGQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgcGFyZW50IGRpcmVjdGl2ZXMsIG9yIGFueXRoaW5nIHRoYXQgZXhwbGljaXRseSBsaW5rcyBQUFAgdG8gYW5vdGhlciBtb2R1bGUgb3IgZmVhdHVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgUFBQIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBCYXNpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgbGluZWFnZSBpbiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipkcml2ZXJzL25ldC9wcHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIGFyb3VuZCBsaW5lIDUyOC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIG9wdGlvbiByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaGlkaW5nIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzUxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQUFAgRGVmbGF0ZSBDb21wcmVzc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBQUFBgIGFuZCBgUFBQX0RFRkxBVEVgIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYFBQUGAgaXMgZ29pbmcgdG8gdXNlIFNMSEMsIGJ1dCBgUFBQX0RFRkxBVEVgIGlzIHNwZWNpZmljYWxseSBzZXQgdXAgdG8gdXRpbGl6ZSBgWkxJQl9JTkZMQVRFYCBhbmQgYFpMSUJfREVGTEFURWAuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgc2V0dXAuCgpGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jYCBhcmUgdGhlIG1haW4gc3VzcGVjdHMuIEkgYWxzbyBzZWUgdGhhdCBgcGFkX2NvbXByZXNzX3NrYmAsIGEgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYCwgYWxvbmcgd2l0aCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IHN1Y2ggYXMgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIGFuZCBgcHBwX2RlY29tcHJlc3NfZnJhbWVgLCBhcmUgcG90ZW50aWFsbHkgaW1wYWN0ZWQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4gQXJlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2Agc3RhdGljLCBleHBvcnRlZCwgb3Igc29tZXRoaW5nIGVsc2U/IEkgY2hlY2sgYHBwcF9kZWZsYXRlLmNgIGFuZCBjb25maXJtIHRoZXkgYXJlIGluZGVlZCBkZWNsYXJlZCBhcyBgc3RhdGljIGludCB6X2NvbXByZXNzKC4uLilgIGFuZCBgc3RhdGljIGludCB6X2RlY29tcHJlc3MoLi4uKWAuIEhvbGQgb24gYSBtaW51dGUuLi5ldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMgd2l0aGluIHRoZSAuYyBmaWxlLCB0aGUgTGludXgga2VybmVsIHN0aWxsIGdlbmVyYXRlcyBzeW1ib2xzIGZvciB0aGVtIGluIGB2bWxpbnV4YCBhbmQgYGthbGxzeW1zYCBpZiB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhleSBpbmxpbmVkPyBJIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgcmVmZXJlbmNlZCB2aWEgc3RydWN0IGNvbXByZXNzb3IgZnVuY3Rpb24gcG9pbnRlcnMgbGlrZSBgcHBwX2RlZmxhdGUuY29tcHJlc3MgPSB6X2NvbXByZXNzYCBhbmQgYHBwcF9kZWZsYXRlLmRlY29tcHJlc3MgPSB6X2RlY29tcHJlc3NgLCB3aGljaCBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLiBBaGEhIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gZm9yIGBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZGVmbGF0ZV9kcmFmdGAsIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgb3V0LW9mLWxpbmUgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBMb29raW5nIGF0IGBwYWRfY29tcHJlc3Nfc2tiYCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljIGlubGluZWAgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYCwgYW5kIGNhbGxlZCBieSBgcHBwX3ByZXBhcmVfdHhfc2tiYCBhbmQgYHBwcF9kZWNvbXByZXNzX2ZyYW1lYC4gSSBzaG91bGQgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHBhZF9jb21wcmVzc19za2JgIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYHBwcF9nZW5lcmljLmNgIGFzIGEgZmluYWwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzE3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTcxODpwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE3MTkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3Nzg9cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4NzItXHRcdH1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE4NzM6XHRcdG5ld19za2IgPSBwYWRfY29tcHJlc3Nfc2tiKHBwcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4NzQtXHRcdGlmICghbmV3X3NrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjUKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmFsaXppbmcgdGhlIEZ1enppbmcgQ29uZmlndXJhdGlvbiBmb3IgUFBQIERlZmxhdGUqKgoKT2theSwgbGV0JiMzOTtzIHJlY2FwLiBJJiMzOTt2ZSB0cmFjZWQgdGhlIGNhbGwgZ3JhcGggYW5kIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBgcGFkX2NvbXByZXNzX3NrYmAgYXBwZWFycyB0byBiZSBjYWxsZWQgb25seSB3aXRoaW4gYHBwcF9wcmVwYXJlX3R4X3NrYmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBwcHBfeG1pdF9wcm9jZXNzYCBhbmQgYHBwcF9zdGFydF94bWl0YC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoZSAqRm9jdXNTeW1ib2xzKi4gIFdlIG5lZWQgdG8gdGFyZ2V0IGB6X2NvbXByZXNzYCwgYHpfZGVjb21wcmVzc2AsIGBwYWRfY29tcHJlc3Nfc2tiYCwgYW5kIGBwcHBfcHJlcGFyZV90eF9za2JgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBQUFAgRGVmbGF0ZS4KClRoZSByZXF1aXJlZCAqRW5hYmxlQ29uZmlncyogYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYFBQUGAgYW5kIGBQUFBfREVGTEFURWAuIE5vIHN1cnByaXNlcyB0aGVyZSwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4KClRoZSByZWFzb25pbmcgaXMgc291bmQ6IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHNtYWxsIG91dHB1dCBidWZmZXIgaGFuZGxpbmcgYW5kIGJvdW5kcyBjaGVja3MgaW4gdGhlIGRlZmxhdGUgcm91dGluZXMsICphbmQqIGEgY29uY3VycmVuY3kgaXNzdWUgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGluIGBwYWRfY29tcHJlc3Nfc2tiYC4gIFNpbmNlIHRoaXMgaW1wYWN0cyByZWFjaGFibGUgdmlydHVhbCBuZXR3b3JrIHBhY2tldCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHBhdGh3YXlzLCBhbmQgaW52b2x2ZXMgaW9jdGxzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHRoYXQgZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgd2lsbCBiZSBlZmZlY3RpdmUgaW4gZGV0ZWN0aW5nIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5IHByb2JsZW1zLCBhbmQgcG90ZW50aWFsIGJ1ZmZlciBtYW5hZ2VtZW50IGlzc3Vlcy4gU28gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4KCkkmIzM5O3ZlIGRvbmUgYSBsYXN0IHF1aWNrIGNoZWNrIGFuZCBlbnN1cmVkIHRoZSAqQ29uZmlncyogYW5kICpGb2N1c1N5bWJvbHMqIGFyZSBjb3JyZWN0LCBhbmQgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBpbmRlZWQgc2V0IGFzIGV4cGVjdGVkLiBFdmVyeXRoaW5nIGxvb2tzIHBlcmZlY3QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9ERUZMQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7el9jb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6X2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7cGFkX2NvbXByZXNzX3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYyBpbiBQUFAgZGVmbGF0ZSAoel9jb21wcmVzcywgel9kZWNvbXByZXNzKSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHByb3Blcmx5IGhhbmRsZSBzbWFsbCBvdXRwdXQgYnVmZmVycywgYW5kIHVwZGF0ZXMgcGFkX2NvbXByZXNzX3NrYiBpbiBwcHBfZ2VuZXJpYyB0byBzYWZlbHkgcmVhZCBkZXYtXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9ERUZMQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7el9jb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6X2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7cGFkX2NvbXByZXNzX3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYyBpbiBQUFAgZGVmbGF0ZSAoel9jb21wcmVzcywgel9kZWNvbXByZXNzKSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHByb3Blcmx5IGhhbmRsZSBzbWFsbCBvdXRwdXQgYnVmZmVycywgYW5kIHVwZGF0ZXMgcGFkX2NvbXByZXNzX3NrYiBpbiBwcHBfZ2VuZXJpYyB0byBzYWZlbHkgcmVhZCBkZXYtXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgc2l6aW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgaXNzdWVzIGluIFBQUCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uOlxuMS4gSW4gYHBwcF9nZW5lcmljLmM6cGFkX2NvbXByZXNzX3NrYigpYCwgYFJFQURfT05DRShkZXYtXHUwMDNlbXR1KWAgaXMgdXNlZCB0byBlbnN1cmUgY29uc2lzdGVudCBNVFUgcmVhZHMgYWNyb3NzIGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucywgcHJldmVudGluZyBwb3RlbnRpYWwgYnVmZmVyIHNpemUgbWlzbWF0Y2hlcyBkdWUgdG8gZGF0YSByYWNlcy5cbjIuIEluIGBwcHBfZGVmbGF0ZS5jOnpfY29tcHJlc3MoKWAsIGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgYG9zaXplIFx1MDAzYz0gb2xlbmAgb3IgdGhlIG91dHB1dCBidWZmZXIgZmlsbHMgdXAgYnkgcm91dGluZyBjb21wcmVzc2VkIG91dHB1dCBpbnRvIGEgbG9jYWwgc2NyYXRjaCBidWZmZXIgYGRpc2NhcmRfYnVmYCB0byBrZWVwIGNvbXByZXNzb3Igc3RhdGUgc3luY2hyb25pemVkIHdoaWxlIGRpc2NhcmRpbmcgdGhlIG91dHB1dCwgcmVwbGFjaW5nIGJ1Z2d5IGJlaGF2aW9yIHdoZXJlIGBuZXh0X291dGAgd2FzIHNldCB0byBOVUxMLiBgZGlzY2FyZF9idWZgIGlzIHdyaXRlLW9ubHkgZm9yIGB6bGliX2RlZmxhdGVgIGFuZCBuZXZlciByZWFkLlxuMy4gSW4gYHBwcF9kZWZsYXRlLmM6el9kZWNvbXByZXNzKClgLCBhIGNoZWNrIGBvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTmAgaXMgYWRkZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcyBpbnRvIGBvYnVmYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMuIFRoZSBidWdzIHByZXZlbnRlZCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGNvbmNlcm5zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCmluZGV4IGQ2ZDVlNjU2YjNmNGIuLjk2ZDY4OWI5N2ZkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCkBAIC0xODYsNyAmIzQzOzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiB7CiAJc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnOwogCWludCByLCBwcm90bywgb2ZmLCBvbGVuLCBvYXZhaWw7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdOwogCXVuc2lnbmVkIGNoYXIgKndwdHI7CiYjNDM7CWJvb2wgZGlzY2FyZDsKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS4KQEAgLTIwMCwyMCAmIzQzOzIwMiwyOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLAogCWlmIChvc2l6ZSAmZ3Q7IGlzaXplKQogCQlvc2l6ZSA9IGlzaXplOwogCi0Jd3B0ciA9IG9idWY7Ci0KIAkvKgotCSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuCiYjNDM7CSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZgomIzQzOwkgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZAomIzQzOwkgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zCiYjNDM7CSAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLgogCSAqLwotCXdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTsKLQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KFBQUF9DT01QLCB3cHRyICYjNDM7IDIpOwotCXdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7Ci0Jd3B0ciAmIzQzOz0gREVGTEFURV9PVkhEOwogCW9sZW4gPSBQUFBfSERSTEVOICYjNDM7IERFRkxBVEVfT1ZIRDsKLQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7Ci0Jc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gb3NpemUgLSBvbGVuOwomIzQzOwlkaXNjYXJkID0gb3NpemUgJmx0Oz0gb2xlbjsKJiM0MzsJaWYgKGRpc2NhcmQpIHsKJiM0MzsJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQlvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJd3B0ciA9IG9idWY7CiYjNDM7CQl3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7CiYjNDM7CQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7CiYjNDM7CQlwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgJiM0MzsgMik7CiYjNDM7CQl3cHRyICYjNDM7PSBQUFBfSERSTEVOOwomIzQzOwkJcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7CiYjNDM7CQl3cHRyICYjNDM7PSBERUZMQVRFX09WSEQ7CiYjNDM7CQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7CiYjNDM7CQlvYXZhaWwgPSBvc2l6ZSAtIG9sZW47CiYjNDM7CX0KJiM0MzsJc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsOwogCSYjNDM7JiM0MztzdGF0ZS0mZ3Q7c2Vxbm87CiAKIAlvZmYgPSAocHJvdG8gJmd0OyAweGZmKSA/IDIgOiAzOwkvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi8KQEAgLTIzMSw4ICYjNDM7MjQyLDEwIEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiAJCX0KIAkJaWYgKHN0YXRlLSZndDtzdHJtLmF2YWlsX291dCA9PSAwKSB7CiAJCQlvbGVuICYjNDM7PSBvYXZhaWw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IE5VTEw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwOwomIzQzOwkJCWRpc2NhcmQgPSB0cnVlOwomIzQzOwkJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQkJb2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTsKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7CiAJCX0gZWxzZSB7CiAJCQlicmVhazsJCS8qIGFsbCBkb25lICovCiAJCX0KQEAgLTI0Miw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZiwKIAkvKgogCSAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LgogCSAqLwotCWlmIChvbGVuICZsdDsgaXNpemUgJmFtcDsmYW1wOyBvbGVuICZsdDs9IG9zaXplKSB7CiYjNDM7CWlmICghZGlzY2FyZCAmYW1wOyZhbXA7IG9sZW4gJmx0OyBpc2l6ZSAmYW1wOyZhbXA7IG9sZW4gJmx0Oz0gb3NpemUpIHsKIAkJc3RhdGUtJmd0O3N0YXRzLmNvbXBfYnl0ZXMgJiM0Mzs9IG9sZW47CiAJCXN0YXRlLSZndDtzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7OwogCX0gZWxzZSB7CkBAIC00MjAsNiAmIzQzOzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLAogCQkJICAgICAgIHN0YXRlLSZndDt1bml0LCBpc2l6ZSk7CiAJCXJldHVybiBERUNPTVBfRVJST1I7CiAJfQomIzQzOwlpZiAob3NpemUgJmx0OyBQUFBfSERSTEVOKQomIzQzOwkJcmV0dXJuIERFQ09NUF9FUlJPUjsKIAogCS8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovCiAJc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgJiM0MzsgUFBQX0hEUkxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjA0NDNhZjIzMWU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC0xNzE5LDEwICYjNDM7MTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwomIzQzOwlpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi0mZ3Q7bXR1KTsKIAlpbnQgbGVuOwotCWludCBuZXdfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47Ci0JaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzOwogCQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47CiAKIAlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NwoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gb2YgUFBQIERlZmxhdGUgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIFBQUCBEZWZsYXRlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9kZWZsYXRlLmNgIGFuZCBgcHBwX2dlbmVyaWMuY2AgaW50ZXJhY3QgYW5kIHdoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhvc2UgZmlsZXMsIGBwcHBfZGVmbGF0ZS5jYCBhbmQgYHBwcF9nZW5lcmljLmNgLCB1c2luZyBgcmVhZC1maWxlYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2UgdG8gY29udGV4dHVhbGl6ZSB0aGUgcGF0Y2guIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIGZpbGVzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gsIG9yIHNvIEkgYXNzdW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHQgKlxuIDE4MTpcdCAqXHRSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgcGFja2V0LCBvciAwIGlmIHRoZVxuIDE4MjpcdCAqXHRwYWNrZXQgaXMgaW5jb21wcmVzc2libGUuXG4gMTgzOlx0ICovXG4gMTg0Olx0c3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZixcbiAxODU6XHRcdCAgICAgICBpbnQgaXNpemUsIGludCBvc2l6ZSlcbiAxODY6XHR7XG4gMTg3Olx0XHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XG4gMTg4Olx0XHRpbnQgciwgcHJvdG8sIG9mZiwgb2xlbiwgb2F2YWlsO1xuIDE4OTpcdFx0dW5zaWduZWQgY2hhciBkaXNjYXJkX2J1Zls2NF07XG4gMTkwOlx0XHR1bnNpZ25lZCBjaGFyICp3cHRyO1xuIDE5MTpcdFx0Ym9vbCBkaXNjYXJkO1xuIDE5MjpcdFxuIDE5MzpcdFx0LypcbiAxOTQ6XHRcdCAqIENoZWNrIHRoYXQgdGhlIHByb3RvY29sIGlzIGluIHRoZSByYW5nZSB3ZSBoYW5kbGUuXG4gMTk1Olx0XHQgKi9cbiAxOTY6XHRcdHByb3RvID0gUFBQX1BST1RPQ09MKHJwdHIpO1xuIDE5NzpcdFx0aWYgKHByb3RvIFx1MDAzZSAweDNmZmYgfHwgcHJvdG8gPT0gMHhmZCB8fCBwcm90byA9PSAweGZiKVxuIDE5ODpcdFx0XHRyZXR1cm4gMDtcbiAxOTk6XHRcbiAyMDA6XHRcdC8qIERvbiYjMzk7dCBnZW5lcmF0ZSBjb21wcmVzc2VkIHBhY2tldHMgd2hpY2ggYXJlIGxhcmdlciB0aGFuXG4gMjAxOlx0XHQgICB0aGUgdW5jb21wcmVzc2VkIHBhY2tldC4gKi9cbiAyMDI6XHRcdGlmIChvc2l6ZSBcdTAwM2UgaXNpemUpXG4gMjAzOlx0XHRcdG9zaXplID0gaXNpemU7XG4gMjA0Olx0XG4gMjA1Olx0XHQvKlxuIDIwNjpcdFx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlciBvbmx5IGlmXG4gMjA3Olx0XHQgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZFxuIDIwODpcdFx0ICogb3V0cHV0IHdoaWxlIGNvbnN1bWluZyB0aGUgaW5wdXQsIHNvIHRoZSBjb21wcmVzc29yIGhpc3RvcnkgcmVtYWluc1xuIDIwOTpcdFx0ICogc3luY2hyb25pemVkIHdpdGggdGhlIHBlZXIuXG4gMjEwOlx0XHQgKi9cbiAyMTE6XHRcdG9sZW4gPSBQUFBfSERSTEVOICYjNDM7IERFRkxBVEVfT1ZIRDtcbiAyMTI6XHRcdGRpc2NhcmQgPSBvc2l6ZSBcdTAwM2M9IG9sZW47XG4gMjEzOlx0XHRpZiAoZGlzY2FyZCkge1xuIDIxNDpcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4gMjE1Olx0XHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4gMjE2Olx0XHR9IGVsc2Uge1xuIDIxNzpcdFx0XHR3cHRyID0gb2J1ZjtcbiAyMTg6XHRcdFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xuIDIxOTpcdFx0XHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4gMjIwOlx0XHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciAmIzQzOyAyKTtcbiAyMjE6XHRcdFx0d3B0ciAmIzQzOz0gUFBQX0hEUkxFTjtcbiAyMjI6XHRcdFx0cHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLVx1MDAzZXNlcW5vLCB3cHRyKTtcbiAyMjM6XHRcdFx0d3B0ciAmIzQzOz0gREVGTEFURV9PVkhEO1xuIDIyNDpcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcbiAyMjU6XHRcdFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xuIDIyNjpcdFx0fVxuIDIyNzpcdFx0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XG4gMjI4Olx0XHQmIzQzOyYjNDM7c3RhdGUtXHUwMDNlc2Vxbm87XG4gMjI5Olx0XG4gMjMwOlx0XHRvZmYgPSAocHJvdG8gXHUwMDNlIDB4ZmYpID8gMiA6IDM7XHQvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi9cbiAyMzE6XHRcdHJwdHIgJiM0Mzs9IG9mZjtcbiAyMzI6XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9pbiA9IHJwdHI7XG4gMjMzOlx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX2luID0gKGlzaXplIC0gb2ZmKTtcbiAyMzQ6XHRcbiAyMzU6XHRcdGZvciAoOzspIHtcbiAyMzY6XHRcdFx0ciA9IHpsaWJfZGVmbGF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VzdHJtLCBaX1BBQ0tFVF9GTFVTSCk7XG4gMjM3Olx0XHRcdGlmIChyICE9IFpfT0spIHtcbiAyMzg6XHRcdFx0XHRpZiAoc3RhdGUtXHUwMDNlZGVidWcpXG4gMjM5Olx0XHRcdFx0XHRwcmludGsoS0VSTl9FUlJcbiAyNDA6XHRcdFx0XHRcdCAgICAgICBcJiMzNDt6X2NvbXByZXNzOiBkZWZsYXRlIHJldHVybmVkICVkXFxuXCYjMzQ7LCByKTtcbiAyNDE6XHRcdFx0XHRicmVhaztcbiAyNDI6XHRcdFx0fVxuIDI0MzpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPT0gMCkge1xuIDI0NDpcdFx0XHRcdG9sZW4gJiM0Mzs9IG9hdmFpbDtcbiAyNDU6XHRcdFx0XHRkaXNjYXJkID0gdHJ1ZTtcbiAyNDY6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4gMjQ3Olx0XHRcdFx0b2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTtcbiAyNDg6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbDtcbiAyNDk6XHRcdFx0fSBlbHNlIHtcbiAyNTA6XHRcdFx0XHRicmVhaztcdFx0LyogYWxsIGRvbmUgKi9cbiAyNTE6XHRcdFx0fVxuIDI1MjpcdFx0fVxuIDI1MzpcdFx0b2xlbiAmIzQzOz0gb2F2YWlsIC0gc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQ7XG4gMjU0Olx0XG4gMjU1Olx0XHQvKlxuIDI1NjpcdFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gMjU3Olx0XHQgKi9cbiAyNTg6XHRcdGlmICghZGlzY2FyZCBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuIDI1OTpcdFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX2J5dGVzICYjNDM7PSBvbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHQgKiBmb3VuZCBieSBpbnNwZWN0aW5nIHRoZSBpbnB1dCBkYXRhIGFuZCBmb3Igc3lzdGVtIHByb2JsZW1zLCBidXRcbiA0MTE6XHQgKiBERUNPTVBfRkFUQUxFUlJPUiBmb3IgYW55IGVycm9ycyB3aGljaCBjb3VsZCBwb3NzaWJseSBiZSBzYWlkIHRvXG4gNDEyOlx0ICogYmUgYmVpbmcgZGV0ZWN0ZWQgXCYjMzQ7YWZ0ZXJcJiMzNDsgZGVjb21wcmVzc2lvbi4gIEZvciBERUNPTVBfRVJST1IsXG4gNDEzOlx0ICogd2UgY2FuIGlzc3VlIGEgQ0NQIHJlc2V0LXJlcXVlc3Q7IGZvciBERUNPTVBfRkFUQUxFUlJPUiwgd2UgbWF5IGJlXG4gNDE0Olx0ICogaW5mcmluZ2luZyBhIHBhdGVudCBvZiBNb3Rvcm9sYSYjMzk7cyBpZiB3ZSBkbywgc28gd2UgdGFrZSBDQ1AgZG93blxuIDQxNTpcdCAqIGluc3RlYWQuXG4gNDE2Olx0ICpcbiA0MTc6XHQgKiBHaXZlbiB0aGF0IHRoZSBmcmFtZSBoYXMgdGhlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyIGFuZCBhIGdvb2QgRkNTLFxuIDQxODpcdCAqIGVycm9ycyBzdWNoIGFzIGludmFsaWQgY29kZXMgaW4gdGhlIGlucHV0IG1vc3QgbGlrZWx5IGluZGljYXRlIGFcbiA0MTk6XHQgKiBidWcsIHNvIHdlIHJldHVybiBERUNPTVBfRkFUQUxFUlJPUiBmb3IgdGhlbSBpbiBvcmRlciB0byB0dXJuIG9mZlxuIDQyMDpcdCAqIGNvbXByZXNzaW9uLCBldmVuIHRob3VnaCB0aGV5IGFyZSBkZXRlY3RlZCBieSBpbnNwZWN0aW5nIHRoZSBpbnB1dC5cbiA0MjE6XHQgKi9cbiA0MjI6XHRzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcbiA0MjM6XHRcdFx0IHVuc2lnbmVkIGNoYXIgKm9idWYsIGludCBvc2l6ZSlcbiA0MjQ6XHR7XG4gNDI1Olx0XHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XG4gNDI2Olx0XHRpbnQgb2xlbiwgc2VxLCByO1xuIDQyNzpcdFx0aW50IGRlY29kZV9wcm90bywgb3ZlcmZsb3c7XG4gNDI4Olx0XHR1bnNpZ25lZCBjaGFyIG92ZXJmbG93X2J1ZlsxXTtcbiA0Mjk6XHRcbiA0MzA6XHRcdGlmIChpc2l6ZSBcdTAwM2M9IFBQUF9IRFJMRU4gJiM0MzsgREVGTEFURV9PVkhEKSB7XG4gNDMxOlx0XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbiA0MzI6XHRcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogc2hvcnQgcGt0ICglZClcXG5cJiMzNDssXG4gNDMzOlx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQsIGlzaXplKTtcbiA0MzQ6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA0MzU6XHRcdH1cbiA0MzY6XHRcdGlmIChvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTilcbiA0Mzc6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA0Mzg6XHRcbiA0Mzk6XHRcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXG4gNDQwOlx0XHRzZXEgPSBnZXRfdW5hbGlnbmVkX2JlMTYoaWJ1ZiAmIzQzOyBQUFBfSERSTEVOKTtcbiA0NDE6XHRcdGlmIChzZXEgIT0gKHN0YXRlLVx1MDAzZXNlcW5vIFx1MDAyNiAweGZmZmYpKSB7XG4gNDQyOlx0XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbiA0NDM6XHRcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcblwmIzM0OyxcbiA0NDQ6XHRcdFx0XHQgICAgICAgc3RhdGUtXHUwMDNldW5pdCwgc2VxLCBzdGF0ZS1cdTAwM2VzZXFubyBcdTAwMjYgMHhmZmZmKTtcbiA0NDU6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA0NDY6XHRcdH1cbiA0NDc6XHRcdCYjNDM7JiM0MztzdGF0ZS1cdTAwM2VzZXFubztcbiA0NDg6XHRcbiA0NDk6XHRcdC8qXG4gNDUwOlx0XHQgKiBGaWxsIGluIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBQUFAgaGVhZGVyLiAgVGhlIHByb3RvY29sIGZpZWxkXG4gNDUxOlx0XHQgKiBjb21lcyBmcm9tIHRoZSBkZWNvbXByZXNzZWQgZGF0YS5cbiA0NTI6XHRcdCAqL1xuIDQ1MzpcdFx0b2J1ZlswXSA9IFBQUF9BRERSRVNTKGlidWYpO1xuIDQ1NDpcdFx0b2J1ZlsxXSA9IFBQUF9DT05UUk9MKGlidWYpO1xuIDQ1NTpcdFx0b2J1ZlsyXSA9IDA7XG4gNDU2Olx0XG4gNDU3Olx0XHQvKlxuIDQ1ODpcdFx0ICogU2V0IHVwIHRvIGNhbGwgaW5mbGF0ZS4gIFdlIHNldCBhdmFpbF9vdXQgdG8gMSBpbml0aWFsbHkgc28gd2UgY2FuXG4gNDU5Olx0XHQgKiBsb29rIGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBvdXRwdXQgYW5kIGRlY2lkZSB3aGV0aGVyIHdlIGhhdmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcxNTpcdH1cbjE3MTY6XHRcbjE3MTc6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbjE3MTg6XHRwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE3MTk6XHR7XG4xNzIwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuMTcyMTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4xNzIyOlx0XHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuMTcyMzpcdFx0aW50IGxlbjtcbjE3MjQ6XHRcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgJiM0MztcbjE3MjU6XHRcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbjE3MjY6XHRcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICYjNDM7XG4xNzI3Olx0XHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47XG4xNzI4Olx0XG4xNzI5Olx0XHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuMTczMDpcdFx0XHRyZXR1cm4gTlVMTDtcbjE3MzE6XHRcbjE3MzI6XHRcdG5ld19za2IgPSBhbGxvY19za2IobmV3X3NrYl9zaXplLCBHRlBfQVRPTUlDKTtcbjE3MzM6XHRcdGlmICghbmV3X3NrYikge1xuMTczNDpcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuMTczNTpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxuXCYjMzQ7KTtcbjE3MzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNzM3Olx0XHR9XG4xNzM4Olx0XHRpZiAoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcdTAwM2UgUFBQX0hEUkxFTilcbjE3Mzk6XHRcdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuMTc0MDpcdFxuMTc0MTpcdFx0LyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi9cbjE3NDI6XHRcdGxlbiA9IHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wcmVzcyhwcHAtXHUwMDNleGNfc3RhdGUsIHNrYi1cdTAwM2VkYXRhIC0gMixcbjE3NDM6XHRcdFx0XHRcdCAgIG5ld19za2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbiAmIzQzOyAyLFxuMTc0NDpcdFx0XHRcdFx0ICAgY29tcHJlc3Nvcl9za2Jfc2l6ZSk7XG4xNzQ1Olx0XHRpZiAobGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiAocHBwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DQ1BfVVApKSB7XG4xNzQ2Olx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4xNzQ3Olx0XHRcdHNrYiA9IG5ld19za2I7XG4xNzQ4Olx0XHRcdHNrYl9wdXQoc2tiLCBsZW4pO1xuMTc0OTpcdFx0XHRza2JfcHVsbChza2IsIDIpO1x0LyogcHVsbCBvZmYgQS9DIGJ5dGVzICovXG4xNzUwOlx0XHR9IGVsc2UgaWYgKGxlbiA9PSAwKSB7XG4xNzUxOlx0XHRcdC8qIGRpZG4mIzM5O3QgY29tcHJlc3MsIG9yIENDUCBub3QgdXAgeWV0ICovXG4xNzUyOlx0XHRcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xuMTc1MzpcdFx0XHRuZXdfc2tiID0gc2tiO1xuMTc1NDpcdFx0fSBlbHNlIHtcbjE3NTU6XHRcdFx0LypcbjE3NTY6XHRcdFx0ICogKGxlbiBcdTAwM2MgMClcbjE3NTc6XHRcdFx0ICogTVBQRSByZXF1aXJlcyB0aGF0IHdlIGRvIG5vdCBzZW5kIHVuZW5jcnlwdGVkXG4xNzU4Olx0XHRcdCAqIGZyYW1lcy4gIFRoZSBjb21wcmVzc29yIHdpbGwgcmV0dXJuIC0xIGlmIHdlXG4xNzU5Olx0XHRcdCAqIHNob3VsZCBkcm9wIHRoZSBmcmFtZS4gIFdlIGNhbm5vdCBzaW1wbHkgdGVzdFxuMTc2MDpcdFx0XHQgKiB0aGUgY29tcHJlc3NfcHJvdG8gYmVjYXVzZSBNUFBFIGFuZCBNUFBDIHNoYXJlXG4xNzYxOlx0XHRcdCAqIHRoZSBzYW1lIG51bWJlci5cbjE3NjI6XHRcdFx0ICovXG4xNzYzOlx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4xNzY0Olx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O3BwcDogY29tcHJlc3NvciBkcm9wcGVkIHBrdFxcblwmIzM0Oyk7XG4xNzY1Olx0XHRcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xuMTc2NjpcdFx0XHRuZXdfc2tiID0gTlVMTDtcbjE3Njc6XHRcdH1cbjE3Njg6XHRcdHJldHVybiBuZXdfc2tiO1xuMTc2OTpcdH1cbjE3NzA6XHRcbjE3NzE6XHQvKlxuMTc3MjpcdCAqIENvbXByZXNzIGFuZCBwcmVwYXJlIHRvIHNlbmQgYSBmcmFtZS5cbjE3NzM6XHQgKiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGxvY2tlZCB0aGUgeG1pdCBwYXRoLlxuMTc3NDpcdCAqIFJldHVybnMgMSBpZiB0aGUgc2tiIHdhcyBjb25zdW1lZCwgMCBpZiBpdCBjYW4gYmUgcGFzc2VkIHRvIHBwcF9wdXNoKCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTkKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGdpdmVuIG15IGFzc3VtZWQgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgUFBQIERlZmxhdGUgQ29tcHJlc3Npb24vRGVjb21wcmVzc2lvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgdGhlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jYCBmaWxlLiBUaGlzIG1lYW5zIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBhdCBhIHNuaXBwZXQ7IEkmIzM5O20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIGVudGlyZSBsb2dpYyBvZiBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IHJldmlld2luZyB0aGUgY29kZSBmbG93LCBjaGVja2luZyBmb3IgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBkZWZsYXRlIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiwgYW5kIG1ha2luZyBzdXJlIHRoZSBkYXRhIGhhbmRsaW5nIGlzIHJvYnVzdCBhbmQgc2VjdXJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBtZW1vcnksIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgYW5kIGdhaW4gYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgZGF0YSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgUFBQIHByb3RvY29sIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdFx0XHRicmVhaztcdFx0LyogYWxsIGRvbmUgKi9cbiAyNTE6XHRcdFx0fVxuIDI1MjpcdFx0fVxuIDI1MzpcdFx0b2xlbiAmIzQzOz0gb2F2YWlsIC0gc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQ7XG4gMjU0Olx0XG4gMjU1Olx0XHQvKlxuIDI1NjpcdFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gMjU3Olx0XHQgKi9cbiAyNTg6XHRcdGlmICghZGlzY2FyZCBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuIDI1OTpcdFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX2J5dGVzICYjNDM7PSBvbGVuO1xuIDI2MDpcdFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7O1xuIDI2MTpcdFx0fSBlbHNlIHtcbiAyNjI6XHRcdFx0c3RhdGUtXHUwMDNlc3RhdHMuaW5jX2J5dGVzICYjNDM7PSBpc2l6ZTtcbiAyNjM6XHRcdFx0c3RhdGUtXHUwMDNlc3RhdHMuaW5jX3BhY2tldHMmIzQzOyYjNDM7O1xuIDI2NDpcdFx0XHRvbGVuID0gMDtcbiAyNjU6XHRcdH1cbiAyNjY6XHRcdHN0YXRlLVx1MDAzZXN0YXRzLnVuY19ieXRlcyAmIzQzOz0gaXNpemU7XG4gMjY3Olx0XHRzdGF0ZS1cdTAwM2VzdGF0cy51bmNfcGFja2V0cyYjNDM7JiM0Mzs7XG4gMjY4Olx0XG4gMjY5Olx0XHRyZXR1cm4gb2xlbjtcbiAyNzA6XHR9XG4gMjcxOlx0XG4gMjcyOlx0LyoqXG4gMjczOlx0ICpcdHpfY29tcF9zdGF0cyAtIHJldHVybiBjb21wcmVzc2lvbiBzdGF0aXN0aWNzIGZvciBhIGNvbXByZXNzb3JcbiAyNzQ6XHQgKlx0XHRvciBkZWNvbXByZXNzb3IuXG4gMjc1Olx0ICpcdEBhcmc6XHRwb2ludGVyIHRvIHByaXZhdGUgc3BhY2UgZm9yIHRoZSAoZGUpY29tcHJlc3NvclxuIDI3NjpcdCAqXHRAc3RhdHM6XHRwb2ludGVyIHRvIGEgc3RydWN0IGNvbXBzdGF0IHRvIHJlY2VpdmUgdGhlIHJlc3VsdC5cbiAyNzc6XHQgKi9cbiAyNzg6XHRzdGF0aWMgdm9pZCB6X2NvbXBfc3RhdHModm9pZCAqYXJnLCBzdHJ1Y3QgY29tcHN0YXQgKnN0YXRzKVxuIDI3OTpcdHtcbiAyODA6XHRcdHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICopIGFyZztcbiAyODE6XHRcbiAyODI6XHRcdCpzdGF0cyA9IHN0YXRlLVx1MDAzZXN0YXRzO1xuIDI4MzpcdH1cbiAyODQ6XHRcbiAyODU6XHQvKipcbiAyODY6XHQgKlx0el9kZWNvbXBfZnJlZSAtIEZyZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IGEgZGVjb21wcmVzc29yLlxuIDI4NzpcdCAqXHRAYXJnOlx0cG9pbnRlciB0byBwcml2YXRlIHNwYWNlIGZvciB0aGUgZGVjb21wcmVzc29yLlxuIDI4ODpcdCAqL1xuIDI4OTpcdHN0YXRpYyB2b2lkIHpfZGVjb21wX2ZyZWUodm9pZCAqYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTU6XHRcdG9idWZbMl0gPSAwO1xuIDQ1NjpcdFxuIDQ1NzpcdFx0LypcbiA0NTg6XHRcdCAqIFNldCB1cCB0byBjYWxsIGluZmxhdGUuICBXZSBzZXQgYXZhaWxfb3V0IHRvIDEgaW5pdGlhbGx5IHNvIHdlIGNhblxuIDQ1OTpcdFx0ICogbG9vayBhdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgb3V0cHV0IGFuZCBkZWNpZGUgd2hldGhlciB3ZSBoYXZlXG4gNDYwOlx0XHQgKiBhIDEtYnl0ZSBvciAyLWJ5dGUgcHJvdG9jb2wgZmllbGQuXG4gNDYxOlx0XHQgKi9cbiA0NjI6XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9pbiA9IGlidWYgJiM0MzsgUFBQX0hEUkxFTiAmIzQzOyBERUZMQVRFX09WSEQ7XG4gNDYzOlx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX2luID0gaXNpemUgLSAoUFBQX0hEUkxFTiAmIzQzOyBERUZMQVRFX09WSEQpO1xuIDQ2NDpcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IG9idWYgJiM0MzsgMztcbiA0NjU6XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gMTtcbiA0NjY6XHRcdGRlY29kZV9wcm90byA9IDE7XG4gNDY3Olx0XHRvdmVyZmxvdyA9IDA7XG4gNDY4Olx0XG4gNDY5Olx0XHQvKlxuIDQ3MDpcdFx0ICogQ2FsbCBpbmZsYXRlLCBzdXBwbHlpbmcgbW9yZSBpbnB1dCBvciBvdXRwdXQgYXMgbmVlZGVkLlxuIDQ3MTpcdFx0ICovXG4gNDcyOlx0XHRmb3IgKDs7KSB7XG4gNDczOlx0XHRcdHIgPSB6bGliX2luZmxhdGUoXHUwMDI2c3RhdGUtXHUwMDNlc3RybSwgWl9QQUNLRVRfRkxVU0gpO1xuIDQ3NDpcdFx0XHRpZiAociAhPSBaX09LKSB7XG4gNDc1Olx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuIDQ3NjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IGluZmxhdGUgcmV0dXJuZWQgJWQgKCVzKVxcblwmIzM0OyxcbiA0Nzc6XHRcdFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCByLCAoc3RhdGUtXHUwMDNlc3RybS5tc2c/IHN0YXRlLVx1MDAzZXN0cm0ubXNnOiBcJiMzNDtcJiMzNDspKTtcbiA0Nzg6XHRcdFx0XHRyZXR1cm4gREVDT01QX0ZBVEFMRVJST1I7XG4gNDc5Olx0XHRcdH1cbiA0ODA6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ICE9IDApXG4gNDgxOlx0XHRcdFx0YnJlYWs7XHRcdC8qIGFsbCBkb25lICovXG4gNDgyOlx0XHRcdGlmIChkZWNvZGVfcHJvdG8pIHtcbiA0ODM6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTjtcbiA0ODQ6XHRcdFx0XHRpZiAoKG9idWZbM10gXHUwMDI2IDEpID09IDApIHtcbiA0ODU6XHRcdFx0XHRcdC8qIDItYnl0ZSBwcm90b2NvbCBmaWVsZCAqL1xuIDQ4NjpcdFx0XHRcdFx0b2J1ZlsyXSA9IG9idWZbM107XG4gNDg3Olx0XHRcdFx0XHQtLXN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQ7XG4gNDg4Olx0XHRcdFx0XHQmIzQzOyYjNDM7c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQ7XG4gNDg5Olx0XHRcdFx0fVxuIDQ5MDpcdFx0XHRcdGRlY29kZV9wcm90byA9IDA7XG4gNDkxOlx0XHRcdH0gZWxzZSBpZiAoIW92ZXJmbG93KSB7XG4gNDkyOlx0XHRcdFx0LypcbiA0OTM6XHRcdFx0XHQgKiBXZSYjMzk7dmUgZmlsbGVkIHVwIHRoZSBvdXRwdXQgYnVmZmVyOyB0aGUgb25seSB3YXkgdG9cbiA0OTQ6XHRcdFx0XHQgKiBmaW5kIG91dCB3aGV0aGVyIGluZmxhdGUgaGFzIGFueSBtb3JlIGNoYXJhY3RlcnNcbiA0OTU6XHRcdFx0XHQgKiBsZWZ0IGlzIHRvIGdpdmUgaXQgYW5vdGhlciBieXRlIG9mIG91dHB1dCBzcGFjZS5cbiA0OTY6XHRcdFx0XHQgKi9cbiA0OTc6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gb3ZlcmZsb3dfYnVmO1xuIDQ5ODpcdFx0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gMTtcbiA0OTk6XHRcdFx0XHRvdmVyZmxvdyA9IDE7XG4gNTAwOlx0XHRcdH0gZWxzZSB7XG4gNTAxOlx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuIDUwMjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxuXCYjMzQ7LFxuIDUwMzpcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQpO1xuIDUwNDpcdFx0XHRcdHJldHVybiBERUNPTVBfRkFUQUxFUlJPUjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgel9kZWNvbXByZXNzYCYjMzQ7LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkIGZvciBhbiBleHBlcnQgaW4gdGhlaXIgZmllbGQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgel9kZWNvbXByZXNzYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSB0aGlua2luZyBpcywgJiMzNDtMZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgel9kZWNvbXByZXNzYC4mIzM0OyBJJiMzOTttIG5vdCBzYXRpc2ZpZWQgd2l0aCBqdXN0IGtub3dpbmcgKndoYXQqIGl0IGRvZXMsIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqaG93Ki4gSSYjMzk7bSBpbW1lZGlhdGVseSBwaWN0dXJpbmcgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXMsIHRoZSBkaWZmZXJlbnQgZGVjb21wcmVzc2lvbiBhbGdvcml0aG1zIGl0IGNvdWxkIGJlIHVzaW5nIHVuZGVyIHRoZSBob29kIOKAkyBIdWZmbWFuLCBMZW1wZWwtWml2IHZhcmlhbnRzLCBtYXliZSBldmVuIHNvbWV0aGluZyBtb3JlIGV4b3RpYyBpZiB0aGlzIGlzIGEgc3BlY2lhbGl6ZWQgY29udGV4dC4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBmbG93cyB0aGF0IHdvdWxkIGJlIGludm9sdmVkLiBJcyBpdCBoYW5kbGluZyBhIHNwZWNpZmljIGNvbXByZXNzaW9uIGZvcm1hdD8gSXMgaXQgcm9idXN0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzPyBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcz8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSSYjMzk7bSBpdGNoaW5nIHRvIHNlZSB0aGUgY29kZSBhbmQgc3RhcnQgcGllY2luZyBpdCB0b2dldGhlciBtZW50YWxseSwgYW5hbHl6aW5nIGl0IGxpa2UgSSB3b3VsZCBhbnkgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50LiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRcdH0gZWxzZSB7XG4gNTAxOlx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuIDUwMjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxuXCYjMzQ7LFxuIDUwMzpcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQpO1xuIDUwNDpcdFx0XHRcdHJldHVybiBERUNPTVBfRkFUQUxFUlJPUjtcbiA1MDU6XHRcdFx0fVxuIDUwNjpcdFx0fVxuIDUwNzpcdFxuIDUwODpcdFx0aWYgKGRlY29kZV9wcm90bykge1xuIDUwOTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlZGVidWcpXG4gNTEwOlx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IGRpZG4mIzM5O3QgZ2V0IHByb3RvXFxuXCYjMzQ7LFxuIDUxMTpcdFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0KTtcbiA1MTI6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA1MTM6XHRcdH1cbiA1MTQ6XHRcbiA1MTU6XHRcdG9sZW4gPSBvc2l6ZSAmIzQzOyBvdmVyZmxvdyAtIHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0O1xuIDUxNjpcdFx0c3RhdGUtXHUwMDNlc3RhdHMudW5jX2J5dGVzICYjNDM7PSBvbGVuO1xuIDUxNzpcdFx0c3RhdGUtXHUwMDNlc3RhdHMudW5jX3BhY2tldHMmIzQzOyYjNDM7O1xuIDUxODpcdFx0c3RhdGUtXHUwMDNlc3RhdHMuY29tcF9ieXRlcyAmIzQzOz0gaXNpemU7XG4gNTE5Olx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7O1xuIDUyMDpcdFxuIDUyMTpcdFx0cmV0dXJuIG9sZW47XG4gNTIyOlx0fVxuIDUyMzpcdFxuIDUyNDpcdC8qKlxuIDUyNTpcdCAqXHR6X2luY29tcCAtIGFkZCBpbmNvbXByZXNzaWJsZSBpbnB1dCBkYXRhIHRvIHRoZSBoaXN0b3J5LlxuIDUyNjpcdCAqXHRAYXJnOlx0cG9pbnRlciB0byBwcml2YXRlIHN0YXRlIGZvciB0aGUgZGVjb21wcmVzc29yXG4gNTI3Olx0ICpcdEBpYnVmOlx0cG9pbnRlciB0byBpbnB1dCBwYWNrZXQgZGF0YVxuIDUyODpcdCAqXHRAaWNudDpcdGxlbmd0aCBvZiBpbnB1dCBkYXRhLlxuIDUyOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjgxCgkJCQkJCQlvdXRwdXQ6IDMwNgoJCQkJCQkJdGhvdWdodHM6IDIxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUFBQIERlZmxhdGUgUGF0Y2g6IEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gVGhlIGNoYW5nZXMgYWRkcmVzcyBzZXZlcmFsIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSBQUFAgZGVmbGF0ZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGNvZGUuCgpGaXJzdCwgaW4gYHBwcF9nZW5lcmljLmNgLCBhIGRhdGEgcmFjZSB3aXRoIGBkZXYtJmd0O210dWAgaW4gYHBhZF9jb21wcmVzc19za2JgIGlzIGFkZHJlc3NlZCBieSB1c2luZyBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgZ29vZCBoeWdpZW5lLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaW4gcGFja2V0IHNpemUgY2FsY3VsYXRpb25zIGR1ZSB0byBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgb2YgYGRldi0mZ3Q7bXR1YC4gVGhpcyBpcyBsaWtlbHkgYSBnb29kIHRoaW5nIGFuZCBub3QgS01TQU4tcmVsZXZhbnQuCgpUaGVuIHdlIHNlZSBzb21lIGZpeGVzIGFuZCBhZGp1c3RtZW50cyBpbiBgcHBwX2RlZmxhdGUuY2AuIFRoZSBmaXJzdCBpc3N1ZSByZWdhcmRzIHRoZSBjYWxjdWxhdGlvbiBvZiBgYXZhaWxfb3V0YCBpbiBgel9jb21wcmVzc2Agd2hpY2ggd291bGQgdW5kZXJmbG93IHdoZW4gYG9zaXplICZsdDs9IG9sZW5gLCBvciBhbiBpbnZhbGlkIGBuZXh0X291dGAgdmFsdWUgd2hlbiBgc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID09IDBgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIGEgY3Jhc2ggKGRlcmVmZXJlbmNpbmcgYSBudWxsIHBvaW50ZXIpLiBUaGlzIGlzIGFkZHJlc3NlZCBieSB1c2luZyBhIGxvY2FsIHN0YWNrIGJ1ZmZlciwgYGRpc2NhcmRfYnVmWzY0XWAsIHRvIGhvbGQgZGlzY2FyZGVkIG91dHB1dC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgZGlzY2FyZF9idWZgIGlzICpvbmx5KiB3cml0dGVuIHRvIGJ5IGB6bGliX2RlZmxhdGVgLCBhbmQgaXRzIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQuIGBvbGVuYCBpcyBzZXQgdG8gMC4gSXQgaXMgbmV2ZXIgcmVhZCBvciBleHBvc2VkIGluIGFueSB3YXksIHNvIHRoaXMgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgY2F1Z2h0IGJ5IEtBU0FOLgoKVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgYnVnIGZpeGVzL2ltcHJvdmVtZW50cyBtYWRlIHRvIGB6X2RlY29tcHJlc3NgLiBUaGUgaW5pdGlhbCBjaGVjayBgb3NpemUgJmx0OyBQUFBfSERSTEVOYCBpbiBgel9kZWNvbXByZXNzYCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHdyaXRlcy4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uLiBQcmV2aW91c2x5LCB0aGUgYHN0YXRlLSZndDtzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTmAgd2FzIGluY29ycmVjdCBpZiBgb3NpemUgJmx0OyBQUFBfSERSTEVOYC4KCk5vdywgd2UgbmVlZCB0byBmb2N1cyBvbiBLTVNBTi4gVGhpcyBzYW5pdGl6ZXIgaXMgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgb3IgaW5mb3JtYXRpb24gbGVha3MuIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIGFwcGx5IHRoZXNlIGd1aWRlbGluZXMuCgpDb25zaWRlcmluZyB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhlIGtleSBxdWVzdGlvbiBpczogKipEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nLCBhbGxvY2F0ZS9pbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIG9yIGFmZmVjdCBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKgoKKiAgIGBkaXNjYXJkX2J1ZmAgaXMgYSBsb2NhbCBzdGFjayBidWZmZXIgdXNlZCBzb2xlbHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsuIEl0JiMzOTtzIG5ldmVyIHJlYWQsIG5ldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgaXRzIGluaXRpYWwgY29udGVudHMgYXJlIGlycmVsZXZhbnQuIFRoZXJlJiMzOTtzIG5vIGluZm9ybWF0aW9uIGxlYWsgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCiogICBUaGUgYFJFQURfT05DRShkZXYtJmd0O210dSlgIGlzIHNpbXBseSB0byBlbGltaW5hdGUgYSBkYXRhIHJhY2UuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm4gdGhlcmUuCiogICBUaGUgYm91bmRzIGNoZWNrcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2VzcyBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSAqYWxyZWFkeSogZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMsIGFuZCBkb2VzICpub3QqIGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIEkgYW0gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgIHRvb2wgd2l0aCBkZXRhaWxlZCByZWFzb25pbmcgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XG4xLiBJbiBgcHBwX2dlbmVyaWMuYzpwYWRfY29tcHJlc3Nfc2tiKClgLCBgUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXHUwMDNjPSBvbGVuYCBvciB0aGUgb3V0cHV0IGJ1ZmZlciBmaWxscyB1cCBieSByb3V0aW5nIGNvbXByZXNzZWQgb3V0cHV0IGludG8gYSBsb2NhbCBzY3JhdGNoIGJ1ZmZlciBgZGlzY2FyZF9idWZgIHRvIGtlZXAgY29tcHJlc3NvciBzdGF0ZSBzeW5jaHJvbml6ZWQgd2hpbGUgZGlzY2FyZGluZyB0aGUgb3V0cHV0LCByZXBsYWNpbmcgYnVnZ3kgYmVoYXZpb3Igd2hlcmUgYG5leHRfb3V0YCB3YXMgc2V0IHRvIE5VTEwuIGBkaXNjYXJkX2J1ZmAgaXMgd3JpdGUtb25seSBmb3IgYHpsaWJfZGVmbGF0ZWAgYW5kIG5ldmVyIHJlYWQuXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIHNpemluZyBhbmQgYm91bmRzIGNoZWNraW5nIGlzc3VlcyBpbiBQUFAgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbjpcbjEuIEluIGBwcHBfZ2VuZXJpYy5jOnBhZF9jb21wcmVzc19za2IoKWAsIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgTVRVIHJlYWRzIGFjcm9zcyBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBzaXplIG1pc21hdGNoZXMgZHVlIHRvIGRhdGEgcmFjZXMuXG4yLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2NvbXByZXNzKClgLCBpdCBoYW5kbGVzIGNhc2VzIHdoZXJlIGBvc2l6ZSBcdTAwM2M9IG9sZW5gIG9yIHRoZSBvdXRwdXQgYnVmZmVyIGZpbGxzIHVwIGJ5IHJvdXRpbmcgY29tcHJlc3NlZCBvdXRwdXQgaW50byBhIGxvY2FsIHNjcmF0Y2ggYnVmZmVyIGBkaXNjYXJkX2J1ZmAgdG8ga2VlcCBjb21wcmVzc29yIHN0YXRlIHN5bmNocm9uaXplZCB3aGlsZSBkaXNjYXJkaW5nIHRoZSBvdXRwdXQsIHJlcGxhY2luZyBidWdneSBiZWhhdmlvciB3aGVyZSBgbmV4dF9vdXRgIHdhcyBzZXQgdG8gTlVMTC4gYGRpc2NhcmRfYnVmYCBpcyB3cml0ZS1vbmx5IGZvciBgemxpYl9kZWZsYXRlYCBhbmQgbmV2ZXIgcmVhZC5cbjMuIEluIGBwcHBfZGVmbGF0ZS5jOnpfZGVjb21wcmVzcygpYCwgYSBjaGVjayBgb3NpemUgXHUwMDNjIFBQUF9IRFJMRU5gIGlzIGFkZGVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgaW50byBgb2J1ZmAuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzLiBUaGUgYnVncyBwcmV2ZW50ZWQgYXJlIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25jZXJucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzAuMjYzNzc1Njk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTgyNjkyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0RFRkxBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6X2NvbXByZXNzXCIsXG4gICAgXCJ6X2RlY29tcHJlc3NcIixcbiAgICBcInBhZF9jb21wcmVzc19za2JcIixcbiAgICBcInBwcF9wcmVwYXJlX3R4X3NrYlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XFxuMS4gSW4gYHBwcF9nZW5lcmljLmM6cGFkX2NvbXByZXNzX3NrYigpYCwgYFJFQURfT05DRShkZXYtXFx1MDAzZW10dSlgIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgTVRVIHJlYWRzIGFjcm9zcyBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBzaXplIG1pc21hdGNoZXMgZHVlIHRvIGRhdGEgcmFjZXMuXFxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXFx1MDAzYz0gb2xlbmAgb3IgdGhlIG91dHB1dCBidWZmZXIgZmlsbHMgdXAgYnkgcm91dGluZyBjb21wcmVzc2VkIG91dHB1dCBpbnRvIGEgbG9jYWwgc2NyYXRjaCBidWZmZXIgYGRpc2NhcmRfYnVmYCB0byBrZWVwIGNvbXByZXNzb3Igc3RhdGUgc3luY2hyb25pemVkIHdoaWxlIGRpc2NhcmRpbmcgdGhlIG91dHB1dCwgcmVwbGFjaW5nIGJ1Z2d5IGJlaGF2aW9yIHdoZXJlIGBuZXh0X291dGAgd2FzIHNldCB0byBOVUxMLiBgZGlzY2FyZF9idWZgIGlzIHdyaXRlLW9ubHkgZm9yIGB6bGliX2RlZmxhdGVgIGFuZCBuZXZlciByZWFkLlxcbjMuIEluIGBwcHBfZGVmbGF0ZS5jOnpfZGVjb21wcmVzcygpYCwgYSBjaGVjayBgb3NpemUgXFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzLiBUaGUgYnVncyBwcmV2ZW50ZWQgYXJlIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25jZXJucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzAuMjYzNzgwNDg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkwMDg1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjExOjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcXG5AQCAtMTg2LDcgKzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIHtcXG4gXFx0c3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnO1xcbiBcXHRpbnQgciwgcHJvdG8sIG9mZiwgb2xlbiwgb2F2YWlsO1xcbitcXHR1bnNpZ25lZCBjaGFyIGRpc2NhcmRfYnVmWzY0XTtcXG4gXFx0dW5zaWduZWQgY2hhciAqd3B0cjtcXG4rXFx0Ym9vbCBkaXNjYXJkO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS5cXG5AQCAtMjAwLDIwICsyMDIsMjkgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZixcXG4gXFx0aWYgKG9zaXplIFxcdTAwM2UgaXNpemUpXFxuIFxcdFxcdG9zaXplID0gaXNpemU7XFxuIFxcbi1cXHR3cHRyID0gb2J1ZjtcXG4tXFxuIFxcdC8qXFxuLVxcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuXFxuK1xcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZlxcbitcXHQgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZFxcbitcXHQgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zXFxuK1xcdCAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLlxcbiBcXHQgKi9cXG4tXFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xcbi1cXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XFxuLVxcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciArIDIpO1xcbi1cXHR3cHRyICs9IFBQUF9IRFJMRU47XFxuLVxcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cXHUwMDNlc2Vxbm8sIHdwdHIpO1xcbi1cXHR3cHRyICs9IERFRkxBVEVfT1ZIRDtcXG4gXFx0b2xlbiA9IFBQUF9IRFJMRU4gKyBERUZMQVRFX09WSEQ7XFxuLVxcdHN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcXG4tXFx0c3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gb3NpemUgLSBvbGVuO1xcbitcXHRkaXNjYXJkID0gb3NpemUgXFx1MDAzYz0gb2xlbjtcXG4rXFx0aWYgKGRpc2NhcmQpIHtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcXG4rXFx0XFx0b2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0d3B0ciA9IG9idWY7XFxuK1xcdFxcdHdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTtcXG4rXFx0XFx0d3B0clsxXSA9IFBQUF9DT05UUk9MKHJwdHIpO1xcbitcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcXG4rXFx0XFx0d3B0ciArPSBQUFBfSERSTEVOO1xcbitcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMTYoc3RhdGUtXFx1MDAzZXNlcW5vLCB3cHRyKTtcXG4rXFx0XFx0d3B0ciArPSBERUZMQVRFX09WSEQ7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcXG4rXFx0XFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xcbitcXHR9XFxuK1xcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbDtcXG4gXFx0KytzdGF0ZS1cXHUwMDNlc2Vxbm87XFxuIFxcbiBcXHRvZmYgPSAocHJvdG8gXFx1MDAzZSAweGZmKSA/IDIgOiAzO1xcdC8qIHNraXAgMXN0IHByb3RvIGJ5dGUgaWYgMCAqL1xcbkBAIC0yMzEsOCArMjQyLDEwIEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9PSAwKSB7XFxuIFxcdFxcdFxcdG9sZW4gKz0gb2F2YWlsO1xcbi1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IE5VTEw7XFxuLVxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IDEwMDAwMDA7XFxuK1xcdFxcdFxcdGRpc2NhcmQgPSB0cnVlO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IGRpc2NhcmRfYnVmO1xcbitcXHRcXHRcXHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJyZWFrO1xcdFxcdC8qIGFsbCBkb25lICovXFxuIFxcdFxcdH1cXG5AQCAtMjQyLDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIFxcdC8qXFxuIFxcdCAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKG9sZW4gXFx1MDAzYyBpc2l6ZSBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2M9IG9zaXplKSB7XFxuK1xcdGlmICghZGlzY2FyZCBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2MgaXNpemUgXFx1MDAyNlxcdTAwMjYgb2xlbiBcXHUwMDNjPSBvc2l6ZSkge1xcbiBcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xcbiBcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9wYWNrZXRzKys7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTQyMCw2ICs0MzMsOCBAQCBzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0LCBpc2l6ZSk7XFxuIFxcdFxcdHJldHVybiBERUNPTVBfRVJST1I7XFxuIFxcdH1cXG4rXFx0aWYgKG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTilcXG4rXFx0XFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcXG4gXFxuIFxcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXFxuIFxcdHNlcSA9IGdldF91bmFsaWduZWRfYmUxNihpYnVmICsgUFBQX0hEUkxFTik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtMTcxOSwxMCArMTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4rXFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXFx1MDAzZW10dSk7XFxuIFxcdGludCBsZW47XFxuLVxcdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuK1xcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbiBcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVxcdTAwM2VtdHUgK1xcbitcXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSArXFxuIFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbiBcXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzEuNzU0NTYwNjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDU4MTQ3NTgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfREVGTEFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpfY29tcHJlc3NcIixcbiAgICBcInpfZGVjb21wcmVzc1wiLFxuICAgIFwicGFkX2NvbXByZXNzX3NrYlwiLFxuICAgIFwicHBwX3ByZXBhcmVfdHhfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYyBpbiBQUFAgZGVmbGF0ZSAoel9jb21wcmVzcywgel9kZWNvbXByZXNzKSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHByb3Blcmx5IGhhbmRsZSBzbWFsbCBvdXRwdXQgYnVmZmVycywgYW5kIHVwZGF0ZXMgcGFkX2NvbXByZXNzX3NrYiBpbiBwcHBfZ2VuZXJpYyB0byBzYWZlbHkgcmVhZCBkZXYtXFx1MDAzZW10dS4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgdmlydHVhbCBuZXR3b3JraW5nIGNvZGUgcGF0aHMgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBQUFAgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5AQCAtMTg2LDcgKzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4ge1xuIFx0c3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnO1xuIFx0aW50IHIsIHByb3RvLCBvZmYsIG9sZW4sIG9hdmFpbDtcbitcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdO1xuIFx0dW5zaWduZWQgY2hhciAqd3B0cjtcbitcdGJvb2wgZGlzY2FyZDtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB0aGF0IHRoZSBwcm90b2NvbCBpcyBpbiB0aGUgcmFuZ2Ugd2UgaGFuZGxlLlxuQEAgLTIwMCwyMCArMjAyLDI5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHRpZiAob3NpemUgXHUwMDNlIGlzaXplKVxuIFx0XHRvc2l6ZSA9IGlzaXplO1xuIFxuLVx0d3B0ciA9IG9idWY7XG4tXG4gXHQvKlxuLVx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlci5cbitcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZlxuK1x0ICogdGhlcmUgaXMgcm9vbSBmb3IgY29tcHJlc3NlZCBkYXRhLiAgT3RoZXJ3aXNlIGRpc2NhcmQgdGhlIGNvbXByZXNzZWRcbitcdCAqIG91dHB1dCB3aGlsZSBjb25zdW1pbmcgdGhlIGlucHV0LCBzbyB0aGUgY29tcHJlc3NvciBoaXN0b3J5IHJlbWFpbnNcbitcdCAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLlxuIFx0ICovXG4tXHR3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7XG4tXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4tXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcbi1cdHdwdHIgKz0gUFBQX0hEUkxFTjtcbi1cdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4tXHR3cHRyICs9IERFRkxBVEVfT1ZIRDtcbiBcdG9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xuLVx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4tXHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IG9zaXplIC0gb2xlbjtcbitcdGRpc2NhcmQgPSBvc2l6ZSBcdTAwM2M9IG9sZW47XG4rXHRpZiAoZGlzY2FyZCkge1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4rXHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4rXHR9IGVsc2Uge1xuK1x0XHR3cHRyID0gb2J1ZjtcbitcdFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xuK1x0XHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciArIDIpO1xuK1x0XHR3cHRyICs9IFBQUF9IRFJMRU47XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4rXHRcdHdwdHIgKz0gREVGTEFURV9PVkhEO1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcbitcdFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xuK1x0fVxuK1x0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XG4gXHQrK3N0YXRlLVx1MDAzZXNlcW5vO1xuIFxuIFx0b2ZmID0gKHByb3RvIFx1MDAzZSAweGZmKSA/IDIgOiAzO1x0Lyogc2tpcCAxc3QgcHJvdG8gYnl0ZSBpZiAwICovXG5AQCAtMjMxLDggKzI0MiwxMCBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0XHR9XG4gXHRcdGlmIChzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9PSAwKSB7XG4gXHRcdFx0b2xlbiArPSBvYXZhaWw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IE5VTEw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwO1xuK1x0XHRcdGRpc2NhcmQgPSB0cnVlO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcbitcdFx0XHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyZWFrO1x0XHQvKiBhbGwgZG9uZSAqL1xuIFx0XHR9XG5AQCAtMjQyLDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHQvKlxuIFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChvbGVuIFx1MDAzYyBpc2l6ZSBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2M9IG9zaXplKSB7XG4rXHRpZiAoIWRpc2NhcmQgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjIGlzaXplIFx1MDAyNlx1MDAyNiBvbGVuIFx1MDAzYz0gb3NpemUpIHtcbiBcdFx0c3RhdGUtXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcbiBcdH0gZWxzZSB7XG5AQCAtNDIwLDYgKzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuIFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCBpc2l6ZSk7XG4gXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXHR9XG4rXHRpZiAob3NpemUgXHUwMDNjIFBQUF9IRFJMRU4pXG4rXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXG4gXHQvKiBDaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVyLiAqL1xuIFx0c2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgKyBQUFBfSERSTEVOKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTcxOSwxMCArMTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4rXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgK1xuK1x0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzEuNzU0NTY3NjI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ3OTAyNzczNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgUFBQIGNvZGUuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIGFuZCBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLlxuXG5GaXJzdCwgaW4gYHBwcF9kZWZsYXRlLmNgLCB0aGUgZm9jdXMgaXMgb24gYHpfY29tcHJlc3MoKWAgYW5kIGB6X2RlY29tcHJlc3MoKWAuIEkgc2VlIHRoZXkncmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGB6X2NvbXByZXNzKClgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHNtYWxsIG91dHB1dCBzaXplcyAoYG9zaXplYCkuIFRoZSBvbGQgY29kZSAoYHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQgPSBOVUxMOyBzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IDEwMDAwMDA7YCkgbG9va3MgZGljZXkuIElmIHpsaWIgdHJpZXMgdG8gd3JpdGUgdG8gYSBudWxsIHBvaW50ZXIgdGhhdCdzIGJhZCBuZXdzISBUaGUgZml4IG1ha2VzIHN1cmUgd2UgZG9uJ3QgZW5kIHVwIHdyaXRpbmcgdG8gbnVsbC4gSW4gYHpfZGVjb21wcmVzcygpYCwgYSBuZXcgY2hlY2sgYGlmIChvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTikgcmV0dXJuIERFQ09NUF9FUlJPUjtgIGhhcyBiZWVuIGFkZGVkLCB3aGljaCBzZWVtcyBzZW5zaWJsZSB0byBwcmV2ZW50IGFuIGVycm9yIHRoZXJlLlxuXG5UaGVuLCBtb3ZpbmcgdG8gYHBwcF9nZW5lcmljLmNgLCB0aGUgcGF0Y2ggaW52b2x2ZXMgYHBhZF9jb21wcmVzc19za2IoKWAsIHdoZXJlIHRoZXkncmUgbm93IHJlYWRpbmcgYFJFQURfT05DRShkZXYtXHUwMDNlbXR1KWAuIE5vdGhpbmcgaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyBvYnZpb3VzbHkgcHJvYmxlbWF0aWMgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGtlZXAgYW4gZXllIG9uIHdoYXQgaXMgYmVpbmcgdXBkYXRlZC5cblxuTm93LCB0byBnaXZlIHRoaXMgYSBwcm9wZXIgZXZhbHVhdGlvbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBzeW1ib2xzLiBMZXQncyBzZWUgaG93IGBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZ2VuZXJpY2AgYXJlIGNvbmZpZ3VyZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIHVzZSBteSB0b29scyB0byBzZWUgd2hhdCBpcyBlbmFibGVkLCBhbmQgd2hlcmUgdGhlc2UgY29tcG9uZW50cyBzaXQgaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo0Ni41NDQ4NDcxMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxMzU0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFBQX0RFRkxBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM3PWNvbmZpZyBQUFBfQlNEQ09NUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcIlBQUCBEZWZsYXRlIGNvbXByZXNzaW9uXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSArPSBic2RfY29tcC5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSArPSBwcHBfZGVmbGF0ZS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19QUFBfTVBQRSkgKz0gcHBwX21wcGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo0Ni42MTg5ODgzNDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk5Mjc3MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFBQUCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZXNlIFBQUCBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBQUFAgc3Vic3lzdGVtLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEkgbmVlZCB0byBzZWUgaG93IGBQUFBgLCBgUFBQX0RFRkxBVEVgLCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgc2V0IHVwLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hpY2ggb3RoZXIgb3B0aW9ucyBlbmFibGUgdGhlc2UsIHdoYXQgYXJlIHRoZSByZWxldmFudCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgd2hlcmUgYXJlIHRoZSBjb25kaXRpb25hbCBidWlsZHMgaGFwcGVuaW5nPyBHb3R0YSB0cmFjZSBkb3duIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGF0aHdheSB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCByZXF1aXJlbWVudHMgY29tcGxldGVseS4gVGhpcyBpcyB0aGUgYmVkcm9jayB0byB1bmRlcnN0YW5kaW5nIGFuZCwgaWYgbmVjZXNzYXJ5LCBtb2RpZnlpbmcgdGhlc2UgUFBQIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6NDkuNDE4MjY3ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcbiAgNDE6XFx0XFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXFxuICA0MjpcXHRcXHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcXG4gIDQzOlxcdFxcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXG4gIDQ0OlxcdFxcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCxcXG4gIDQ1OlxcdFxcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFxcXCJQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblxcXCIsXFxuICA0ODpcXHRcXHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxcbiAgNDk6XFx0XFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBCU0QgY29tcHJlc3Npb24gY29kZSB3aWxsIGFsd2F5cyBiZSBjb21waWxlZCBhcyBhXFxuICA1MjpcXHRcXHQgIG1vZHVsZTsgaXQgaXMgY2FsbGVkIGJzZF9jb21wIGFuZCB3aWxsIHNob3cgdXAgaW4gdGhlIGRpcmVjdG9yeVxcbiAgNTM6XFx0XFx0ICBtb2R1bGVzIG9uY2UgeW91IGhhdmUgc2FpZCBcXFwibWFrZSBtb2R1bGVzXFxcIi4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0Y29uZmlnIFBQUF9ERUZMQVRFXFxuICA1NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiXFxuICA1NzpcXHRcXHRzZWxlY3QgWkxJQl9JTkZMQVRFXFxuICA1ODpcXHRcXHRzZWxlY3QgWkxJQl9ERUZMQVRFXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzIHRoZVxcbiAgNjE6XFx0XFx0ICBEZWZsYXRlIGFsZ29yaXRobSAodGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgZ3ppcCB1c2VzKSB0byBjb21wcmVzc1xcbiAgNjI6XFx0XFx0ICBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZS4gIFRoZSBtYWNoaW5lIGF0IHRoZVxcbiAgNjM6XFx0XFx0ICBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGVcXG4gIDY0OlxcdFxcdCAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuICBFdmVuIGlmXFxuICA2NTpcXHRcXHQgIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCwgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBQUFBfRklMVEVSXFxuICA3MDpcXHRcXHRib29sIFxcXCJQUFAgZmlsdGVyaW5nXFxcIlxcbiAgNzE6XFx0XFx0aGVscFxcbiAgNzI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZSBwYWNrZXRzIHBhc3Npbmcgb3ZlclxcbiAgNzM6XFx0XFx0ICBQUFAgaW50ZXJmYWNlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIHBhY2tldHMgY291bnQgYXNcXG4gIDc0OlxcdFxcdCAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwXFxuICA3NTpcXHRcXHQgIGEgZGVtYW5kLWRpYWxlZCBsaW5rKSBhbmQgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZHJvcHBlZCBlbnRpcmVseS5cXG4gIDc2OlxcdFxcdCAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZFxcbiAgNzc6XFx0XFx0ICBhY3RpdmUtZmlsdGVyIG9wdGlvbnMgdG8gcHBwZC5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjQ5LjQxODM1Nzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNTMwNTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBgcHBwX2RlZmxhdGUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBhcmUgaW50ZWdyYXRlZCB3aXRoaW4gdGhpcyBQUFAgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgZnJvbSB0aGUgemxpYiBsaWJyYXJ5IGFyZSBpbnZva2VkIHdpdGhpbiBgcHBwX2RlZmxhdGUuY2AuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGxpbmcgc3RydWN0dXJlLCB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQsIGFuZCB0aGUgb3ZlcmFsbCB3b3JrZmxvdy4gSSdsbCBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZSB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gcHJvY2Vzc2VzLiBLbm93aW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoaXMgc3BlY2lmaWMgbW9kdWxlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjUxLjQzMzY3MDUzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0NjU4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6X2NvbXByZXNzfHpfZGVjb21wcmVzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NDM9c3RhdGljIGludFxcdHpfZGVjb21wX2luaXQodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NS1cXHRcXHRcXHRcXHQgICBpbnQgdW5pdCwgaW50IGhkcmxlbiwgaW50IG1ydSwgaW50IGRlYnVnKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo0NjpzdGF0aWMgaW50XFx0el9jb21wcmVzcyh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqcnB0cixcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00Ny1cXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICpvYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NDk9c3RhdGljIHZvaWRcXHR6X2luY29tcCh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGljbnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjUwOnN0YXRpYyBpbnRcXHR6X2RlY29tcHJlc3Modm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTEtXFx0XFx0XFx0XFx0aW50IGlzaXplLCB1bnNpZ25lZCBjaGFyICpvYnVmLCBpbnQgb3NpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9MTY1PXN0YXRpYyB2b2lkIHpfY29tcF9yZXNldCh2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0xNzMtLyoqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6MTc0OiAqXFx0el9jb21wcmVzcyAtIGNvbXByZXNzIGEgUFBQIHBhY2tldCB3aXRoIERlZmxhdGUgY29tcHJlc3Npb24uXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTc1LSAqXFx0QGFyZzpcXHRwb2ludGVyIHRvIHByaXZhdGUgc3RhdGUgZm9yIHRoZSBjb21wcmVzc29yXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0xODMtICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6MTg0OnN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTg1LVxcdCAgICAgICBpbnQgaXNpemUsIGludCBvc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTIzOS1cXHRcXHRcXHRcXHRwcmludGsoS0VSTl9FUlJcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzoyNDA6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ6X2NvbXByZXNzOiBkZWZsYXRlIHJldHVybmVkICVkXFxcXG5cXFwiLCByKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0yNDEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz0zOTM9c3RhdGljIHZvaWQgel9kZWNvbXBfcmVzZXQodm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDAxLS8qKlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQwMjogKlxcdHpfZGVjb21wcmVzcyAtIGRlY29tcHJlc3MgYSBEZWZsYXRlLWNvbXByZXNzZWQgcGFja2V0LlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQwMy0gKlxcdEBhcmc6XFx0cG9pbnRlciB0byBwcml2YXRlIHN0YXRlIGZvciB0aGUgZGVjb21wcmVzc29yXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00MjEtICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDIyOnN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQyMy1cXHRcXHQgdW5zaWduZWQgY2hhciAqb2J1ZiwgaW50IG9zaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDMxLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDMyOlxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogc2hvcnQgcGt0ICglZClcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDMzLVxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgaXNpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDQyLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDQzOlxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NDQtXFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0LCBzZXEsIHN0YXRlLVxcdTAwM2VzZXFubyBcXHUwMDI2IDB4ZmZmZik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NzUtXFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo0NzY6XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcInpfZGVjb21wcmVzcyVkOiBpbmZsYXRlIHJldHVybmVkICVkICglcylcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDc3LVxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgciwgKHN0YXRlLVxcdTAwM2VzdHJtLm1zZz8gc3RhdGUtXFx1MDAzZXN0cm0ubXNnOiBcXFwiXFxcIikpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTAxLVxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTAyOlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogcmFuIG91dCBvZiBtcnVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTAzLVxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01MDktXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1MTA6XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcInpfZGVjb21wcmVzcyVkOiBkaWRuJ3QgZ2V0IHByb3RvXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTUxMS1cXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZXVuaXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NTg1PXN0YXRpYyBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU5MC1cXHQuY29tcF9yZXNldCA9XFx0XFx0el9jb21wX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjU5MTpcXHQuY29tcHJlc3MgPVxcdFxcdHpfY29tcHJlc3MsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTkyLVxcdC5jb21wX3N0YXQgPVxcdFxcdHpfY29tcF9zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU5Ni1cXHQuZGVjb21wX3Jlc2V0ID1cXHRcXHR6X2RlY29tcF9yZXNldCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1OTc6XFx0LmRlY29tcHJlc3MgPVxcdFxcdHpfZGVjb21wcmVzcyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01OTgtXFx0LmluY29tcCA9XFx0XFx0el9pbmNvbXAsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz02MDM9c3RhdGljIHN0cnVjdCBjb21wcmVzc29yIHBwcF9kZWZsYXRlX2RyYWZ0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjA4LVxcdC5jb21wX3Jlc2V0ID1cXHRcXHR6X2NvbXBfcmVzZXQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NjA5OlxcdC5jb21wcmVzcyA9XFx0XFx0el9jb21wcmVzcyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy02MTAtXFx0LmNvbXBfc3RhdCA9XFx0XFx0el9jb21wX3N0YXRzLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjE0LVxcdC5kZWNvbXBfcmVzZXQgPVxcdFxcdHpfZGVjb21wX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjYxNTpcXHQuZGVjb21wcmVzcyA9XFx0XFx0el9kZWNvbXByZXNzLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTYxNi1cXHQuaW5jb21wID1cXHRcXHR6X2luY29tcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6NTEuNDgwNjI0OTk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwMzA5MTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgYHBhZF9jb21wcmVzc19za2JgIGluIFBQUCBHZW5lcmljIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgbmV0d29yayBjb21wcmVzc2lvbiwgYW5kIGdpdmVuIHRoYXQgSSdtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZWx5IHJlbGF0ZWQgdG8gcGFja2V0IG1hbmlwdWxhdGlvbiBvciBmcmFtaW5nLCBteSBpbnR1aXRpb24gaXMgbGVhZGluZyBtZSBkaXJlY3RseSB0byB0aGUgUFBQIChQb2ludC10by1Qb2ludCBQcm90b2NvbCkgbGF5ZXIuIFNvLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgcHBwX2dlbmVyaWMuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9wcHBgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGFyZ2V0aW5nIHRoZSBgcGFkX2NvbXByZXNzX3NrYmAgZnVuY3Rpb24uIFRoaXMgbmFtaW5nIHN1Z2dlc3RzIGl0IGhhbmRsZXMgcGFkZGluZyBvciBjb21wcmVzc2lvbiBvZiBzb2NrZXQgYnVmZmVyIHNrYnMsIHdoaWNoLCBpbiBhIFBQUCBjb250ZXh0LCBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG9wdGltaXppbmcgbmV0d29yayB0cmFuc21pc3Npb24sIHBlcmhhcHMgZm9yIGxvd2VyIGJhbmR3aWR0aCBvciBlcnJvci1wcm9uZSBsaW5rcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgUFBQIGRhdGEgZmxvdyBhbmQgaG93IGl0IGltcGFjdHMgcGFja2V0IHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgbWF5YmUgZXZlbiBzZWN1cml0eS4gSSBzdXNwZWN0IHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB0aGUgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjUzLjc4MzcxODE2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NTczNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZF9jb21wcmVzc19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3MTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTcxODpwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3Nzg9cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg3Mi1cXHRcXHR9XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTg3MzpcXHRcXHRuZXdfc2tiID0gcGFkX2NvbXByZXNzX3NrYihwcHAsIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg3NC1cXHRcXHRpZiAoIW5ld19za2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjU0LjA2OTMwMDQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyOTgyMDYzOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gUFBQIENvbXByZXNzaW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwYWRfY29tcHJlc3Nfc2tiYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCdzICp1c2VkKi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbXByZXNzaW9uIHdpdGhpbiB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBzdWJ0bGUgaGFwcGVuaW5nIHRoYXQgaXMgY29udHJpYnV0aW5nIHRvIGFuIGlzc3VlIEkndmUgYmVlbiBtdWxsaW5nIG92ZXIsIGFuZCB0aGlzIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBwbGFjZSB0byBmaW5kIGNsdWVzLiBcblxuSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgcGFkX2NvbXByZXNzX3NrYmAuIEtub3dpbmcgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGV2YWx1YXRlIGl0cyBpbXBhY3QuIEknbSBpbWFnaW5pbmcgdGhlcmUncyBzb21lIGtpbmQgb2YgcGFkZGluZyBtYW5pcHVsYXRpb24gZ29pbmcgb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgU0tCIGl0c2VsZiBhbmQgaG93IGNvbXByZXNzZWQgZGF0YSBpcyBpbnNlcnRlZCBvciBoYW5kbGVkLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIGVuc3VyaW5nIGFsaWdubWVudCwgZGVhbGluZyB3aXRoIGhlYWRlciBsZW5ndGhzLCBvciBwZXJoYXBzIGV2ZW4gaGFuZGxpbmcgZGF0YSBib3VuZGFyaWVzIGluIHRoZSBwYWNrZXQuIEnigJltIGV4cGVjdGluZyBhIGZldyBrZXkgY2FsbGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHN0YWdlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIHBhc3NlZCwgaG93IGl0J3MgYmVpbmcgbW9kaWZpZWQsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGJ5IHRoZSBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC4gSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBoaWRkZW4gd2l0aGluIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTI6NTcuMDUxMzY2NDc4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzE1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzE1OlxcdH1cXG4xNzE2OlxcdFxcbjE3MTc6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXFxuMTcxODpcXHRwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNzE5OlxcdHtcXG4xNzIwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuMTcyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4xNzIyOlxcdFxcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpO1xcbjE3MjM6XFx0XFx0aW50IGxlbjtcXG4xNzI0OlxcdFxcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbjE3MjU6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbjE3MjY6XFx0XFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xcbjE3Mjc6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XFxuMTcyODpcXHRcXG4xNzI5OlxcdFxcdGlmIChza2JfbGluZWFyaXplKHNrYikpXFxuMTczMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzMxOlxcdFxcbjE3MzI6XFx0XFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xcbjE3MzM6XFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuMTczNDpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3MzU6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4xNzM2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3Mzc6XFx0XFx0fVxcbjE3Mzg6XFx0XFx0aWYgKGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFxcdTAwM2UgUFBQX0hEUkxFTilcXG4xNzM5OlxcdFxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXFxuMTc0MjpcXHRcXHRsZW4gPSBwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wcmVzcyhwcHAtXFx1MDAzZXhjX3N0YXRlLCBza2ItXFx1MDAzZWRhdGEgLSAyLFxcbjE3NDM6XFx0XFx0XFx0XFx0XFx0ICAgbmV3X3NrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4gKyAyLFxcbjE3NDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29tcHJlc3Nvcl9za2Jfc2l6ZSk7XFxuMTc0NTpcXHRcXHRpZiAobGVuIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NDUF9VUCkpIHtcXG4xNzQ2OlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuMTc0NzpcXHRcXHRcXHRza2IgPSBuZXdfc2tiO1xcbjE3NDg6XFx0XFx0XFx0c2tiX3B1dChza2IsIGxlbik7XFxuMTc0OTpcXHRcXHRcXHRza2JfcHVsbChza2IsIDIpO1xcdC8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqL1xcbjE3NTA6XFx0XFx0fSBlbHNlIGlmIChsZW4gPT0gMCkge1xcbjE3NTE6XFx0XFx0XFx0LyogZGlkbid0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqL1xcbjE3NTI6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc1MzpcXHRcXHRcXHRuZXdfc2tiID0gc2tiO1xcbjE3NTQ6XFx0XFx0fSBlbHNlIHtcXG4xNzU1OlxcdFxcdFxcdC8qXFxuMTc1NjpcXHRcXHRcXHQgKiAobGVuIFxcdTAwM2MgMClcXG4xNzU3OlxcdFxcdFxcdCAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZFxcbjE3NTg6XFx0XFx0XFx0ICogZnJhbWVzLiAgVGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gLTEgaWYgd2VcXG4xNzU5OlxcdFxcdFxcdCAqIHNob3VsZCBkcm9wIHRoZSBmcmFtZS4gIFdlIGNhbm5vdCBzaW1wbHkgdGVzdFxcbjE3NjA6XFx0XFx0XFx0ICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZVxcbjE3NjE6XFx0XFx0XFx0ICogdGhlIHNhbWUgbnVtYmVyLlxcbjE3NjI6XFx0XFx0XFx0ICovXFxuMTc2MzpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3NjQ6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXFxcblxcXCIpO1xcbjE3NjU6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc2NjpcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4xNzY3OlxcdFxcdH1cXG4xNzY4OlxcdFxcdHJldHVybiBuZXdfc2tiO1xcbjE3Njk6XFx0fVxcbjE3NzA6XFx0XFxuMTc3MTpcXHQvKlxcbjE3NzI6XFx0ICogQ29tcHJlc3MgYW5kIHByZXBhcmUgdG8gc2VuZCBhIGZyYW1lLlxcbjE3NzM6XFx0ICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aC5cXG4xNzc0OlxcdCAqIFJldHVybnMgMSBpZiB0aGUgc2tiIHdhcyBjb25zdW1lZCwgMCBpZiBpdCBjYW4gYmUgcGFzc2VkIHRvIHBwcF9wdXNoKCkuXFxuMTc3NTpcXHQgKiBAcHNrYiBpcyB1cGRhdGVkIGlmIGEgY29tcHJlc3NvciBpcyBpbiB1c2UuXFxuMTc3NjpcXHQgKi9cXG4xNzc3OlxcdHN0YXRpYyBpbnRcXG4xNzc4OlxcdHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4xNzc5OlxcdHtcXG4xNzgwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuMTc4MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XFxuMTc4MjpcXHRcXHRpbnQgcHJvdG8gPSBQUFBfUFJPVE8oc2tiKTtcXG4xNzgzOlxcdFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xcbjE3ODQ6XFx0XFx0aW50IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTI6NTcuMDUxNTIzNjQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTc1NTU2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHNuaXBwZXQ6XG5cbioqRGVjb21wcmVzc2lvbiBhbmQgQ29tcHJlc3Npb24gV29ya2Zsb3cgaW4gUFBQIHdpdGggRGVmbGF0ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBEZWZsYXRlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcGxheXMgb3V0IGluIFBQUC4gSSBzZWUgYHBhZF9jb21wcmVzc19za2JgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcyBieSBjYWxsaW5nIGBwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcHJlc3NgLiBXaGVuIHdlJ3JlIHVzaW5nIERlZmxhdGUsIHRoYXQgYWN0dWFsbHkgcmVzb2x2ZXMgdG8gYHpfY29tcHJlc3NgLiBOb3csIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgel9kZWNvbXByZXNzYCBpcyB0aGUgY291bnRlcnBhcnQsIGhhbmRsaW5nIHRoZSB1bnBhY2tpbmcgc2lkZSBvZiB0aGluZ3Mgd2hlbiByZWNlaXZpbmcgZnJhbWVzLCBzcGVjaWZpY2FsbHkgZnJvbSBlaXRoZXIgdGhlIGdlbmVyaWMgUFBQIGludGVyZmFjZSBvciBhc3luY2hyb25vdXMvc3luY2hyb25vdXMgVFRZIFBQUCBjb25uZWN0aW9ucy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgc3RydWN0dXJlIG9mIHRoZSBgZGVjb21wcmVzc2AgZnVuY3Rpb24uIFRvIGZ1bGx5IGdyYXNwIHRoaXMgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB3aGVyZSBgZGVjb21wcmVzc2AgKHdoaWNoIGlzIGB6X2RlY29tcHJlc3NgIGluIHRoaXMgY2FzZSkgaXMgY2FsbGVkLiBJdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgRGVmbGF0ZSBkZWNvbXByZXNzaW9uIHNpZGUgb2YgUFBQIG9wZXJhdGlvbnMuIFdoZXJlIGlzIGl0IGJlaW5nIGluaXRpYXRlZD8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMjo1OS42NjkwODE0NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDc1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlZGVjb21wcmVzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjU0Nz1wcHBfZGVjb21wcmVzc19mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNTc3LVxcdFxcdC8qIHRoZSBkZWNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyB0aGUgQS9DIGJ5dGVzIGluIHRoZSBoZHIgKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyNTc4OlxcdFxcdGxlbiA9IHBwcC1cXHUwMDNlcmNvbXAtXFx1MDAzZWRlY29tcHJlc3MocHBwLVxcdTAwM2VyY19zdGF0ZSwgc2tiLVxcdTAwM2VkYXRhIC0gMixcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNTc5LVxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuICsgMiwgbnMtXFx1MDAzZWRhdGEsIG9idWZmX3NpemUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMjo1OS43MjY1NTk1NjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUwOTUzMjEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQUFAgRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBQUFAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBQUFAgaXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nIGRyaXZlciBpbiBMaW51eCwgZXNzZW50aWFsbHkgYSB2aXJ0dWFsIGRldmljZSwgYWNjZXNzaWJsZSB2aWEgYC9kZXYvcHBwYCBhbmQgaW9jdGxzIGxpa2UgYFBQUElPQ1NDT01QUkVTU2AsIHdoaWNoIG1ha2VzIGl0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBHb29kLCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgZGVzY3JpcHRpb25zIGZvciBgL2Rldi9wcHBgIGFuZCB0aG9zZSBpb2N0bHM7IHRoYXQncyBhIGtleSBmaXJzdCBzdGVwLiBTaW5jZSBpdCdzIGEgdmlydHVhbCBkZXZpY2UsIHRoaXMgc2hvdWxkIGJlIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgYW5kIGlvY3RscyB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWFsaXplZCBoYXJkd2FyZSwgc28gdGhhdCdzIGEgYmlnIHBsdXMuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGBXb3J0aEZ1enppbmdgLiBBaCwgZXhjZWxsZW50ISBJdCBsb29rcyBsaWtlIHdlJ3JlIHRvdWNoaW5nIGV4ZWN1dGFibGUgY29kZSBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIHNwZWNpZmljYWxseSwgZm9jdXNpbmcgb24gYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYC4gQWxzbyBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgIHdpdGggYHBhZF9jb21wcmVzc19za2JgLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeSwgYW5kIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBmaXhlcyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZHMgYW5kIGNvbXByZXNzZWQgb3V0cHV0IGRpc2NhcmRpbmcgaW4gYHpfY29tcHJlc3NgL2B6X2RlY29tcHJlc3NgIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IGZ1enppbmcgd2lsbCBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcgY29uZmlybXMgdGhhdCFcblxuRmluYWxseSwgbGV0J3MgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIHJpZ2h0LiBXZSBoYXZlIGBQUFBgIGFuZCBgUFBQX0RFRkxBVEVgLCBnb29kLiBJJ2xsIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgc2VhcmNoIGZvciBgQ09ORklHX1BQUGAgaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB3aWxsIHRlbGwgbWUgaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MDMuMjM2MDk0NDgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk4NzExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Njpjb25maWcgUFBQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM1PWlmIFBQUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjM3OmNvbmZpZyBQUFBfQlNEQ09NUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcIlBQUCBEZWZsYXRlIGNvbXByZXNzaW9uXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNjgtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Njk6Y29uZmlnIFBQUF9GSUxURVJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03MC1cXHRib29sIFxcXCJQUFAgZmlsdGVyaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODAtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6ODE6Y29uZmlnIFBQUF9NUFBFXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODItXFx0dHJpc3RhdGUgXFxcIlBQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkxLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjkyOmNvbmZpZyBQUFBfTVVMVElMSU5LXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiUFBQIG11bHRpbGluayBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTAzLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNDpjb25maWcgUFBQT0FUTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgQVRNXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTEyLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjExMzpjb25maWcgUFBQT1hcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTQtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTE2OmNvbmZpZyBQUFBPRVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgRXRoZXJuZXRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMjc9Y2hvaWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMzgtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTM5OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCIxIGJpdCAoMiBidWNrZXRzKVxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDEtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQyOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0My1cXHRib29sIFxcXCIyIGJpdHMgKDQgYnVja2V0cylcXFwiXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ0LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE0NTpjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiNCBiaXRzICgxNiBidWNrZXRzKVxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDctXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ4OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0OS1cXHRib29sIFxcXCI4IGJpdHMgKDI1NiBidWNrZXRzKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1MT1lbmRjaG9pY2VcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTUzOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTQtXFx0aW50XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjAtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYxOmNvbmZpZyBQUFRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTYyLVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBJUHY0IChQUFRQKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgxPWlmIFRUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowMy4yODIwODQzOTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUwMjAxMzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgUFBQJ3MgUGFyZW50IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBQUFAgc3RhbmRzIGluIHRoZSBkZXBlbmRlbmN5IHRyZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCDigJMgdGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHRoZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHRoZWlyIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJ2xsIHNjYW4gdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgcGFyZW50IGRpcmVjdGl2ZXMsIG9yIGFueXRoaW5nIHRoYXQgZXhwbGljaXRseSBsaW5rcyBQUFAgdG8gYW5vdGhlciBtb2R1bGUgb3IgZmVhdHVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgUFBQIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBCYXNpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgbGluZWFnZSBpbiB0aGUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowNC43ODQwOTk4OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTk1MDMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKmRyaXZlcnMvbmV0L3BwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjUyODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowNS4wMDQwNTgwMjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3NTU3NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgdG8ganVtcCByaWdodCBpbnRvIHRoZSBoZWFydCBvZiBpdC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMgYXJvdW5kIGxpbmUgNTI4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNlcnRhaW4gY29uZmlndXJhdGlvbiBvciBvcHRpb24gcmVzaWRlcy4gVGltZSB0byBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGhpZGluZyB0aGVyZS4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowNy4xNzk2MzQ3NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXFwiXFxuIDUyMTpcXHRcXG4gNTIyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxcIlxcbiA1MjM6XFx0XFxuIDUyNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxcIlxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1xcXCJcXG4gNTI5OlxcdFxcbiA1MzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcXFwiXFxuIDUzMTpcXHRcXG4gNTMyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXFxcIlxcbiA1MzM6XFx0XFxuIDUzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXFxcIlxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcXFwiXFxuIDUzNzpcXHRcXG4gNTM4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcXFwiXFxuIDUzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MDcuMTc5NzA2NzU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxOTIzMTM0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBQUCBEZWZsYXRlIENvbXByZXNzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBQUFBgIGFuZCBgUFBQX0RFRkxBVEVgIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYFBQUGAgaXMgZ29pbmcgdG8gdXNlIFNMSEMsIGJ1dCBgUFBQX0RFRkxBVEVgIGlzIHNwZWNpZmljYWxseSBzZXQgdXAgdG8gdXRpbGl6ZSBgWkxJQl9JTkZMQVRFYCBhbmQgYFpMSUJfREVGTEFURWAuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgc2V0dXAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYCBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIGFyZSB0aGUgbWFpbiBzdXNwZWN0cy4gSSBhbHNvIHNlZSB0aGF0IGBwYWRfY29tcHJlc3Nfc2tiYCwgYSBzdGF0aWMgaW5saW5lIGhlbHBlciBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgc3VjaCBhcyBgcHBwX3ByZXBhcmVfdHhfc2tiYCwgYW5kIGBwcHBfZGVjb21wcmVzc19mcmFtZWAsIGFyZSBwb3RlbnRpYWxseSBpbXBhY3RlZC5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4gQXJlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2Agc3RhdGljLCBleHBvcnRlZCwgb3Igc29tZXRoaW5nIGVsc2U/IEkgY2hlY2sgYHBwcF9kZWZsYXRlLmNgIGFuZCBjb25maXJtIHRoZXkgYXJlIGluZGVlZCBkZWNsYXJlZCBhcyBgc3RhdGljIGludCB6X2NvbXByZXNzKC4uLilgIGFuZCBgc3RhdGljIGludCB6X2RlY29tcHJlc3MoLi4uKWAuIEhvbGQgb24gYSBtaW51dGUuLi5ldmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYyB3aXRoaW4gdGhlIC5jIGZpbGUsIHRoZSBMaW51eCBrZXJuZWwgc3RpbGwgZ2VuZXJhdGVzIHN5bWJvbHMgZm9yIHRoZW0gaW4gYHZtbGludXhgIGFuZCBga2FsbHN5bXNgIGlmIHRoZXkgYXJlbid0IGlubGluZWQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhleSBpbmxpbmVkPyBJIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgcmVmZXJlbmNlZCB2aWEgc3RydWN0IGNvbXByZXNzb3IgZnVuY3Rpb24gcG9pbnRlcnMgbGlrZSBgcHBwX2RlZmxhdGUuY29tcHJlc3MgPSB6X2NvbXByZXNzYCBhbmQgYHBwcF9kZWZsYXRlLmRlY29tcHJlc3MgPSB6X2RlY29tcHJlc3NgLCB3aGljaCBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLiBBaGEhIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gZm9yIGBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZGVmbGF0ZV9kcmFmdGAsIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgb3V0LW9mLWxpbmUgZnVuY3Rpb25zLiBUaGF0J3MgdGhlIGtleS5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIExvb2tpbmcgYXQgYHBhZF9jb21wcmVzc19za2JgIGl0J3MgZGVjbGFyZWQgYHN0YXRpYyBpbmxpbmVgIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGFuZCBjYWxsZWQgYnkgYHBwcF9wcmVwYXJlX3R4X3NrYmAgYW5kIGBwcHBfZGVjb21wcmVzc19mcmFtZWAuIEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwYWRfY29tcHJlc3Nfc2tiYCBhbmQgb3RoZXIgZnVuY3Rpb25zIGluIGBwcHBfZ2VuZXJpYy5jYCBhcyBhIGZpbmFsIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjExLjM3MjAyMjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzcxMTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZF9jb21wcmVzc19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTcxNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNzE4OnBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE3MTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTc3OD1wcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODcyLVxcdFxcdH1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxODczOlxcdFxcdG5ld19za2IgPSBwYWRfY29tcHJlc3Nfc2tiKHBwcCwgc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODc0LVxcdFxcdGlmICghbmV3X3NrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MTEuNDIwNDAzOTkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjk4NDQxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmluYWxpemluZyB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uIGZvciBQUFAgRGVmbGF0ZSoqXG5cbk9rYXksIGxldCdzIHJlY2FwLiBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBncmFwaCBhbmQgY29uZmlybWVkIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIGBwYWRfY29tcHJlc3Nfc2tiYCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBvbmx5IHdpdGhpbiBgcHBwX3ByZXBhcmVfdHhfc2tiYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHBwcF94bWl0X3Byb2Nlc3NgIGFuZCBgcHBwX3N0YXJ0X3htaXRgLlxuXG5JJ3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoZSAqRm9jdXNTeW1ib2xzKi4gIFdlIG5lZWQgdG8gdGFyZ2V0IGB6X2NvbXByZXNzYCwgYHpfZGVjb21wcmVzc2AsIGBwYWRfY29tcHJlc3Nfc2tiYCwgYW5kIGBwcHBfcHJlcGFyZV90eF9za2JgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBQUFAgRGVmbGF0ZS5cblxuVGhlIHJlcXVpcmVkICpFbmFibGVDb25maWdzKiBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgUFBQYCBhbmQgYFBQUF9ERUZMQVRFYC4gTm8gc3VycHJpc2VzIHRoZXJlLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LlxuXG5UaGUgcmVhc29uaW5nIGlzIHNvdW5kOiBUaGlzIHBhdGNoIGFkZHJlc3NlcyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBzbWFsbCBvdXRwdXQgYnVmZmVyIGhhbmRsaW5nIGFuZCBib3VuZHMgY2hlY2tzIGluIHRoZSBkZWZsYXRlIHJvdXRpbmVzLCAqYW5kKiBhIGNvbmN1cnJlbmN5IGlzc3VlIGR1cmluZyBidWZmZXIgYWxsb2NhdGlvbiBpbiBgcGFkX2NvbXByZXNzX3NrYmAuICBTaW5jZSB0aGlzIGltcGFjdHMgcmVhY2hhYmxlIHZpcnR1YWwgbmV0d29yayBwYWNrZXQgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBwYXRod2F5cywgYW5kIGludm9sdmVzIGlvY3RscywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgd2lsbCBiZSBlZmZlY3RpdmUgaW4gZGV0ZWN0aW5nIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5IHByb2JsZW1zLCBhbmQgcG90ZW50aWFsIGJ1ZmZlciBtYW5hZ2VtZW50IGlzc3Vlcy4gU28gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC5cblxuSSd2ZSBkb25lIGEgbGFzdCBxdWljayBjaGVjayBhbmQgZW5zdXJlZCB0aGUgKkNvbmZpZ3MqIGFuZCAqRm9jdXNTeW1ib2xzKiBhcmUgY29ycmVjdCwgYW5kIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgaW5kZWVkIHNldCBhcyBleHBlY3RlZC4gRXZlcnl0aGluZyBsb29rcyBwZXJmZWN0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjUsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjE3LjQ5MDI1MDc2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDY0MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9ERUZMQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiel9jb21wcmVzc1wiLFxuICAgIFwiel9kZWNvbXByZXNzXCIsXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9ERUZMQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiel9jb21wcmVzc1wiLFxuICAgIFwiel9kZWNvbXByZXNzXCIsXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MTcuNTY5MzIzMTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg3NzEzNTAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjE3LjU2OTg4Mzc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzU4NzY1NzExNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgc2l6aW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgaXNzdWVzIGluIFBQUCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uOlxcbjEuIEluIGBwcHBfZ2VuZXJpYy5jOnBhZF9jb21wcmVzc19za2IoKWAsIGBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxcbjIuIEluIGBwcHBfZGVmbGF0ZS5jOnpfY29tcHJlc3MoKWAsIGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgYG9zaXplIFxcdTAwM2M9IG9sZW5gIG9yIHRoZSBvdXRwdXQgYnVmZmVyIGZpbGxzIHVwIGJ5IHJvdXRpbmcgY29tcHJlc3NlZCBvdXRwdXQgaW50byBhIGxvY2FsIHNjcmF0Y2ggYnVmZmVyIGBkaXNjYXJkX2J1ZmAgdG8ga2VlcCBjb21wcmVzc29yIHN0YXRlIHN5bmNocm9uaXplZCB3aGlsZSBkaXNjYXJkaW5nIHRoZSBvdXRwdXQsIHJlcGxhY2luZyBidWdneSBiZWhhdmlvciB3aGVyZSBgbmV4dF9vdXRgIHdhcyBzZXQgdG8gTlVMTC4gYGRpc2NhcmRfYnVmYCBpcyB3cml0ZS1vbmx5IGZvciBgemxpYl9kZWZsYXRlYCBhbmQgbmV2ZXIgcmVhZC5cXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTmAgaXMgYWRkZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcyBpbnRvIGBvYnVmYC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5AQCAtMTg2LDcgKzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4ge1xuIFx0c3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnO1xuIFx0aW50IHIsIHByb3RvLCBvZmYsIG9sZW4sIG9hdmFpbDtcbitcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdO1xuIFx0dW5zaWduZWQgY2hhciAqd3B0cjtcbitcdGJvb2wgZGlzY2FyZDtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB0aGF0IHRoZSBwcm90b2NvbCBpcyBpbiB0aGUgcmFuZ2Ugd2UgaGFuZGxlLlxuQEAgLTIwMCwyMCArMjAyLDI5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHRpZiAob3NpemUgXHUwMDNlIGlzaXplKVxuIFx0XHRvc2l6ZSA9IGlzaXplO1xuIFxuLVx0d3B0ciA9IG9idWY7XG4tXG4gXHQvKlxuLVx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlci5cbitcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZlxuK1x0ICogdGhlcmUgaXMgcm9vbSBmb3IgY29tcHJlc3NlZCBkYXRhLiAgT3RoZXJ3aXNlIGRpc2NhcmQgdGhlIGNvbXByZXNzZWRcbitcdCAqIG91dHB1dCB3aGlsZSBjb25zdW1pbmcgdGhlIGlucHV0LCBzbyB0aGUgY29tcHJlc3NvciBoaXN0b3J5IHJlbWFpbnNcbitcdCAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLlxuIFx0ICovXG4tXHR3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7XG4tXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4tXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcbi1cdHdwdHIgKz0gUFBQX0hEUkxFTjtcbi1cdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4tXHR3cHRyICs9IERFRkxBVEVfT1ZIRDtcbiBcdG9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xuLVx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4tXHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IG9zaXplIC0gb2xlbjtcbitcdGRpc2NhcmQgPSBvc2l6ZSBcdTAwM2M9IG9sZW47XG4rXHRpZiAoZGlzY2FyZCkge1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4rXHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4rXHR9IGVsc2Uge1xuK1x0XHR3cHRyID0gb2J1ZjtcbitcdFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xuK1x0XHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciArIDIpO1xuK1x0XHR3cHRyICs9IFBQUF9IRFJMRU47XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4rXHRcdHdwdHIgKz0gREVGTEFURV9PVkhEO1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcbitcdFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xuK1x0fVxuK1x0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XG4gXHQrK3N0YXRlLVx1MDAzZXNlcW5vO1xuIFxuIFx0b2ZmID0gKHByb3RvIFx1MDAzZSAweGZmKSA/IDIgOiAzO1x0Lyogc2tpcCAxc3QgcHJvdG8gYnl0ZSBpZiAwICovXG5AQCAtMjMxLDggKzI0MiwxMCBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0XHR9XG4gXHRcdGlmIChzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9PSAwKSB7XG4gXHRcdFx0b2xlbiArPSBvYXZhaWw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IE5VTEw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwO1xuK1x0XHRcdGRpc2NhcmQgPSB0cnVlO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcbitcdFx0XHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyZWFrO1x0XHQvKiBhbGwgZG9uZSAqL1xuIFx0XHR9XG5AQCAtMjQyLDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHQvKlxuIFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChvbGVuIFx1MDAzYyBpc2l6ZSBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2M9IG9zaXplKSB7XG4rXHRpZiAoIWRpc2NhcmQgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjIGlzaXplIFx1MDAyNlx1MDAyNiBvbGVuIFx1MDAzYz0gb3NpemUpIHtcbiBcdFx0c3RhdGUtXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcbiBcdH0gZWxzZSB7XG5AQCAtNDIwLDYgKzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuIFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCBpc2l6ZSk7XG4gXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXHR9XG4rXHRpZiAob3NpemUgXHUwMDNjIFBQUF9IRFJMRU4pXG4rXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXG4gXHQvKiBDaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVyLiAqL1xuIFx0c2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgKyBQUFBfSERSTEVOKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTcxOSwxMCArMTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4rXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgK1xuK1x0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MTcuNTY5ODg0NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI1NjAzODAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIG9mIFBQUCBEZWZsYXRlIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gUFBQIERlZmxhdGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGBwcHBfZGVmbGF0ZS5jYCBhbmQgYHBwcF9nZW5lcmljLmNgIGludGVyYWN0IGFuZCB3aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UuIExldCdzIHB1bGwgdXAgdGhvc2UgZmlsZXMsIGBwcHBfZGVmbGF0ZS5jYCBhbmQgYHBwcF9nZW5lcmljLmNgLCB1c2luZyBgcmVhZC1maWxlYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2UgdG8gY29udGV4dHVhbGl6ZSB0aGUgcGF0Y2guIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIGZpbGVzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gsIG9yIHNvIEkgYXNzdW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY3LCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MjIuODI1OTI1MjEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHQgKlxcbiAxODE6XFx0ICpcXHRSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgcGFja2V0LCBvciAwIGlmIHRoZVxcbiAxODI6XFx0ICpcXHRwYWNrZXQgaXMgaW5jb21wcmVzc2libGUuXFxuIDE4MzpcXHQgKi9cXG4gMTg0OlxcdHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIDE4NTpcXHRcXHQgICAgICAgaW50IGlzaXplLCBpbnQgb3NpemUpXFxuIDE4NjpcXHR7XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XFxuIDE4ODpcXHRcXHRpbnQgciwgcHJvdG8sIG9mZiwgb2xlbiwgb2F2YWlsO1xcbiAxODk6XFx0XFx0dW5zaWduZWQgY2hhciBkaXNjYXJkX2J1Zls2NF07XFxuIDE5MDpcXHRcXHR1bnNpZ25lZCBjaGFyICp3cHRyO1xcbiAxOTE6XFx0XFx0Ym9vbCBkaXNjYXJkO1xcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHQvKlxcbiAxOTQ6XFx0XFx0ICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS5cXG4gMTk1OlxcdFxcdCAqL1xcbiAxOTY6XFx0XFx0cHJvdG8gPSBQUFBfUFJPVE9DT0wocnB0cik7XFxuIDE5NzpcXHRcXHRpZiAocHJvdG8gXFx1MDAzZSAweDNmZmYgfHwgcHJvdG8gPT0gMHhmZCB8fCBwcm90byA9PSAweGZiKVxcbiAxOTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdC8qIERvbid0IGdlbmVyYXRlIGNvbXByZXNzZWQgcGFja2V0cyB3aGljaCBhcmUgbGFyZ2VyIHRoYW5cXG4gMjAxOlxcdFxcdCAgIHRoZSB1bmNvbXByZXNzZWQgcGFja2V0LiAqL1xcbiAyMDI6XFx0XFx0aWYgKG9zaXplIFxcdTAwM2UgaXNpemUpXFxuIDIwMzpcXHRcXHRcXHRvc2l6ZSA9IGlzaXplO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHQvKlxcbiAyMDY6XFx0XFx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlciBvbmx5IGlmXFxuIDIwNzpcXHRcXHQgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZFxcbiAyMDg6XFx0XFx0ICogb3V0cHV0IHdoaWxlIGNvbnN1bWluZyB0aGUgaW5wdXQsIHNvIHRoZSBjb21wcmVzc29yIGhpc3RvcnkgcmVtYWluc1xcbiAyMDk6XFx0XFx0ICogc3luY2hyb25pemVkIHdpdGggdGhlIHBlZXIuXFxuIDIxMDpcXHRcXHQgKi9cXG4gMjExOlxcdFxcdG9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xcbiAyMTI6XFx0XFx0ZGlzY2FyZCA9IG9zaXplIFxcdTAwM2M9IG9sZW47XFxuIDIxMzpcXHRcXHRpZiAoZGlzY2FyZCkge1xcbiAyMTQ6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcXG4gMjE1OlxcdFxcdFxcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XFxuIDIxNjpcXHRcXHR9IGVsc2Uge1xcbiAyMTc6XFx0XFx0XFx0d3B0ciA9IG9idWY7XFxuIDIxODpcXHRcXHRcXHR3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7XFxuIDIxOTpcXHRcXHRcXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XFxuIDIyMDpcXHRcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcXG4gMjIxOlxcdFxcdFxcdHdwdHIgKz0gUFBQX0hEUkxFTjtcXG4gMjIyOlxcdFxcdFxcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cXHUwMDNlc2Vxbm8sIHdwdHIpO1xcbiAyMjM6XFx0XFx0XFx0d3B0ciArPSBERUZMQVRFX09WSEQ7XFxuIDIyNDpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XFxuIDIyNTpcXHRcXHRcXHRvYXZhaWwgPSBvc2l6ZSAtIG9sZW47XFxuIDIyNjpcXHRcXHR9XFxuIDIyNzpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XFxuIDIyODpcXHRcXHQrK3N0YXRlLVxcdTAwM2VzZXFubztcXG4gMjI5OlxcdFxcbiAyMzA6XFx0XFx0b2ZmID0gKHByb3RvIFxcdTAwM2UgMHhmZikgPyAyIDogMztcXHQvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi9cXG4gMjMxOlxcdFxcdHJwdHIgKz0gb2ZmO1xcbiAyMzI6XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9pbiA9IHJwdHI7XFxuIDIzMzpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9pbiA9IChpc2l6ZSAtIG9mZik7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdGZvciAoOzspIHtcXG4gMjM2OlxcdFxcdFxcdHIgPSB6bGliX2RlZmxhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdHJtLCBaX1BBQ0tFVF9GTFVTSCk7XFxuIDIzNzpcXHRcXHRcXHRpZiAociAhPSBaX09LKSB7XFxuIDIzODpcXHRcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWRlYnVnKVxcbiAyMzk6XFx0XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fRVJSXFxuIDI0MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInpfY29tcHJlc3M6IGRlZmxhdGUgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHIpO1xcbiAyNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI0MjpcXHRcXHRcXHR9XFxuIDI0MzpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0ID09IDApIHtcXG4gMjQ0OlxcdFxcdFxcdFxcdG9sZW4gKz0gb2F2YWlsO1xcbiAyNDU6XFx0XFx0XFx0XFx0ZGlzY2FyZCA9IHRydWU7XFxuIDI0NjpcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IGRpc2NhcmRfYnVmO1xcbiAyNDc6XFx0XFx0XFx0XFx0b2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTtcXG4gMjQ4OlxcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbDtcXG4gMjQ5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDI1MDpcXHRcXHRcXHRcXHRicmVhaztcXHRcXHQvKiBhbGwgZG9uZSAqL1xcbiAyNTE6XFx0XFx0XFx0fVxcbiAyNTI6XFx0XFx0fVxcbiAyNTM6XFx0XFx0b2xlbiArPSBvYXZhaWwgLSBzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQ7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdC8qXFxuIDI1NjpcXHRcXHQgKiBTZWUgaWYgd2UgbWFuYWdlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHBhY2tldC5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0aWYgKCFkaXNjYXJkIFxcdTAwMjZcXHUwMDI2IG9sZW4gXFx1MDAzYyBpc2l6ZSBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2M9IG9zaXplKSB7XFxuIDI1OTpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzoyMi44MjYwMDkyMzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdCAqIGZvdW5kIGJ5IGluc3BlY3RpbmcgdGhlIGlucHV0IGRhdGEgYW5kIGZvciBzeXN0ZW0gcHJvYmxlbXMsIGJ1dFxcbiA0MTE6XFx0ICogREVDT01QX0ZBVEFMRVJST1IgZm9yIGFueSBlcnJvcnMgd2hpY2ggY291bGQgcG9zc2libHkgYmUgc2FpZCB0b1xcbiA0MTI6XFx0ICogYmUgYmVpbmcgZGV0ZWN0ZWQgXFxcImFmdGVyXFxcIiBkZWNvbXByZXNzaW9uLiAgRm9yIERFQ09NUF9FUlJPUixcXG4gNDEzOlxcdCAqIHdlIGNhbiBpc3N1ZSBhIENDUCByZXNldC1yZXF1ZXN0OyBmb3IgREVDT01QX0ZBVEFMRVJST1IsIHdlIG1heSBiZVxcbiA0MTQ6XFx0ICogaW5mcmluZ2luZyBhIHBhdGVudCBvZiBNb3Rvcm9sYSdzIGlmIHdlIGRvLCBzbyB3ZSB0YWtlIENDUCBkb3duXFxuIDQxNTpcXHQgKiBpbnN0ZWFkLlxcbiA0MTY6XFx0ICpcXG4gNDE3OlxcdCAqIEdpdmVuIHRoYXQgdGhlIGZyYW1lIGhhcyB0aGUgY29ycmVjdCBzZXF1ZW5jZSBudW1iZXIgYW5kIGEgZ29vZCBGQ1MsXFxuIDQxODpcXHQgKiBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIGNvZGVzIGluIHRoZSBpbnB1dCBtb3N0IGxpa2VseSBpbmRpY2F0ZSBhXFxuIDQxOTpcXHQgKiBidWcsIHNvIHdlIHJldHVybiBERUNPTVBfRkFUQUxFUlJPUiBmb3IgdGhlbSBpbiBvcmRlciB0byB0dXJuIG9mZlxcbiA0MjA6XFx0ICogY29tcHJlc3Npb24sIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRldGVjdGVkIGJ5IGluc3BlY3RpbmcgdGhlIGlucHV0LlxcbiA0MjE6XFx0ICovXFxuIDQyMjpcXHRzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcXG4gNDIzOlxcdFxcdFxcdCB1bnNpZ25lZCBjaGFyICpvYnVmLCBpbnQgb3NpemUpXFxuIDQyNDpcXHR7XFxuIDQyNTpcXHRcXHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XFxuIDQyNjpcXHRcXHRpbnQgb2xlbiwgc2VxLCByO1xcbiA0Mjc6XFx0XFx0aW50IGRlY29kZV9wcm90bywgb3ZlcmZsb3c7XFxuIDQyODpcXHRcXHR1bnNpZ25lZCBjaGFyIG92ZXJmbG93X2J1ZlsxXTtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0aWYgKGlzaXplIFxcdTAwM2M9IFBQUF9IRFJMRU4gKyBERUZMQVRFX09WSEQpIHtcXG4gNDMxOlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuIDQzMjpcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiel9kZWNvbXByZXNzJWQ6IHNob3J0IHBrdCAoJWQpXFxcXG5cXFwiLFxcbiA0MzM6XFx0XFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0LCBpc2l6ZSk7XFxuIDQzNDpcXHRcXHRcXHRyZXR1cm4gREVDT01QX0VSUk9SO1xcbiA0MzU6XFx0XFx0fVxcbiA0MzY6XFx0XFx0aWYgKG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTilcXG4gNDM3OlxcdFxcdFxcdHJldHVybiBERUNPTVBfRVJST1I7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXFxuIDQ0MDpcXHRcXHRzZXEgPSBnZXRfdW5hbGlnbmVkX2JlMTYoaWJ1ZiArIFBQUF9IRFJMRU4pO1xcbiA0NDE6XFx0XFx0aWYgKHNlcSAhPSAoc3RhdGUtXFx1MDAzZXNlcW5vIFxcdTAwMjYgMHhmZmZmKSkge1xcbiA0NDI6XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG4gNDQzOlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcXFxuXFxcIixcXG4gNDQ0OlxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgc2VxLCBzdGF0ZS1cXHUwMDNlc2Vxbm8gXFx1MDAyNiAweGZmZmYpO1xcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcdCsrc3RhdGUtXFx1MDAzZXNlcW5vO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHQvKlxcbiA0NTA6XFx0XFx0ICogRmlsbCBpbiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgUFBQIGhlYWRlci4gIFRoZSBwcm90b2NvbCBmaWVsZFxcbiA0NTE6XFx0XFx0ICogY29tZXMgZnJvbSB0aGUgZGVjb21wcmVzc2VkIGRhdGEuXFxuIDQ1MjpcXHRcXHQgKi9cXG4gNDUzOlxcdFxcdG9idWZbMF0gPSBQUFBfQUREUkVTUyhpYnVmKTtcXG4gNDU0OlxcdFxcdG9idWZbMV0gPSBQUFBfQ09OVFJPTChpYnVmKTtcXG4gNDU1OlxcdFxcdG9idWZbMl0gPSAwO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHQvKlxcbiA0NTg6XFx0XFx0ICogU2V0IHVwIHRvIGNhbGwgaW5mbGF0ZS4gIFdlIHNldCBhdmFpbF9vdXQgdG8gMSBpbml0aWFsbHkgc28gd2UgY2FuXFxuIDQ1OTpcXHRcXHQgKiBsb29rIGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBvdXRwdXQgYW5kIGRlY2lkZSB3aGV0aGVyIHdlIGhhdmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MjIuODI2MDY2NzIzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzE1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzE1OlxcdH1cXG4xNzE2OlxcdFxcbjE3MTc6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXFxuMTcxODpcXHRwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNzE5OlxcdHtcXG4xNzIwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuMTcyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4xNzIyOlxcdFxcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpO1xcbjE3MjM6XFx0XFx0aW50IGxlbjtcXG4xNzI0OlxcdFxcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbjE3MjU6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbjE3MjY6XFx0XFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xcbjE3Mjc6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XFxuMTcyODpcXHRcXG4xNzI5OlxcdFxcdGlmIChza2JfbGluZWFyaXplKHNrYikpXFxuMTczMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzMxOlxcdFxcbjE3MzI6XFx0XFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xcbjE3MzM6XFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuMTczNDpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3MzU6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4xNzM2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3Mzc6XFx0XFx0fVxcbjE3Mzg6XFx0XFx0aWYgKGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFxcdTAwM2UgUFBQX0hEUkxFTilcXG4xNzM5OlxcdFxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXFxuMTc0MjpcXHRcXHRsZW4gPSBwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wcmVzcyhwcHAtXFx1MDAzZXhjX3N0YXRlLCBza2ItXFx1MDAzZWRhdGEgLSAyLFxcbjE3NDM6XFx0XFx0XFx0XFx0XFx0ICAgbmV3X3NrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4gKyAyLFxcbjE3NDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29tcHJlc3Nvcl9za2Jfc2l6ZSk7XFxuMTc0NTpcXHRcXHRpZiAobGVuIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NDUF9VUCkpIHtcXG4xNzQ2OlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuMTc0NzpcXHRcXHRcXHRza2IgPSBuZXdfc2tiO1xcbjE3NDg6XFx0XFx0XFx0c2tiX3B1dChza2IsIGxlbik7XFxuMTc0OTpcXHRcXHRcXHRza2JfcHVsbChza2IsIDIpO1xcdC8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqL1xcbjE3NTA6XFx0XFx0fSBlbHNlIGlmIChsZW4gPT0gMCkge1xcbjE3NTE6XFx0XFx0XFx0LyogZGlkbid0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqL1xcbjE3NTI6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc1MzpcXHRcXHRcXHRuZXdfc2tiID0gc2tiO1xcbjE3NTQ6XFx0XFx0fSBlbHNlIHtcXG4xNzU1OlxcdFxcdFxcdC8qXFxuMTc1NjpcXHRcXHRcXHQgKiAobGVuIFxcdTAwM2MgMClcXG4xNzU3OlxcdFxcdFxcdCAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZFxcbjE3NTg6XFx0XFx0XFx0ICogZnJhbWVzLiAgVGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gLTEgaWYgd2VcXG4xNzU5OlxcdFxcdFxcdCAqIHNob3VsZCBkcm9wIHRoZSBmcmFtZS4gIFdlIGNhbm5vdCBzaW1wbHkgdGVzdFxcbjE3NjA6XFx0XFx0XFx0ICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZVxcbjE3NjE6XFx0XFx0XFx0ICogdGhlIHNhbWUgbnVtYmVyLlxcbjE3NjI6XFx0XFx0XFx0ICovXFxuMTc2MzpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3NjQ6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXFxcblxcXCIpO1xcbjE3NjU6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc2NjpcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4xNzY3OlxcdFxcdH1cXG4xNzY4OlxcdFxcdHJldHVybiBuZXdfc2tiO1xcbjE3Njk6XFx0fVxcbjE3NzA6XFx0XFxuMTc3MTpcXHQvKlxcbjE3NzI6XFx0ICogQ29tcHJlc3MgYW5kIHByZXBhcmUgdG8gc2VuZCBhIGZyYW1lLlxcbjE3NzM6XFx0ICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aC5cXG4xNzc0OlxcdCAqIFJldHVybnMgMSBpZiB0aGUgc2tiIHdhcyBjb25zdW1lZCwgMCBpZiBpdCBjYW4gYmUgcGFzc2VkIHRvIHBwcF9wdXNoKCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjIyLjgyNjI5MzYxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcxMTAyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgZ2l2ZW4gbXkgYXNzdW1lZCBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFBQUCBEZWZsYXRlIENvbXByZXNzaW9uL0RlY29tcHJlc3Npb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRob3JvdWdobHkgYXVkaXQgdGhlIHJlbWFpbmluZyBzZWN0aW9ucyBvZiB0aGUgYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIGZpbGUuIFRoaXMgbWVhbnMgSSdtIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzbmlwcGV0OyBJJ20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIGVudGlyZSBsb2dpYyBvZiBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJJ2xsIGJlIG1ldGljdWxvdXNseSByZXZpZXdpbmcgdGhlIGNvZGUgZmxvdywgY2hlY2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgZGVmbGF0ZSBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24sIGFuZCBtYWtpbmcgc3VyZSB0aGUgZGF0YSBoYW5kbGluZyBpcyByb2J1c3QgYW5kIHNlY3VyZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBtZW1vcnksIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLiBJdCdzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgZ2FpbiBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkYXRhIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBQUFAgcHJvdG9jb2wgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTksIk91dHB1dFRva2VucyI6ODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjI1LjE5NzM5OTI3MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0XFx0XFx0YnJlYWs7XFx0XFx0LyogYWxsIGRvbmUgKi9cXG4gMjUxOlxcdFxcdFxcdH1cXG4gMjUyOlxcdFxcdH1cXG4gMjUzOlxcdFxcdG9sZW4gKz0gb2F2YWlsIC0gc3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0O1xcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHQvKlxcbiAyNTY6XFx0XFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXFxuIDI1NzpcXHRcXHQgKi9cXG4gMjU4OlxcdFxcdGlmICghZGlzY2FyZCBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2MgaXNpemUgXFx1MDAyNlxcdTAwMjYgb2xlbiBcXHUwMDNjPSBvc2l6ZSkge1xcbiAyNTk6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLmNvbXBfYnl0ZXMgKz0gb2xlbjtcXG4gMjYwOlxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcXG4gMjYxOlxcdFxcdH0gZWxzZSB7XFxuIDI2MjpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuaW5jX2J5dGVzICs9IGlzaXplO1xcbiAyNjM6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLmluY19wYWNrZXRzKys7XFxuIDI2NDpcXHRcXHRcXHRvbGVuID0gMDtcXG4gMjY1OlxcdFxcdH1cXG4gMjY2OlxcdFxcdHN0YXRlLVxcdTAwM2VzdGF0cy51bmNfYnl0ZXMgKz0gaXNpemU7XFxuIDI2NzpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMudW5jX3BhY2tldHMrKztcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0cmV0dXJuIG9sZW47XFxuIDI3MDpcXHR9XFxuIDI3MTpcXHRcXG4gMjcyOlxcdC8qKlxcbiAyNzM6XFx0ICpcXHR6X2NvbXBfc3RhdHMgLSByZXR1cm4gY29tcHJlc3Npb24gc3RhdGlzdGljcyBmb3IgYSBjb21wcmVzc29yXFxuIDI3NDpcXHQgKlxcdFxcdG9yIGRlY29tcHJlc3Nvci5cXG4gMjc1OlxcdCAqXFx0QGFyZzpcXHRwb2ludGVyIHRvIHByaXZhdGUgc3BhY2UgZm9yIHRoZSAoZGUpY29tcHJlc3NvclxcbiAyNzY6XFx0ICpcXHRAc3RhdHM6XFx0cG9pbnRlciB0byBhIHN0cnVjdCBjb21wc3RhdCB0byByZWNlaXZlIHRoZSByZXN1bHQuXFxuIDI3NzpcXHQgKi9cXG4gMjc4OlxcdHN0YXRpYyB2b2lkIHpfY29tcF9zdGF0cyh2b2lkICphcmcsIHN0cnVjdCBjb21wc3RhdCAqc3RhdHMpXFxuIDI3OTpcXHR7XFxuIDI4MDpcXHRcXHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdCpzdGF0cyA9IHN0YXRlLVxcdTAwM2VzdGF0cztcXG4gMjgzOlxcdH1cXG4gMjg0OlxcdFxcbiAyODU6XFx0LyoqXFxuIDI4NjpcXHQgKlxcdHpfZGVjb21wX2ZyZWUgLSBGcmVlIHRoZSBtZW1vcnkgdXNlZCBieSBhIGRlY29tcHJlc3Nvci5cXG4gMjg3OlxcdCAqXFx0QGFyZzpcXHRwb2ludGVyIHRvIHByaXZhdGUgc3BhY2UgZm9yIHRoZSBkZWNvbXByZXNzb3IuXFxuIDI4ODpcXHQgKi9cXG4gMjg5OlxcdHN0YXRpYyB2b2lkIHpfZGVjb21wX2ZyZWUodm9pZCAqYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzoyNS4xOTc0ODU0NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDU1OlxcdFxcdG9idWZbMl0gPSAwO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHQvKlxcbiA0NTg6XFx0XFx0ICogU2V0IHVwIHRvIGNhbGwgaW5mbGF0ZS4gIFdlIHNldCBhdmFpbF9vdXQgdG8gMSBpbml0aWFsbHkgc28gd2UgY2FuXFxuIDQ1OTpcXHRcXHQgKiBsb29rIGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBvdXRwdXQgYW5kIGRlY2lkZSB3aGV0aGVyIHdlIGhhdmVcXG4gNDYwOlxcdFxcdCAqIGEgMS1ieXRlIG9yIDItYnl0ZSBwcm90b2NvbCBmaWVsZC5cXG4gNDYxOlxcdFxcdCAqL1xcbiA0NjI6XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9pbiA9IGlidWYgKyBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xcbiA0NjM6XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfaW4gPSBpc2l6ZSAtIChQUFBfSERSTEVOICsgREVGTEFURV9PVkhEKTtcXG4gNDY0OlxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0ID0gb2J1ZiArIDM7XFxuIDQ2NTpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSAxO1xcbiA0NjY6XFx0XFx0ZGVjb2RlX3Byb3RvID0gMTtcXG4gNDY3OlxcdFxcdG92ZXJmbG93ID0gMDtcXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0LypcXG4gNDcwOlxcdFxcdCAqIENhbGwgaW5mbGF0ZSwgc3VwcGx5aW5nIG1vcmUgaW5wdXQgb3Igb3V0cHV0IGFzIG5lZWRlZC5cXG4gNDcxOlxcdFxcdCAqL1xcbiA0NzI6XFx0XFx0Zm9yICg7Oykge1xcbiA0NzM6XFx0XFx0XFx0ciA9IHpsaWJfaW5mbGF0ZShcXHUwMDI2c3RhdGUtXFx1MDAzZXN0cm0sIFpfUEFDS0VUX0ZMVVNIKTtcXG4gNDc0OlxcdFxcdFxcdGlmIChyICE9IFpfT0spIHtcXG4gNDc1OlxcdFxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuIDQ3NjpcXHRcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiel9kZWNvbXByZXNzJWQ6IGluZmxhdGUgcmV0dXJuZWQgJWQgKCVzKVxcXFxuXFxcIixcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgciwgKHN0YXRlLVxcdTAwM2VzdHJtLm1zZz8gc3RhdGUtXFx1MDAzZXN0cm0ubXNnOiBcXFwiXFxcIikpO1xcbiA0Nzg6XFx0XFx0XFx0XFx0cmV0dXJuIERFQ09NUF9GQVRBTEVSUk9SO1xcbiA0Nzk6XFx0XFx0XFx0fVxcbiA0ODA6XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCAhPSAwKVxcbiA0ODE6XFx0XFx0XFx0XFx0YnJlYWs7XFx0XFx0LyogYWxsIGRvbmUgKi9cXG4gNDgyOlxcdFxcdFxcdGlmIChkZWNvZGVfcHJvdG8pIHtcXG4gNDgzOlxcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTjtcXG4gNDg0OlxcdFxcdFxcdFxcdGlmICgob2J1ZlszXSBcXHUwMDI2IDEpID09IDApIHtcXG4gNDg1OlxcdFxcdFxcdFxcdFxcdC8qIDItYnl0ZSBwcm90b2NvbCBmaWVsZCAqL1xcbiA0ODY6XFx0XFx0XFx0XFx0XFx0b2J1ZlsyXSA9IG9idWZbM107XFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHQtLXN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0O1xcbiA0ODg6XFx0XFx0XFx0XFx0XFx0KytzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQ7XFxuIDQ4OTpcXHRcXHRcXHRcXHR9XFxuIDQ5MDpcXHRcXHRcXHRcXHRkZWNvZGVfcHJvdG8gPSAwO1xcbiA0OTE6XFx0XFx0XFx0fSBlbHNlIGlmICghb3ZlcmZsb3cpIHtcXG4gNDkyOlxcdFxcdFxcdFxcdC8qXFxuIDQ5MzpcXHRcXHRcXHRcXHQgKiBXZSd2ZSBmaWxsZWQgdXAgdGhlIG91dHB1dCBidWZmZXI7IHRoZSBvbmx5IHdheSB0b1xcbiA0OTQ6XFx0XFx0XFx0XFx0ICogZmluZCBvdXQgd2hldGhlciBpbmZsYXRlIGhhcyBhbnkgbW9yZSBjaGFyYWN0ZXJzXFxuIDQ5NTpcXHRcXHRcXHRcXHQgKiBsZWZ0IGlzIHRvIGdpdmUgaXQgYW5vdGhlciBieXRlIG9mIG91dHB1dCBzcGFjZS5cXG4gNDk2OlxcdFxcdFxcdFxcdCAqL1xcbiA0OTc6XFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9vdXQgPSBvdmVyZmxvd19idWY7XFxuIDQ5ODpcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSAxO1xcbiA0OTk6XFx0XFx0XFx0XFx0b3ZlcmZsb3cgPSAxO1xcbiA1MDA6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTAxOlxcdFxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuIDUwMjpcXHRcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiel9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxcXG5cXFwiLFxcbiA1MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0KTtcXG4gNTA0OlxcdFxcdFxcdFxcdHJldHVybiBERUNPTVBfRkFUQUxFUlJPUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MjUuMTk3NTM2MzYxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzY5MDczMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYHpfZGVjb21wcmVzc2BcIiwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZCBmb3IgYW4gZXhwZXJ0IGluIHRoZWlyIGZpZWxkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgel9kZWNvbXByZXNzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gdGhpbmtpbmcgaXMsIFwiTGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgel9kZWNvbXByZXNzYC5cIiBJJ20gbm90IHNhdGlzZmllZCB3aXRoIGp1c3Qga25vd2luZyAqd2hhdCogaXQgZG9lcywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpob3cqLiBJJ20gaW1tZWRpYXRlbHkgcGljdHVyaW5nIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzLCB0aGUgZGlmZmVyZW50IGRlY29tcHJlc3Npb24gYWxnb3JpdGhtcyBpdCBjb3VsZCBiZSB1c2luZyB1bmRlciB0aGUgaG9vZCDigJMgSHVmZm1hbiwgTGVtcGVsLVppdiB2YXJpYW50cywgbWF5YmUgZXZlbiBzb21ldGhpbmcgbW9yZSBleG90aWMgaWYgdGhpcyBpcyBhIHNwZWNpYWxpemVkIGNvbnRleHQuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBmbG93cyB0aGF0IHdvdWxkIGJlIGludm9sdmVkLiBJcyBpdCBoYW5kbGluZyBhIHNwZWNpZmljIGNvbXByZXNzaW9uIGZvcm1hdD8gSXMgaXQgcm9idXN0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgaGVhZDogV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXM/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEknbSBpdGNoaW5nIHRvIHNlZSB0aGUgY29kZSBhbmQgc3RhcnQgcGllY2luZyBpdCB0b2dldGhlciBtZW50YWxseSwgYW5hbHl6aW5nIGl0IGxpa2UgSSB3b3VsZCBhbnkgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50LiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MzYuOTY2NjExNjI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRcXHR9IGVsc2Uge1xcbiA1MDE6XFx0XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG4gNTAyOlxcdFxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogcmFuIG91dCBvZiBtcnVcXFxcblxcXCIsXFxuIDUwMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZXVuaXQpO1xcbiA1MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIERFQ09NUF9GQVRBTEVSUk9SO1xcbiA1MDU6XFx0XFx0XFx0fVxcbiA1MDY6XFx0XFx0fVxcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAoZGVjb2RlX3Byb3RvKSB7XFxuIDUwOTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWRlYnVnKVxcbiA1MTA6XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcInpfZGVjb21wcmVzcyVkOiBkaWRuJ3QgZ2V0IHByb3RvXFxcXG5cXFwiLFxcbiA1MTE6XFx0XFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0KTtcXG4gNTEyOlxcdFxcdFxcdHJldHVybiBERUNPTVBfRVJST1I7XFxuIDUxMzpcXHRcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdG9sZW4gPSBvc2l6ZSArIG92ZXJmbG93IC0gc3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0O1xcbiA1MTY6XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLnVuY19ieXRlcyArPSBvbGVuO1xcbiA1MTc6XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLnVuY19wYWNrZXRzKys7XFxuIDUxODpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBpc2l6ZTtcXG4gNTE5OlxcdFxcdHN0YXRlLVxcdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0cmV0dXJuIG9sZW47XFxuIDUyMjpcXHR9XFxuIDUyMzpcXHRcXG4gNTI0OlxcdC8qKlxcbiA1MjU6XFx0ICpcXHR6X2luY29tcCAtIGFkZCBpbmNvbXByZXNzaWJsZSBpbnB1dCBkYXRhIHRvIHRoZSBoaXN0b3J5LlxcbiA1MjY6XFx0ICpcXHRAYXJnOlxcdHBvaW50ZXIgdG8gcHJpdmF0ZSBzdGF0ZSBmb3IgdGhlIGRlY29tcHJlc3NvclxcbiA1Mjc6XFx0ICpcXHRAaWJ1ZjpcXHRwb2ludGVyIHRvIGlucHV0IHBhY2tldCBkYXRhXFxuIDUyODpcXHQgKlxcdEBpY250OlxcdGxlbmd0aCBvZiBpbnB1dCBkYXRhLlxcbiA1Mjk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjM2Ljk2NjcwNDIxNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjQ3OTczMjg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQUFAgRGVmbGF0ZSBQYXRjaDogS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gVGhlIGNoYW5nZXMgYWRkcmVzcyBzZXZlcmFsIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSBQUFAgZGVmbGF0ZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGNvZGUuXG5cbkZpcnN0LCBpbiBgcHBwX2dlbmVyaWMuY2AsIGEgZGF0YSByYWNlIHdpdGggYGRldi1cdTAwM2VtdHVgIGluIGBwYWRfY29tcHJlc3Nfc2tiYCBpcyBhZGRyZXNzZWQgYnkgdXNpbmcgYFJFQURfT05DRWAsIHdoaWNoIGlzIGdvb2QgaHlnaWVuZS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IGluIHBhY2tldCBzaXplIGNhbGN1bGF0aW9ucyBkdWUgdG8gY29uY3VycmVudCBtb2RpZmljYXRpb25zIG9mIGBkZXYtXHUwMDNlbXR1YC4gVGhpcyBpcyBsaWtlbHkgYSBnb29kIHRoaW5nIGFuZCBub3QgS01TQU4tcmVsZXZhbnQuXG5cblRoZW4gd2Ugc2VlIHNvbWUgZml4ZXMgYW5kIGFkanVzdG1lbnRzIGluIGBwcHBfZGVmbGF0ZS5jYC4gVGhlIGZpcnN0IGlzc3VlIHJlZ2FyZHMgdGhlIGNhbGN1bGF0aW9uIG9mIGBhdmFpbF9vdXRgIGluIGB6X2NvbXByZXNzYCB3aGljaCB3b3VsZCB1bmRlcmZsb3cgd2hlbiBgb3NpemUgXHUwMDNjPSBvbGVuYCwgb3IgYW4gaW52YWxpZCBgbmV4dF9vdXRgIHZhbHVlIHdoZW4gYHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID09IDBgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIGEgY3Jhc2ggKGRlcmVmZXJlbmNpbmcgYSBudWxsIHBvaW50ZXIpLiBUaGlzIGlzIGFkZHJlc3NlZCBieSB1c2luZyBhIGxvY2FsIHN0YWNrIGJ1ZmZlciwgYGRpc2NhcmRfYnVmWzY0XWAsIHRvIGhvbGQgZGlzY2FyZGVkIG91dHB1dC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgZGlzY2FyZF9idWZgIGlzICpvbmx5KiB3cml0dGVuIHRvIGJ5IGB6bGliX2RlZmxhdGVgLCBhbmQgaXRzIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQuIGBvbGVuYCBpcyBzZXQgdG8gMC4gSXQgaXMgbmV2ZXIgcmVhZCBvciBleHBvc2VkIGluIGFueSB3YXksIHNvIHRoaXMgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGVyZSBhcmUgYWxzbyBhIGNvdXBsZSBvZiBidWcgZml4ZXMvaW1wcm92ZW1lbnRzIG1hZGUgdG8gYHpfZGVjb21wcmVzc2AuIFRoZSBpbml0aWFsIGNoZWNrIGBvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTmAgaW4gYHpfZGVjb21wcmVzc2AgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBtZW1vcnkgY29ycnVwdGlvbi4gUHJldmlvdXNseSwgdGhlIGBzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTmAgd2FzIGluY29ycmVjdCBpZiBgb3NpemUgXHUwMDNjIFBQUF9IRFJMRU5gLlxuXG5Ob3csIHdlIG5lZWQgdG8gZm9jdXMgb24gS01TQU4uIFRoaXMgc2FuaXRpemVyIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnksIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBhcHBseSB0aGVzZSBndWlkZWxpbmVzLlxuXG5Db25zaWRlcmluZyB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhlIGtleSBxdWVzdGlvbiBpczogKipEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nLCBhbGxvY2F0ZS9pbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIG9yIGFmZmVjdCBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKlxuXG4qICAgYGRpc2NhcmRfYnVmYCBpcyBhIGxvY2FsIHN0YWNrIGJ1ZmZlciB1c2VkIHNvbGVseSBhcyBhIHdyaXRlLW9ubHkgc2luay4gSXQncyBuZXZlciByZWFkLCBuZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIGl0cyBpbml0aWFsIGNvbnRlbnRzIGFyZSBpcnJlbGV2YW50LiBUaGVyZSdzIG5vIGluZm9ybWF0aW9uIGxlYWsgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG4qICAgVGhlIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIGlzIHNpbXBseSB0byBlbGltaW5hdGUgYSBkYXRhIHJhY2UuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybiB0aGVyZS5cbiogICBUaGUgYm91bmRzIGNoZWNrcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBhbmQgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlICphbHJlYWR5KiBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scywgYW5kIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgSSBhbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AgdG9vbCB3aXRoIGRldGFpbGVkIHJlYXNvbmluZyBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjgxLCJPdXRwdXRUb2tlbnMiOjMwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzo1My40NDY0MzkyOThaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgc2l6aW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgaXNzdWVzIGluIFBQUCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uOlxcbjEuIEluIGBwcHBfZ2VuZXJpYy5jOnBhZF9jb21wcmVzc19za2IoKWAsIGBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxcbjIuIEluIGBwcHBfZGVmbGF0ZS5jOnpfY29tcHJlc3MoKWAsIGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgYG9zaXplIFxcdTAwM2M9IG9sZW5gIG9yIHRoZSBvdXRwdXQgYnVmZmVyIGZpbGxzIHVwIGJ5IHJvdXRpbmcgY29tcHJlc3NlZCBvdXRwdXQgaW50byBhIGxvY2FsIHNjcmF0Y2ggYnVmZmVyIGBkaXNjYXJkX2J1ZmAgdG8ga2VlcCBjb21wcmVzc29yIHN0YXRlIHN5bmNocm9uaXplZCB3aGlsZSBkaXNjYXJkaW5nIHRoZSBvdXRwdXQsIHJlcGxhY2luZyBidWdneSBiZWhhdmlvciB3aGVyZSBgbmV4dF9vdXRgIHdhcyBzZXQgdG8gTlVMTC4gYGRpc2NhcmRfYnVmYCBpcyB3cml0ZS1vbmx5IGZvciBgemxpYl9kZWZsYXRlYCBhbmQgbmV2ZXIgcmVhZC5cXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTmAgaXMgYWRkZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcyBpbnRvIGBvYnVmYC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XFxuMS4gSW4gYHBwcF9nZW5lcmljLmM6cGFkX2NvbXByZXNzX3NrYigpYCwgYFJFQURfT05DRShkZXYtXFx1MDAzZW10dSlgIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgTVRVIHJlYWRzIGFjcm9zcyBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBzaXplIG1pc21hdGNoZXMgZHVlIHRvIGRhdGEgcmFjZXMuXFxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXFx1MDAzYz0gb2xlbmAgb3IgdGhlIG91dHB1dCBidWZmZXIgZmlsbHMgdXAgYnkgcm91dGluZyBjb21wcmVzc2VkIG91dHB1dCBpbnRvIGEgbG9jYWwgc2NyYXRjaCBidWZmZXIgYGRpc2NhcmRfYnVmYCB0byBrZWVwIGNvbXByZXNzb3Igc3RhdGUgc3luY2hyb25pemVkIHdoaWxlIGRpc2NhcmRpbmcgdGhlIG91dHB1dCwgcmVwbGFjaW5nIGJ1Z2d5IGJlaGF2aW9yIHdoZXJlIGBuZXh0X291dGAgd2FzIHNldCB0byBOVUxMLiBgZGlzY2FyZF9idWZgIGlzIHdyaXRlLW9ubHkgZm9yIGB6bGliX2RlZmxhdGVgIGFuZCBuZXZlciByZWFkLlxcbjMuIEluIGBwcHBfZGVmbGF0ZS5jOnpfZGVjb21wcmVzcygpYCwgYSBjaGVjayBgb3NpemUgXFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzLiBUaGUgYnVncyBwcmV2ZW50ZWQgYXJlIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25jZXJucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvkljc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 08:29:57 +0000 UTC FinishedAt: 2026-09-07 09:13:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_DEFLATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_DEFLATE" ], "series_id": "81f33a57-1fd4-43ed-a89f-b9f8958f40ca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "z_compress", "z_decompress", "pad_compress_skb", "ppp_prepare_tx_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfREVGTEFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pfY29tcHJlc3MmIzM0OywKICAgICYjMzQ7el9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAgICYjMzQ7cHBwX3ByZXBhcmVfdHhfc2tiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XG4xLiBJbiBgcHBwX2dlbmVyaWMuYzpwYWRfY29tcHJlc3Nfc2tiKClgLCBgUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXHUwMDNjPSBvbGVuYCBvciB0aGUgb3V0cHV0IGJ1ZmZlciBmaWxscyB1cCBieSByb3V0aW5nIGNvbXByZXNzZWQgb3V0cHV0IGludG8gYSBsb2NhbCBzY3JhdGNoIGJ1ZmZlciBgZGlzY2FyZF9idWZgIHRvIGtlZXAgY29tcHJlc3NvciBzdGF0ZSBzeW5jaHJvbml6ZWQgd2hpbGUgZGlzY2FyZGluZyB0aGUgb3V0cHV0LCByZXBsYWNpbmcgYnVnZ3kgYmVoYXZpb3Igd2hlcmUgYG5leHRfb3V0YCB3YXMgc2V0IHRvIE5VTEwuIGBkaXNjYXJkX2J1ZmAgaXMgd3JpdGUtb25seSBmb3IgYHpsaWJfZGVmbGF0ZWAgYW5kIG5ldmVyIHJlYWQuXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbG9naWMgaW4gUFBQIGRlZmxhdGUgKHpfY29tcHJlc3MsIHpfZGVjb21wcmVzcykgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIGFuZCBwcm9wZXJseSBoYW5kbGUgc21hbGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCB1cGRhdGVzIHBhZF9jb21wcmVzc19za2IgaW4gcHBwX2dlbmVyaWMgdG8gc2FmZWx5IHJlYWQgZGV2LVx1MDAzZW10dS4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgdmlydHVhbCBuZXR3b3JraW5nIGNvZGUgcGF0aHMgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBQUFAgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYzBhMjkwYWExNWFlNzkxZmJlNmFlOTQ2ZTBlYTE1ZTIxMjc2Zjc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwOToxMToyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5AQCAtMTg2LDcgJiM0MzsxODYsOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIHtcbiBcdHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICopIGFyZztcbiBcdGludCByLCBwcm90bywgb2ZmLCBvbGVuLCBvYXZhaWw7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkaXNjYXJkX2J1Zls2NF07XG4gXHR1bnNpZ25lZCBjaGFyICp3cHRyO1xuJiM0MztcdGJvb2wgZGlzY2FyZDtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB0aGF0IHRoZSBwcm90b2NvbCBpcyBpbiB0aGUgcmFuZ2Ugd2UgaGFuZGxlLlxuQEAgLTIwMCwyMCAmIzQzOzIwMiwyOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0aWYgKG9zaXplIFx1MDAzZSBpc2l6ZSlcbiBcdFx0b3NpemUgPSBpc2l6ZTtcbiBcbi1cdHdwdHIgPSBvYnVmO1xuLVxuIFx0Lypcbi1cdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzO1x0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlciBvbmx5IGlmXG4mIzQzO1x0ICogdGhlcmUgaXMgcm9vbSBmb3IgY29tcHJlc3NlZCBkYXRhLiAgT3RoZXJ3aXNlIGRpc2NhcmQgdGhlIGNvbXByZXNzZWRcbiYjNDM7XHQgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zXG4mIzQzO1x0ICogc3luY2hyb25pemVkIHdpdGggdGhlIHBlZXIuXG4gXHQgKi9cbi1cdHdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTtcbi1cdHdwdHJbMV0gPSBQUFBfQ09OVFJPTChycHRyKTtcbi1cdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciAmIzQzOyAyKTtcbi1cdHdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47XG4tXHRwdXRfdW5hbGlnbmVkX2JlMTYoc3RhdGUtXHUwMDNlc2Vxbm8sIHdwdHIpO1xuLVx0d3B0ciAmIzQzOz0gREVGTEFURV9PVkhEO1xuIFx0b2xlbiA9IFBQUF9IRFJMRU4gJiM0MzsgREVGTEFURV9PVkhEO1xuLVx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4tXHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IG9zaXplIC0gb2xlbjtcbiYjNDM7XHRkaXNjYXJkID0gb3NpemUgXHUwMDNjPSBvbGVuO1xuJiM0MztcdGlmIChkaXNjYXJkKSB7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4mIzQzO1x0XHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR3cHRyID0gb2J1ZjtcbiYjNDM7XHRcdHdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTtcbiYjNDM7XHRcdHdwdHJbMV0gPSBQUFBfQ09OVFJPTChycHRyKTtcbiYjNDM7XHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciAmIzQzOyAyKTtcbiYjNDM7XHRcdHdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47XG4mIzQzO1x0XHRwdXRfdW5hbGlnbmVkX2JlMTYoc3RhdGUtXHUwMDNlc2Vxbm8sIHdwdHIpO1xuJiM0MztcdFx0d3B0ciAmIzQzOz0gREVGTEFURV9PVkhEO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4mIzQzO1x0XHRvYXZhaWwgPSBvc2l6ZSAtIG9sZW47XG4mIzQzO1x0fVxuJiM0MztcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0JiM0MzsmIzQzO3N0YXRlLVx1MDAzZXNlcW5vO1xuIFxuIFx0b2ZmID0gKHByb3RvIFx1MDAzZSAweGZmKSA/IDIgOiAzO1x0Lyogc2tpcCAxc3QgcHJvdG8gYnl0ZSBpZiAwICovXG5AQCAtMjMxLDggJiM0MzsyNDIsMTAgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZixcbiBcdFx0fVxuIFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPT0gMCkge1xuIFx0XHRcdG9sZW4gJiM0Mzs9IG9hdmFpbDtcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gTlVMTDtcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IDEwMDAwMDA7XG4mIzQzO1x0XHRcdGRpc2NhcmQgPSB0cnVlO1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4mIzQzO1x0XHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyZWFrO1x0XHQvKiBhbGwgZG9uZSAqL1xuIFx0XHR9XG5AQCAtMjQyLDcgJiM0MzsyNTUsNyBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0LypcbiBcdCAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LlxuIFx0ICovXG4tXHRpZiAob2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuJiM0MztcdGlmICghZGlzY2FyZCBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX2J5dGVzICYjNDM7PSBvbGVuO1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7O1xuIFx0fSBlbHNlIHtcbkBAIC00MjAsNiAmIzQzOzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuIFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCBpc2l6ZSk7XG4gXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXHR9XG4mIzQzO1x0aWYgKG9zaXplIFx1MDAzYyBQUFBfSERSTEVOKVxuJiM0MztcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiBcbiBcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXG4gXHRzZXEgPSBnZXRfdW5hbGlnbmVkX2JlMTYoaWJ1ZiAmIzQzOyBQUFBfSERSTEVOKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTcxOSwxMCAmIzQzOzE3MTksMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuJiM0MztcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSk7XG4gXHRpbnQgbGVuO1xuLVx0aW50IG5ld19za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgJiM0MztcbiYjNDM7XHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7XG4gXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgJiM0MztcbiYjNDM7XHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzO1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBQUFBfSERSTEVOO1xuIFxuIFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX0RFRkxBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6X2NvbXByZXNzJiMzNDssCiAgICAmIzM0O3pfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDtwYWRfY29tcHJlc3Nfc2tiJiMzNDssCiAgICAmIzM0O3BwcF9wcmVwYXJlX3R4X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cdTAwM2VtdHUuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHZpcnR1YWwgbmV0d29ya2luZyBjb2RlIHBhdGhzIGV4ZXJjaXNlZCB2aWEgc3RhbmRhcmQgUFBQIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCmluZGV4IGQ2ZDVlNjU2YjNmNGIuLjk2ZDY4OWI5N2ZkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCkBAIC0xODYsNyAmIzQzOzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiB7CiAJc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnOwogCWludCByLCBwcm90bywgb2ZmLCBvbGVuLCBvYXZhaWw7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdOwogCXVuc2lnbmVkIGNoYXIgKndwdHI7CiYjNDM7CWJvb2wgZGlzY2FyZDsKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS4KQEAgLTIwMCwyMCAmIzQzOzIwMiwyOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLAogCWlmIChvc2l6ZSAmZ3Q7IGlzaXplKQogCQlvc2l6ZSA9IGlzaXplOwogCi0Jd3B0ciA9IG9idWY7Ci0KIAkvKgotCSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuCiYjNDM7CSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZgomIzQzOwkgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZAomIzQzOwkgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zCiYjNDM7CSAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLgogCSAqLwotCXdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTsKLQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KFBQUF9DT01QLCB3cHRyICYjNDM7IDIpOwotCXdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7Ci0Jd3B0ciAmIzQzOz0gREVGTEFURV9PVkhEOwogCW9sZW4gPSBQUFBfSERSTEVOICYjNDM7IERFRkxBVEVfT1ZIRDsKLQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7Ci0Jc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gb3NpemUgLSBvbGVuOwomIzQzOwlkaXNjYXJkID0gb3NpemUgJmx0Oz0gb2xlbjsKJiM0MzsJaWYgKGRpc2NhcmQpIHsKJiM0MzsJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQlvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJd3B0ciA9IG9idWY7CiYjNDM7CQl3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7CiYjNDM7CQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7CiYjNDM7CQlwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgJiM0MzsgMik7CiYjNDM7CQl3cHRyICYjNDM7PSBQUFBfSERSTEVOOwomIzQzOwkJcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7CiYjNDM7CQl3cHRyICYjNDM7PSBERUZMQVRFX09WSEQ7CiYjNDM7CQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7CiYjNDM7CQlvYXZhaWwgPSBvc2l6ZSAtIG9sZW47CiYjNDM7CX0KJiM0MzsJc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsOwogCSYjNDM7JiM0MztzdGF0ZS0mZ3Q7c2Vxbm87CiAKIAlvZmYgPSAocHJvdG8gJmd0OyAweGZmKSA/IDIgOiAzOwkvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi8KQEAgLTIzMSw4ICYjNDM7MjQyLDEwIEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiAJCX0KIAkJaWYgKHN0YXRlLSZndDtzdHJtLmF2YWlsX291dCA9PSAwKSB7CiAJCQlvbGVuICYjNDM7PSBvYXZhaWw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IE5VTEw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwOwomIzQzOwkJCWRpc2NhcmQgPSB0cnVlOwomIzQzOwkJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQkJb2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTsKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7CiAJCX0gZWxzZSB7CiAJCQlicmVhazsJCS8qIGFsbCBkb25lICovCiAJCX0KQEAgLTI0Miw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZiwKIAkvKgogCSAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LgogCSAqLwotCWlmIChvbGVuICZsdDsgaXNpemUgJmFtcDsmYW1wOyBvbGVuICZsdDs9IG9zaXplKSB7CiYjNDM7CWlmICghZGlzY2FyZCAmYW1wOyZhbXA7IG9sZW4gJmx0OyBpc2l6ZSAmYW1wOyZhbXA7IG9sZW4gJmx0Oz0gb3NpemUpIHsKIAkJc3RhdGUtJmd0O3N0YXRzLmNvbXBfYnl0ZXMgJiM0Mzs9IG9sZW47CiAJCXN0YXRlLSZndDtzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7OwogCX0gZWxzZSB7CkBAIC00MjAsNiAmIzQzOzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLAogCQkJICAgICAgIHN0YXRlLSZndDt1bml0LCBpc2l6ZSk7CiAJCXJldHVybiBERUNPTVBfRVJST1I7CiAJfQomIzQzOwlpZiAob3NpemUgJmx0OyBQUFBfSERSTEVOKQomIzQzOwkJcmV0dXJuIERFQ09NUF9FUlJPUjsKIAogCS8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovCiAJc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgJiM0MzsgUFBQX0hEUkxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjA0NDNhZjIzMWU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC0xNzE5LDEwICYjNDM7MTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwomIzQzOwlpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi0mZ3Q7bXR1KTsKIAlpbnQgbGVuOwotCWludCBuZXdfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47Ci0JaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzOwogCQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47CiAKIAlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5emthbGxlciBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgUFBQIGNvZGUuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jYCBhbmQgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYC4KCkZpcnN0LCBpbiBgcHBwX2RlZmxhdGUuY2AsIHRoZSBmb2N1cyBpcyBvbiBgel9jb21wcmVzcygpYCBhbmQgYHpfZGVjb21wcmVzcygpYC4gSSBzZWUgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGB6X2NvbXByZXNzKClgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHNtYWxsIG91dHB1dCBzaXplcyAoYG9zaXplYCkuIFRoZSBvbGQgY29kZSAoYHN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gTlVMTDsgc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gMTAwMDAwMDtgKSBsb29rcyBkaWNleS4gSWYgemxpYiB0cmllcyB0byB3cml0ZSB0byBhIG51bGwgcG9pbnRlciB0aGF0JiMzOTtzIGJhZCBuZXdzISBUaGUgZml4IG1ha2VzIHN1cmUgd2UgZG9uJiMzOTt0IGVuZCB1cCB3cml0aW5nIHRvIG51bGwuIEluIGB6X2RlY29tcHJlc3MoKWAsIGEgbmV3IGNoZWNrIGBpZiAob3NpemUgJmx0OyBQUFBfSERSTEVOKSByZXR1cm4gREVDT01QX0VSUk9SO2AgaGFzIGJlZW4gYWRkZWQsIHdoaWNoIHNlZW1zIHNlbnNpYmxlIHRvIHByZXZlbnQgYW4gZXJyb3IgdGhlcmUuCgpUaGVuLCBtb3ZpbmcgdG8gYHBwcF9nZW5lcmljLmNgLCB0aGUgcGF0Y2ggaW52b2x2ZXMgYHBhZF9jb21wcmVzc19za2IoKWAsIHdoZXJlIHRoZXkmIzM5O3JlIG5vdyByZWFkaW5nIGBSRUFEX09OQ0UoZGV2LSZndDttdHUpYC4gTm90aGluZyBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIG9idmlvdXNseSBwcm9ibGVtYXRpYyBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgYW4gZXllIG9uIHdoYXQgaXMgYmVpbmcgdXBkYXRlZC4KCk5vdywgdG8gZ2l2ZSB0aGlzIGEgcHJvcGVyIGV2YWx1YXRpb24sIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHN5bWJvbHMuIExldCYjMzk7cyBzZWUgaG93IGBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZ2VuZXJpY2AgYXJlIGNvbmZpZ3VyZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCB1c2UgbXkgdG9vbHMgdG8gc2VlIHdoYXQgaXMgZW5hYmxlZCwgYW5kIHdoZXJlIHRoZXNlIGNvbXBvbmVudHMgc2l0IGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUF9ERUZMQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM3PWNvbmZpZyBQUFBfQlNEQ09NUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTU0LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSAmIzQzOz0gYnNkX2NvbXAub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSAmIzQzOz0gcHBwX2RlZmxhdGUub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19QUFBfTVBQRSkgJiM0Mzs9IHBwcF9tcHBlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQUFAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlc2UgUFBQIGNvbXBvbmVudHMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFBQUCBzdWJzeXN0ZW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEkgbmVlZCB0byBzZWUgaG93IGBQUFBgLCBgUFBQX0RFRkxBVEVgLCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgc2V0IHVwLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoaWNoIG90aGVyIG9wdGlvbnMgZW5hYmxlIHRoZXNlLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHdoZXJlIGFyZSB0aGUgY29uZGl0aW9uYWwgYnVpbGRzIGhhcHBlbmluZz8gR290dGEgdHJhY2UgZG93biB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHBhdGh3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzIGNvbXBsZXRlbHkuIFRoaXMgaXMgdGhlIGJlZHJvY2sgdG8gdW5kZXJzdGFuZGluZyBhbmQsIGlmIG5lY2Vzc2FyeSwgbW9kaWZ5aW5nIHRoZXNlIFBQUCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIFBQUF9CU0RDT01QXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcbiAgNDE6XHRcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xuICA0MjpcdFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXG4gIDQzOlx0XHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXG4gIDQ0Olx0XHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbiYjMzk7dCBzdXBwb3J0IGl0LFxuICA0NTpcdFx0ICBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuXG4gIDQ2Olx0XG4gIDQ3Olx0XHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7LFxuICA0ODpcdFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcbiAgNDk6XHRcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxuICA1MDpcdFxuICA1MTpcdFx0ICBOb3RlIHRoYXQgdGhlIEJTRCBjb21wcmVzc2lvbiBjb2RlIHdpbGwgYWx3YXlzIGJlIGNvbXBpbGVkIGFzIGFcbiAgNTI6XHRcdCAgbW9kdWxlOyBpdCBpcyBjYWxsZWQgYnNkX2NvbXAgYW5kIHdpbGwgc2hvdyB1cCBpbiB0aGUgZGlyZWN0b3J5XG4gIDUzOlx0XHQgIG1vZHVsZXMgb25jZSB5b3UgaGF2ZSBzYWlkIFwmIzM0O21ha2UgbW9kdWxlc1wmIzM0Oy4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTQ6XHRcbiAgNTU6XHRjb25maWcgUFBQX0RFRkxBVEVcbiAgNTY6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDU3Olx0XHRzZWxlY3QgWkxJQl9JTkZMQVRFXG4gIDU4Olx0XHRzZWxlY3QgWkxJQl9ERUZMQVRFXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzIHRoZVxuICA2MTpcdFx0ICBEZWZsYXRlIGFsZ29yaXRobSAodGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgZ3ppcCB1c2VzKSB0byBjb21wcmVzc1xuICA2MjpcdFx0ICBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZS4gIFRoZSBtYWNoaW5lIGF0IHRoZVxuICA2MzpcdFx0ICBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgNjQ6XHRcdCAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuICBFdmVuIGlmXG4gIDY1Olx0XHQgIHRoZXkgZG9uJiMzOTt0IHN1cHBvcnQgaXQsIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgUFBQX0ZJTFRFUlxuICA3MDpcdFx0Ym9vbCBcJiMzNDtQUFAgZmlsdGVyaW5nXCYjMzQ7XG4gIDcxOlx0XHRoZWxwXG4gIDcyOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBmaWx0ZXIgdGhlIHBhY2tldHMgcGFzc2luZyBvdmVyXG4gIDczOlx0XHQgIFBQUCBpbnRlcmZhY2VzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hpY2ggcGFja2V0cyBjb3VudCBhc1xuICA3NDpcdFx0ICBhY3Rpdml0eSAoaS5lLiB3aGljaCBwYWNrZXRzIHdpbGwgcmVzZXQgdGhlIGlkbGUgdGltZXIgb3IgYnJpbmcgdXBcbiAgNzU6XHRcdCAgYSBkZW1hbmQtZGlhbGVkIGxpbmspIGFuZCB3aGljaCBwYWNrZXRzIGFyZSB0byBiZSBkcm9wcGVkIGVudGlyZWx5LlxuICA3NjpcdFx0ICBZb3UgbmVlZCB0byBzYXkgWSBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgcGFzcy1maWx0ZXIgYW5kXG4gIDc3Olx0XHQgIGFjdGl2ZS1maWx0ZXIgb3B0aW9ucyB0byBwcHBkLlxuICA3ODpcdFxuICA3OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBgcHBwX2RlZmxhdGUuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGFyZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGlzIFBQUCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgZnJvbSB0aGUgemxpYiBsaWJyYXJ5IGFyZSBpbnZva2VkIHdpdGhpbiBgcHBwX2RlZmxhdGUuY2AuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGxpbmcgc3RydWN0dXJlLCB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQsIGFuZCB0aGUgb3ZlcmFsbCB3b3JrZmxvdy4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUgdGhhdCBjb250cmlidXRlIHRvIHRoZSBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIHByb2Nlc3Nlcy4gS25vd2luZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pfY29tcHJlc3N8el9kZWNvbXByZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jPTQzPXN0YXRpYyBpbnRcdHpfZGVjb21wX2luaXQodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDUtXHRcdFx0XHQgICBpbnQgdW5pdCwgaW50IGhkcmxlbiwgaW50IG1ydSwgaW50IGRlYnVnKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQ2OnN0YXRpYyBpbnRcdHpfY29tcHJlc3Modm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKnJwdHIsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00Ny1cdFx0XHRcdHVuc2lnbmVkIGNoYXIgKm9idWYsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NDk9c3RhdGljIHZvaWRcdHpfaW5jb21wKHZvaWQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgaWNudCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1MDpzdGF0aWMgaW50XHR6X2RlY29tcHJlc3Modm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01MS1cdFx0XHRcdGludCBpc2l6ZSwgdW5zaWduZWQgY2hhciAqb2J1ZiwgaW50IG9zaXplKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz0xNjU9c3RhdGljIHZvaWQgel9jb21wX3Jlc2V0KHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0xNzMtLyoqXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzoxNzQ6ICpcdHpfY29tcHJlc3MgLSBjb21wcmVzcyBhIFBQUCBwYWNrZXQgd2l0aCBEZWZsYXRlIGNvbXByZXNzaW9uLlxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTc1LSAqXHRAYXJnOlx0cG9pbnRlciB0byBwcml2YXRlIHN0YXRlIGZvciB0aGUgY29tcHJlc3NvclxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTE4My0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjE4NDpzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTg1LVx0ICAgICAgIGludCBpc2l6ZSwgaW50IG9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTIzOS1cdFx0XHRcdHByaW50ayhLRVJOX0VSUlxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6MjQwOlx0XHRcdFx0ICAgICAgIFwmIzM0O3pfY29tcHJlc3M6IGRlZmxhdGUgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHIpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMjQxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jPTM5Mz1zdGF0aWMgdm9pZCB6X2RlY29tcF9yZXNldCh2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDAxLS8qKlxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDAyOiAqXHR6X2RlY29tcHJlc3MgLSBkZWNvbXByZXNzIGEgRGVmbGF0ZS1jb21wcmVzc2VkIHBhY2tldC5cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQwMy0gKlx0QGFyZzpcdHBvaW50ZXIgdG8gcHJpdmF0ZSBzdGF0ZSBmb3IgdGhlIGRlY29tcHJlc3NvclxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQyMS0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQyMjpzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQyMy1cdFx0IHVuc2lnbmVkIGNoYXIgKm9idWYsIGludCBvc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00MzEtXHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQzMjpcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogc2hvcnQgcGt0ICglZClcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00MzMtXHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQsIGlzaXplKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NDItXHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQ0MzpcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQ0NC1cdFx0XHQgICAgICAgc3RhdGUtXHUwMDNldW5pdCwgc2VxLCBzdGF0ZS1cdTAwM2VzZXFubyBcdTAwMjYgMHhmZmZmKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NzUtXHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDc2Olx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IGluZmxhdGUgcmV0dXJuZWQgJWQgKCVzKVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQ3Ny1cdFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCByLCAoc3RhdGUtXHUwMDNlc3RybS5tc2c/IHN0YXRlLVx1MDAzZXN0cm0ubXNnOiBcJiMzNDtcJiMzNDspKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01MDEtXHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTAyOlx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTAzLVx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTUwOS1cdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTEwOlx0XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O3pfZGVjb21wcmVzcyVkOiBkaWRuJiMzOTt0IGdldCBwcm90b1xcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTUxMS1cdFx0XHQgICAgICAgc3RhdGUtXHUwMDNldW5pdCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NTg1PXN0YXRpYyBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZSA9IHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01OTAtXHQuY29tcF9yZXNldCA9XHRcdHpfY29tcF9yZXNldCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjU5MTpcdC5jb21wcmVzcyA9XHRcdHpfY29tcHJlc3MsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01OTItXHQuY29tcF9zdGF0ID1cdFx0el9jb21wX3N0YXRzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU5Ni1cdC5kZWNvbXBfcmVzZXQgPVx0XHR6X2RlY29tcF9yZXNldCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjU5NzpcdC5kZWNvbXByZXNzID1cdFx0el9kZWNvbXByZXNzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTk4LVx0LmluY29tcCA9XHRcdHpfaW5jb21wLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jPTYwMz1zdGF0aWMgc3RydWN0IGNvbXByZXNzb3IgcHBwX2RlZmxhdGVfZHJhZnQgPSB7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjA4LVx0LmNvbXBfcmVzZXQgPVx0XHR6X2NvbXBfcmVzZXQsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo2MDk6XHQuY29tcHJlc3MgPVx0XHR6X2NvbXByZXNzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjEwLVx0LmNvbXBfc3RhdCA9XHRcdHpfY29tcF9zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy02MTQtXHQuZGVjb21wX3Jlc2V0ID1cdFx0el9kZWNvbXBfcmVzZXQsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo2MTU6XHQuZGVjb21wcmVzcyA9XHRcdHpfZGVjb21wcmVzcyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTYxNi1cdC5pbmNvbXAgPVx0XHR6X2luY29tcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgYHBhZF9jb21wcmVzc19za2JgIGluIFBQUCBHZW5lcmljIERyaXZlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgdGFzayBhdCBoYW5kIGludm9sdmVzIG5ldHdvcmsgY29tcHJlc3Npb24sIGFuZCBnaXZlbiB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlbHkgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGZyYW1pbmcsIG15IGludHVpdGlvbiBpcyBsZWFkaW5nIG1lIGRpcmVjdGx5IHRvIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBsYXllci4gU28sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgcHBwX2dlbmVyaWMuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9wcHBgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRhcmdldGluZyB0aGUgYHBhZF9jb21wcmVzc19za2JgIGZ1bmN0aW9uLiBUaGlzIG5hbWluZyBzdWdnZXN0cyBpdCBoYW5kbGVzIHBhZGRpbmcgb3IgY29tcHJlc3Npb24gb2Ygc29ja2V0IGJ1ZmZlciBza2JzLCB3aGljaCwgaW4gYSBQUFAgY29udGV4dCwgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBvcHRpbWl6aW5nIG5ldHdvcmsgdHJhbnNtaXNzaW9uLCBwZXJoYXBzIGZvciBsb3dlciBiYW5kd2lkdGggb3IgZXJyb3ItcHJvbmUgbGlua3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIFBQUCBkYXRhIGZsb3cgYW5kIGhvdyBpdCBpbXBhY3RzIHBhY2tldCBzaXplLCBwZXJmb3JtYW5jZSwgYW5kIG1heWJlIGV2ZW4gc2VjdXJpdHkuIEkgc3VzcGVjdCB1bmRlcnN0YW5kaW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdGhlIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTcxNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE3MTg6cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNzE5LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzc4PXBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODcyLVx0XHR9XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxODczOlx0XHRuZXdfc2tiID0gcGFkX2NvbXByZXNzX3NrYihwcHAsIHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODc0LVx0XHRpZiAoIW5ld19za2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gUFBQIENvbXByZXNzaW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHBhZF9jb21wcmVzc19za2JgIHdpdGhpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzICp1c2VkKi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbXByZXNzaW9uIHdpdGhpbiB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBzdWJ0bGUgaGFwcGVuaW5nIHRoYXQgaXMgY29udHJpYnV0aW5nIHRvIGFuIGlzc3VlIEkmIzM5O3ZlIGJlZW4gbXVsbGluZyBvdmVyLCBhbmQgdGhpcyBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCBjbHVlcy4gCgpJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgcGFkX2NvbXByZXNzX3NrYmAuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBldmFsdWF0ZSBpdHMgaW1wYWN0LiBJJiMzOTttIGltYWdpbmluZyB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgcGFkZGluZyBtYW5pcHVsYXRpb24gZ29pbmcgb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgU0tCIGl0c2VsZiBhbmQgaG93IGNvbXByZXNzZWQgZGF0YSBpcyBpbnNlcnRlZCBvciBoYW5kbGVkLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBlbnN1cmluZyBhbGlnbm1lbnQsIGRlYWxpbmcgd2l0aCBoZWFkZXIgbGVuZ3Rocywgb3IgcGVyaGFwcyBldmVuIGhhbmRsaW5nIGRhdGEgYm91bmRhcmllcyBpbiB0aGUgcGFja2V0LiBJ4oCZbSBleHBlY3RpbmcgYSBmZXcga2V5IGNhbGxlciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgcmVzcG9uc2libGUgZm9yIHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzdGFnZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQsIGhvdyBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYnkgdGhlIGNvZGUuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBteSBodW5jaCBpcyBjb3JyZWN0LiBJIHNob3VsZCBhbHNvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIGhpZGRlbiB3aXRoaW4gdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MTU6XHR9XG4xNzE2Olx0XG4xNzE3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXG4xNzE4Olx0cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4xNzE5Olx0e1xuMTcyMDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbjE3MjE6XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuMTcyMjpcdFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXHUwMDNlbXR1KTtcbjE3MjM6XHRcdGludCBsZW47XG4xNzI0Olx0XHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7XG4xNzI1Olx0XHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4xNzI2Olx0XHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzO1xuMTcyNzpcdFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBQUFBfSERSTEVOO1xuMTcyODpcdFxuMTcyOTpcdFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbjE3MzA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNzMxOlx0XG4xNzMyOlx0XHRuZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7XG4xNzMzOlx0XHRpZiAoIW5ld19za2IpIHtcbjE3MzQ6XHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3MzU6XHRcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBubyBtZW1vcnkgKGNvbXAgcGt0KVxcblwmIzM0Oyk7XG4xNzM2Olx0XHRcdHJldHVybiBOVUxMO1xuMTczNzpcdFx0fVxuMTczODpcdFx0aWYgKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gXHUwMDNlIFBQUF9IRFJMRU4pXG4xNzM5Olx0XHRcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTtcbjE3NDA6XHRcbjE3NDE6XHRcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXG4xNzQyOlx0XHRsZW4gPSBwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcHJlc3MocHBwLVx1MDAzZXhjX3N0YXRlLCBza2ItXHUwMDNlZGF0YSAtIDIsXG4xNzQzOlx0XHRcdFx0XHQgICBuZXdfc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4gJiM0MzsgMixcbjE3NDQ6XHRcdFx0XHRcdCAgIGNvbXByZXNzb3Jfc2tiX3NpemUpO1xuMTc0NTpcdFx0aWYgKGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ0NQX1VQKSkge1xuMTc0NjpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuMTc0NzpcdFx0XHRza2IgPSBuZXdfc2tiO1xuMTc0ODpcdFx0XHRza2JfcHV0KHNrYiwgbGVuKTtcbjE3NDk6XHRcdFx0c2tiX3B1bGwoc2tiLCAyKTtcdC8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqL1xuMTc1MDpcdFx0fSBlbHNlIGlmIChsZW4gPT0gMCkge1xuMTc1MTpcdFx0XHQvKiBkaWRuJiMzOTt0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqL1xuMTc1MjpcdFx0XHRjb25zdW1lX3NrYihuZXdfc2tiKTtcbjE3NTM6XHRcdFx0bmV3X3NrYiA9IHNrYjtcbjE3NTQ6XHRcdH0gZWxzZSB7XG4xNzU1Olx0XHRcdC8qXG4xNzU2Olx0XHRcdCAqIChsZW4gXHUwMDNjIDApXG4xNzU3Olx0XHRcdCAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZFxuMTc1ODpcdFx0XHQgKiBmcmFtZXMuICBUaGUgY29tcHJlc3NvciB3aWxsIHJldHVybiAtMSBpZiB3ZVxuMTc1OTpcdFx0XHQgKiBzaG91bGQgZHJvcCB0aGUgZnJhbWUuICBXZSBjYW5ub3Qgc2ltcGx5IHRlc3RcbjE3NjA6XHRcdFx0ICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZVxuMTc2MTpcdFx0XHQgKiB0aGUgc2FtZSBudW1iZXIuXG4xNzYyOlx0XHRcdCAqL1xuMTc2MzpcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuMTc2NDpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXG5cJiMzNDspO1xuMTc2NTpcdFx0XHRjb25zdW1lX3NrYihuZXdfc2tiKTtcbjE3NjY6XHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4xNzY3Olx0XHR9XG4xNzY4Olx0XHRyZXR1cm4gbmV3X3NrYjtcbjE3Njk6XHR9XG4xNzcwOlx0XG4xNzcxOlx0LypcbjE3NzI6XHQgKiBDb21wcmVzcyBhbmQgcHJlcGFyZSB0byBzZW5kIGEgZnJhbWUuXG4xNzczOlx0ICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aC5cbjE3NzQ6XHQgKiBSZXR1cm5zIDEgaWYgdGhlIHNrYiB3YXMgY29uc3VtZWQsIDAgaWYgaXQgY2FuIGJlIHBhc3NlZCB0byBwcHBfcHVzaCgpLlxuMTc3NTpcdCAqIEBwc2tiIGlzIHVwZGF0ZWQgaWYgYSBjb21wcmVzc29yIGlzIGluIHVzZS5cbjE3NzY6XHQgKi9cbjE3Nzc6XHRzdGF0aWMgaW50XG4xNzc4Olx0cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuMTc3OTpcdHtcbjE3ODA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4xNzgxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XG4xNzgyOlx0XHRpbnQgcHJvdG8gPSBQUFBfUFJPVE8oc2tiKTtcbjE3ODM6XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuMTc4NDpcdFx0aW50IGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHNuaXBwZXQ6CgoqKkRlY29tcHJlc3Npb24gYW5kIENvbXByZXNzaW9uIFdvcmtmbG93IGluIFBQUCB3aXRoIERlZmxhdGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBEZWZsYXRlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcGxheXMgb3V0IGluIFBQUC4gSSBzZWUgYHBhZF9jb21wcmVzc19za2JgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcyBieSBjYWxsaW5nIGBwcHAtJmd0O3hjb21wLSZndDtjb21wcmVzc2AuIFdoZW4gd2UmIzM5O3JlIHVzaW5nIERlZmxhdGUsIHRoYXQgYWN0dWFsbHkgcmVzb2x2ZXMgdG8gYHpfY29tcHJlc3NgLiBOb3csIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgel9kZWNvbXByZXNzYCBpcyB0aGUgY291bnRlcnBhcnQsIGhhbmRsaW5nIHRoZSB1bnBhY2tpbmcgc2lkZSBvZiB0aGluZ3Mgd2hlbiByZWNlaXZpbmcgZnJhbWVzLCBzcGVjaWZpY2FsbHkgZnJvbSBlaXRoZXIgdGhlIGdlbmVyaWMgUFBQIGludGVyZmFjZSBvciBhc3luY2hyb25vdXMvc3luY2hyb25vdXMgVFRZIFBQUCBjb25uZWN0aW9ucy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIHN0cnVjdHVyZSBvZiB0aGUgYGRlY29tcHJlc3NgIGZ1bmN0aW9uLiBUbyBmdWxseSBncmFzcCB0aGlzIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gd2hlcmUgYGRlY29tcHJlc3NgICh3aGljaCBpcyBgel9kZWNvbXByZXNzYCBpbiB0aGlzIGNhc2UpIGlzIGNhbGxlZC4gSXQgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIERlZmxhdGUgZGVjb21wcmVzc2lvbiBzaWRlIG9mIFBQUCBvcGVyYXRpb25zLiBXaGVyZSBpcyBpdCBiZWluZyBpbml0aWF0ZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWRlY29tcHJlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjU0Nz1wcHBfZGVjb21wcmVzc19mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjU3Ny1cdFx0LyogdGhlIGRlY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIHRoZSBBL0MgYnl0ZXMgaW4gdGhlIGhkciAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjU3ODpcdFx0bGVuID0gcHBwLVx1MDAzZXJjb21wLVx1MDAzZWRlY29tcHJlc3MocHBwLVx1MDAzZXJjX3N0YXRlLCBza2ItXHUwMDNlZGF0YSAtIDIsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNTc5LVx0XHRcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOyAyLCBucy1cdTAwM2VkYXRhLCBvYnVmZl9zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUFBQIEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBQUFAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBQUFAgaXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nIGRyaXZlciBpbiBMaW51eCwgZXNzZW50aWFsbHkgYSB2aXJ0dWFsIGRldmljZSwgYWNjZXNzaWJsZSB2aWEgYC9kZXYvcHBwYCBhbmQgaW9jdGxzIGxpa2UgYFBQUElPQ1NDT01QUkVTU2AsIHdoaWNoIG1ha2VzIGl0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBHb29kLCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgZGVzY3JpcHRpb25zIGZvciBgL2Rldi9wcHBgIGFuZCB0aG9zZSBpb2N0bHM7IHRoYXQmIzM5O3MgYSBrZXkgZmlyc3Qgc3RlcC4gU2luY2UgaXQmIzM5O3MgYSB2aXJ0dWFsIGRldmljZSwgdGhpcyBzaG91bGQgYmUgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBhbmQgaW9jdGxzIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBzbyB0aGF0JiMzOTtzIGEgYmlnIHBsdXMuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgYFdvcnRoRnV6emluZ2AuIEFoLCBleGNlbGxlbnQhIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHRvdWNoaW5nIGV4ZWN1dGFibGUgY29kZSBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIHNwZWNpZmljYWxseSwgZm9jdXNpbmcgb24gYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYC4gQWxzbyBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgIHdpdGggYHBhZF9jb21wcmVzc19za2JgLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeSwgYW5kIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBmaXhlcyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZHMgYW5kIGNvbXByZXNzZWQgb3V0cHV0IGRpc2NhcmRpbmcgaW4gYHpfY29tcHJlc3NgL2B6X2RlY29tcHJlc3NgIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IGZ1enppbmcgd2lsbCBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcgY29uZmlybXMgdGhhdCEKCkZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcmlnaHQuIFdlIGhhdmUgYFBQUGAgYW5kIGBQUFBfREVGTEFURWAsIGdvb2QuIEkmIzM5O2xsIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgc2VhcmNoIGZvciBgQ09ORklHX1BQUGAgaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB3aWxsIHRlbGwgbWUgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Njpjb25maWcgUFBQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM1PWlmIFBQUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzYtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzozNzpjb25maWcgUFBQX0JTRENPTVBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTU0LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNjgtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OTpjb25maWcgUFBQX0ZJTFRFUlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNzAtXHRib29sIFwmIzM0O1BQUCBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04MC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjgxOmNvbmZpZyBQUFBfTVBQRVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODItXHR0cmlzdGF0ZSBcJiMzNDtQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbilcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05MS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjkyOmNvbmZpZyBQUFBfTVVMVElMSU5LXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7UFBQIG11bHRpbGluayBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTAzLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTA0OmNvbmZpZyBQUFBPQVRNXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBBVE1cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTM6Y29uZmlnIFBQUE9YXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTQtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE1LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTE2OmNvbmZpZyBQUFBPRVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE3LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgRXRoZXJuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMjc9Y2hvaWNlXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTM4LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTM5OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQwLVx0Ym9vbCBcJiMzNDsxIGJpdCAoMiBidWNrZXRzKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQxLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQyOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDsyIGJpdHMgKDQgYnVja2V0cylcJiMzNDtcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0NC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE0NTpjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7NCBiaXRzICgxNiBidWNrZXRzKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ3LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ4OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDs4IGJpdHMgKDI1NiBidWNrZXRzKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1MT1lbmRjaG9pY2VcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1Mzpjb25maWcgUFBQT0VfSEFTSF9CSVRTXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTQtXHRpbnRcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjAtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNjE6Y29uZmlnIFBQVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2Mi1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIElQdjQgKFBQVFApXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTcyLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTczOmNvbmZpZyBQUFBPTDJUUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgTDJUUFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE4MT1pZiBUVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE4Mzpjb25maWcgUFBQX0FTWU5DXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODQtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk1LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTk2OmNvbmZpZyBQUFBfU1lOQ19UVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIGZvciBQUFAmIzM5O3MgUGFyZW50IERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgUFBQIHN0YW5kcyBpbiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldHdvcmtpbmcgZHJpdmVycyBhbmQgdGhlaXIgYnVpbGQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgcGFyZW50IGRpcmVjdGl2ZXMsIG9yIGFueXRoaW5nIHRoYXQgZXhwbGljaXRseSBsaW5rcyBQUFAgdG8gYW5vdGhlciBtb2R1bGUgb3IgZmVhdHVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgUFBQIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBCYXNpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgbGluZWFnZSBpbiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipkcml2ZXJzL25ldC9wcHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIGFyb3VuZCBsaW5lIDUyOC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIG9wdGlvbiByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaGlkaW5nIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzUxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQUFAgRGVmbGF0ZSBDb21wcmVzc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBQUFBgIGFuZCBgUFBQX0RFRkxBVEVgIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYFBQUGAgaXMgZ29pbmcgdG8gdXNlIFNMSEMsIGJ1dCBgUFBQX0RFRkxBVEVgIGlzIHNwZWNpZmljYWxseSBzZXQgdXAgdG8gdXRpbGl6ZSBgWkxJQl9JTkZMQVRFYCBhbmQgYFpMSUJfREVGTEFURWAuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgc2V0dXAuCgpGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jYCBhcmUgdGhlIG1haW4gc3VzcGVjdHMuIEkgYWxzbyBzZWUgdGhhdCBgcGFkX2NvbXByZXNzX3NrYmAsIGEgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYCwgYWxvbmcgd2l0aCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IHN1Y2ggYXMgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIGFuZCBgcHBwX2RlY29tcHJlc3NfZnJhbWVgLCBhcmUgcG90ZW50aWFsbHkgaW1wYWN0ZWQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4gQXJlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2Agc3RhdGljLCBleHBvcnRlZCwgb3Igc29tZXRoaW5nIGVsc2U/IEkgY2hlY2sgYHBwcF9kZWZsYXRlLmNgIGFuZCBjb25maXJtIHRoZXkgYXJlIGluZGVlZCBkZWNsYXJlZCBhcyBgc3RhdGljIGludCB6X2NvbXByZXNzKC4uLilgIGFuZCBgc3RhdGljIGludCB6X2RlY29tcHJlc3MoLi4uKWAuIEhvbGQgb24gYSBtaW51dGUuLi5ldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMgd2l0aGluIHRoZSAuYyBmaWxlLCB0aGUgTGludXgga2VybmVsIHN0aWxsIGdlbmVyYXRlcyBzeW1ib2xzIGZvciB0aGVtIGluIGB2bWxpbnV4YCBhbmQgYGthbGxzeW1zYCBpZiB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhleSBpbmxpbmVkPyBJIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgcmVmZXJlbmNlZCB2aWEgc3RydWN0IGNvbXByZXNzb3IgZnVuY3Rpb24gcG9pbnRlcnMgbGlrZSBgcHBwX2RlZmxhdGUuY29tcHJlc3MgPSB6X2NvbXByZXNzYCBhbmQgYHBwcF9kZWZsYXRlLmRlY29tcHJlc3MgPSB6X2RlY29tcHJlc3NgLCB3aGljaCBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLiBBaGEhIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gZm9yIGBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZGVmbGF0ZV9kcmFmdGAsIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgb3V0LW9mLWxpbmUgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBMb29raW5nIGF0IGBwYWRfY29tcHJlc3Nfc2tiYCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljIGlubGluZWAgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYCwgYW5kIGNhbGxlZCBieSBgcHBwX3ByZXBhcmVfdHhfc2tiYCBhbmQgYHBwcF9kZWNvbXByZXNzX2ZyYW1lYC4gSSBzaG91bGQgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHBhZF9jb21wcmVzc19za2JgIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYHBwcF9nZW5lcmljLmNgIGFzIGEgZmluYWwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzE3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTcxODpwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE3MTkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3Nzg9cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4NzItXHRcdH1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE4NzM6XHRcdG5ld19za2IgPSBwYWRfY29tcHJlc3Nfc2tiKHBwcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4NzQtXHRcdGlmICghbmV3X3NrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjUKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmFsaXppbmcgdGhlIEZ1enppbmcgQ29uZmlndXJhdGlvbiBmb3IgUFBQIERlZmxhdGUqKgoKT2theSwgbGV0JiMzOTtzIHJlY2FwLiBJJiMzOTt2ZSB0cmFjZWQgdGhlIGNhbGwgZ3JhcGggYW5kIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBgcGFkX2NvbXByZXNzX3NrYmAgYXBwZWFycyB0byBiZSBjYWxsZWQgb25seSB3aXRoaW4gYHBwcF9wcmVwYXJlX3R4X3NrYmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBwcHBfeG1pdF9wcm9jZXNzYCBhbmQgYHBwcF9zdGFydF94bWl0YC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoZSAqRm9jdXNTeW1ib2xzKi4gIFdlIG5lZWQgdG8gdGFyZ2V0IGB6X2NvbXByZXNzYCwgYHpfZGVjb21wcmVzc2AsIGBwYWRfY29tcHJlc3Nfc2tiYCwgYW5kIGBwcHBfcHJlcGFyZV90eF9za2JgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBQUFAgRGVmbGF0ZS4KClRoZSByZXF1aXJlZCAqRW5hYmxlQ29uZmlncyogYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYFBQUGAgYW5kIGBQUFBfREVGTEFURWAuIE5vIHN1cnByaXNlcyB0aGVyZSwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4KClRoZSByZWFzb25pbmcgaXMgc291bmQ6IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHNtYWxsIG91dHB1dCBidWZmZXIgaGFuZGxpbmcgYW5kIGJvdW5kcyBjaGVja3MgaW4gdGhlIGRlZmxhdGUgcm91dGluZXMsICphbmQqIGEgY29uY3VycmVuY3kgaXNzdWUgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGluIGBwYWRfY29tcHJlc3Nfc2tiYC4gIFNpbmNlIHRoaXMgaW1wYWN0cyByZWFjaGFibGUgdmlydHVhbCBuZXR3b3JrIHBhY2tldCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHBhdGh3YXlzLCBhbmQgaW52b2x2ZXMgaW9jdGxzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHRoYXQgZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgd2lsbCBiZSBlZmZlY3RpdmUgaW4gZGV0ZWN0aW5nIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5IHByb2JsZW1zLCBhbmQgcG90ZW50aWFsIGJ1ZmZlciBtYW5hZ2VtZW50IGlzc3Vlcy4gU28gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4KCkkmIzM5O3ZlIGRvbmUgYSBsYXN0IHF1aWNrIGNoZWNrIGFuZCBlbnN1cmVkIHRoZSAqQ29uZmlncyogYW5kICpGb2N1c1N5bWJvbHMqIGFyZSBjb3JyZWN0LCBhbmQgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBpbmRlZWQgc2V0IGFzIGV4cGVjdGVkLiBFdmVyeXRoaW5nIGxvb2tzIHBlcmZlY3QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9ERUZMQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7el9jb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6X2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7cGFkX2NvbXByZXNzX3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYyBpbiBQUFAgZGVmbGF0ZSAoel9jb21wcmVzcywgel9kZWNvbXByZXNzKSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHByb3Blcmx5IGhhbmRsZSBzbWFsbCBvdXRwdXQgYnVmZmVycywgYW5kIHVwZGF0ZXMgcGFkX2NvbXByZXNzX3NrYiBpbiBwcHBfZ2VuZXJpYyB0byBzYWZlbHkgcmVhZCBkZXYtXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9ERUZMQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7el9jb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6X2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7cGFkX2NvbXByZXNzX3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYyBpbiBQUFAgZGVmbGF0ZSAoel9jb21wcmVzcywgel9kZWNvbXByZXNzKSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHByb3Blcmx5IGhhbmRsZSBzbWFsbCBvdXRwdXQgYnVmZmVycywgYW5kIHVwZGF0ZXMgcGFkX2NvbXByZXNzX3NrYiBpbiBwcHBfZ2VuZXJpYyB0byBzYWZlbHkgcmVhZCBkZXYtXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgc2l6aW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgaXNzdWVzIGluIFBQUCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uOlxuMS4gSW4gYHBwcF9nZW5lcmljLmM6cGFkX2NvbXByZXNzX3NrYigpYCwgYFJFQURfT05DRShkZXYtXHUwMDNlbXR1KWAgaXMgdXNlZCB0byBlbnN1cmUgY29uc2lzdGVudCBNVFUgcmVhZHMgYWNyb3NzIGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucywgcHJldmVudGluZyBwb3RlbnRpYWwgYnVmZmVyIHNpemUgbWlzbWF0Y2hlcyBkdWUgdG8gZGF0YSByYWNlcy5cbjIuIEluIGBwcHBfZGVmbGF0ZS5jOnpfY29tcHJlc3MoKWAsIGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgYG9zaXplIFx1MDAzYz0gb2xlbmAgb3IgdGhlIG91dHB1dCBidWZmZXIgZmlsbHMgdXAgYnkgcm91dGluZyBjb21wcmVzc2VkIG91dHB1dCBpbnRvIGEgbG9jYWwgc2NyYXRjaCBidWZmZXIgYGRpc2NhcmRfYnVmYCB0byBrZWVwIGNvbXByZXNzb3Igc3RhdGUgc3luY2hyb25pemVkIHdoaWxlIGRpc2NhcmRpbmcgdGhlIG91dHB1dCwgcmVwbGFjaW5nIGJ1Z2d5IGJlaGF2aW9yIHdoZXJlIGBuZXh0X291dGAgd2FzIHNldCB0byBOVUxMLiBgZGlzY2FyZF9idWZgIGlzIHdyaXRlLW9ubHkgZm9yIGB6bGliX2RlZmxhdGVgIGFuZCBuZXZlciByZWFkLlxuMy4gSW4gYHBwcF9kZWZsYXRlLmM6el9kZWNvbXByZXNzKClgLCBhIGNoZWNrIGBvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTmAgaXMgYWRkZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcyBpbnRvIGBvYnVmYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMuIFRoZSBidWdzIHByZXZlbnRlZCBhcmUgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGNvbmNlcm5zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCmluZGV4IGQ2ZDVlNjU2YjNmNGIuLjk2ZDY4OWI5N2ZkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCkBAIC0xODYsNyAmIzQzOzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiB7CiAJc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnOwogCWludCByLCBwcm90bywgb2ZmLCBvbGVuLCBvYXZhaWw7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdOwogCXVuc2lnbmVkIGNoYXIgKndwdHI7CiYjNDM7CWJvb2wgZGlzY2FyZDsKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS4KQEAgLTIwMCwyMCAmIzQzOzIwMiwyOSBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLAogCWlmIChvc2l6ZSAmZ3Q7IGlzaXplKQogCQlvc2l6ZSA9IGlzaXplOwogCi0Jd3B0ciA9IG9idWY7Ci0KIAkvKgotCSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuCiYjNDM7CSAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZgomIzQzOwkgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZAomIzQzOwkgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zCiYjNDM7CSAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLgogCSAqLwotCXdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTsKLQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KFBQUF9DT01QLCB3cHRyICYjNDM7IDIpOwotCXdwdHIgJiM0Mzs9IFBQUF9IRFJMRU47Ci0JcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7Ci0Jd3B0ciAmIzQzOz0gREVGTEFURV9PVkhEOwogCW9sZW4gPSBQUFBfSERSTEVOICYjNDM7IERFRkxBVEVfT1ZIRDsKLQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7Ci0Jc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gb3NpemUgLSBvbGVuOwomIzQzOwlkaXNjYXJkID0gb3NpemUgJmx0Oz0gb2xlbjsKJiM0MzsJaWYgKGRpc2NhcmQpIHsKJiM0MzsJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQlvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJd3B0ciA9IG9idWY7CiYjNDM7CQl3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7CiYjNDM7CQl3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7CiYjNDM7CQlwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgJiM0MzsgMik7CiYjNDM7CQl3cHRyICYjNDM7PSBQUFBfSERSTEVOOwomIzQzOwkJcHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLSZndDtzZXFubywgd3B0cik7CiYjNDM7CQl3cHRyICYjNDM7PSBERUZMQVRFX09WSEQ7CiYjNDM7CQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IHdwdHI7CiYjNDM7CQlvYXZhaWwgPSBvc2l6ZSAtIG9sZW47CiYjNDM7CX0KJiM0MzsJc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID0gb2F2YWlsOwogCSYjNDM7JiM0MztzdGF0ZS0mZ3Q7c2Vxbm87CiAKIAlvZmYgPSAocHJvdG8gJmd0OyAweGZmKSA/IDIgOiAzOwkvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi8KQEAgLTIzMSw4ICYjNDM7MjQyLDEwIEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsCiAJCX0KIAkJaWYgKHN0YXRlLSZndDtzdHJtLmF2YWlsX291dCA9PSAwKSB7CiAJCQlvbGVuICYjNDM7PSBvYXZhaWw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5uZXh0X291dCA9IE5VTEw7Ci0JCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwOwomIzQzOwkJCWRpc2NhcmQgPSB0cnVlOwomIzQzOwkJCXN0YXRlLSZndDtzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7CiYjNDM7CQkJb2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTsKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7CiAJCX0gZWxzZSB7CiAJCQlicmVhazsJCS8qIGFsbCBkb25lICovCiAJCX0KQEAgLTI0Miw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZiwKIAkvKgogCSAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LgogCSAqLwotCWlmIChvbGVuICZsdDsgaXNpemUgJmFtcDsmYW1wOyBvbGVuICZsdDs9IG9zaXplKSB7CiYjNDM7CWlmICghZGlzY2FyZCAmYW1wOyZhbXA7IG9sZW4gJmx0OyBpc2l6ZSAmYW1wOyZhbXA7IG9sZW4gJmx0Oz0gb3NpemUpIHsKIAkJc3RhdGUtJmd0O3N0YXRzLmNvbXBfYnl0ZXMgJiM0Mzs9IG9sZW47CiAJCXN0YXRlLSZndDtzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7OwogCX0gZWxzZSB7CkBAIC00MjAsNiAmIzQzOzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLAogCQkJICAgICAgIHN0YXRlLSZndDt1bml0LCBpc2l6ZSk7CiAJCXJldHVybiBERUNPTVBfRVJST1I7CiAJfQomIzQzOwlpZiAob3NpemUgJmx0OyBQUFBfSERSTEVOKQomIzQzOwkJcmV0dXJuIERFQ09NUF9FUlJPUjsKIAogCS8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovCiAJc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgJiM0MzsgUFBQX0hEUkxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjA0NDNhZjIzMWU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC0xNzE5LDEwICYjNDM7MTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwomIzQzOwlpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi0mZ3Q7bXR1KTsKIAlpbnQgbGVuOwotCWludCBuZXdfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgbmV3X3NrYl9zaXplID0gbXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47Ci0JaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtJmd0O210dSAmIzQzOwomIzQzOwlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSAmIzQzOwogCQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47CiAKIAlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NwoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gb2YgUFBQIERlZmxhdGUgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIFBQUCBEZWZsYXRlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYHBwcF9kZWZsYXRlLmNgIGFuZCBgcHBwX2dlbmVyaWMuY2AgaW50ZXJhY3QgYW5kIHdoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhvc2UgZmlsZXMsIGBwcHBfZGVmbGF0ZS5jYCBhbmQgYHBwcF9nZW5lcmljLmNgLCB1c2luZyBgcmVhZC1maWxlYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2UgdG8gY29udGV4dHVhbGl6ZSB0aGUgcGF0Y2guIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIGZpbGVzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gsIG9yIHNvIEkgYXNzdW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHQgKlxuIDE4MTpcdCAqXHRSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgcGFja2V0LCBvciAwIGlmIHRoZVxuIDE4MjpcdCAqXHRwYWNrZXQgaXMgaW5jb21wcmVzc2libGUuXG4gMTgzOlx0ICovXG4gMTg0Olx0c3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZixcbiAxODU6XHRcdCAgICAgICBpbnQgaXNpemUsIGludCBvc2l6ZSlcbiAxODY6XHR7XG4gMTg3Olx0XHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XG4gMTg4Olx0XHRpbnQgciwgcHJvdG8sIG9mZiwgb2xlbiwgb2F2YWlsO1xuIDE4OTpcdFx0dW5zaWduZWQgY2hhciBkaXNjYXJkX2J1Zls2NF07XG4gMTkwOlx0XHR1bnNpZ25lZCBjaGFyICp3cHRyO1xuIDE5MTpcdFx0Ym9vbCBkaXNjYXJkO1xuIDE5MjpcdFxuIDE5MzpcdFx0LypcbiAxOTQ6XHRcdCAqIENoZWNrIHRoYXQgdGhlIHByb3RvY29sIGlzIGluIHRoZSByYW5nZSB3ZSBoYW5kbGUuXG4gMTk1Olx0XHQgKi9cbiAxOTY6XHRcdHByb3RvID0gUFBQX1BST1RPQ09MKHJwdHIpO1xuIDE5NzpcdFx0aWYgKHByb3RvIFx1MDAzZSAweDNmZmYgfHwgcHJvdG8gPT0gMHhmZCB8fCBwcm90byA9PSAweGZiKVxuIDE5ODpcdFx0XHRyZXR1cm4gMDtcbiAxOTk6XHRcbiAyMDA6XHRcdC8qIERvbiYjMzk7dCBnZW5lcmF0ZSBjb21wcmVzc2VkIHBhY2tldHMgd2hpY2ggYXJlIGxhcmdlciB0aGFuXG4gMjAxOlx0XHQgICB0aGUgdW5jb21wcmVzc2VkIHBhY2tldC4gKi9cbiAyMDI6XHRcdGlmIChvc2l6ZSBcdTAwM2UgaXNpemUpXG4gMjAzOlx0XHRcdG9zaXplID0gaXNpemU7XG4gMjA0Olx0XG4gMjA1Olx0XHQvKlxuIDIwNjpcdFx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlciBvbmx5IGlmXG4gMjA3Olx0XHQgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZFxuIDIwODpcdFx0ICogb3V0cHV0IHdoaWxlIGNvbnN1bWluZyB0aGUgaW5wdXQsIHNvIHRoZSBjb21wcmVzc29yIGhpc3RvcnkgcmVtYWluc1xuIDIwOTpcdFx0ICogc3luY2hyb25pemVkIHdpdGggdGhlIHBlZXIuXG4gMjEwOlx0XHQgKi9cbiAyMTE6XHRcdG9sZW4gPSBQUFBfSERSTEVOICYjNDM7IERFRkxBVEVfT1ZIRDtcbiAyMTI6XHRcdGRpc2NhcmQgPSBvc2l6ZSBcdTAwM2M9IG9sZW47XG4gMjEzOlx0XHRpZiAoZGlzY2FyZCkge1xuIDIxNDpcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4gMjE1Olx0XHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4gMjE2Olx0XHR9IGVsc2Uge1xuIDIxNzpcdFx0XHR3cHRyID0gb2J1ZjtcbiAyMTg6XHRcdFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xuIDIxOTpcdFx0XHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4gMjIwOlx0XHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciAmIzQzOyAyKTtcbiAyMjE6XHRcdFx0d3B0ciAmIzQzOz0gUFBQX0hEUkxFTjtcbiAyMjI6XHRcdFx0cHV0X3VuYWxpZ25lZF9iZTE2KHN0YXRlLVx1MDAzZXNlcW5vLCB3cHRyKTtcbiAyMjM6XHRcdFx0d3B0ciAmIzQzOz0gREVGTEFURV9PVkhEO1xuIDIyNDpcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcbiAyMjU6XHRcdFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xuIDIyNjpcdFx0fVxuIDIyNzpcdFx0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XG4gMjI4Olx0XHQmIzQzOyYjNDM7c3RhdGUtXHUwMDNlc2Vxbm87XG4gMjI5Olx0XG4gMjMwOlx0XHRvZmYgPSAocHJvdG8gXHUwMDNlIDB4ZmYpID8gMiA6IDM7XHQvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi9cbiAyMzE6XHRcdHJwdHIgJiM0Mzs9IG9mZjtcbiAyMzI6XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9pbiA9IHJwdHI7XG4gMjMzOlx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX2luID0gKGlzaXplIC0gb2ZmKTtcbiAyMzQ6XHRcbiAyMzU6XHRcdGZvciAoOzspIHtcbiAyMzY6XHRcdFx0ciA9IHpsaWJfZGVmbGF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VzdHJtLCBaX1BBQ0tFVF9GTFVTSCk7XG4gMjM3Olx0XHRcdGlmIChyICE9IFpfT0spIHtcbiAyMzg6XHRcdFx0XHRpZiAoc3RhdGUtXHUwMDNlZGVidWcpXG4gMjM5Olx0XHRcdFx0XHRwcmludGsoS0VSTl9FUlJcbiAyNDA6XHRcdFx0XHRcdCAgICAgICBcJiMzNDt6X2NvbXByZXNzOiBkZWZsYXRlIHJldHVybmVkICVkXFxuXCYjMzQ7LCByKTtcbiAyNDE6XHRcdFx0XHRicmVhaztcbiAyNDI6XHRcdFx0fVxuIDI0MzpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPT0gMCkge1xuIDI0NDpcdFx0XHRcdG9sZW4gJiM0Mzs9IG9hdmFpbDtcbiAyNDU6XHRcdFx0XHRkaXNjYXJkID0gdHJ1ZTtcbiAyNDY6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4gMjQ3Olx0XHRcdFx0b2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTtcbiAyNDg6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbDtcbiAyNDk6XHRcdFx0fSBlbHNlIHtcbiAyNTA6XHRcdFx0XHRicmVhaztcdFx0LyogYWxsIGRvbmUgKi9cbiAyNTE6XHRcdFx0fVxuIDI1MjpcdFx0fVxuIDI1MzpcdFx0b2xlbiAmIzQzOz0gb2F2YWlsIC0gc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQ7XG4gMjU0Olx0XG4gMjU1Olx0XHQvKlxuIDI1NjpcdFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gMjU3Olx0XHQgKi9cbiAyNTg6XHRcdGlmICghZGlzY2FyZCBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuIDI1OTpcdFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX2J5dGVzICYjNDM7PSBvbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHQgKiBmb3VuZCBieSBpbnNwZWN0aW5nIHRoZSBpbnB1dCBkYXRhIGFuZCBmb3Igc3lzdGVtIHByb2JsZW1zLCBidXRcbiA0MTE6XHQgKiBERUNPTVBfRkFUQUxFUlJPUiBmb3IgYW55IGVycm9ycyB3aGljaCBjb3VsZCBwb3NzaWJseSBiZSBzYWlkIHRvXG4gNDEyOlx0ICogYmUgYmVpbmcgZGV0ZWN0ZWQgXCYjMzQ7YWZ0ZXJcJiMzNDsgZGVjb21wcmVzc2lvbi4gIEZvciBERUNPTVBfRVJST1IsXG4gNDEzOlx0ICogd2UgY2FuIGlzc3VlIGEgQ0NQIHJlc2V0LXJlcXVlc3Q7IGZvciBERUNPTVBfRkFUQUxFUlJPUiwgd2UgbWF5IGJlXG4gNDE0Olx0ICogaW5mcmluZ2luZyBhIHBhdGVudCBvZiBNb3Rvcm9sYSYjMzk7cyBpZiB3ZSBkbywgc28gd2UgdGFrZSBDQ1AgZG93blxuIDQxNTpcdCAqIGluc3RlYWQuXG4gNDE2Olx0ICpcbiA0MTc6XHQgKiBHaXZlbiB0aGF0IHRoZSBmcmFtZSBoYXMgdGhlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyIGFuZCBhIGdvb2QgRkNTLFxuIDQxODpcdCAqIGVycm9ycyBzdWNoIGFzIGludmFsaWQgY29kZXMgaW4gdGhlIGlucHV0IG1vc3QgbGlrZWx5IGluZGljYXRlIGFcbiA0MTk6XHQgKiBidWcsIHNvIHdlIHJldHVybiBERUNPTVBfRkFUQUxFUlJPUiBmb3IgdGhlbSBpbiBvcmRlciB0byB0dXJuIG9mZlxuIDQyMDpcdCAqIGNvbXByZXNzaW9uLCBldmVuIHRob3VnaCB0aGV5IGFyZSBkZXRlY3RlZCBieSBpbnNwZWN0aW5nIHRoZSBpbnB1dC5cbiA0MjE6XHQgKi9cbiA0MjI6XHRzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcbiA0MjM6XHRcdFx0IHVuc2lnbmVkIGNoYXIgKm9idWYsIGludCBvc2l6ZSlcbiA0MjQ6XHR7XG4gNDI1Olx0XHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XG4gNDI2Olx0XHRpbnQgb2xlbiwgc2VxLCByO1xuIDQyNzpcdFx0aW50IGRlY29kZV9wcm90bywgb3ZlcmZsb3c7XG4gNDI4Olx0XHR1bnNpZ25lZCBjaGFyIG92ZXJmbG93X2J1ZlsxXTtcbiA0Mjk6XHRcbiA0MzA6XHRcdGlmIChpc2l6ZSBcdTAwM2M9IFBQUF9IRFJMRU4gJiM0MzsgREVGTEFURV9PVkhEKSB7XG4gNDMxOlx0XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbiA0MzI6XHRcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogc2hvcnQgcGt0ICglZClcXG5cJiMzNDssXG4gNDMzOlx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQsIGlzaXplKTtcbiA0MzQ6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA0MzU6XHRcdH1cbiA0MzY6XHRcdGlmIChvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTilcbiA0Mzc6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA0Mzg6XHRcbiA0Mzk6XHRcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXG4gNDQwOlx0XHRzZXEgPSBnZXRfdW5hbGlnbmVkX2JlMTYoaWJ1ZiAmIzQzOyBQUFBfSERSTEVOKTtcbiA0NDE6XHRcdGlmIChzZXEgIT0gKHN0YXRlLVx1MDAzZXNlcW5vIFx1MDAyNiAweGZmZmYpKSB7XG4gNDQyOlx0XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWJ1ZylcbiA0NDM6XHRcdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDt6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcblwmIzM0OyxcbiA0NDQ6XHRcdFx0XHQgICAgICAgc3RhdGUtXHUwMDNldW5pdCwgc2VxLCBzdGF0ZS1cdTAwM2VzZXFubyBcdTAwMjYgMHhmZmZmKTtcbiA0NDU6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA0NDY6XHRcdH1cbiA0NDc6XHRcdCYjNDM7JiM0MztzdGF0ZS1cdTAwM2VzZXFubztcbiA0NDg6XHRcbiA0NDk6XHRcdC8qXG4gNDUwOlx0XHQgKiBGaWxsIGluIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBQUFAgaGVhZGVyLiAgVGhlIHByb3RvY29sIGZpZWxkXG4gNDUxOlx0XHQgKiBjb21lcyBmcm9tIHRoZSBkZWNvbXByZXNzZWQgZGF0YS5cbiA0NTI6XHRcdCAqL1xuIDQ1MzpcdFx0b2J1ZlswXSA9IFBQUF9BRERSRVNTKGlidWYpO1xuIDQ1NDpcdFx0b2J1ZlsxXSA9IFBQUF9DT05UUk9MKGlidWYpO1xuIDQ1NTpcdFx0b2J1ZlsyXSA9IDA7XG4gNDU2Olx0XG4gNDU3Olx0XHQvKlxuIDQ1ODpcdFx0ICogU2V0IHVwIHRvIGNhbGwgaW5mbGF0ZS4gIFdlIHNldCBhdmFpbF9vdXQgdG8gMSBpbml0aWFsbHkgc28gd2UgY2FuXG4gNDU5Olx0XHQgKiBsb29rIGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBvdXRwdXQgYW5kIGRlY2lkZSB3aGV0aGVyIHdlIGhhdmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcxNTpcdH1cbjE3MTY6XHRcbjE3MTc6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbjE3MTg6XHRwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE3MTk6XHR7XG4xNzIwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuMTcyMTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4xNzIyOlx0XHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuMTcyMzpcdFx0aW50IGxlbjtcbjE3MjQ6XHRcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgJiM0MztcbjE3MjU6XHRcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbjE3MjY6XHRcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICYjNDM7XG4xNzI3Olx0XHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47XG4xNzI4Olx0XG4xNzI5Olx0XHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuMTczMDpcdFx0XHRyZXR1cm4gTlVMTDtcbjE3MzE6XHRcbjE3MzI6XHRcdG5ld19za2IgPSBhbGxvY19za2IobmV3X3NrYl9zaXplLCBHRlBfQVRPTUlDKTtcbjE3MzM6XHRcdGlmICghbmV3X3NrYikge1xuMTczNDpcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuMTczNTpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxuXCYjMzQ7KTtcbjE3MzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNzM3Olx0XHR9XG4xNzM4Olx0XHRpZiAoZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcdTAwM2UgUFBQX0hEUkxFTilcbjE3Mzk6XHRcdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuMTc0MDpcdFxuMTc0MTpcdFx0LyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi9cbjE3NDI6XHRcdGxlbiA9IHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wcmVzcyhwcHAtXHUwMDNleGNfc3RhdGUsIHNrYi1cdTAwM2VkYXRhIC0gMixcbjE3NDM6XHRcdFx0XHRcdCAgIG5ld19za2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbiAmIzQzOyAyLFxuMTc0NDpcdFx0XHRcdFx0ICAgY29tcHJlc3Nvcl9za2Jfc2l6ZSk7XG4xNzQ1Olx0XHRpZiAobGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiAocHBwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DQ1BfVVApKSB7XG4xNzQ2Olx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4xNzQ3Olx0XHRcdHNrYiA9IG5ld19za2I7XG4xNzQ4Olx0XHRcdHNrYl9wdXQoc2tiLCBsZW4pO1xuMTc0OTpcdFx0XHRza2JfcHVsbChza2IsIDIpO1x0LyogcHVsbCBvZmYgQS9DIGJ5dGVzICovXG4xNzUwOlx0XHR9IGVsc2UgaWYgKGxlbiA9PSAwKSB7XG4xNzUxOlx0XHRcdC8qIGRpZG4mIzM5O3QgY29tcHJlc3MsIG9yIENDUCBub3QgdXAgeWV0ICovXG4xNzUyOlx0XHRcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xuMTc1MzpcdFx0XHRuZXdfc2tiID0gc2tiO1xuMTc1NDpcdFx0fSBlbHNlIHtcbjE3NTU6XHRcdFx0LypcbjE3NTY6XHRcdFx0ICogKGxlbiBcdTAwM2MgMClcbjE3NTc6XHRcdFx0ICogTVBQRSByZXF1aXJlcyB0aGF0IHdlIGRvIG5vdCBzZW5kIHVuZW5jcnlwdGVkXG4xNzU4Olx0XHRcdCAqIGZyYW1lcy4gIFRoZSBjb21wcmVzc29yIHdpbGwgcmV0dXJuIC0xIGlmIHdlXG4xNzU5Olx0XHRcdCAqIHNob3VsZCBkcm9wIHRoZSBmcmFtZS4gIFdlIGNhbm5vdCBzaW1wbHkgdGVzdFxuMTc2MDpcdFx0XHQgKiB0aGUgY29tcHJlc3NfcHJvdG8gYmVjYXVzZSBNUFBFIGFuZCBNUFBDIHNoYXJlXG4xNzYxOlx0XHRcdCAqIHRoZSBzYW1lIG51bWJlci5cbjE3NjI6XHRcdFx0ICovXG4xNzYzOlx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4xNzY0Olx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O3BwcDogY29tcHJlc3NvciBkcm9wcGVkIHBrdFxcblwmIzM0Oyk7XG4xNzY1Olx0XHRcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xuMTc2NjpcdFx0XHRuZXdfc2tiID0gTlVMTDtcbjE3Njc6XHRcdH1cbjE3Njg6XHRcdHJldHVybiBuZXdfc2tiO1xuMTc2OTpcdH1cbjE3NzA6XHRcbjE3NzE6XHQvKlxuMTc3MjpcdCAqIENvbXByZXNzIGFuZCBwcmVwYXJlIHRvIHNlbmQgYSBmcmFtZS5cbjE3NzM6XHQgKiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGxvY2tlZCB0aGUgeG1pdCBwYXRoLlxuMTc3NDpcdCAqIFJldHVybnMgMSBpZiB0aGUgc2tiIHdhcyBjb25zdW1lZCwgMCBpZiBpdCBjYW4gYmUgcGFzc2VkIHRvIHBwcF9wdXNoKCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTkKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGdpdmVuIG15IGFzc3VtZWQgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgUFBQIERlZmxhdGUgQ29tcHJlc3Npb24vRGVjb21wcmVzc2lvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgdGhlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jYCBmaWxlLiBUaGlzIG1lYW5zIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBhdCBhIHNuaXBwZXQ7IEkmIzM5O20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIGVudGlyZSBsb2dpYyBvZiBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IHJldmlld2luZyB0aGUgY29kZSBmbG93LCBjaGVja2luZyBmb3IgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBkZWZsYXRlIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiwgYW5kIG1ha2luZyBzdXJlIHRoZSBkYXRhIGhhbmRsaW5nIGlzIHJvYnVzdCBhbmQgc2VjdXJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBtZW1vcnksIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgYW5kIGdhaW4gYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgZGF0YSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgUFBQIHByb3RvY29sIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdFx0XHRicmVhaztcdFx0LyogYWxsIGRvbmUgKi9cbiAyNTE6XHRcdFx0fVxuIDI1MjpcdFx0fVxuIDI1MzpcdFx0b2xlbiAmIzQzOz0gb2F2YWlsIC0gc3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQ7XG4gMjU0Olx0XG4gMjU1Olx0XHQvKlxuIDI1NjpcdFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gMjU3Olx0XHQgKi9cbiAyNTg6XHRcdGlmICghZGlzY2FyZCBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjPSBvc2l6ZSkge1xuIDI1OTpcdFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX2J5dGVzICYjNDM7PSBvbGVuO1xuIDI2MDpcdFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7O1xuIDI2MTpcdFx0fSBlbHNlIHtcbiAyNjI6XHRcdFx0c3RhdGUtXHUwMDNlc3RhdHMuaW5jX2J5dGVzICYjNDM7PSBpc2l6ZTtcbiAyNjM6XHRcdFx0c3RhdGUtXHUwMDNlc3RhdHMuaW5jX3BhY2tldHMmIzQzOyYjNDM7O1xuIDI2NDpcdFx0XHRvbGVuID0gMDtcbiAyNjU6XHRcdH1cbiAyNjY6XHRcdHN0YXRlLVx1MDAzZXN0YXRzLnVuY19ieXRlcyAmIzQzOz0gaXNpemU7XG4gMjY3Olx0XHRzdGF0ZS1cdTAwM2VzdGF0cy51bmNfcGFja2V0cyYjNDM7JiM0Mzs7XG4gMjY4Olx0XG4gMjY5Olx0XHRyZXR1cm4gb2xlbjtcbiAyNzA6XHR9XG4gMjcxOlx0XG4gMjcyOlx0LyoqXG4gMjczOlx0ICpcdHpfY29tcF9zdGF0cyAtIHJldHVybiBjb21wcmVzc2lvbiBzdGF0aXN0aWNzIGZvciBhIGNvbXByZXNzb3JcbiAyNzQ6XHQgKlx0XHRvciBkZWNvbXByZXNzb3IuXG4gMjc1Olx0ICpcdEBhcmc6XHRwb2ludGVyIHRvIHByaXZhdGUgc3BhY2UgZm9yIHRoZSAoZGUpY29tcHJlc3NvclxuIDI3NjpcdCAqXHRAc3RhdHM6XHRwb2ludGVyIHRvIGEgc3RydWN0IGNvbXBzdGF0IHRvIHJlY2VpdmUgdGhlIHJlc3VsdC5cbiAyNzc6XHQgKi9cbiAyNzg6XHRzdGF0aWMgdm9pZCB6X2NvbXBfc3RhdHModm9pZCAqYXJnLCBzdHJ1Y3QgY29tcHN0YXQgKnN0YXRzKVxuIDI3OTpcdHtcbiAyODA6XHRcdHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICopIGFyZztcbiAyODE6XHRcbiAyODI6XHRcdCpzdGF0cyA9IHN0YXRlLVx1MDAzZXN0YXRzO1xuIDI4MzpcdH1cbiAyODQ6XHRcbiAyODU6XHQvKipcbiAyODY6XHQgKlx0el9kZWNvbXBfZnJlZSAtIEZyZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IGEgZGVjb21wcmVzc29yLlxuIDI4NzpcdCAqXHRAYXJnOlx0cG9pbnRlciB0byBwcml2YXRlIHNwYWNlIGZvciB0aGUgZGVjb21wcmVzc29yLlxuIDI4ODpcdCAqL1xuIDI4OTpcdHN0YXRpYyB2b2lkIHpfZGVjb21wX2ZyZWUodm9pZCAqYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTU6XHRcdG9idWZbMl0gPSAwO1xuIDQ1NjpcdFxuIDQ1NzpcdFx0LypcbiA0NTg6XHRcdCAqIFNldCB1cCB0byBjYWxsIGluZmxhdGUuICBXZSBzZXQgYXZhaWxfb3V0IHRvIDEgaW5pdGlhbGx5IHNvIHdlIGNhblxuIDQ1OTpcdFx0ICogbG9vayBhdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgb3V0cHV0IGFuZCBkZWNpZGUgd2hldGhlciB3ZSBoYXZlXG4gNDYwOlx0XHQgKiBhIDEtYnl0ZSBvciAyLWJ5dGUgcHJvdG9jb2wgZmllbGQuXG4gNDYxOlx0XHQgKi9cbiA0NjI6XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9pbiA9IGlidWYgJiM0MzsgUFBQX0hEUkxFTiAmIzQzOyBERUZMQVRFX09WSEQ7XG4gNDYzOlx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX2luID0gaXNpemUgLSAoUFBQX0hEUkxFTiAmIzQzOyBERUZMQVRFX09WSEQpO1xuIDQ2NDpcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IG9idWYgJiM0MzsgMztcbiA0NjU6XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gMTtcbiA0NjY6XHRcdGRlY29kZV9wcm90byA9IDE7XG4gNDY3Olx0XHRvdmVyZmxvdyA9IDA7XG4gNDY4Olx0XG4gNDY5Olx0XHQvKlxuIDQ3MDpcdFx0ICogQ2FsbCBpbmZsYXRlLCBzdXBwbHlpbmcgbW9yZSBpbnB1dCBvciBvdXRwdXQgYXMgbmVlZGVkLlxuIDQ3MTpcdFx0ICovXG4gNDcyOlx0XHRmb3IgKDs7KSB7XG4gNDczOlx0XHRcdHIgPSB6bGliX2luZmxhdGUoXHUwMDI2c3RhdGUtXHUwMDNlc3RybSwgWl9QQUNLRVRfRkxVU0gpO1xuIDQ3NDpcdFx0XHRpZiAociAhPSBaX09LKSB7XG4gNDc1Olx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuIDQ3NjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IGluZmxhdGUgcmV0dXJuZWQgJWQgKCVzKVxcblwmIzM0OyxcbiA0Nzc6XHRcdFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCByLCAoc3RhdGUtXHUwMDNlc3RybS5tc2c/IHN0YXRlLVx1MDAzZXN0cm0ubXNnOiBcJiMzNDtcJiMzNDspKTtcbiA0Nzg6XHRcdFx0XHRyZXR1cm4gREVDT01QX0ZBVEFMRVJST1I7XG4gNDc5Olx0XHRcdH1cbiA0ODA6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ICE9IDApXG4gNDgxOlx0XHRcdFx0YnJlYWs7XHRcdC8qIGFsbCBkb25lICovXG4gNDgyOlx0XHRcdGlmIChkZWNvZGVfcHJvdG8pIHtcbiA0ODM6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTjtcbiA0ODQ6XHRcdFx0XHRpZiAoKG9idWZbM10gXHUwMDI2IDEpID09IDApIHtcbiA0ODU6XHRcdFx0XHRcdC8qIDItYnl0ZSBwcm90b2NvbCBmaWVsZCAqL1xuIDQ4NjpcdFx0XHRcdFx0b2J1ZlsyXSA9IG9idWZbM107XG4gNDg3Olx0XHRcdFx0XHQtLXN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQ7XG4gNDg4Olx0XHRcdFx0XHQmIzQzOyYjNDM7c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQ7XG4gNDg5Olx0XHRcdFx0fVxuIDQ5MDpcdFx0XHRcdGRlY29kZV9wcm90byA9IDA7XG4gNDkxOlx0XHRcdH0gZWxzZSBpZiAoIW92ZXJmbG93KSB7XG4gNDkyOlx0XHRcdFx0LypcbiA0OTM6XHRcdFx0XHQgKiBXZSYjMzk7dmUgZmlsbGVkIHVwIHRoZSBvdXRwdXQgYnVmZmVyOyB0aGUgb25seSB3YXkgdG9cbiA0OTQ6XHRcdFx0XHQgKiBmaW5kIG91dCB3aGV0aGVyIGluZmxhdGUgaGFzIGFueSBtb3JlIGNoYXJhY3RlcnNcbiA0OTU6XHRcdFx0XHQgKiBsZWZ0IGlzIHRvIGdpdmUgaXQgYW5vdGhlciBieXRlIG9mIG91dHB1dCBzcGFjZS5cbiA0OTY6XHRcdFx0XHQgKi9cbiA0OTc6XHRcdFx0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gb3ZlcmZsb3dfYnVmO1xuIDQ5ODpcdFx0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gMTtcbiA0OTk6XHRcdFx0XHRvdmVyZmxvdyA9IDE7XG4gNTAwOlx0XHRcdH0gZWxzZSB7XG4gNTAxOlx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuIDUwMjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxuXCYjMzQ7LFxuIDUwMzpcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQpO1xuIDUwNDpcdFx0XHRcdHJldHVybiBERUNPTVBfRkFUQUxFUlJPUjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgel9kZWNvbXByZXNzYCYjMzQ7LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkIGZvciBhbiBleHBlcnQgaW4gdGhlaXIgZmllbGQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgel9kZWNvbXByZXNzYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSB0aGlua2luZyBpcywgJiMzNDtMZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgel9kZWNvbXByZXNzYC4mIzM0OyBJJiMzOTttIG5vdCBzYXRpc2ZpZWQgd2l0aCBqdXN0IGtub3dpbmcgKndoYXQqIGl0IGRvZXMsIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqaG93Ki4gSSYjMzk7bSBpbW1lZGlhdGVseSBwaWN0dXJpbmcgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXMsIHRoZSBkaWZmZXJlbnQgZGVjb21wcmVzc2lvbiBhbGdvcml0aG1zIGl0IGNvdWxkIGJlIHVzaW5nIHVuZGVyIHRoZSBob29kIOKAkyBIdWZmbWFuLCBMZW1wZWwtWml2IHZhcmlhbnRzLCBtYXliZSBldmVuIHNvbWV0aGluZyBtb3JlIGV4b3RpYyBpZiB0aGlzIGlzIGEgc3BlY2lhbGl6ZWQgY29udGV4dC4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBmbG93cyB0aGF0IHdvdWxkIGJlIGludm9sdmVkLiBJcyBpdCBoYW5kbGluZyBhIHNwZWNpZmljIGNvbXByZXNzaW9uIGZvcm1hdD8gSXMgaXQgcm9idXN0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzPyBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcz8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSSYjMzk7bSBpdGNoaW5nIHRvIHNlZSB0aGUgY29kZSBhbmQgc3RhcnQgcGllY2luZyBpdCB0b2dldGhlciBtZW50YWxseSwgYW5hbHl6aW5nIGl0IGxpa2UgSSB3b3VsZCBhbnkgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50LiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRcdH0gZWxzZSB7XG4gNTAxOlx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRlYnVnKVxuIDUwMjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxuXCYjMzQ7LFxuIDUwMzpcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZXVuaXQpO1xuIDUwNDpcdFx0XHRcdHJldHVybiBERUNPTVBfRkFUQUxFUlJPUjtcbiA1MDU6XHRcdFx0fVxuIDUwNjpcdFx0fVxuIDUwNzpcdFxuIDUwODpcdFx0aWYgKGRlY29kZV9wcm90bykge1xuIDUwOTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlZGVidWcpXG4gNTEwOlx0XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7el9kZWNvbXByZXNzJWQ6IGRpZG4mIzM5O3QgZ2V0IHByb3RvXFxuXCYjMzQ7LFxuIDUxMTpcdFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0KTtcbiA1MTI6XHRcdFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcbiA1MTM6XHRcdH1cbiA1MTQ6XHRcbiA1MTU6XHRcdG9sZW4gPSBvc2l6ZSAmIzQzOyBvdmVyZmxvdyAtIHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0O1xuIDUxNjpcdFx0c3RhdGUtXHUwMDNlc3RhdHMudW5jX2J5dGVzICYjNDM7PSBvbGVuO1xuIDUxNzpcdFx0c3RhdGUtXHUwMDNlc3RhdHMudW5jX3BhY2tldHMmIzQzOyYjNDM7O1xuIDUxODpcdFx0c3RhdGUtXHUwMDNlc3RhdHMuY29tcF9ieXRlcyAmIzQzOz0gaXNpemU7XG4gNTE5Olx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMmIzQzOyYjNDM7O1xuIDUyMDpcdFxuIDUyMTpcdFx0cmV0dXJuIG9sZW47XG4gNTIyOlx0fVxuIDUyMzpcdFxuIDUyNDpcdC8qKlxuIDUyNTpcdCAqXHR6X2luY29tcCAtIGFkZCBpbmNvbXByZXNzaWJsZSBpbnB1dCBkYXRhIHRvIHRoZSBoaXN0b3J5LlxuIDUyNjpcdCAqXHRAYXJnOlx0cG9pbnRlciB0byBwcml2YXRlIHN0YXRlIGZvciB0aGUgZGVjb21wcmVzc29yXG4gNTI3Olx0ICpcdEBpYnVmOlx0cG9pbnRlciB0byBpbnB1dCBwYWNrZXQgZGF0YVxuIDUyODpcdCAqXHRAaWNudDpcdGxlbmd0aCBvZiBpbnB1dCBkYXRhLlxuIDUyOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjgxCgkJCQkJCQlvdXRwdXQ6IDMwNgoJCQkJCQkJdGhvdWdodHM6IDIxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUFBQIERlZmxhdGUgUGF0Y2g6IEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gVGhlIGNoYW5nZXMgYWRkcmVzcyBzZXZlcmFsIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSBQUFAgZGVmbGF0ZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGNvZGUuCgpGaXJzdCwgaW4gYHBwcF9nZW5lcmljLmNgLCBhIGRhdGEgcmFjZSB3aXRoIGBkZXYtJmd0O210dWAgaW4gYHBhZF9jb21wcmVzc19za2JgIGlzIGFkZHJlc3NlZCBieSB1c2luZyBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgZ29vZCBoeWdpZW5lLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaW4gcGFja2V0IHNpemUgY2FsY3VsYXRpb25zIGR1ZSB0byBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgb2YgYGRldi0mZ3Q7bXR1YC4gVGhpcyBpcyBsaWtlbHkgYSBnb29kIHRoaW5nIGFuZCBub3QgS01TQU4tcmVsZXZhbnQuCgpUaGVuIHdlIHNlZSBzb21lIGZpeGVzIGFuZCBhZGp1c3RtZW50cyBpbiBgcHBwX2RlZmxhdGUuY2AuIFRoZSBmaXJzdCBpc3N1ZSByZWdhcmRzIHRoZSBjYWxjdWxhdGlvbiBvZiBgYXZhaWxfb3V0YCBpbiBgel9jb21wcmVzc2Agd2hpY2ggd291bGQgdW5kZXJmbG93IHdoZW4gYG9zaXplICZsdDs9IG9sZW5gLCBvciBhbiBpbnZhbGlkIGBuZXh0X291dGAgdmFsdWUgd2hlbiBgc3RhdGUtJmd0O3N0cm0uYXZhaWxfb3V0ID09IDBgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIGEgY3Jhc2ggKGRlcmVmZXJlbmNpbmcgYSBudWxsIHBvaW50ZXIpLiBUaGlzIGlzIGFkZHJlc3NlZCBieSB1c2luZyBhIGxvY2FsIHN0YWNrIGJ1ZmZlciwgYGRpc2NhcmRfYnVmWzY0XWAsIHRvIGhvbGQgZGlzY2FyZGVkIG91dHB1dC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgZGlzY2FyZF9idWZgIGlzICpvbmx5KiB3cml0dGVuIHRvIGJ5IGB6bGliX2RlZmxhdGVgLCBhbmQgaXRzIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQuIGBvbGVuYCBpcyBzZXQgdG8gMC4gSXQgaXMgbmV2ZXIgcmVhZCBvciBleHBvc2VkIGluIGFueSB3YXksIHNvIHRoaXMgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgY2F1Z2h0IGJ5IEtBU0FOLgoKVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgYnVnIGZpeGVzL2ltcHJvdmVtZW50cyBtYWRlIHRvIGB6X2RlY29tcHJlc3NgLiBUaGUgaW5pdGlhbCBjaGVjayBgb3NpemUgJmx0OyBQUFBfSERSTEVOYCBpbiBgel9kZWNvbXByZXNzYCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHdyaXRlcy4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uLiBQcmV2aW91c2x5LCB0aGUgYHN0YXRlLSZndDtzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTmAgd2FzIGluY29ycmVjdCBpZiBgb3NpemUgJmx0OyBQUFBfSERSTEVOYC4KCk5vdywgd2UgbmVlZCB0byBmb2N1cyBvbiBLTVNBTi4gVGhpcyBzYW5pdGl6ZXIgaXMgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgb3IgaW5mb3JtYXRpb24gbGVha3MuIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIGFwcGx5IHRoZXNlIGd1aWRlbGluZXMuCgpDb25zaWRlcmluZyB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhlIGtleSBxdWVzdGlvbiBpczogKipEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nLCBhbGxvY2F0ZS9pbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIG9yIGFmZmVjdCBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKgoKKiAgIGBkaXNjYXJkX2J1ZmAgaXMgYSBsb2NhbCBzdGFjayBidWZmZXIgdXNlZCBzb2xlbHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsuIEl0JiMzOTtzIG5ldmVyIHJlYWQsIG5ldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgaXRzIGluaXRpYWwgY29udGVudHMgYXJlIGlycmVsZXZhbnQuIFRoZXJlJiMzOTtzIG5vIGluZm9ybWF0aW9uIGxlYWsgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCiogICBUaGUgYFJFQURfT05DRShkZXYtJmd0O210dSlgIGlzIHNpbXBseSB0byBlbGltaW5hdGUgYSBkYXRhIHJhY2UuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm4gdGhlcmUuCiogICBUaGUgYm91bmRzIGNoZWNrcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2VzcyBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSAqYWxyZWFkeSogZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMsIGFuZCBkb2VzICpub3QqIGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIEkgYW0gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgIHRvb2wgd2l0aCBkZXRhaWxlZCByZWFzb25pbmcgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XG4xLiBJbiBgcHBwX2dlbmVyaWMuYzpwYWRfY29tcHJlc3Nfc2tiKClgLCBgUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXHUwMDNjPSBvbGVuYCBvciB0aGUgb3V0cHV0IGJ1ZmZlciBmaWxscyB1cCBieSByb3V0aW5nIGNvbXByZXNzZWQgb3V0cHV0IGludG8gYSBsb2NhbCBzY3JhdGNoIGJ1ZmZlciBgZGlzY2FyZF9idWZgIHRvIGtlZXAgY29tcHJlc3NvciBzdGF0ZSBzeW5jaHJvbml6ZWQgd2hpbGUgZGlzY2FyZGluZyB0aGUgb3V0cHV0LCByZXBsYWNpbmcgYnVnZ3kgYmVoYXZpb3Igd2hlcmUgYG5leHRfb3V0YCB3YXMgc2V0IHRvIE5VTEwuIGBkaXNjYXJkX2J1ZmAgaXMgd3JpdGUtb25seSBmb3IgYHpsaWJfZGVmbGF0ZWAgYW5kIG5ldmVyIHJlYWQuXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIHNpemluZyBhbmQgYm91bmRzIGNoZWNraW5nIGlzc3VlcyBpbiBQUFAgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbjpcbjEuIEluIGBwcHBfZ2VuZXJpYy5jOnBhZF9jb21wcmVzc19za2IoKWAsIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgTVRVIHJlYWRzIGFjcm9zcyBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBzaXplIG1pc21hdGNoZXMgZHVlIHRvIGRhdGEgcmFjZXMuXG4yLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2NvbXByZXNzKClgLCBpdCBoYW5kbGVzIGNhc2VzIHdoZXJlIGBvc2l6ZSBcdTAwM2M9IG9sZW5gIG9yIHRoZSBvdXRwdXQgYnVmZmVyIGZpbGxzIHVwIGJ5IHJvdXRpbmcgY29tcHJlc3NlZCBvdXRwdXQgaW50byBhIGxvY2FsIHNjcmF0Y2ggYnVmZmVyIGBkaXNjYXJkX2J1ZmAgdG8ga2VlcCBjb21wcmVzc29yIHN0YXRlIHN5bmNocm9uaXplZCB3aGlsZSBkaXNjYXJkaW5nIHRoZSBvdXRwdXQsIHJlcGxhY2luZyBidWdneSBiZWhhdmlvciB3aGVyZSBgbmV4dF9vdXRgIHdhcyBzZXQgdG8gTlVMTC4gYGRpc2NhcmRfYnVmYCBpcyB3cml0ZS1vbmx5IGZvciBgemxpYl9kZWZsYXRlYCBhbmQgbmV2ZXIgcmVhZC5cbjMuIEluIGBwcHBfZGVmbGF0ZS5jOnpfZGVjb21wcmVzcygpYCwgYSBjaGVjayBgb3NpemUgXHUwMDNjIFBQUF9IRFJMRU5gIGlzIGFkZGVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMgaW50byBgb2J1ZmAuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzLiBUaGUgYnVncyBwcmV2ZW50ZWQgYXJlIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25jZXJucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzAuMjYzNzc1Njk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTgyNjkyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0RFRkxBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6X2NvbXByZXNzXCIsXG4gICAgXCJ6X2RlY29tcHJlc3NcIixcbiAgICBcInBhZF9jb21wcmVzc19za2JcIixcbiAgICBcInBwcF9wcmVwYXJlX3R4X3NrYlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XFxuMS4gSW4gYHBwcF9nZW5lcmljLmM6cGFkX2NvbXByZXNzX3NrYigpYCwgYFJFQURfT05DRShkZXYtXFx1MDAzZW10dSlgIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgTVRVIHJlYWRzIGFjcm9zcyBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBzaXplIG1pc21hdGNoZXMgZHVlIHRvIGRhdGEgcmFjZXMuXFxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXFx1MDAzYz0gb2xlbmAgb3IgdGhlIG91dHB1dCBidWZmZXIgZmlsbHMgdXAgYnkgcm91dGluZyBjb21wcmVzc2VkIG91dHB1dCBpbnRvIGEgbG9jYWwgc2NyYXRjaCBidWZmZXIgYGRpc2NhcmRfYnVmYCB0byBrZWVwIGNvbXByZXNzb3Igc3RhdGUgc3luY2hyb25pemVkIHdoaWxlIGRpc2NhcmRpbmcgdGhlIG91dHB1dCwgcmVwbGFjaW5nIGJ1Z2d5IGJlaGF2aW9yIHdoZXJlIGBuZXh0X291dGAgd2FzIHNldCB0byBOVUxMLiBgZGlzY2FyZF9idWZgIGlzIHdyaXRlLW9ubHkgZm9yIGB6bGliX2RlZmxhdGVgIGFuZCBuZXZlciByZWFkLlxcbjMuIEluIGBwcHBfZGVmbGF0ZS5jOnpfZGVjb21wcmVzcygpYCwgYSBjaGVjayBgb3NpemUgXFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzLiBUaGUgYnVncyBwcmV2ZW50ZWQgYXJlIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25jZXJucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzAuMjYzNzgwNDg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkwMDg1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjExOjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcXG5AQCAtMTg2LDcgKzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIHtcXG4gXFx0c3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnO1xcbiBcXHRpbnQgciwgcHJvdG8sIG9mZiwgb2xlbiwgb2F2YWlsO1xcbitcXHR1bnNpZ25lZCBjaGFyIGRpc2NhcmRfYnVmWzY0XTtcXG4gXFx0dW5zaWduZWQgY2hhciAqd3B0cjtcXG4rXFx0Ym9vbCBkaXNjYXJkO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS5cXG5AQCAtMjAwLDIwICsyMDIsMjkgQEAgc3RhdGljIGludCB6X2NvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqcnB0ciwgdW5zaWduZWQgY2hhciAqb2J1ZixcXG4gXFx0aWYgKG9zaXplIFxcdTAwM2UgaXNpemUpXFxuIFxcdFxcdG9zaXplID0gaXNpemU7XFxuIFxcbi1cXHR3cHRyID0gb2J1ZjtcXG4tXFxuIFxcdC8qXFxuLVxcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIuXFxuK1xcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZlxcbitcXHQgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZFxcbitcXHQgKiBvdXRwdXQgd2hpbGUgY29uc3VtaW5nIHRoZSBpbnB1dCwgc28gdGhlIGNvbXByZXNzb3IgaGlzdG9yeSByZW1haW5zXFxuK1xcdCAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLlxcbiBcXHQgKi9cXG4tXFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xcbi1cXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XFxuLVxcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciArIDIpO1xcbi1cXHR3cHRyICs9IFBQUF9IRFJMRU47XFxuLVxcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cXHUwMDNlc2Vxbm8sIHdwdHIpO1xcbi1cXHR3cHRyICs9IERFRkxBVEVfT1ZIRDtcXG4gXFx0b2xlbiA9IFBQUF9IRFJMRU4gKyBERUZMQVRFX09WSEQ7XFxuLVxcdHN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcXG4tXFx0c3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsID0gb3NpemUgLSBvbGVuO1xcbitcXHRkaXNjYXJkID0gb3NpemUgXFx1MDAzYz0gb2xlbjtcXG4rXFx0aWYgKGRpc2NhcmQpIHtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcXG4rXFx0XFx0b2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0d3B0ciA9IG9idWY7XFxuK1xcdFxcdHdwdHJbMF0gPSBQUFBfQUREUkVTUyhycHRyKTtcXG4rXFx0XFx0d3B0clsxXSA9IFBQUF9DT05UUk9MKHJwdHIpO1xcbitcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcXG4rXFx0XFx0d3B0ciArPSBQUFBfSERSTEVOO1xcbitcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMTYoc3RhdGUtXFx1MDAzZXNlcW5vLCB3cHRyKTtcXG4rXFx0XFx0d3B0ciArPSBERUZMQVRFX09WSEQ7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcXG4rXFx0XFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xcbitcXHR9XFxuK1xcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbDtcXG4gXFx0KytzdGF0ZS1cXHUwMDNlc2Vxbm87XFxuIFxcbiBcXHRvZmYgPSAocHJvdG8gXFx1MDAzZSAweGZmKSA/IDIgOiAzO1xcdC8qIHNraXAgMXN0IHByb3RvIGJ5dGUgaWYgMCAqL1xcbkBAIC0yMzEsOCArMjQyLDEwIEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9PSAwKSB7XFxuIFxcdFxcdFxcdG9sZW4gKz0gb2F2YWlsO1xcbi1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IE5VTEw7XFxuLVxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IDEwMDAwMDA7XFxuK1xcdFxcdFxcdGRpc2NhcmQgPSB0cnVlO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IGRpc2NhcmRfYnVmO1xcbitcXHRcXHRcXHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJyZWFrO1xcdFxcdC8qIGFsbCBkb25lICovXFxuIFxcdFxcdH1cXG5AQCAtMjQyLDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIFxcdC8qXFxuIFxcdCAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKG9sZW4gXFx1MDAzYyBpc2l6ZSBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2M9IG9zaXplKSB7XFxuK1xcdGlmICghZGlzY2FyZCBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2MgaXNpemUgXFx1MDAyNlxcdTAwMjYgb2xlbiBcXHUwMDNjPSBvc2l6ZSkge1xcbiBcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xcbiBcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9wYWNrZXRzKys7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTQyMCw2ICs0MzMsOCBAQCBzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0LCBpc2l6ZSk7XFxuIFxcdFxcdHJldHVybiBERUNPTVBfRVJST1I7XFxuIFxcdH1cXG4rXFx0aWYgKG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTilcXG4rXFx0XFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcXG4gXFxuIFxcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXFxuIFxcdHNlcSA9IGdldF91bmFsaWduZWRfYmUxNihpYnVmICsgUFBQX0hEUkxFTik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtMTcxOSwxMCArMTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4rXFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXFx1MDAzZW10dSk7XFxuIFxcdGludCBsZW47XFxuLVxcdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuK1xcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbiBcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVxcdTAwM2VtdHUgK1xcbitcXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSArXFxuIFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbiBcXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzEuNzU0NTYwNjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDU4MTQ3NTgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfREVGTEFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpfY29tcHJlc3NcIixcbiAgICBcInpfZGVjb21wcmVzc1wiLFxuICAgIFwicGFkX2NvbXByZXNzX3NrYlwiLFxuICAgIFwicHBwX3ByZXBhcmVfdHhfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYyBpbiBQUFAgZGVmbGF0ZSAoel9jb21wcmVzcywgel9kZWNvbXByZXNzKSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHByb3Blcmx5IGhhbmRsZSBzbWFsbCBvdXRwdXQgYnVmZmVycywgYW5kIHVwZGF0ZXMgcGFkX2NvbXByZXNzX3NrYiBpbiBwcHBfZ2VuZXJpYyB0byBzYWZlbHkgcmVhZCBkZXYtXFx1MDAzZW10dS4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgdmlydHVhbCBuZXR3b3JraW5nIGNvZGUgcGF0aHMgZXhlcmNpc2VkIHZpYSBzdGFuZGFyZCBQUFAgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5AQCAtMTg2LDcgKzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4ge1xuIFx0c3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnO1xuIFx0aW50IHIsIHByb3RvLCBvZmYsIG9sZW4sIG9hdmFpbDtcbitcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdO1xuIFx0dW5zaWduZWQgY2hhciAqd3B0cjtcbitcdGJvb2wgZGlzY2FyZDtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB0aGF0IHRoZSBwcm90b2NvbCBpcyBpbiB0aGUgcmFuZ2Ugd2UgaGFuZGxlLlxuQEAgLTIwMCwyMCArMjAyLDI5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHRpZiAob3NpemUgXHUwMDNlIGlzaXplKVxuIFx0XHRvc2l6ZSA9IGlzaXplO1xuIFxuLVx0d3B0ciA9IG9idWY7XG4tXG4gXHQvKlxuLVx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlci5cbitcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZlxuK1x0ICogdGhlcmUgaXMgcm9vbSBmb3IgY29tcHJlc3NlZCBkYXRhLiAgT3RoZXJ3aXNlIGRpc2NhcmQgdGhlIGNvbXByZXNzZWRcbitcdCAqIG91dHB1dCB3aGlsZSBjb25zdW1pbmcgdGhlIGlucHV0LCBzbyB0aGUgY29tcHJlc3NvciBoaXN0b3J5IHJlbWFpbnNcbitcdCAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLlxuIFx0ICovXG4tXHR3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7XG4tXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4tXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcbi1cdHdwdHIgKz0gUFBQX0hEUkxFTjtcbi1cdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4tXHR3cHRyICs9IERFRkxBVEVfT1ZIRDtcbiBcdG9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xuLVx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4tXHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IG9zaXplIC0gb2xlbjtcbitcdGRpc2NhcmQgPSBvc2l6ZSBcdTAwM2M9IG9sZW47XG4rXHRpZiAoZGlzY2FyZCkge1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4rXHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4rXHR9IGVsc2Uge1xuK1x0XHR3cHRyID0gb2J1ZjtcbitcdFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xuK1x0XHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciArIDIpO1xuK1x0XHR3cHRyICs9IFBQUF9IRFJMRU47XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4rXHRcdHdwdHIgKz0gREVGTEFURV9PVkhEO1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcbitcdFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xuK1x0fVxuK1x0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XG4gXHQrK3N0YXRlLVx1MDAzZXNlcW5vO1xuIFxuIFx0b2ZmID0gKHByb3RvIFx1MDAzZSAweGZmKSA/IDIgOiAzO1x0Lyogc2tpcCAxc3QgcHJvdG8gYnl0ZSBpZiAwICovXG5AQCAtMjMxLDggKzI0MiwxMCBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0XHR9XG4gXHRcdGlmIChzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9PSAwKSB7XG4gXHRcdFx0b2xlbiArPSBvYXZhaWw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IE5VTEw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwO1xuK1x0XHRcdGRpc2NhcmQgPSB0cnVlO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcbitcdFx0XHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyZWFrO1x0XHQvKiBhbGwgZG9uZSAqL1xuIFx0XHR9XG5AQCAtMjQyLDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHQvKlxuIFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChvbGVuIFx1MDAzYyBpc2l6ZSBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2M9IG9zaXplKSB7XG4rXHRpZiAoIWRpc2NhcmQgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjIGlzaXplIFx1MDAyNlx1MDAyNiBvbGVuIFx1MDAzYz0gb3NpemUpIHtcbiBcdFx0c3RhdGUtXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcbiBcdH0gZWxzZSB7XG5AQCAtNDIwLDYgKzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuIFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCBpc2l6ZSk7XG4gXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXHR9XG4rXHRpZiAob3NpemUgXHUwMDNjIFBQUF9IRFJMRU4pXG4rXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXG4gXHQvKiBDaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVyLiAqL1xuIFx0c2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgKyBQUFBfSERSTEVOKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTcxOSwxMCArMTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4rXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgK1xuK1x0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzEuNzU0NTY3NjI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ3OTAyNzczNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgUFBQIGNvZGUuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIGFuZCBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLlxuXG5GaXJzdCwgaW4gYHBwcF9kZWZsYXRlLmNgLCB0aGUgZm9jdXMgaXMgb24gYHpfY29tcHJlc3MoKWAgYW5kIGB6X2RlY29tcHJlc3MoKWAuIEkgc2VlIHRoZXkncmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGB6X2NvbXByZXNzKClgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHNtYWxsIG91dHB1dCBzaXplcyAoYG9zaXplYCkuIFRoZSBvbGQgY29kZSAoYHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQgPSBOVUxMOyBzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IDEwMDAwMDA7YCkgbG9va3MgZGljZXkuIElmIHpsaWIgdHJpZXMgdG8gd3JpdGUgdG8gYSBudWxsIHBvaW50ZXIgdGhhdCdzIGJhZCBuZXdzISBUaGUgZml4IG1ha2VzIHN1cmUgd2UgZG9uJ3QgZW5kIHVwIHdyaXRpbmcgdG8gbnVsbC4gSW4gYHpfZGVjb21wcmVzcygpYCwgYSBuZXcgY2hlY2sgYGlmIChvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTikgcmV0dXJuIERFQ09NUF9FUlJPUjtgIGhhcyBiZWVuIGFkZGVkLCB3aGljaCBzZWVtcyBzZW5zaWJsZSB0byBwcmV2ZW50IGFuIGVycm9yIHRoZXJlLlxuXG5UaGVuLCBtb3ZpbmcgdG8gYHBwcF9nZW5lcmljLmNgLCB0aGUgcGF0Y2ggaW52b2x2ZXMgYHBhZF9jb21wcmVzc19za2IoKWAsIHdoZXJlIHRoZXkncmUgbm93IHJlYWRpbmcgYFJFQURfT05DRShkZXYtXHUwMDNlbXR1KWAuIE5vdGhpbmcgaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyBvYnZpb3VzbHkgcHJvYmxlbWF0aWMgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGtlZXAgYW4gZXllIG9uIHdoYXQgaXMgYmVpbmcgdXBkYXRlZC5cblxuTm93LCB0byBnaXZlIHRoaXMgYSBwcm9wZXIgZXZhbHVhdGlvbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBzeW1ib2xzLiBMZXQncyBzZWUgaG93IGBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZ2VuZXJpY2AgYXJlIGNvbmZpZ3VyZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIHVzZSBteSB0b29scyB0byBzZWUgd2hhdCBpcyBlbmFibGVkLCBhbmQgd2hlcmUgdGhlc2UgY29tcG9uZW50cyBzaXQgaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo0Ni41NDQ4NDcxMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxMzU0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFBQX0RFRkxBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM3PWNvbmZpZyBQUFBfQlNEQ09NUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcIlBQUCBEZWZsYXRlIGNvbXByZXNzaW9uXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSArPSBic2RfY29tcC5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSArPSBwcHBfZGVmbGF0ZS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19QUFBfTVBQRSkgKz0gcHBwX21wcGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo0Ni42MTg5ODgzNDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk5Mjc3MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFBQUCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZXNlIFBQUCBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBQUFAgc3Vic3lzdGVtLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEkgbmVlZCB0byBzZWUgaG93IGBQUFBgLCBgUFBQX0RFRkxBVEVgLCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgc2V0IHVwLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hpY2ggb3RoZXIgb3B0aW9ucyBlbmFibGUgdGhlc2UsIHdoYXQgYXJlIHRoZSByZWxldmFudCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgd2hlcmUgYXJlIHRoZSBjb25kaXRpb25hbCBidWlsZHMgaGFwcGVuaW5nPyBHb3R0YSB0cmFjZSBkb3duIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gcGF0aHdheSB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCByZXF1aXJlbWVudHMgY29tcGxldGVseS4gVGhpcyBpcyB0aGUgYmVkcm9jayB0byB1bmRlcnN0YW5kaW5nIGFuZCwgaWYgbmVjZXNzYXJ5LCBtb2RpZnlpbmcgdGhlc2UgUFBQIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6NDkuNDE4MjY3ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcbiAgNDE6XFx0XFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXFxuICA0MjpcXHRcXHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcXG4gIDQzOlxcdFxcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXG4gIDQ0OlxcdFxcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCxcXG4gIDQ1OlxcdFxcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFxcXCJQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblxcXCIsXFxuICA0ODpcXHRcXHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxcbiAgNDk6XFx0XFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBCU0QgY29tcHJlc3Npb24gY29kZSB3aWxsIGFsd2F5cyBiZSBjb21waWxlZCBhcyBhXFxuICA1MjpcXHRcXHQgIG1vZHVsZTsgaXQgaXMgY2FsbGVkIGJzZF9jb21wIGFuZCB3aWxsIHNob3cgdXAgaW4gdGhlIGRpcmVjdG9yeVxcbiAgNTM6XFx0XFx0ICBtb2R1bGVzIG9uY2UgeW91IGhhdmUgc2FpZCBcXFwibWFrZSBtb2R1bGVzXFxcIi4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0Y29uZmlnIFBQUF9ERUZMQVRFXFxuICA1NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiXFxuICA1NzpcXHRcXHRzZWxlY3QgWkxJQl9JTkZMQVRFXFxuICA1ODpcXHRcXHRzZWxlY3QgWkxJQl9ERUZMQVRFXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzIHRoZVxcbiAgNjE6XFx0XFx0ICBEZWZsYXRlIGFsZ29yaXRobSAodGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgZ3ppcCB1c2VzKSB0byBjb21wcmVzc1xcbiAgNjI6XFx0XFx0ICBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZS4gIFRoZSBtYWNoaW5lIGF0IHRoZVxcbiAgNjM6XFx0XFx0ICBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGVcXG4gIDY0OlxcdFxcdCAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuICBFdmVuIGlmXFxuICA2NTpcXHRcXHQgIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCwgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBQUFBfRklMVEVSXFxuICA3MDpcXHRcXHRib29sIFxcXCJQUFAgZmlsdGVyaW5nXFxcIlxcbiAgNzE6XFx0XFx0aGVscFxcbiAgNzI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZSBwYWNrZXRzIHBhc3Npbmcgb3ZlclxcbiAgNzM6XFx0XFx0ICBQUFAgaW50ZXJmYWNlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIHBhY2tldHMgY291bnQgYXNcXG4gIDc0OlxcdFxcdCAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwXFxuICA3NTpcXHRcXHQgIGEgZGVtYW5kLWRpYWxlZCBsaW5rKSBhbmQgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZHJvcHBlZCBlbnRpcmVseS5cXG4gIDc2OlxcdFxcdCAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZFxcbiAgNzc6XFx0XFx0ICBhY3RpdmUtZmlsdGVyIG9wdGlvbnMgdG8gcHBwZC5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjQ5LjQxODM1Nzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNTMwNTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBgcHBwX2RlZmxhdGUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBhcmUgaW50ZWdyYXRlZCB3aXRoaW4gdGhpcyBQUFAgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2AgZnJvbSB0aGUgemxpYiBsaWJyYXJ5IGFyZSBpbnZva2VkIHdpdGhpbiBgcHBwX2RlZmxhdGUuY2AuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGxpbmcgc3RydWN0dXJlLCB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQsIGFuZCB0aGUgb3ZlcmFsbCB3b3JrZmxvdy4gSSdsbCBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZSB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gcHJvY2Vzc2VzLiBLbm93aW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoaXMgc3BlY2lmaWMgbW9kdWxlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjUxLjQzMzY3MDUzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0NjU4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6X2NvbXByZXNzfHpfZGVjb21wcmVzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NDM9c3RhdGljIGludFxcdHpfZGVjb21wX2luaXQodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NS1cXHRcXHRcXHRcXHQgICBpbnQgdW5pdCwgaW50IGhkcmxlbiwgaW50IG1ydSwgaW50IGRlYnVnKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo0NjpzdGF0aWMgaW50XFx0el9jb21wcmVzcyh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqcnB0cixcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00Ny1cXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICpvYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NDk9c3RhdGljIHZvaWRcXHR6X2luY29tcCh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGljbnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjUwOnN0YXRpYyBpbnRcXHR6X2RlY29tcHJlc3Modm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTEtXFx0XFx0XFx0XFx0aW50IGlzaXplLCB1bnNpZ25lZCBjaGFyICpvYnVmLCBpbnQgb3NpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9MTY1PXN0YXRpYyB2b2lkIHpfY29tcF9yZXNldCh2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0xNzMtLyoqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6MTc0OiAqXFx0el9jb21wcmVzcyAtIGNvbXByZXNzIGEgUFBQIHBhY2tldCB3aXRoIERlZmxhdGUgY29tcHJlc3Npb24uXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTc1LSAqXFx0QGFyZzpcXHRwb2ludGVyIHRvIHByaXZhdGUgc3RhdGUgZm9yIHRoZSBjb21wcmVzc29yXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0xODMtICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6MTg0OnN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtMTg1LVxcdCAgICAgICBpbnQgaXNpemUsIGludCBvc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTIzOS1cXHRcXHRcXHRcXHRwcmludGsoS0VSTl9FUlJcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzoyNDA6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ6X2NvbXByZXNzOiBkZWZsYXRlIHJldHVybmVkICVkXFxcXG5cXFwiLCByKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy0yNDEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz0zOTM9c3RhdGljIHZvaWQgel9kZWNvbXBfcmVzZXQodm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDAxLS8qKlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjQwMjogKlxcdHpfZGVjb21wcmVzcyAtIGRlY29tcHJlc3MgYSBEZWZsYXRlLWNvbXByZXNzZWQgcGFja2V0LlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQwMy0gKlxcdEBhcmc6XFx0cG9pbnRlciB0byBwcml2YXRlIHN0YXRlIGZvciB0aGUgZGVjb21wcmVzc29yXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00MjEtICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDIyOnN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTQyMy1cXHRcXHQgdW5zaWduZWQgY2hhciAqb2J1ZiwgaW50IG9zaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDMxLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDMyOlxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogc2hvcnQgcGt0ICglZClcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDMzLVxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgaXNpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDQyLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NDQzOlxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NDQtXFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0LCBzZXEsIHN0YXRlLVxcdTAwM2VzZXFubyBcXHUwMDI2IDB4ZmZmZik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy00NzUtXFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo0NzY6XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcInpfZGVjb21wcmVzcyVkOiBpbmZsYXRlIHJldHVybmVkICVkICglcylcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNDc3LVxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgciwgKHN0YXRlLVxcdTAwM2VzdHJtLm1zZz8gc3RhdGUtXFx1MDAzZXN0cm0ubXNnOiBcXFwiXFxcIikpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTAxLVxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTAyOlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogcmFuIG91dCBvZiBtcnVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTAzLVxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01MDktXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1MTA6XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcInpfZGVjb21wcmVzcyVkOiBkaWRuJ3QgZ2V0IHByb3RvXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTUxMS1cXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZXVuaXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NTg1PXN0YXRpYyBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU5MC1cXHQuY29tcF9yZXNldCA9XFx0XFx0el9jb21wX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjU5MTpcXHQuY29tcHJlc3MgPVxcdFxcdHpfY29tcHJlc3MsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTkyLVxcdC5jb21wX3N0YXQgPVxcdFxcdHpfY29tcF9zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU5Ni1cXHQuZGVjb21wX3Jlc2V0ID1cXHRcXHR6X2RlY29tcF9yZXNldCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1OTc6XFx0LmRlY29tcHJlc3MgPVxcdFxcdHpfZGVjb21wcmVzcyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01OTgtXFx0LmluY29tcCA9XFx0XFx0el9pbmNvbXAsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz02MDM9c3RhdGljIHN0cnVjdCBjb21wcmVzc29yIHBwcF9kZWZsYXRlX2RyYWZ0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjA4LVxcdC5jb21wX3Jlc2V0ID1cXHRcXHR6X2NvbXBfcmVzZXQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NjA5OlxcdC5jb21wcmVzcyA9XFx0XFx0el9jb21wcmVzcyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy02MTAtXFx0LmNvbXBfc3RhdCA9XFx0XFx0el9jb21wX3N0YXRzLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNjE0LVxcdC5kZWNvbXBfcmVzZXQgPVxcdFxcdHpfZGVjb21wX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jOjYxNTpcXHQuZGVjb21wcmVzcyA9XFx0XFx0el9kZWNvbXByZXNzLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTYxNi1cXHQuaW5jb21wID1cXHRcXHR6X2luY29tcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6NTEuNDgwNjI0OTk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwMzA5MTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgYHBhZF9jb21wcmVzc19za2JgIGluIFBQUCBHZW5lcmljIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgbmV0d29yayBjb21wcmVzc2lvbiwgYW5kIGdpdmVuIHRoYXQgSSdtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZWx5IHJlbGF0ZWQgdG8gcGFja2V0IG1hbmlwdWxhdGlvbiBvciBmcmFtaW5nLCBteSBpbnR1aXRpb24gaXMgbGVhZGluZyBtZSBkaXJlY3RseSB0byB0aGUgUFBQIChQb2ludC10by1Qb2ludCBQcm90b2NvbCkgbGF5ZXIuIFNvLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgcHBwX2dlbmVyaWMuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9wcHBgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGFyZ2V0aW5nIHRoZSBgcGFkX2NvbXByZXNzX3NrYmAgZnVuY3Rpb24uIFRoaXMgbmFtaW5nIHN1Z2dlc3RzIGl0IGhhbmRsZXMgcGFkZGluZyBvciBjb21wcmVzc2lvbiBvZiBzb2NrZXQgYnVmZmVyIHNrYnMsIHdoaWNoLCBpbiBhIFBQUCBjb250ZXh0LCBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG9wdGltaXppbmcgbmV0d29yayB0cmFuc21pc3Npb24sIHBlcmhhcHMgZm9yIGxvd2VyIGJhbmR3aWR0aCBvciBlcnJvci1wcm9uZSBsaW5rcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgUFBQIGRhdGEgZmxvdyBhbmQgaG93IGl0IGltcGFjdHMgcGFja2V0IHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgbWF5YmUgZXZlbiBzZWN1cml0eS4gSSBzdXNwZWN0IHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB0aGUgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjUzLjc4MzcxODE2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NTczNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZF9jb21wcmVzc19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3MTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTcxODpwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3Nzg9cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg3Mi1cXHRcXHR9XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTg3MzpcXHRcXHRuZXdfc2tiID0gcGFkX2NvbXByZXNzX3NrYihwcHAsIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg3NC1cXHRcXHRpZiAoIW5ld19za2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjU0LjA2OTMwMDQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyOTgyMDYzOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gUFBQIENvbXByZXNzaW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwYWRfY29tcHJlc3Nfc2tiYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCdzICp1c2VkKi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbXByZXNzaW9uIHdpdGhpbiB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBzdWJ0bGUgaGFwcGVuaW5nIHRoYXQgaXMgY29udHJpYnV0aW5nIHRvIGFuIGlzc3VlIEkndmUgYmVlbiBtdWxsaW5nIG92ZXIsIGFuZCB0aGlzIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBwbGFjZSB0byBmaW5kIGNsdWVzLiBcblxuSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgcGFkX2NvbXByZXNzX3NrYmAuIEtub3dpbmcgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGV2YWx1YXRlIGl0cyBpbXBhY3QuIEknbSBpbWFnaW5pbmcgdGhlcmUncyBzb21lIGtpbmQgb2YgcGFkZGluZyBtYW5pcHVsYXRpb24gZ29pbmcgb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgU0tCIGl0c2VsZiBhbmQgaG93IGNvbXByZXNzZWQgZGF0YSBpcyBpbnNlcnRlZCBvciBoYW5kbGVkLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIGVuc3VyaW5nIGFsaWdubWVudCwgZGVhbGluZyB3aXRoIGhlYWRlciBsZW5ndGhzLCBvciBwZXJoYXBzIGV2ZW4gaGFuZGxpbmcgZGF0YSBib3VuZGFyaWVzIGluIHRoZSBwYWNrZXQuIEnigJltIGV4cGVjdGluZyBhIGZldyBrZXkgY2FsbGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHN0YWdlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIHBhc3NlZCwgaG93IGl0J3MgYmVpbmcgbW9kaWZpZWQsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGJ5IHRoZSBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC4gSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBoaWRkZW4gd2l0aGluIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTI6NTcuMDUxMzY2NDc4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzE1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzE1OlxcdH1cXG4xNzE2OlxcdFxcbjE3MTc6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXFxuMTcxODpcXHRwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNzE5OlxcdHtcXG4xNzIwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuMTcyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4xNzIyOlxcdFxcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpO1xcbjE3MjM6XFx0XFx0aW50IGxlbjtcXG4xNzI0OlxcdFxcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbjE3MjU6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbjE3MjY6XFx0XFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xcbjE3Mjc6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XFxuMTcyODpcXHRcXG4xNzI5OlxcdFxcdGlmIChza2JfbGluZWFyaXplKHNrYikpXFxuMTczMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzMxOlxcdFxcbjE3MzI6XFx0XFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xcbjE3MzM6XFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuMTczNDpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3MzU6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4xNzM2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3Mzc6XFx0XFx0fVxcbjE3Mzg6XFx0XFx0aWYgKGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFxcdTAwM2UgUFBQX0hEUkxFTilcXG4xNzM5OlxcdFxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXFxuMTc0MjpcXHRcXHRsZW4gPSBwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wcmVzcyhwcHAtXFx1MDAzZXhjX3N0YXRlLCBza2ItXFx1MDAzZWRhdGEgLSAyLFxcbjE3NDM6XFx0XFx0XFx0XFx0XFx0ICAgbmV3X3NrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4gKyAyLFxcbjE3NDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29tcHJlc3Nvcl9za2Jfc2l6ZSk7XFxuMTc0NTpcXHRcXHRpZiAobGVuIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NDUF9VUCkpIHtcXG4xNzQ2OlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuMTc0NzpcXHRcXHRcXHRza2IgPSBuZXdfc2tiO1xcbjE3NDg6XFx0XFx0XFx0c2tiX3B1dChza2IsIGxlbik7XFxuMTc0OTpcXHRcXHRcXHRza2JfcHVsbChza2IsIDIpO1xcdC8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqL1xcbjE3NTA6XFx0XFx0fSBlbHNlIGlmIChsZW4gPT0gMCkge1xcbjE3NTE6XFx0XFx0XFx0LyogZGlkbid0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqL1xcbjE3NTI6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc1MzpcXHRcXHRcXHRuZXdfc2tiID0gc2tiO1xcbjE3NTQ6XFx0XFx0fSBlbHNlIHtcXG4xNzU1OlxcdFxcdFxcdC8qXFxuMTc1NjpcXHRcXHRcXHQgKiAobGVuIFxcdTAwM2MgMClcXG4xNzU3OlxcdFxcdFxcdCAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZFxcbjE3NTg6XFx0XFx0XFx0ICogZnJhbWVzLiAgVGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gLTEgaWYgd2VcXG4xNzU5OlxcdFxcdFxcdCAqIHNob3VsZCBkcm9wIHRoZSBmcmFtZS4gIFdlIGNhbm5vdCBzaW1wbHkgdGVzdFxcbjE3NjA6XFx0XFx0XFx0ICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZVxcbjE3NjE6XFx0XFx0XFx0ICogdGhlIHNhbWUgbnVtYmVyLlxcbjE3NjI6XFx0XFx0XFx0ICovXFxuMTc2MzpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3NjQ6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXFxcblxcXCIpO1xcbjE3NjU6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc2NjpcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4xNzY3OlxcdFxcdH1cXG4xNzY4OlxcdFxcdHJldHVybiBuZXdfc2tiO1xcbjE3Njk6XFx0fVxcbjE3NzA6XFx0XFxuMTc3MTpcXHQvKlxcbjE3NzI6XFx0ICogQ29tcHJlc3MgYW5kIHByZXBhcmUgdG8gc2VuZCBhIGZyYW1lLlxcbjE3NzM6XFx0ICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aC5cXG4xNzc0OlxcdCAqIFJldHVybnMgMSBpZiB0aGUgc2tiIHdhcyBjb25zdW1lZCwgMCBpZiBpdCBjYW4gYmUgcGFzc2VkIHRvIHBwcF9wdXNoKCkuXFxuMTc3NTpcXHQgKiBAcHNrYiBpcyB1cGRhdGVkIGlmIGEgY29tcHJlc3NvciBpcyBpbiB1c2UuXFxuMTc3NjpcXHQgKi9cXG4xNzc3OlxcdHN0YXRpYyBpbnRcXG4xNzc4OlxcdHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4xNzc5OlxcdHtcXG4xNzgwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuMTc4MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XFxuMTc4MjpcXHRcXHRpbnQgcHJvdG8gPSBQUFBfUFJPVE8oc2tiKTtcXG4xNzgzOlxcdFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xcbjE3ODQ6XFx0XFx0aW50IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTI6NTcuMDUxNTIzNjQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTc1NTU2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHNuaXBwZXQ6XG5cbioqRGVjb21wcmVzc2lvbiBhbmQgQ29tcHJlc3Npb24gV29ya2Zsb3cgaW4gUFBQIHdpdGggRGVmbGF0ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBEZWZsYXRlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcGxheXMgb3V0IGluIFBQUC4gSSBzZWUgYHBhZF9jb21wcmVzc19za2JgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcyBieSBjYWxsaW5nIGBwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcHJlc3NgLiBXaGVuIHdlJ3JlIHVzaW5nIERlZmxhdGUsIHRoYXQgYWN0dWFsbHkgcmVzb2x2ZXMgdG8gYHpfY29tcHJlc3NgLiBOb3csIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgel9kZWNvbXByZXNzYCBpcyB0aGUgY291bnRlcnBhcnQsIGhhbmRsaW5nIHRoZSB1bnBhY2tpbmcgc2lkZSBvZiB0aGluZ3Mgd2hlbiByZWNlaXZpbmcgZnJhbWVzLCBzcGVjaWZpY2FsbHkgZnJvbSBlaXRoZXIgdGhlIGdlbmVyaWMgUFBQIGludGVyZmFjZSBvciBhc3luY2hyb25vdXMvc3luY2hyb25vdXMgVFRZIFBQUCBjb25uZWN0aW9ucy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgc3RydWN0dXJlIG9mIHRoZSBgZGVjb21wcmVzc2AgZnVuY3Rpb24uIFRvIGZ1bGx5IGdyYXNwIHRoaXMgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB3aGVyZSBgZGVjb21wcmVzc2AgKHdoaWNoIGlzIGB6X2RlY29tcHJlc3NgIGluIHRoaXMgY2FzZSkgaXMgY2FsbGVkLiBJdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgRGVmbGF0ZSBkZWNvbXByZXNzaW9uIHNpZGUgb2YgUFBQIG9wZXJhdGlvbnMuIFdoZXJlIGlzIGl0IGJlaW5nIGluaXRpYXRlZD8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMjo1OS42NjkwODE0NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDc1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlZGVjb21wcmVzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjU0Nz1wcHBfZGVjb21wcmVzc19mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNTc3LVxcdFxcdC8qIHRoZSBkZWNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyB0aGUgQS9DIGJ5dGVzIGluIHRoZSBoZHIgKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyNTc4OlxcdFxcdGxlbiA9IHBwcC1cXHUwMDNlcmNvbXAtXFx1MDAzZWRlY29tcHJlc3MocHBwLVxcdTAwM2VyY19zdGF0ZSwgc2tiLVxcdTAwM2VkYXRhIC0gMixcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNTc5LVxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuICsgMiwgbnMtXFx1MDAzZWRhdGEsIG9idWZmX3NpemUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMjo1OS43MjY1NTk1NjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUwOTUzMjEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQUFAgRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBQUFAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBQUFAgaXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nIGRyaXZlciBpbiBMaW51eCwgZXNzZW50aWFsbHkgYSB2aXJ0dWFsIGRldmljZSwgYWNjZXNzaWJsZSB2aWEgYC9kZXYvcHBwYCBhbmQgaW9jdGxzIGxpa2UgYFBQUElPQ1NDT01QUkVTU2AsIHdoaWNoIG1ha2VzIGl0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBHb29kLCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgZGVzY3JpcHRpb25zIGZvciBgL2Rldi9wcHBgIGFuZCB0aG9zZSBpb2N0bHM7IHRoYXQncyBhIGtleSBmaXJzdCBzdGVwLiBTaW5jZSBpdCdzIGEgdmlydHVhbCBkZXZpY2UsIHRoaXMgc2hvdWxkIGJlIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgYW5kIGlvY3RscyB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWFsaXplZCBoYXJkd2FyZSwgc28gdGhhdCdzIGEgYmlnIHBsdXMuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGBXb3J0aEZ1enppbmdgLiBBaCwgZXhjZWxsZW50ISBJdCBsb29rcyBsaWtlIHdlJ3JlIHRvdWNoaW5nIGV4ZWN1dGFibGUgY29kZSBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIHNwZWNpZmljYWxseSwgZm9jdXNpbmcgb24gYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYC4gQWxzbyBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgIHdpdGggYHBhZF9jb21wcmVzc19za2JgLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeSwgYW5kIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBmaXhlcyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZHMgYW5kIGNvbXByZXNzZWQgb3V0cHV0IGRpc2NhcmRpbmcgaW4gYHpfY29tcHJlc3NgL2B6X2RlY29tcHJlc3NgIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IGZ1enppbmcgd2lsbCBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcgY29uZmlybXMgdGhhdCFcblxuRmluYWxseSwgbGV0J3MgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIHJpZ2h0LiBXZSBoYXZlIGBQUFBgIGFuZCBgUFBQX0RFRkxBVEVgLCBnb29kLiBJJ2xsIGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgc2VhcmNoIGZvciBgQ09ORklHX1BQUGAgaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB3aWxsIHRlbGwgbWUgaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MDMuMjM2MDk0NDgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk4NzExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Njpjb25maWcgUFBQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTM1PWlmIFBQUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjM3OmNvbmZpZyBQUFBfQlNEQ09NUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6NTU6Y29uZmlnIFBQUF9ERUZMQVRFXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcIlBQUCBEZWZsYXRlIGNvbXByZXNzaW9uXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNjgtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Njk6Y29uZmlnIFBQUF9GSUxURVJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03MC1cXHRib29sIFxcXCJQUFAgZmlsdGVyaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODAtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6ODE6Y29uZmlnIFBQUF9NUFBFXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODItXFx0dHJpc3RhdGUgXFxcIlBQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkxLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjkyOmNvbmZpZyBQUFBfTVVMVElMSU5LXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiUFBQIG11bHRpbGluayBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTAzLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNDpjb25maWcgUFBQT0FUTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgQVRNXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTEyLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjExMzpjb25maWcgUFBQT1hcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTQtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTE2OmNvbmZpZyBQUFBPRVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgRXRoZXJuZXRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMjc9Y2hvaWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMzgtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTM5OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCIxIGJpdCAoMiBidWNrZXRzKVxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDEtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQyOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0My1cXHRib29sIFxcXCIyIGJpdHMgKDQgYnVja2V0cylcXFwiXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ0LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE0NTpjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiNCBiaXRzICgxNiBidWNrZXRzKVxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDctXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ4OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0OS1cXHRib29sIFxcXCI4IGJpdHMgKDI1NiBidWNrZXRzKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1MT1lbmRjaG9pY2VcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTUzOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTQtXFx0aW50XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjAtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYxOmNvbmZpZyBQUFRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTYyLVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBJUHY0IChQUFRQKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgxPWlmIFRUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowMy4yODIwODQzOTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUwMjAxMzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgUFBQJ3MgUGFyZW50IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBQUFAgc3RhbmRzIGluIHRoZSBkZXBlbmRlbmN5IHRyZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCDigJMgdGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHRoZSBuZXR3b3JraW5nIGRyaXZlcnMgYW5kIHRoZWlyIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJ2xsIHNjYW4gdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgcGFyZW50IGRpcmVjdGl2ZXMsIG9yIGFueXRoaW5nIHRoYXQgZXhwbGljaXRseSBsaW5rcyBQUFAgdG8gYW5vdGhlciBtb2R1bGUgb3IgZmVhdHVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgUFBQIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBCYXNpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgbGluZWFnZSBpbiB0aGUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowNC43ODQwOTk4OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTk1MDMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKmRyaXZlcnMvbmV0L3BwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjUyODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowNS4wMDQwNTgwMjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3NTU3NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgdG8ganVtcCByaWdodCBpbnRvIHRoZSBoZWFydCBvZiBpdC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMgYXJvdW5kIGxpbmUgNTI4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNlcnRhaW4gY29uZmlndXJhdGlvbiBvciBvcHRpb24gcmVzaWRlcy4gVGltZSB0byBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGhpZGluZyB0aGVyZS4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzowNy4xNzk2MzQ3NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXFwiXFxuIDUyMTpcXHRcXG4gNTIyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxcIlxcbiA1MjM6XFx0XFxuIDUyNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxcIlxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1xcXCJcXG4gNTI5OlxcdFxcbiA1MzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcXFwiXFxuIDUzMTpcXHRcXG4gNTMyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXFxcIlxcbiA1MzM6XFx0XFxuIDUzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXFxcIlxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcXFwiXFxuIDUzNzpcXHRcXG4gNTM4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcXFwiXFxuIDUzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MDcuMTc5NzA2NzU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxOTIzMTM0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBQUCBEZWZsYXRlIENvbXByZXNzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBQUFBgIGFuZCBgUFBQX0RFRkxBVEVgIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYFBQUGAgaXMgZ29pbmcgdG8gdXNlIFNMSEMsIGJ1dCBgUFBQX0RFRkxBVEVgIGlzIHNwZWNpZmljYWxseSBzZXQgdXAgdG8gdXRpbGl6ZSBgWkxJQl9JTkZMQVRFYCBhbmQgYFpMSUJfREVGTEFURWAuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgc2V0dXAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYCBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIGFyZSB0aGUgbWFpbiBzdXNwZWN0cy4gSSBhbHNvIHNlZSB0aGF0IGBwYWRfY29tcHJlc3Nfc2tiYCwgYSBzdGF0aWMgaW5saW5lIGhlbHBlciBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgc3VjaCBhcyBgcHBwX3ByZXBhcmVfdHhfc2tiYCwgYW5kIGBwcHBfZGVjb21wcmVzc19mcmFtZWAsIGFyZSBwb3RlbnRpYWxseSBpbXBhY3RlZC5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4gQXJlIGB6X2NvbXByZXNzYCBhbmQgYHpfZGVjb21wcmVzc2Agc3RhdGljLCBleHBvcnRlZCwgb3Igc29tZXRoaW5nIGVsc2U/IEkgY2hlY2sgYHBwcF9kZWZsYXRlLmNgIGFuZCBjb25maXJtIHRoZXkgYXJlIGluZGVlZCBkZWNsYXJlZCBhcyBgc3RhdGljIGludCB6X2NvbXByZXNzKC4uLilgIGFuZCBgc3RhdGljIGludCB6X2RlY29tcHJlc3MoLi4uKWAuIEhvbGQgb24gYSBtaW51dGUuLi5ldmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYyB3aXRoaW4gdGhlIC5jIGZpbGUsIHRoZSBMaW51eCBrZXJuZWwgc3RpbGwgZ2VuZXJhdGVzIHN5bWJvbHMgZm9yIHRoZW0gaW4gYHZtbGludXhgIGFuZCBga2FsbHN5bXNgIGlmIHRoZXkgYXJlbid0IGlubGluZWQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhleSBpbmxpbmVkPyBJIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgcmVmZXJlbmNlZCB2aWEgc3RydWN0IGNvbXByZXNzb3IgZnVuY3Rpb24gcG9pbnRlcnMgbGlrZSBgcHBwX2RlZmxhdGUuY29tcHJlc3MgPSB6X2NvbXByZXNzYCBhbmQgYHBwcF9kZWZsYXRlLmRlY29tcHJlc3MgPSB6X2RlY29tcHJlc3NgLCB3aGljaCBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLiBBaGEhIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gZm9yIGBzdHJ1Y3QgY29tcHJlc3NvciBwcHBfZGVmbGF0ZWAgYW5kIGBwcHBfZGVmbGF0ZV9kcmFmdGAsIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgb3V0LW9mLWxpbmUgZnVuY3Rpb25zLiBUaGF0J3MgdGhlIGtleS5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIExvb2tpbmcgYXQgYHBhZF9jb21wcmVzc19za2JgIGl0J3MgZGVjbGFyZWQgYHN0YXRpYyBpbmxpbmVgIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AsIGFuZCBjYWxsZWQgYnkgYHBwcF9wcmVwYXJlX3R4X3NrYmAgYW5kIGBwcHBfZGVjb21wcmVzc19mcmFtZWAuIEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwYWRfY29tcHJlc3Nfc2tiYCBhbmQgb3RoZXIgZnVuY3Rpb25zIGluIGBwcHBfZ2VuZXJpYy5jYCBhcyBhIGZpbmFsIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjExLjM3MjAyMjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzcxMTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZF9jb21wcmVzc19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTcxNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNzE4OnBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE3MTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTc3OD1wcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODcyLVxcdFxcdH1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxODczOlxcdFxcdG5ld19za2IgPSBwYWRfY29tcHJlc3Nfc2tiKHBwcCwgc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xODc0LVxcdFxcdGlmICghbmV3X3NrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MTEuNDIwNDAzOTkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjk4NDQxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmluYWxpemluZyB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uIGZvciBQUFAgRGVmbGF0ZSoqXG5cbk9rYXksIGxldCdzIHJlY2FwLiBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBncmFwaCBhbmQgY29uZmlybWVkIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIGBwYWRfY29tcHJlc3Nfc2tiYCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBvbmx5IHdpdGhpbiBgcHBwX3ByZXBhcmVfdHhfc2tiYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHBwcF94bWl0X3Byb2Nlc3NgIGFuZCBgcHBwX3N0YXJ0X3htaXRgLlxuXG5JJ3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoZSAqRm9jdXNTeW1ib2xzKi4gIFdlIG5lZWQgdG8gdGFyZ2V0IGB6X2NvbXByZXNzYCwgYHpfZGVjb21wcmVzc2AsIGBwYWRfY29tcHJlc3Nfc2tiYCwgYW5kIGBwcHBfcHJlcGFyZV90eF9za2JgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBQUFAgRGVmbGF0ZS5cblxuVGhlIHJlcXVpcmVkICpFbmFibGVDb25maWdzKiBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgUFBQYCBhbmQgYFBQUF9ERUZMQVRFYC4gTm8gc3VycHJpc2VzIHRoZXJlLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LlxuXG5UaGUgcmVhc29uaW5nIGlzIHNvdW5kOiBUaGlzIHBhdGNoIGFkZHJlc3NlcyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBzbWFsbCBvdXRwdXQgYnVmZmVyIGhhbmRsaW5nIGFuZCBib3VuZHMgY2hlY2tzIGluIHRoZSBkZWZsYXRlIHJvdXRpbmVzLCAqYW5kKiBhIGNvbmN1cnJlbmN5IGlzc3VlIGR1cmluZyBidWZmZXIgYWxsb2NhdGlvbiBpbiBgcGFkX2NvbXByZXNzX3NrYmAuICBTaW5jZSB0aGlzIGltcGFjdHMgcmVhY2hhYmxlIHZpcnR1YWwgbmV0d29yayBwYWNrZXQgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBwYXRod2F5cywgYW5kIGludm9sdmVzIGlvY3RscywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgd2lsbCBiZSBlZmZlY3RpdmUgaW4gZGV0ZWN0aW5nIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5IHByb2JsZW1zLCBhbmQgcG90ZW50aWFsIGJ1ZmZlciBtYW5hZ2VtZW50IGlzc3Vlcy4gU28gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC5cblxuSSd2ZSBkb25lIGEgbGFzdCBxdWljayBjaGVjayBhbmQgZW5zdXJlZCB0aGUgKkNvbmZpZ3MqIGFuZCAqRm9jdXNTeW1ib2xzKiBhcmUgY29ycmVjdCwgYW5kIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgaW5kZWVkIHNldCBhcyBleHBlY3RlZC4gRXZlcnl0aGluZyBsb29rcyBwZXJmZWN0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjUsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjE3LjQ5MDI1MDc2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDY0MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9ERUZMQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiel9jb21wcmVzc1wiLFxuICAgIFwiel9kZWNvbXByZXNzXCIsXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9ERUZMQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiel9jb21wcmVzc1wiLFxuICAgIFwiel9kZWNvbXByZXNzXCIsXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljIGluIFBQUCBkZWZsYXRlICh6X2NvbXByZXNzLCB6X2RlY29tcHJlc3MpIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBhbmQgcHJvcGVybHkgaGFuZGxlIHNtYWxsIG91dHB1dCBidWZmZXJzLCBhbmQgdXBkYXRlcyBwYWRfY29tcHJlc3Nfc2tiIGluIHBwcF9nZW5lcmljIHRvIHNhZmVseSByZWFkIGRldi1cXHUwMDNlbXR1LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSB2aXJ0dWFsIG5ldHdvcmtpbmcgY29kZSBwYXRocyBleGVyY2lzZWQgdmlhIHN0YW5kYXJkIFBQUCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MTcuNTY5MzIzMTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg3NzEzNTAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjE3LjU2OTg4Mzc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzU4NzY1NzExNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgc2l6aW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgaXNzdWVzIGluIFBQUCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uOlxcbjEuIEluIGBwcHBfZ2VuZXJpYy5jOnBhZF9jb21wcmVzc19za2IoKWAsIGBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxcbjIuIEluIGBwcHBfZGVmbGF0ZS5jOnpfY29tcHJlc3MoKWAsIGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgYG9zaXplIFxcdTAwM2M9IG9sZW5gIG9yIHRoZSBvdXRwdXQgYnVmZmVyIGZpbGxzIHVwIGJ5IHJvdXRpbmcgY29tcHJlc3NlZCBvdXRwdXQgaW50byBhIGxvY2FsIHNjcmF0Y2ggYnVmZmVyIGBkaXNjYXJkX2J1ZmAgdG8ga2VlcCBjb21wcmVzc29yIHN0YXRlIHN5bmNocm9uaXplZCB3aGlsZSBkaXNjYXJkaW5nIHRoZSBvdXRwdXQsIHJlcGxhY2luZyBidWdneSBiZWhhdmlvciB3aGVyZSBgbmV4dF9vdXRgIHdhcyBzZXQgdG8gTlVMTC4gYGRpc2NhcmRfYnVmYCBpcyB3cml0ZS1vbmx5IGZvciBgemxpYl9kZWZsYXRlYCBhbmQgbmV2ZXIgcmVhZC5cXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTmAgaXMgYWRkZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcyBpbnRvIGBvYnVmYC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMwYTI5MGFhMTVhZTc5MWZiZTZhZTk0NmUwZWExNWUyMTI3NmY3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6MTE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5pbmRleCBkNmQ1ZTY1NmIzZjRiLi45NmQ2ODliOTdmZGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXG5AQCAtMTg2LDcgKzE4Niw5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4ge1xuIFx0c3RydWN0IHBwcF9kZWZsYXRlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikgYXJnO1xuIFx0aW50IHIsIHByb3RvLCBvZmYsIG9sZW4sIG9hdmFpbDtcbitcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9idWZbNjRdO1xuIFx0dW5zaWduZWQgY2hhciAqd3B0cjtcbitcdGJvb2wgZGlzY2FyZDtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB0aGF0IHRoZSBwcm90b2NvbCBpcyBpbiB0aGUgcmFuZ2Ugd2UgaGFuZGxlLlxuQEAgLTIwMCwyMCArMjAyLDI5IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHRpZiAob3NpemUgXHUwMDNlIGlzaXplKVxuIFx0XHRvc2l6ZSA9IGlzaXplO1xuIFxuLVx0d3B0ciA9IG9idWY7XG4tXG4gXHQvKlxuLVx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlci5cbitcdCAqIENvcHkgb3ZlciB0aGUgUFBQIGhlYWRlciBhbmQgc3RvcmUgdGhlIDItYnl0ZSBzZXF1ZW5jZSBudW1iZXIgb25seSBpZlxuK1x0ICogdGhlcmUgaXMgcm9vbSBmb3IgY29tcHJlc3NlZCBkYXRhLiAgT3RoZXJ3aXNlIGRpc2NhcmQgdGhlIGNvbXByZXNzZWRcbitcdCAqIG91dHB1dCB3aGlsZSBjb25zdW1pbmcgdGhlIGlucHV0LCBzbyB0aGUgY29tcHJlc3NvciBoaXN0b3J5IHJlbWFpbnNcbitcdCAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBwZWVyLlxuIFx0ICovXG4tXHR3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7XG4tXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4tXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcbi1cdHdwdHIgKz0gUFBQX0hEUkxFTjtcbi1cdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4tXHR3cHRyICs9IERFRkxBVEVfT1ZIRDtcbiBcdG9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xuLVx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XG4tXHRzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbCA9IG9zaXplIC0gb2xlbjtcbitcdGRpc2NhcmQgPSBvc2l6ZSBcdTAwM2M9IG9sZW47XG4rXHRpZiAoZGlzY2FyZCkge1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gZGlzY2FyZF9idWY7XG4rXHRcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XG4rXHR9IGVsc2Uge1xuK1x0XHR3cHRyID0gb2J1ZjtcbitcdFx0d3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpO1xuK1x0XHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihQUFBfQ09NUCwgd3B0ciArIDIpO1xuK1x0XHR3cHRyICs9IFBQUF9IRFJMRU47XG4rXHRcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cdTAwM2VzZXFubywgd3B0cik7XG4rXHRcdHdwdHIgKz0gREVGTEFURV9PVkhEO1xuK1x0XHRzdGF0ZS1cdTAwM2VzdHJtLm5leHRfb3V0ID0gd3B0cjtcbitcdFx0b2F2YWlsID0gb3NpemUgLSBvbGVuO1xuK1x0fVxuK1x0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XG4gXHQrK3N0YXRlLVx1MDAzZXNlcW5vO1xuIFxuIFx0b2ZmID0gKHByb3RvIFx1MDAzZSAweGZmKSA/IDIgOiAzO1x0Lyogc2tpcCAxc3QgcHJvdG8gYnl0ZSBpZiAwICovXG5AQCAtMjMxLDggKzI0MiwxMCBAQCBzdGF0aWMgaW50IHpfY29tcHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpycHRyLCB1bnNpZ25lZCBjaGFyICpvYnVmLFxuIFx0XHR9XG4gXHRcdGlmIChzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9PSAwKSB7XG4gXHRcdFx0b2xlbiArPSBvYXZhaWw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5uZXh0X291dCA9IE5VTEw7XG4tXHRcdFx0c3RhdGUtXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWwgPSAxMDAwMDAwO1xuK1x0XHRcdGRpc2NhcmQgPSB0cnVlO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcbitcdFx0XHRvYXZhaWwgPSBzaXplb2YoZGlzY2FyZF9idWYpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID0gb2F2YWlsO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyZWFrO1x0XHQvKiBhbGwgZG9uZSAqL1xuIFx0XHR9XG5AQCAtMjQyLDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXG4gXHQvKlxuIFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChvbGVuIFx1MDAzYyBpc2l6ZSBcdTAwMjZcdTAwMjYgb2xlbiBcdTAwM2M9IG9zaXplKSB7XG4rXHRpZiAoIWRpc2NhcmQgXHUwMDI2XHUwMDI2IG9sZW4gXHUwMDNjIGlzaXplIFx1MDAyNlx1MDAyNiBvbGVuIFx1MDAzYz0gb3NpemUpIHtcbiBcdFx0c3RhdGUtXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xuIFx0XHRzdGF0ZS1cdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcbiBcdH0gZWxzZSB7XG5AQCAtNDIwLDYgKzQzMyw4IEBAIHN0YXRpYyBpbnQgel9kZWNvbXByZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuIFx0XHRcdCAgICAgICBzdGF0ZS1cdTAwM2V1bml0LCBpc2l6ZSk7XG4gXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXHR9XG4rXHRpZiAob3NpemUgXHUwMDNjIFBQUF9IRFJMRU4pXG4rXHRcdHJldHVybiBERUNPTVBfRVJST1I7XG4gXG4gXHQvKiBDaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVyLiAqL1xuIFx0c2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgKyBQUFBfSERSTEVOKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi4wNDQzYWYyMzFlOGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTcxOSwxMCArMTcxOSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4rXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgK1xuK1x0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MTcuNTY5ODg0NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI1NjAzODAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIG9mIFBQUCBEZWZsYXRlIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gUFBQIERlZmxhdGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGBwcHBfZGVmbGF0ZS5jYCBhbmQgYHBwcF9nZW5lcmljLmNgIGludGVyYWN0IGFuZCB3aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UuIExldCdzIHB1bGwgdXAgdGhvc2UgZmlsZXMsIGBwcHBfZGVmbGF0ZS5jYCBhbmQgYHBwcF9nZW5lcmljLmNgLCB1c2luZyBgcmVhZC1maWxlYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2UgdG8gY29udGV4dHVhbGl6ZSB0aGUgcGF0Y2guIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIGZpbGVzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gsIG9yIHNvIEkgYXNzdW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY3LCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MjIuODI1OTI1MjEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHQgKlxcbiAxODE6XFx0ICpcXHRSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgcGFja2V0LCBvciAwIGlmIHRoZVxcbiAxODI6XFx0ICpcXHRwYWNrZXQgaXMgaW5jb21wcmVzc2libGUuXFxuIDE4MzpcXHQgKi9cXG4gMTg0OlxcdHN0YXRpYyBpbnQgel9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKnJwdHIsIHVuc2lnbmVkIGNoYXIgKm9idWYsXFxuIDE4NTpcXHRcXHQgICAgICAgaW50IGlzaXplLCBpbnQgb3NpemUpXFxuIDE4NjpcXHR7XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XFxuIDE4ODpcXHRcXHRpbnQgciwgcHJvdG8sIG9mZiwgb2xlbiwgb2F2YWlsO1xcbiAxODk6XFx0XFx0dW5zaWduZWQgY2hhciBkaXNjYXJkX2J1Zls2NF07XFxuIDE5MDpcXHRcXHR1bnNpZ25lZCBjaGFyICp3cHRyO1xcbiAxOTE6XFx0XFx0Ym9vbCBkaXNjYXJkO1xcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHQvKlxcbiAxOTQ6XFx0XFx0ICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS5cXG4gMTk1OlxcdFxcdCAqL1xcbiAxOTY6XFx0XFx0cHJvdG8gPSBQUFBfUFJPVE9DT0wocnB0cik7XFxuIDE5NzpcXHRcXHRpZiAocHJvdG8gXFx1MDAzZSAweDNmZmYgfHwgcHJvdG8gPT0gMHhmZCB8fCBwcm90byA9PSAweGZiKVxcbiAxOTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdC8qIERvbid0IGdlbmVyYXRlIGNvbXByZXNzZWQgcGFja2V0cyB3aGljaCBhcmUgbGFyZ2VyIHRoYW5cXG4gMjAxOlxcdFxcdCAgIHRoZSB1bmNvbXByZXNzZWQgcGFja2V0LiAqL1xcbiAyMDI6XFx0XFx0aWYgKG9zaXplIFxcdTAwM2UgaXNpemUpXFxuIDIwMzpcXHRcXHRcXHRvc2l6ZSA9IGlzaXplO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHQvKlxcbiAyMDY6XFx0XFx0ICogQ29weSBvdmVyIHRoZSBQUFAgaGVhZGVyIGFuZCBzdG9yZSB0aGUgMi1ieXRlIHNlcXVlbmNlIG51bWJlciBvbmx5IGlmXFxuIDIwNzpcXHRcXHQgKiB0aGVyZSBpcyByb29tIGZvciBjb21wcmVzc2VkIGRhdGEuICBPdGhlcndpc2UgZGlzY2FyZCB0aGUgY29tcHJlc3NlZFxcbiAyMDg6XFx0XFx0ICogb3V0cHV0IHdoaWxlIGNvbnN1bWluZyB0aGUgaW5wdXQsIHNvIHRoZSBjb21wcmVzc29yIGhpc3RvcnkgcmVtYWluc1xcbiAyMDk6XFx0XFx0ICogc3luY2hyb25pemVkIHdpdGggdGhlIHBlZXIuXFxuIDIxMDpcXHRcXHQgKi9cXG4gMjExOlxcdFxcdG9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xcbiAyMTI6XFx0XFx0ZGlzY2FyZCA9IG9zaXplIFxcdTAwM2M9IG9sZW47XFxuIDIxMzpcXHRcXHRpZiAoZGlzY2FyZCkge1xcbiAyMTQ6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9vdXQgPSBkaXNjYXJkX2J1ZjtcXG4gMjE1OlxcdFxcdFxcdG9hdmFpbCA9IHNpemVvZihkaXNjYXJkX2J1Zik7XFxuIDIxNjpcXHRcXHR9IGVsc2Uge1xcbiAyMTc6XFx0XFx0XFx0d3B0ciA9IG9idWY7XFxuIDIxODpcXHRcXHRcXHR3cHRyWzBdID0gUFBQX0FERFJFU1MocnB0cik7XFxuIDIxOTpcXHRcXHRcXHR3cHRyWzFdID0gUFBQX0NPTlRST0wocnB0cik7XFxuIDIyMDpcXHRcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMTYoUFBQX0NPTVAsIHdwdHIgKyAyKTtcXG4gMjIxOlxcdFxcdFxcdHdwdHIgKz0gUFBQX0hEUkxFTjtcXG4gMjIyOlxcdFxcdFxcdHB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS1cXHUwMDNlc2Vxbm8sIHdwdHIpO1xcbiAyMjM6XFx0XFx0XFx0d3B0ciArPSBERUZMQVRFX09WSEQ7XFxuIDIyNDpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IHdwdHI7XFxuIDIyNTpcXHRcXHRcXHRvYXZhaWwgPSBvc2l6ZSAtIG9sZW47XFxuIDIyNjpcXHRcXHR9XFxuIDIyNzpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSBvYXZhaWw7XFxuIDIyODpcXHRcXHQrK3N0YXRlLVxcdTAwM2VzZXFubztcXG4gMjI5OlxcdFxcbiAyMzA6XFx0XFx0b2ZmID0gKHByb3RvIFxcdTAwM2UgMHhmZikgPyAyIDogMztcXHQvKiBza2lwIDFzdCBwcm90byBieXRlIGlmIDAgKi9cXG4gMjMxOlxcdFxcdHJwdHIgKz0gb2ZmO1xcbiAyMzI6XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9pbiA9IHJwdHI7XFxuIDIzMzpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9pbiA9IChpc2l6ZSAtIG9mZik7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdGZvciAoOzspIHtcXG4gMjM2OlxcdFxcdFxcdHIgPSB6bGliX2RlZmxhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdHJtLCBaX1BBQ0tFVF9GTFVTSCk7XFxuIDIzNzpcXHRcXHRcXHRpZiAociAhPSBaX09LKSB7XFxuIDIzODpcXHRcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWRlYnVnKVxcbiAyMzk6XFx0XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fRVJSXFxuIDI0MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInpfY29tcHJlc3M6IGRlZmxhdGUgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHIpO1xcbiAyNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI0MjpcXHRcXHRcXHR9XFxuIDI0MzpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0ID09IDApIHtcXG4gMjQ0OlxcdFxcdFxcdFxcdG9sZW4gKz0gb2F2YWlsO1xcbiAyNDU6XFx0XFx0XFx0XFx0ZGlzY2FyZCA9IHRydWU7XFxuIDI0NjpcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5uZXh0X291dCA9IGRpc2NhcmRfYnVmO1xcbiAyNDc6XFx0XFx0XFx0XFx0b2F2YWlsID0gc2l6ZW9mKGRpc2NhcmRfYnVmKTtcXG4gMjQ4OlxcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9hdmFpbDtcXG4gMjQ5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDI1MDpcXHRcXHRcXHRcXHRicmVhaztcXHRcXHQvKiBhbGwgZG9uZSAqL1xcbiAyNTE6XFx0XFx0XFx0fVxcbiAyNTI6XFx0XFx0fVxcbiAyNTM6XFx0XFx0b2xlbiArPSBvYXZhaWwgLSBzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQ7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdC8qXFxuIDI1NjpcXHRcXHQgKiBTZWUgaWYgd2UgbWFuYWdlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHBhY2tldC5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0aWYgKCFkaXNjYXJkIFxcdTAwMjZcXHUwMDI2IG9sZW4gXFx1MDAzYyBpc2l6ZSBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2M9IG9zaXplKSB7XFxuIDI1OTpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBvbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzoyMi44MjYwMDkyMzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdCAqIGZvdW5kIGJ5IGluc3BlY3RpbmcgdGhlIGlucHV0IGRhdGEgYW5kIGZvciBzeXN0ZW0gcHJvYmxlbXMsIGJ1dFxcbiA0MTE6XFx0ICogREVDT01QX0ZBVEFMRVJST1IgZm9yIGFueSBlcnJvcnMgd2hpY2ggY291bGQgcG9zc2libHkgYmUgc2FpZCB0b1xcbiA0MTI6XFx0ICogYmUgYmVpbmcgZGV0ZWN0ZWQgXFxcImFmdGVyXFxcIiBkZWNvbXByZXNzaW9uLiAgRm9yIERFQ09NUF9FUlJPUixcXG4gNDEzOlxcdCAqIHdlIGNhbiBpc3N1ZSBhIENDUCByZXNldC1yZXF1ZXN0OyBmb3IgREVDT01QX0ZBVEFMRVJST1IsIHdlIG1heSBiZVxcbiA0MTQ6XFx0ICogaW5mcmluZ2luZyBhIHBhdGVudCBvZiBNb3Rvcm9sYSdzIGlmIHdlIGRvLCBzbyB3ZSB0YWtlIENDUCBkb3duXFxuIDQxNTpcXHQgKiBpbnN0ZWFkLlxcbiA0MTY6XFx0ICpcXG4gNDE3OlxcdCAqIEdpdmVuIHRoYXQgdGhlIGZyYW1lIGhhcyB0aGUgY29ycmVjdCBzZXF1ZW5jZSBudW1iZXIgYW5kIGEgZ29vZCBGQ1MsXFxuIDQxODpcXHQgKiBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIGNvZGVzIGluIHRoZSBpbnB1dCBtb3N0IGxpa2VseSBpbmRpY2F0ZSBhXFxuIDQxOTpcXHQgKiBidWcsIHNvIHdlIHJldHVybiBERUNPTVBfRkFUQUxFUlJPUiBmb3IgdGhlbSBpbiBvcmRlciB0byB0dXJuIG9mZlxcbiA0MjA6XFx0ICogY29tcHJlc3Npb24sIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRldGVjdGVkIGJ5IGluc3BlY3RpbmcgdGhlIGlucHV0LlxcbiA0MjE6XFx0ICovXFxuIDQyMjpcXHRzdGF0aWMgaW50IHpfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcXG4gNDIzOlxcdFxcdFxcdCB1bnNpZ25lZCBjaGFyICpvYnVmLCBpbnQgb3NpemUpXFxuIDQyNDpcXHR7XFxuIDQyNTpcXHRcXHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XFxuIDQyNjpcXHRcXHRpbnQgb2xlbiwgc2VxLCByO1xcbiA0Mjc6XFx0XFx0aW50IGRlY29kZV9wcm90bywgb3ZlcmZsb3c7XFxuIDQyODpcXHRcXHR1bnNpZ25lZCBjaGFyIG92ZXJmbG93X2J1ZlsxXTtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0aWYgKGlzaXplIFxcdTAwM2M9IFBQUF9IRFJMRU4gKyBERUZMQVRFX09WSEQpIHtcXG4gNDMxOlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuIDQzMjpcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiel9kZWNvbXByZXNzJWQ6IHNob3J0IHBrdCAoJWQpXFxcXG5cXFwiLFxcbiA0MzM6XFx0XFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0LCBpc2l6ZSk7XFxuIDQzNDpcXHRcXHRcXHRyZXR1cm4gREVDT01QX0VSUk9SO1xcbiA0MzU6XFx0XFx0fVxcbiA0MzY6XFx0XFx0aWYgKG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTilcXG4gNDM3OlxcdFxcdFxcdHJldHVybiBERUNPTVBfRVJST1I7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdC8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovXFxuIDQ0MDpcXHRcXHRzZXEgPSBnZXRfdW5hbGlnbmVkX2JlMTYoaWJ1ZiArIFBQUF9IRFJMRU4pO1xcbiA0NDE6XFx0XFx0aWYgKHNlcSAhPSAoc3RhdGUtXFx1MDAzZXNlcW5vIFxcdTAwMjYgMHhmZmZmKSkge1xcbiA0NDI6XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG4gNDQzOlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogYmFkIHNlcSAjICVkLCBleHBlY3RlZCAlZFxcXFxuXFxcIixcXG4gNDQ0OlxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgc2VxLCBzdGF0ZS1cXHUwMDNlc2Vxbm8gXFx1MDAyNiAweGZmZmYpO1xcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIERFQ09NUF9FUlJPUjtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcdCsrc3RhdGUtXFx1MDAzZXNlcW5vO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHQvKlxcbiA0NTA6XFx0XFx0ICogRmlsbCBpbiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgUFBQIGhlYWRlci4gIFRoZSBwcm90b2NvbCBmaWVsZFxcbiA0NTE6XFx0XFx0ICogY29tZXMgZnJvbSB0aGUgZGVjb21wcmVzc2VkIGRhdGEuXFxuIDQ1MjpcXHRcXHQgKi9cXG4gNDUzOlxcdFxcdG9idWZbMF0gPSBQUFBfQUREUkVTUyhpYnVmKTtcXG4gNDU0OlxcdFxcdG9idWZbMV0gPSBQUFBfQ09OVFJPTChpYnVmKTtcXG4gNDU1OlxcdFxcdG9idWZbMl0gPSAwO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHQvKlxcbiA0NTg6XFx0XFx0ICogU2V0IHVwIHRvIGNhbGwgaW5mbGF0ZS4gIFdlIHNldCBhdmFpbF9vdXQgdG8gMSBpbml0aWFsbHkgc28gd2UgY2FuXFxuIDQ1OTpcXHRcXHQgKiBsb29rIGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBvdXRwdXQgYW5kIGRlY2lkZSB3aGV0aGVyIHdlIGhhdmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MjIuODI2MDY2NzIzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzE1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzE1OlxcdH1cXG4xNzE2OlxcdFxcbjE3MTc6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXFxuMTcxODpcXHRwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNzE5OlxcdHtcXG4xNzIwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuMTcyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4xNzIyOlxcdFxcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpO1xcbjE3MjM6XFx0XFx0aW50IGxlbjtcXG4xNzI0OlxcdFxcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbjE3MjU6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbjE3MjY6XFx0XFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xcbjE3Mjc6XFx0XFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XFxuMTcyODpcXHRcXG4xNzI5OlxcdFxcdGlmIChza2JfbGluZWFyaXplKHNrYikpXFxuMTczMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzMxOlxcdFxcbjE3MzI6XFx0XFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xcbjE3MzM6XFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuMTczNDpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3MzU6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4xNzM2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3Mzc6XFx0XFx0fVxcbjE3Mzg6XFx0XFx0aWYgKGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFxcdTAwM2UgUFBQX0hEUkxFTilcXG4xNzM5OlxcdFxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXFxuMTc0MjpcXHRcXHRsZW4gPSBwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wcmVzcyhwcHAtXFx1MDAzZXhjX3N0YXRlLCBza2ItXFx1MDAzZWRhdGEgLSAyLFxcbjE3NDM6XFx0XFx0XFx0XFx0XFx0ICAgbmV3X3NrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4gKyAyLFxcbjE3NDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29tcHJlc3Nvcl9za2Jfc2l6ZSk7XFxuMTc0NTpcXHRcXHRpZiAobGVuIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NDUF9VUCkpIHtcXG4xNzQ2OlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuMTc0NzpcXHRcXHRcXHRza2IgPSBuZXdfc2tiO1xcbjE3NDg6XFx0XFx0XFx0c2tiX3B1dChza2IsIGxlbik7XFxuMTc0OTpcXHRcXHRcXHRza2JfcHVsbChza2IsIDIpO1xcdC8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqL1xcbjE3NTA6XFx0XFx0fSBlbHNlIGlmIChsZW4gPT0gMCkge1xcbjE3NTE6XFx0XFx0XFx0LyogZGlkbid0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqL1xcbjE3NTI6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc1MzpcXHRcXHRcXHRuZXdfc2tiID0gc2tiO1xcbjE3NTQ6XFx0XFx0fSBlbHNlIHtcXG4xNzU1OlxcdFxcdFxcdC8qXFxuMTc1NjpcXHRcXHRcXHQgKiAobGVuIFxcdTAwM2MgMClcXG4xNzU3OlxcdFxcdFxcdCAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZFxcbjE3NTg6XFx0XFx0XFx0ICogZnJhbWVzLiAgVGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gLTEgaWYgd2VcXG4xNzU5OlxcdFxcdFxcdCAqIHNob3VsZCBkcm9wIHRoZSBmcmFtZS4gIFdlIGNhbm5vdCBzaW1wbHkgdGVzdFxcbjE3NjA6XFx0XFx0XFx0ICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZVxcbjE3NjE6XFx0XFx0XFx0ICogdGhlIHNhbWUgbnVtYmVyLlxcbjE3NjI6XFx0XFx0XFx0ICovXFxuMTc2MzpcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3NjQ6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXFxcblxcXCIpO1xcbjE3NjU6XFx0XFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuMTc2NjpcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4xNzY3OlxcdFxcdH1cXG4xNzY4OlxcdFxcdHJldHVybiBuZXdfc2tiO1xcbjE3Njk6XFx0fVxcbjE3NzA6XFx0XFxuMTc3MTpcXHQvKlxcbjE3NzI6XFx0ICogQ29tcHJlc3MgYW5kIHByZXBhcmUgdG8gc2VuZCBhIGZyYW1lLlxcbjE3NzM6XFx0ICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aC5cXG4xNzc0OlxcdCAqIFJldHVybnMgMSBpZiB0aGUgc2tiIHdhcyBjb25zdW1lZCwgMCBpZiBpdCBjYW4gYmUgcGFzc2VkIHRvIHBwcF9wdXNoKCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjIyLjgyNjI5MzYxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcxMTAyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgZ2l2ZW4gbXkgYXNzdW1lZCBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFBQUCBEZWZsYXRlIENvbXByZXNzaW9uL0RlY29tcHJlc3Npb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRob3JvdWdobHkgYXVkaXQgdGhlIHJlbWFpbmluZyBzZWN0aW9ucyBvZiB0aGUgYHpfY29tcHJlc3NgIGFuZCBgel9kZWNvbXByZXNzYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNgIGZpbGUuIFRoaXMgbWVhbnMgSSdtIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzbmlwcGV0OyBJJ20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIGVudGlyZSBsb2dpYyBvZiBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJJ2xsIGJlIG1ldGljdWxvdXNseSByZXZpZXdpbmcgdGhlIGNvZGUgZmxvdywgY2hlY2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgZGVmbGF0ZSBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24sIGFuZCBtYWtpbmcgc3VyZSB0aGUgZGF0YSBoYW5kbGluZyBpcyByb2J1c3QgYW5kIHNlY3VyZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBtZW1vcnksIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLiBJdCdzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgZ2FpbiBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkYXRhIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBQUFAgcHJvdG9jb2wgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTksIk91dHB1dFRva2VucyI6ODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjI1LjE5NzM5OTI3MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0XFx0XFx0YnJlYWs7XFx0XFx0LyogYWxsIGRvbmUgKi9cXG4gMjUxOlxcdFxcdFxcdH1cXG4gMjUyOlxcdFxcdH1cXG4gMjUzOlxcdFxcdG9sZW4gKz0gb2F2YWlsIC0gc3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0O1xcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHQvKlxcbiAyNTY6XFx0XFx0ICogU2VlIGlmIHdlIG1hbmFnZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQuXFxuIDI1NzpcXHRcXHQgKi9cXG4gMjU4OlxcdFxcdGlmICghZGlzY2FyZCBcXHUwMDI2XFx1MDAyNiBvbGVuIFxcdTAwM2MgaXNpemUgXFx1MDAyNlxcdTAwMjYgb2xlbiBcXHUwMDNjPSBvc2l6ZSkge1xcbiAyNTk6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLmNvbXBfYnl0ZXMgKz0gb2xlbjtcXG4gMjYwOlxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcXG4gMjYxOlxcdFxcdH0gZWxzZSB7XFxuIDI2MjpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuaW5jX2J5dGVzICs9IGlzaXplO1xcbiAyNjM6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLmluY19wYWNrZXRzKys7XFxuIDI2NDpcXHRcXHRcXHRvbGVuID0gMDtcXG4gMjY1OlxcdFxcdH1cXG4gMjY2OlxcdFxcdHN0YXRlLVxcdTAwM2VzdGF0cy51bmNfYnl0ZXMgKz0gaXNpemU7XFxuIDI2NzpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMudW5jX3BhY2tldHMrKztcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0cmV0dXJuIG9sZW47XFxuIDI3MDpcXHR9XFxuIDI3MTpcXHRcXG4gMjcyOlxcdC8qKlxcbiAyNzM6XFx0ICpcXHR6X2NvbXBfc3RhdHMgLSByZXR1cm4gY29tcHJlc3Npb24gc3RhdGlzdGljcyBmb3IgYSBjb21wcmVzc29yXFxuIDI3NDpcXHQgKlxcdFxcdG9yIGRlY29tcHJlc3Nvci5cXG4gMjc1OlxcdCAqXFx0QGFyZzpcXHRwb2ludGVyIHRvIHByaXZhdGUgc3BhY2UgZm9yIHRoZSAoZGUpY29tcHJlc3NvclxcbiAyNzY6XFx0ICpcXHRAc3RhdHM6XFx0cG9pbnRlciB0byBhIHN0cnVjdCBjb21wc3RhdCB0byByZWNlaXZlIHRoZSByZXN1bHQuXFxuIDI3NzpcXHQgKi9cXG4gMjc4OlxcdHN0YXRpYyB2b2lkIHpfY29tcF9zdGF0cyh2b2lkICphcmcsIHN0cnVjdCBjb21wc3RhdCAqc3RhdHMpXFxuIDI3OTpcXHR7XFxuIDI4MDpcXHRcXHRzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBhcmc7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdCpzdGF0cyA9IHN0YXRlLVxcdTAwM2VzdGF0cztcXG4gMjgzOlxcdH1cXG4gMjg0OlxcdFxcbiAyODU6XFx0LyoqXFxuIDI4NjpcXHQgKlxcdHpfZGVjb21wX2ZyZWUgLSBGcmVlIHRoZSBtZW1vcnkgdXNlZCBieSBhIGRlY29tcHJlc3Nvci5cXG4gMjg3OlxcdCAqXFx0QGFyZzpcXHRwb2ludGVyIHRvIHByaXZhdGUgc3BhY2UgZm9yIHRoZSBkZWNvbXByZXNzb3IuXFxuIDI4ODpcXHQgKi9cXG4gMjg5OlxcdHN0YXRpYyB2b2lkIHpfZGVjb21wX2ZyZWUodm9pZCAqYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzoyNS4xOTc0ODU0NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDU1OlxcdFxcdG9idWZbMl0gPSAwO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHQvKlxcbiA0NTg6XFx0XFx0ICogU2V0IHVwIHRvIGNhbGwgaW5mbGF0ZS4gIFdlIHNldCBhdmFpbF9vdXQgdG8gMSBpbml0aWFsbHkgc28gd2UgY2FuXFxuIDQ1OTpcXHRcXHQgKiBsb29rIGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBvdXRwdXQgYW5kIGRlY2lkZSB3aGV0aGVyIHdlIGhhdmVcXG4gNDYwOlxcdFxcdCAqIGEgMS1ieXRlIG9yIDItYnl0ZSBwcm90b2NvbCBmaWVsZC5cXG4gNDYxOlxcdFxcdCAqL1xcbiA0NjI6XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9pbiA9IGlidWYgKyBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEO1xcbiA0NjM6XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfaW4gPSBpc2l6ZSAtIChQUFBfSERSTEVOICsgREVGTEFURV9PVkhEKTtcXG4gNDY0OlxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0ID0gb2J1ZiArIDM7XFxuIDQ2NTpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSAxO1xcbiA0NjY6XFx0XFx0ZGVjb2RlX3Byb3RvID0gMTtcXG4gNDY3OlxcdFxcdG92ZXJmbG93ID0gMDtcXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0LypcXG4gNDcwOlxcdFxcdCAqIENhbGwgaW5mbGF0ZSwgc3VwcGx5aW5nIG1vcmUgaW5wdXQgb3Igb3V0cHV0IGFzIG5lZWRlZC5cXG4gNDcxOlxcdFxcdCAqL1xcbiA0NzI6XFx0XFx0Zm9yICg7Oykge1xcbiA0NzM6XFx0XFx0XFx0ciA9IHpsaWJfaW5mbGF0ZShcXHUwMDI2c3RhdGUtXFx1MDAzZXN0cm0sIFpfUEFDS0VUX0ZMVVNIKTtcXG4gNDc0OlxcdFxcdFxcdGlmIChyICE9IFpfT0spIHtcXG4gNDc1OlxcdFxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuIDQ3NjpcXHRcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiel9kZWNvbXByZXNzJWQ6IGluZmxhdGUgcmV0dXJuZWQgJWQgKCVzKVxcXFxuXFxcIixcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNldW5pdCwgciwgKHN0YXRlLVxcdTAwM2VzdHJtLm1zZz8gc3RhdGUtXFx1MDAzZXN0cm0ubXNnOiBcXFwiXFxcIikpO1xcbiA0Nzg6XFx0XFx0XFx0XFx0cmV0dXJuIERFQ09NUF9GQVRBTEVSUk9SO1xcbiA0Nzk6XFx0XFx0XFx0fVxcbiA0ODA6XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCAhPSAwKVxcbiA0ODE6XFx0XFx0XFx0XFx0YnJlYWs7XFx0XFx0LyogYWxsIGRvbmUgKi9cXG4gNDgyOlxcdFxcdFxcdGlmIChkZWNvZGVfcHJvdG8pIHtcXG4gNDgzOlxcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTjtcXG4gNDg0OlxcdFxcdFxcdFxcdGlmICgob2J1ZlszXSBcXHUwMDI2IDEpID09IDApIHtcXG4gNDg1OlxcdFxcdFxcdFxcdFxcdC8qIDItYnl0ZSBwcm90b2NvbCBmaWVsZCAqL1xcbiA0ODY6XFx0XFx0XFx0XFx0XFx0b2J1ZlsyXSA9IG9idWZbM107XFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHQtLXN0YXRlLVxcdTAwM2VzdHJtLm5leHRfb3V0O1xcbiA0ODg6XFx0XFx0XFx0XFx0XFx0KytzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQ7XFxuIDQ4OTpcXHRcXHRcXHRcXHR9XFxuIDQ5MDpcXHRcXHRcXHRcXHRkZWNvZGVfcHJvdG8gPSAwO1xcbiA0OTE6XFx0XFx0XFx0fSBlbHNlIGlmICghb3ZlcmZsb3cpIHtcXG4gNDkyOlxcdFxcdFxcdFxcdC8qXFxuIDQ5MzpcXHRcXHRcXHRcXHQgKiBXZSd2ZSBmaWxsZWQgdXAgdGhlIG91dHB1dCBidWZmZXI7IHRoZSBvbmx5IHdheSB0b1xcbiA0OTQ6XFx0XFx0XFx0XFx0ICogZmluZCBvdXQgd2hldGhlciBpbmZsYXRlIGhhcyBhbnkgbW9yZSBjaGFyYWN0ZXJzXFxuIDQ5NTpcXHRcXHRcXHRcXHQgKiBsZWZ0IGlzIHRvIGdpdmUgaXQgYW5vdGhlciBieXRlIG9mIG91dHB1dCBzcGFjZS5cXG4gNDk2OlxcdFxcdFxcdFxcdCAqL1xcbiA0OTc6XFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXN0cm0ubmV4dF9vdXQgPSBvdmVyZmxvd19idWY7XFxuIDQ5ODpcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RybS5hdmFpbF9vdXQgPSAxO1xcbiA0OTk6XFx0XFx0XFx0XFx0b3ZlcmZsb3cgPSAxO1xcbiA1MDA6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTAxOlxcdFxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVidWcpXFxuIDUwMjpcXHRcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiel9kZWNvbXByZXNzJWQ6IHJhbiBvdXQgb2YgbXJ1XFxcXG5cXFwiLFxcbiA1MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0KTtcXG4gNTA0OlxcdFxcdFxcdFxcdHJldHVybiBERUNPTVBfRkFUQUxFUlJPUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MjUuMTk3NTM2MzYxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzY5MDczMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYHpfZGVjb21wcmVzc2BcIiwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZCBmb3IgYW4gZXhwZXJ0IGluIHRoZWlyIGZpZWxkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgel9kZWNvbXByZXNzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gdGhpbmtpbmcgaXMsIFwiTGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgel9kZWNvbXByZXNzYC5cIiBJJ20gbm90IHNhdGlzZmllZCB3aXRoIGp1c3Qga25vd2luZyAqd2hhdCogaXQgZG9lcywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpob3cqLiBJJ20gaW1tZWRpYXRlbHkgcGljdHVyaW5nIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzLCB0aGUgZGlmZmVyZW50IGRlY29tcHJlc3Npb24gYWxnb3JpdGhtcyBpdCBjb3VsZCBiZSB1c2luZyB1bmRlciB0aGUgaG9vZCDigJMgSHVmZm1hbiwgTGVtcGVsLVppdiB2YXJpYW50cywgbWF5YmUgZXZlbiBzb21ldGhpbmcgbW9yZSBleG90aWMgaWYgdGhpcyBpcyBhIHNwZWNpYWxpemVkIGNvbnRleHQuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBmbG93cyB0aGF0IHdvdWxkIGJlIGludm9sdmVkLiBJcyBpdCBoYW5kbGluZyBhIHNwZWNpZmljIGNvbXByZXNzaW9uIGZvcm1hdD8gSXMgaXQgcm9idXN0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgaGVhZDogV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXM/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEknbSBpdGNoaW5nIHRvIHNlZSB0aGUgY29kZSBhbmQgc3RhcnQgcGllY2luZyBpdCB0b2dldGhlciBtZW50YWxseSwgYW5hbHl6aW5nIGl0IGxpa2UgSSB3b3VsZCBhbnkgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50LiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTM6MzYuOTY2NjExNjI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRcXHR9IGVsc2Uge1xcbiA1MDE6XFx0XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWJ1ZylcXG4gNTAyOlxcdFxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJ6X2RlY29tcHJlc3MlZDogcmFuIG91dCBvZiBtcnVcXFxcblxcXCIsXFxuIDUwMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZXVuaXQpO1xcbiA1MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIERFQ09NUF9GQVRBTEVSUk9SO1xcbiA1MDU6XFx0XFx0XFx0fVxcbiA1MDY6XFx0XFx0fVxcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAoZGVjb2RlX3Byb3RvKSB7XFxuIDUwOTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWRlYnVnKVxcbiA1MTA6XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcInpfZGVjb21wcmVzcyVkOiBkaWRuJ3QgZ2V0IHByb3RvXFxcXG5cXFwiLFxcbiA1MTE6XFx0XFx0XFx0XFx0ICAgICAgIHN0YXRlLVxcdTAwM2V1bml0KTtcXG4gNTEyOlxcdFxcdFxcdHJldHVybiBERUNPTVBfRVJST1I7XFxuIDUxMzpcXHRcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdG9sZW4gPSBvc2l6ZSArIG92ZXJmbG93IC0gc3RhdGUtXFx1MDAzZXN0cm0uYXZhaWxfb3V0O1xcbiA1MTY6XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLnVuY19ieXRlcyArPSBvbGVuO1xcbiA1MTc6XFx0XFx0c3RhdGUtXFx1MDAzZXN0YXRzLnVuY19wYWNrZXRzKys7XFxuIDUxODpcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhdHMuY29tcF9ieXRlcyArPSBpc2l6ZTtcXG4gNTE5OlxcdFxcdHN0YXRlLVxcdTAwM2VzdGF0cy5jb21wX3BhY2tldHMrKztcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0cmV0dXJuIG9sZW47XFxuIDUyMjpcXHR9XFxuIDUyMzpcXHRcXG4gNTI0OlxcdC8qKlxcbiA1MjU6XFx0ICpcXHR6X2luY29tcCAtIGFkZCBpbmNvbXByZXNzaWJsZSBpbnB1dCBkYXRhIHRvIHRoZSBoaXN0b3J5LlxcbiA1MjY6XFx0ICpcXHRAYXJnOlxcdHBvaW50ZXIgdG8gcHJpdmF0ZSBzdGF0ZSBmb3IgdGhlIGRlY29tcHJlc3NvclxcbiA1Mjc6XFx0ICpcXHRAaWJ1ZjpcXHRwb2ludGVyIHRvIGlucHV0IHBhY2tldCBkYXRhXFxuIDUyODpcXHQgKlxcdEBpY250OlxcdGxlbmd0aCBvZiBpbnB1dCBkYXRhLlxcbiA1Mjk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEzOjM2Ljk2NjcwNDIxNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjQ3OTczMjg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQUFAgRGVmbGF0ZSBQYXRjaDogS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gVGhlIGNoYW5nZXMgYWRkcmVzcyBzZXZlcmFsIHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoZSBQUFAgZGVmbGF0ZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGNvZGUuXG5cbkZpcnN0LCBpbiBgcHBwX2dlbmVyaWMuY2AsIGEgZGF0YSByYWNlIHdpdGggYGRldi1cdTAwM2VtdHVgIGluIGBwYWRfY29tcHJlc3Nfc2tiYCBpcyBhZGRyZXNzZWQgYnkgdXNpbmcgYFJFQURfT05DRWAsIHdoaWNoIGlzIGdvb2QgaHlnaWVuZS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IGluIHBhY2tldCBzaXplIGNhbGN1bGF0aW9ucyBkdWUgdG8gY29uY3VycmVudCBtb2RpZmljYXRpb25zIG9mIGBkZXYtXHUwMDNlbXR1YC4gVGhpcyBpcyBsaWtlbHkgYSBnb29kIHRoaW5nIGFuZCBub3QgS01TQU4tcmVsZXZhbnQuXG5cblRoZW4gd2Ugc2VlIHNvbWUgZml4ZXMgYW5kIGFkanVzdG1lbnRzIGluIGBwcHBfZGVmbGF0ZS5jYC4gVGhlIGZpcnN0IGlzc3VlIHJlZ2FyZHMgdGhlIGNhbGN1bGF0aW9uIG9mIGBhdmFpbF9vdXRgIGluIGB6X2NvbXByZXNzYCB3aGljaCB3b3VsZCB1bmRlcmZsb3cgd2hlbiBgb3NpemUgXHUwMDNjPSBvbGVuYCwgb3IgYW4gaW52YWxpZCBgbmV4dF9vdXRgIHZhbHVlIHdoZW4gYHN0YXRlLVx1MDAzZXN0cm0uYXZhaWxfb3V0ID09IDBgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIGEgY3Jhc2ggKGRlcmVmZXJlbmNpbmcgYSBudWxsIHBvaW50ZXIpLiBUaGlzIGlzIGFkZHJlc3NlZCBieSB1c2luZyBhIGxvY2FsIHN0YWNrIGJ1ZmZlciwgYGRpc2NhcmRfYnVmWzY0XWAsIHRvIGhvbGQgZGlzY2FyZGVkIG91dHB1dC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgZGlzY2FyZF9idWZgIGlzICpvbmx5KiB3cml0dGVuIHRvIGJ5IGB6bGliX2RlZmxhdGVgLCBhbmQgaXRzIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQuIGBvbGVuYCBpcyBzZXQgdG8gMC4gSXQgaXMgbmV2ZXIgcmVhZCBvciBleHBvc2VkIGluIGFueSB3YXksIHNvIHRoaXMgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGVyZSBhcmUgYWxzbyBhIGNvdXBsZSBvZiBidWcgZml4ZXMvaW1wcm92ZW1lbnRzIG1hZGUgdG8gYHpfZGVjb21wcmVzc2AuIFRoZSBpbml0aWFsIGNoZWNrIGBvc2l6ZSBcdTAwM2MgUFBQX0hEUkxFTmAgaW4gYHpfZGVjb21wcmVzc2AgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBtZW1vcnkgY29ycnVwdGlvbi4gUHJldmlvdXNseSwgdGhlIGBzdGF0ZS1cdTAwM2VzdHJtLmF2YWlsX291dCA9IG9zaXplIC0gUFBQX0hEUkxFTmAgd2FzIGluY29ycmVjdCBpZiBgb3NpemUgXHUwMDNjIFBQUF9IRFJMRU5gLlxuXG5Ob3csIHdlIG5lZWQgdG8gZm9jdXMgb24gS01TQU4uIFRoaXMgc2FuaXRpemVyIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnksIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBhcHBseSB0aGVzZSBndWlkZWxpbmVzLlxuXG5Db25zaWRlcmluZyB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhlIGtleSBxdWVzdGlvbiBpczogKipEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nLCBhbGxvY2F0ZS9pbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIG9yIGFmZmVjdCBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKlxuXG4qICAgYGRpc2NhcmRfYnVmYCBpcyBhIGxvY2FsIHN0YWNrIGJ1ZmZlciB1c2VkIHNvbGVseSBhcyBhIHdyaXRlLW9ubHkgc2luay4gSXQncyBuZXZlciByZWFkLCBuZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIGl0cyBpbml0aWFsIGNvbnRlbnRzIGFyZSBpcnJlbGV2YW50LiBUaGVyZSdzIG5vIGluZm9ybWF0aW9uIGxlYWsgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG4qICAgVGhlIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIGlzIHNpbXBseSB0byBlbGltaW5hdGUgYSBkYXRhIHJhY2UuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybiB0aGVyZS5cbiogICBUaGUgYm91bmRzIGNoZWNrcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBhbmQgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlICphbHJlYWR5KiBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scywgYW5kIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgSSBhbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AgdG9vbCB3aXRoIGRldGFpbGVkIHJlYXNvbmluZyBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjgxLCJPdXRwdXRUb2tlbnMiOjMwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMzo1My40NDY0MzkyOThaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgc2l6aW5nIGFuZCBib3VuZHMgY2hlY2tpbmcgaXNzdWVzIGluIFBQUCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uOlxcbjEuIEluIGBwcHBfZ2VuZXJpYy5jOnBhZF9jb21wcmVzc19za2IoKWAsIGBSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpYCBpcyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IE1UVSByZWFkcyBhY3Jvc3MgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgc2l6ZSBtaXNtYXRjaGVzIGR1ZSB0byBkYXRhIHJhY2VzLlxcbjIuIEluIGBwcHBfZGVmbGF0ZS5jOnpfY29tcHJlc3MoKWAsIGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgYG9zaXplIFxcdTAwM2M9IG9sZW5gIG9yIHRoZSBvdXRwdXQgYnVmZmVyIGZpbGxzIHVwIGJ5IHJvdXRpbmcgY29tcHJlc3NlZCBvdXRwdXQgaW50byBhIGxvY2FsIHNjcmF0Y2ggYnVmZmVyIGBkaXNjYXJkX2J1ZmAgdG8ga2VlcCBjb21wcmVzc29yIHN0YXRlIHN5bmNocm9uaXplZCB3aGlsZSBkaXNjYXJkaW5nIHRoZSBvdXRwdXQsIHJlcGxhY2luZyBidWdneSBiZWhhdmlvciB3aGVyZSBgbmV4dF9vdXRgIHdhcyBzZXQgdG8gTlVMTC4gYGRpc2NhcmRfYnVmYCBpcyB3cml0ZS1vbmx5IGZvciBgemxpYl9kZWZsYXRlYCBhbmQgbmV2ZXIgcmVhZC5cXG4zLiBJbiBgcHBwX2RlZmxhdGUuYzp6X2RlY29tcHJlc3MoKWAsIGEgY2hlY2sgYG9zaXplIFxcdTAwM2MgUFBQX0hEUkxFTmAgaXMgYWRkZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcyBpbnRvIGBvYnVmYC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcy4gVGhlIGJ1Z3MgcHJldmVudGVkIGFyZSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uY2VybnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBzaXppbmcgYW5kIGJvdW5kcyBjaGVja2luZyBpc3N1ZXMgaW4gUFBQIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb246XFxuMS4gSW4gYHBwcF9nZW5lcmljLmM6cGFkX2NvbXByZXNzX3NrYigpYCwgYFJFQURfT05DRShkZXYtXFx1MDAzZW10dSlgIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgTVRVIHJlYWRzIGFjcm9zcyBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBzaXplIG1pc21hdGNoZXMgZHVlIHRvIGRhdGEgcmFjZXMuXFxuMi4gSW4gYHBwcF9kZWZsYXRlLmM6el9jb21wcmVzcygpYCwgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSBgb3NpemUgXFx1MDAzYz0gb2xlbmAgb3IgdGhlIG91dHB1dCBidWZmZXIgZmlsbHMgdXAgYnkgcm91dGluZyBjb21wcmVzc2VkIG91dHB1dCBpbnRvIGEgbG9jYWwgc2NyYXRjaCBidWZmZXIgYGRpc2NhcmRfYnVmYCB0byBrZWVwIGNvbXByZXNzb3Igc3RhdGUgc3luY2hyb25pemVkIHdoaWxlIGRpc2NhcmRpbmcgdGhlIG91dHB1dCwgcmVwbGFjaW5nIGJ1Z2d5IGJlaGF2aW9yIHdoZXJlIGBuZXh0X291dGAgd2FzIHNldCB0byBOVUxMLiBgZGlzY2FyZF9idWZgIGlzIHdyaXRlLW9ubHkgZm9yIGB6bGliX2RlZmxhdGVgIGFuZCBuZXZlciByZWFkLlxcbjMuIEluIGBwcHBfZGVmbGF0ZS5jOnpfZGVjb21wcmVzcygpYCwgYSBjaGVjayBgb3NpemUgXFx1MDAzYyBQUFBfSERSTEVOYCBpcyBhZGRlZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzIGludG8gYG9idWZgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzLiBUaGUgYnVncyBwcmV2ZW50ZWQgYXJlIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25jZXJucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvkljc[1] Phase: Succeeded StartedAt: 2026-09-07 09:14:05 +0000 UTC FinishedAt: 2026-09-07 09:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 09:14:05 +0000 UTC FinishedAt: 2026-09-07 09:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2] Phase: Succeeded StartedAt: 2026-09-07 09:14:05 +0000 UTC FinishedAt: 2026-09-07 12:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 09:14:05 +0000 UTC FinishedAt: 2026-09-07 12:53:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 09:14:05 +0000 UTC FinishedAt: 2026-09-07 09:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 09:14:05 +0000 UTC FinishedAt: 2026-09-07 09:14:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvkljc/series-workflowvkljc-convert-artifact-537500201/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 09:14:15 +0000 UTC FinishedAt: 2026-09-07 09:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 09:14:15 +0000 UTC FinishedAt: 2026-09-07 09:30:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8ea5f38d-4788-45f4-9d0c-98c959275ebb,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-workflowvkljc/series-workflowvkljc-convert-artifact-537500201/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": "a5e4f862-cd21-41da-b300-b9b098f3ebcf", "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-workflowvkljc/series-workflowvkljc-build-action-419431047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 09:14:15 +0000 UTC FinishedAt: 2026-09-07 09:30:01 +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:*8ea5f38d-4788-45f4-9d0c-98c959275ebb,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-workflowvkljc/series-workflowvkljc-convert-artifact-537500201/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": "a5e4f862-cd21-41da-b300-b9b098f3ebcf", "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-workflowvkljc/series-workflowvkljc-build-action-419431047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 09:30:11 +0000 UTC FinishedAt: 2026-09-07 09:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 09:30:11 +0000 UTC FinishedAt: 2026-09-07 09:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 09:30:11 +0000 UTC FinishedAt: 2026-09-07 09:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 09:30:11 +0000 UTC FinishedAt: 2026-09-07 09:30:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvkljc/series-workflowvkljc-convert-artifact-3568410044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 09:30:21 +0000 UTC FinishedAt: 2026-09-07 09:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 09:30:21 +0000 UTC FinishedAt: 2026-09-07 09:32:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5e4f862-cd21-41da-b300-b9b098f3ebcf,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-workflowvkljc/series-workflowvkljc-build-action-419431047/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-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 09:32:14 +0000 UTC FinishedAt: 2026-09-07 09:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 09:32:14 +0000 UTC FinishedAt: 2026-09-07 09:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 09:32:14 +0000 UTC FinishedAt: 2026-09-07 09:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 09:32:14 +0000 UTC FinishedAt: 2026-09-07 09:48:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8ea5f38d-4788-45f4-9d0c-98c959275ebb,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-workflowvkljc/series-workflowvkljc-convert-artifact-3568410044/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": "e4ad9213-d8e6-4929-9c78-9a9f5884f364", "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-workflowvkljc/series-workflowvkljc-build-action-2762303512/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 09:32:14 +0000 UTC FinishedAt: 2026-09-07 09:48: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:*8ea5f38d-4788-45f4-9d0c-98c959275ebb,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-workflowvkljc/series-workflowvkljc-convert-artifact-3568410044/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": "e4ad9213-d8e6-4929-9c78-9a9f5884f364", "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-workflowvkljc/series-workflowvkljc-build-action-2762303512/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 09:48:41 +0000 UTC FinishedAt: 2026-09-07 09:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 09:48:41 +0000 UTC FinishedAt: 2026-09-07 09:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 09:48:41 +0000 UTC FinishedAt: 2026-09-07 09:50:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 09:48:41 +0000 UTC FinishedAt: 2026-09-07 09:50:23 +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:*e4ad9213-d8e6-4929-9c78-9a9f5884f364,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-workflowvkljc/series-workflowvkljc-build-action-2762303512/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-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 09:50:33 +0000 UTC FinishedAt: 2026-09-07 12:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 09:50:33 +0000 UTC FinishedAt: 2026-09-07 12:53:04 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"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:*a5e4f862-cd21-41da-b300-b9b098f3ebcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4ad9213-d8e6-4929-9c78-9a9f5884f364,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-workflowvkljc/series-workflowvkljc-build-action-419431047/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-workflowvkljc/series-workflowvkljc-build-action-2762303512/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 09:50:33 +0000 UTC FinishedAt: 2026-09-07 09:50:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 09:50:33 +0000 UTC FinishedAt: 2026-09-07 09:50:39 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"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-workflowvkljc/series-workflowvkljc-convert-artifact-227803781/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 09:50:33 +0000 UTC FinishedAt: 2026-09-07 09:50:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 09:50:33 +0000 UTC FinishedAt: 2026-09-07 09:50:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 09:50:34 +0000 UTC FinishedAt: 2026-09-07 09:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 09:50:44 +0000 UTC FinishedAt: 2026-09-07 12:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkljc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["z_compress","z_decompress","pad_compress_skb","ppp_prepare_tx_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_DEFLATE"],"series_id":"81f33a57-1fd4-43ed-a89f-b9f8958f40ca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 09:50:44 +0000 UTC FinishedAt: 2026-09-07 12:52:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5e4f862-cd21-41da-b300-b9b098f3ebcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4ad9213-d8e6-4929-9c78-9a9f5884f364,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-workflowvkljc/series-workflowvkljc-build-action-419431047/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-workflowvkljc/series-workflowvkljc-build-action-2762303512/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-workflowvkljc/series-workflowvkljc-convert-artifact-227803781/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,}