Name: series-workflowd5r59 Phase: Succeeded StartedAt: 2026-09-03 00:39:53 +0000 UTC FinishedAt: 2026-09-03 04:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[0] Phase: Succeeded StartedAt: 2026-09-03 00:39:53 +0000 UTC FinishedAt: 2026-09-03 00:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 00:39:53 +0000 UTC FinishedAt: 2026-09-03 00:42:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL" ], "series_id": "d15277d8-b214-41bb-82c4-9dd330e36833" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "seg6_do_srh_encap", "seg6_do_srh_inline", "seg6_build_state", "seg6_input", "seg6_output" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MTc5NjdmY2JkN2JiZTFkNzdkMzcwN2E5ZDY4NjA3MjA0NTY2Nzg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMDo0MTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbmluZGV4IDYxYzZhMjdiZjIwMmQuLmE2NTU2ZWZkOGUwYjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY1xuQEAgLTQ0Niw4ICYjNDM7NDQ2LDkgQEAgc3RhdGljIGludCBzZWc2X2RvX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpjYWNoZV9kc3QpXG4gXHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShlcnIpKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0XHRza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MTc5NjdmY2JkN2JiZTFkNzdkMzcwN2E5ZDY4NjA3MjA0NTY2Nzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDo0MTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYwppbmRleCA2MWM2YTI3YmYyMDJkLi5hNjU1NmVmZDhlMGIxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jCkBAIC00NDYsOCAmIzQzOzQ0Niw5IEBAIHN0YXRpYyBpbnQgc2VnNl9kb19zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqY2FjaGVfZHN0KQogCQlpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgc2tiLSZndDttYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSAmbHQ7IDApCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi0mZ3Q7bWFjX2xlbik7CiYjNDM7CQlpZiAodW5saWtlbHkoZXJyKSkKJiM0MzsJCQlyZXR1cm4gZXJyOwogCiAJCXNrYl9tYWNfaGVhZGVyX3JlYnVpbGQoc2tiKTsKIAkJc2tiX3B1c2goc2tiLCBza2ItJmd0O21hY19sZW4pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU2CgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogYHNlZzZfaXB0dW5uZWwuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGluc3BlY3QgdGhlIGRpZmYsIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY2AuIEkgc2VlIHRoZSBgc2VnNl9kb19zcmhgIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aCB0aGUgcmVwbGFjZW1lbnQgb2YgYHBza2JfZXhwYW5kX2hlYWRgIHdpdGggYHNrYl9jb3dfaGVhZGAuCgpOb3csIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY29kZS4gVG8gbWFrZSBhIGp1ZGdlbWVudCBjYWxsIGFib3V0IHdoZXRoZXIgZnV6emluZyBpcyB3b3J0aHdoaWxlLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLCBhbmQgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGV2ZW4gcmVhY2hhYmxlLiBJJiMzOTtsbCByZWFkIHRoZSBmaWxlIGl0c2VsZiB1c2luZyBgcmVhZC1maWxlYCBhbmQgZW1wbG95IGBncmVwcGVyYCB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aHMgYW5kIG5hcnJvdyBkb3duIHRoZSBzY29wZS4gVWx0aW1hdGVseSwgdGhpcyB3aWxsIGluZm9ybSBtZSBvZiB3aGF0IGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0IGFuZCB3aGljaCBpbnB1dHMgd2lsbCBwcm92aWRlIHRoZSBtb3N0IGVmZmljaWVudCBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRcdGVsc2UgaWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXG4gNDI2Olx0XHRcdFx0cHJvdG8gPSBJUFBST1RPX0lQSVA7XG4gNDI3Olx0XHRcdGVsc2VcbiA0Mjg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Mjk6XHRcbiA0MzA6XHRcdFx0aWYgKHRpbmZvLVx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0VOQ0FQKVxuIDQzMTpcdFx0XHRcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cdTAwM2VzcmgsIHByb3RvLFxuIDQzMjpcdFx0XHRcdFx0XHRcdCAgY2FjaGVfZHN0LCBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDMzOlx0XHRcdGVsc2VcbiA0MzQ6XHRcdFx0XHRlcnIgPSBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc2tiLCB0aW5mby1cdTAwM2VzcmgsIHByb3RvLFxuIDQzNTpcdFx0XHRcdFx0XHRcdCAgICBjYWNoZV9kc3QsIFx1MDAyNnNsd3QtXHUwMDNldHVuc3JjKTtcbiA0MzY6XHRcbiA0Mzc6XHRcdFx0aWYgKGVycilcbiA0Mzg6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDQzOTpcdFxuIDQ0MDpcdFx0XHRza2Jfc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiA0NDE6XHRcdFx0c2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4gNDQyOlx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIDQ0MzpcdFx0XHRicmVhaztcbiA0NDQ6XHRcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVA6XG4gNDQ1Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQX1JFRDpcbiA0NDY6XHRcdFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4gNDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiA0NTA6XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4gNDUxOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA0NTI6XHRcbiA0NTM6XHRcdFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xuIDQ1NDpcdFx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiA0NTU6XHRcbiA0NTY6XHRcdFx0aWYgKHRpbmZvLVx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVApXG4gNDU3Olx0XHRcdFx0ZXJyID0gX19zZWc2X2RvX3NyaF9lbmNhcChza2IsIHRpbmZvLVx1MDAzZXNyaCxcbiA0NTg6XHRcdFx0XHRcdFx0XHQgIElQUFJPVE9fRVRIRVJORVQsIGNhY2hlX2RzdCxcbiA0NTk6XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnNsd3QtXHUwMDNldHVuc3JjKTtcbiA0NjA6XHRcdFx0ZWxzZVxuIDQ2MTpcdFx0XHRcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVx1MDAzZXNyaCxcbiA0NjI6XHRcdFx0XHRcdFx0XHQgICAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxuIDQ2MzpcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDY0Olx0XG4gNDY1Olx0XHRcdGlmIChlcnIpXG4gNDY2Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA0Njc6XHRcbiA0Njg6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gNDY5Olx0XHRcdGJyZWFrO1xuIDQ3MDpcdFx0fVxuIDQ3MTpcdFxuIDQ3MjpcdFx0c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRuZl9yZXNldF9jdChza2IpO1xuIDQ3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjZfU0VHNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbm5ldC9pcHY2L0tjb25maWc6MzE0Olx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE1LVx0ZGVwZW5kcyBvbiBJUFY2ID0geVxuLS1cbm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjYWxpcHNvLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xubmV0L2lwdjYvTWFrZWZpbGU6MjY6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgJiM0Mzs9IHNlZzZfaG1hYy5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNy1pcHY2LSQoQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMKSAmIzQzOz0gcnBsX2lwdHVubmVsLm9cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOS1cdC5zZWc2X2VuYWJsZWRcdFx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXHQuc2VnNl9yZXF1aXJlX2htYWNcdD0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5Ni1cdC5zZWc2X3JlcXVpcmVfaG1hY1x0PSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczOC1cdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTczOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3NDAtXHRhcnJheVtERVZDT05GX1NFRzZfUkVRVUlSRV9ITUFDXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9yZXF1aXJlX2htYWMpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMjUtXHR9LFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3MjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNy1cdHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2V4dGhkcnMuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM4OC1cbm5ldC9pcHY2L2V4dGhkcnMuYzozODk6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvZXh0aGRycy5jLTM5MC1cdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTExMjQ9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTExNTItXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1MzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1NC1cdGlmIChzcl9oYXNfaG1hYyhzcl9waGRyKSkge1xuLS1cbm5ldC9pcHY2L3NlZzYuYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfZ2VubF9wb2xpY3lbU0VHNl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtMTUwLVxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2LmMtMTUyLVxuLS1cbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY2L3NlZzYuYy0yOTktXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzYuYy0zMDEtXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFx1MDAzY25ldC9kc3RfY2FjaGUuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yNy0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MTQxPXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgsXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzoyMDI6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMy1cdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjU9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI4LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzMwLVx0aWYgKHVubGlrZWx5KCFza2lwX3NyaCBcdTAwMjZcdTAwMjYgc3JfaGFzX2htYWMoaXNyaCkpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0NT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgwLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM4MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgyLVx0aWYgKHNyX2hhc19obWFjKGlzcmgpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3LSNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyODojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjktI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzZfaG1hYy5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjUtXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjMyPXN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDE6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0Mi1cdGlmIChzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc1OD1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjktXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzcwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NzEtXHRpZiAoc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4ODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIElQdjYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgaXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBuZXQvaXB2Ni9LY29uZmlnYC4gSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyODYgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIHNob3VsZCBsYXkgb3V0IGFsbCB0aGUgb3B0aW9ucyBhbmQgYW55IGNvbmRpdGlvbnMgdGhhdCBjb250cm9sIHdoZW4gdGhleSBhcmUgZW5hYmxlZC4gVGltZSB0byBnZXQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbiAyODE6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyODI6XHRcdGhlbHBcbiAyODM6XHRcdCAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuXG4gMjg0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjg1Olx0XG4gMjg2Olx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxuIDI4NzpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDI4ODpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMjg5Olx0XHRzZWxlY3QgTFdUVU5ORUxcbiAyOTA6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAyOTE6XHRcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xuIDI5MjpcdFx0aGVscFxuIDI5MzpcdFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcbiAyOTQ6XHRcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XG4gMjk1Olx0XHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxuIDI5NjpcdFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cbiAyOTc6XHRcbiAyOTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyOTk6XHRcbiAzMDA6XHRjb25maWcgSVBWNl9TRUc2X0hNQUNcbiAzMDE6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuIDMwMjpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzAzOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gMzA0Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4gMzEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzExOlx0XG4gMzEyOlx0Y29uZmlnIElQVjZfU0VHNl9CUEZcbiAzMTM6XHRcdGRlZl9ib29sIHlcbiAzMTQ6XHRcdGRlcGVuZHMgb24gSVBWNl9TRUc2X0xXVFVOTkVMXG4gMzE1Olx0XHRkZXBlbmRzIG9uIElQVjYgPSB5XG4gMzE2Olx0XG4gMzE3Olx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG4gMzE4Olx0XHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuIDMxOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYzOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZSB5b3UgbWVudGlvbmVkOgoKKipFeGFtaW5pbmcgc2VnNl9pcHR1bm5lbC5jKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0VHNiBvdmVyIElQdjYgdHVubmVsaW5nIGlzIGltcGxlbWVudGVkLCBhbmQgSSYjMzk7bSBzdGFydGluZyBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBmaWxlIGBzZWc2X2lwdHVubmVsLmNgLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIHdpdGhpbiB0aGlzIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBjb3JlIGxvZ2ljIG9mIGNyZWF0aW5nLCBjb25maWd1cmluZywgYW5kIG1hbmFnaW5nIHRoZXNlIHR1bm5lbHMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBhcmNoaXRlY3R1cmFsIG92ZXJ2aWV3IGJ5IHN0dWR5aW5nIHRoaXMgZmlsZS4gSSBleHBlY3QgdG8gZmluZCwgYXQgYSBtaW5pbXVtLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGRlc2NyaWJpbmcgYSBTRUc2IHR1bm5lbCwgYW5kIGVudHJ5IHBvaW50cyBmb3IgY29udHJvbCBwbGFuZSBpbnRlcmFjdGlvbiwgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgcmVsZXZhbnQgZXJyb3IgaGFuZGxpbmcgb3IgaGVscGVyIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0fVxuIDQ3MTpcdFxuIDQ3MjpcdFx0c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRuZl9yZXNldF9jdChza2IpO1xuIDQ3NDpcdFxuIDQ3NTpcdFx0cmV0dXJuIDA7XG4gNDc2Olx0fVxuIDQ3NzpcdFxuIDQ3ODpcdC8qIGluc2VydCBhbiBTUkggd2l0aGluIGFuIElQdjYgcGFja2V0LCBqdXN0IGFmdGVyIHRoZSBJUHY2IGhlYWRlciAqL1xuIDQ3OTpcdGludCBzZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoKVxuIDQ4MDpcdHtcbiA0ODE6XHRcdHJldHVybiBfX3NlZzZfZG9fc3JoX2lubGluZShza2IsIG9zcmgsIE5VTEwpO1xuIDQ4MjpcdH1cbiA0ODM6XHRFWFBPUlRfU1lNQk9MX0dQTChzZWc2X2RvX3NyaF9pbmxpbmUpO1xuIDQ4NDpcdFxuIDQ4NTpcdC8qIGxvb2sgdXAgYSByb3V0ZSBpbiBhIHNwZWNpZmljIEZJQiB0YWJsZS5cbiA0ODY6XHQgKiBSZXR1cm5zIGEgcmVmY291bnRlZCBkc3QsIG9yIE5VTEwgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LlxuIDQ4NzpcdCAqL1xuIDQ4ODpcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X3RhYmxlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gNDg5Olx0XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4gNDkwOlx0XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93aTYgKmZsNiwgdTMyIHRibF9pZClcbiA0OTE6XHR7XG4gNDkyOlx0XHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG4gNDkzOlx0XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xuIDQ5NDpcdFxuIDQ5NTpcdFx0dGFibGUgPSBmaWI2X2dldF90YWJsZShuZXQsIHRibF9pZCk7XG4gNDk2Olx0XHRpZiAoIXRhYmxlKVxuIDQ5NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0OTg6XHRcbiA0OTk6XHRcdHJ0ID0gaXA2X3BvbF9yb3V0ZShuZXQsIHRhYmxlLCAwLCBmbDYsIHNrYiwgUlQ2X0xPT0tVUF9GX0hBU19TQUREUik7XG4gNTAwOlx0XHRyZXR1cm4gXHUwMDI2cnQtXHUwMDNlZHN0O1xuIDUwMTpcdH1cbiA1MDI6XHRcbiA1MDM6XHRzdGF0aWMgdm9pZCBzZWc2X2luaXRfZmxvd2k2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpoZHIsXG4gNTA0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd2k2ICpmbDYpXG4gNTA1Olx0e1xuIDUwNjpcdFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcbiA1MDc6XHRcbiA1MDg6XHRcdGZsNi1cdTAwM2VkYWRkciA9IGhkci1cdTAwM2VkYWRkcjtcbiA1MDk6XHRcdGZsNi1cdTAwM2VzYWRkciA9IGhkci1cdTAwM2VzYWRkcjtcbiA1MTA6XHRcdGZsNi1cdTAwM2VmbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaGRyKTtcbiA1MTE6XHRcdGZsNi1cdTAwM2VmbG93aTZfbWFyayA9IHNrYi1cdTAwM2VtYXJrO1xuIDUxMjpcdFx0Zmw2LVx1MDAzZWZsb3dpNl9wcm90byA9IGhkci1cdTAwM2VuZXh0aGRyO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiA1MTU6XHQvKiBsb29rIHVwIHRoZSByb3V0ZSBmb3IgdGhlIGZpcnN0IFNJRCBvbiB0aGUgaW5wdXQgcGF0aCBhbmQgc2V0IGl0IG9uIHRoZSBza2IuXG4gNTE2Olx0ICogUmV0dXJucyB0aGUgcmVmY291bnRlZCBkc3QsIG9yIE5VTEwgaWYgYSByZWZlcmVuY2UgY291bGQgbm90IGJlIHNhZmVseSB0YWtlbi5cbiA1MTc6XHQgKi9cbiA1MTg6XHRzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2VnNl9pbnB1dF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gNTE5Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1MjA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QpXG4gNTIxOlx0e1xuIDUyMjpcdFx0dTMyIHRhYmxlID0gc2x3dC1cdTAwM2V0YWJsZTtcbiA1MjM6XHRcbiA1MjQ6XHRcdGlmICh0YWJsZSkge1xuIDUyNTpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTtcbiA1MjY6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIDUyNzpcdFx0XHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiA1Mjg6XHRcbiA1Mjk6XHRcdFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXHUwMDI2Zmw2KTtcbiA1MzA6XHRcdFx0Zmw2LmZsb3dpNl9paWYgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXg7XG4gNTMxOlx0XG4gNTMyOlx0XHRcdGRzdCA9IHNlZzZfdGFibGVfbG9va3VwKG5ldCwgc2tiLCBcdTAwMjZmbDYsIHRhYmxlKTtcbiA1MzM6XHRcdFx0aWYgKCFkc3QpIHtcbiA1MzQ6XHRcdFx0XHRkc3QgPSBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktXHUwMDNlZHN0O1xuIDUzNTpcdFx0XHRcdGRzdF9ob2xkKGRzdCk7XG4gNTM2Olx0XHRcdH1cbiA1Mzc6XHRcbiA1Mzg6XHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gNTM5Olx0XHRcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcbiA1NDA6XHRcdH0gZWxzZSB7XG4gNTQxOlx0XHRcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIDU0MjpcdFxuIDU0MzpcdFx0XHQvKiBpcDZfcm91dGVfaW5wdXQoKSBzZXRzIGEgTk9SRUYgZHN0OyBmb3JjZSBhIHJlZmNvdW50IG9uIGl0XG4gNTQ0Olx0XHRcdCAqIGJlZm9yZSBjYWNoaW5nIG9yIGZ1cnRoZXIgdXNlLlxuIDU0NTpcdFx0XHQgKi9cbiA1NDY6XHRcdFx0c2tiX2RzdF9mb3JjZShza2IpO1xuIDU0NzpcdFx0fVxuIDU0ODpcdFxuIDU0OTpcdFx0cmV0dXJuIHNrYl9kc3Qoc2tiKTtcbiA1NTA6XHR9XG4gNTUxOlx0XG4gNTUyOlx0c3RhdGljIGludCBzZWc2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbiA1NTM6XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNTU0Olx0e1xuIDU1NTpcdFx0cmV0dXJuIGRzdF9pbnB1dChza2IpO1xuIDU1NjpcdH1cbiA1NTc6XHRcbiA1NTg6XHRzdGF0aWMgaW50IHNlZzZfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbiA1NTk6XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDU2MDpcdHtcbiA1NjE6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm9yaWdfZHN0ID0gc2tiX2RzdChza2IpO1xuIDU2MjpcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDtcbiA1NjM6XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3Q7XG4gNTY0Olx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3Q7XG4gNTY1Olx0XHRpbnQgZXJyO1xuIDU2NjpcdFxuIDU2NzpcdFx0LyogV2UgY2Fubm90IGRlcmVmZXJlbmNlIFwmIzM0O29yaWdfZHN0XCYjMzQ7IG9uY2UgaXA2X3JvdXRlX2lucHV0KCkgb3JcbiA1Njg6XHRcdCAqIHNrYl9kc3RfZHJvcCgpIGlzIGNhbGxlZC4gSG93ZXZlciwgaW4gb3JkZXIgdG8gZGV0ZWN0IGEgZHN0IGxvb3AsIHdlXG4gNTY5Olx0XHQgKiBuZWVkIHRoZSBhZGRyZXNzIG9mIGl0cyBsd3RzdGF0ZS4gU28sIHNhdmUgdGhlIGFkZHJlc3Mgb2YgbHd0c3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgc2VnNl9pcHR1bm5lbC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4gSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHNvbWUga2V5IGFzcGVjdHMsIGJ1dCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gbnVhbmNlcyBvZiB0aGlzIGBzZWc2X2lwdHVubmVsLmNgIG1vZHVsZSwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjZSB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZS4gSSB3YW50IHRvIHNlZSAqYWxsKiB0aGUgb3BlcmF0aW9ucyBhbmQgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGZ1bmN0aW9uIG5hbWVzOyBpdCYjMzk7cyBhYm91dCBzZWVpbmcgaG93IHRoZXkmIzM5O3JlICpjb25uZWN0ZWQqLCBob3cgdGhlIGRhdGEgZmxvd3MsIGFuZCB3aGVyZSB0aGUgY3JpdGljYWwgZGVjaXNpb25zIGFyZSBtYWRlIGluIHRoZSBjb250cm9sIGFuZCBkYXRhIHBhdGhzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmFsIHZpZXcgc28gSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCBhbmQgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdCAqIG5vdyBhbmQgdXNlIGl0IGxhdGVyIGFzIGEgY29tcGFyaXNvbi5cbiA1NzE6XHRcdCAqL1xuIDU3MjpcdFx0bHd0c3QgPSBvcmlnX2RzdC1cdTAwM2Vsd3RzdGF0ZTtcbiA1NzM6XHRcbiA1NzQ6XHRcdHNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChsd3RzdCk7XG4gNTc1Olx0XG4gNTc2Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNTc3Olx0XHRkc3QgPSBkc3RfY2FjaGVfZ2V0KFx1MDAyNnNsd3QtXHUwMDNlY2FjaGVfaW5wdXQpO1xuIDU3ODpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gNTc5Olx0XG4gNTgwOlx0XHRlcnIgPSBzZWc2X2RvX3NyaChza2IsIGRzdCk7XG4gNTgxOlx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuIDU4MjpcdFx0XHRkc3RfcmVsZWFzZShkc3QpO1xuIDU4MzpcdFx0XHRnb3RvIGRyb3A7XG4gNTg0Olx0XHR9XG4gNTg1Olx0XG4gNTg2Olx0XHRpZiAodW5saWtlbHkoIWRzdCkpIHtcbiA1ODc6XHRcdFx0ZHN0ID0gc2VnNl9pbnB1dF9yb3V0ZShuZXQsIHNrYiwgc2x3dCk7XG4gNTg4Olx0XHRcdGlmICghZHN0KSB7XG4gNTg5Olx0XHRcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIDU5MDpcdFx0XHRcdGdvdG8gZHJvcDtcbiA1OTE6XHRcdFx0fVxuIDU5MjpcdFxuIDU5MzpcdFx0XHQvKiBjYWNoZSBvbmx5IGlmIHdlIGRvbiYjMzk7dCBjcmVhdGUgYSBkc3QgcmVmZXJlbmNlIGxvb3AgKi9cbiA1OTQ6XHRcdFx0aWYgKCFkc3QtXHUwMDNlZXJyb3IgXHUwMDI2XHUwMDI2IGx3dHN0ICE9IGRzdC1cdTAwM2Vsd3RzdGF0ZSkge1xuIDU5NTpcdFx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiA1OTY6XHRcdFx0XHRkc3RfY2FjaGVfc2V0X2lwNihcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX2lucHV0LCBkc3QsXG4gNTk3Olx0XHRcdFx0XHRcdCAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcik7XG4gNTk4Olx0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gNTk5Olx0XHRcdH1cbiA2MDA6XHRcbiA2MDE6XHRcdFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UoZHN0X2Rldihkc3QpKSk7XG4gNjAyOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDYwMzpcdFx0XHRcdGdvdG8gZHJvcDtcbiA2MDQ6XHRcdH0gZWxzZSB7XG4gNjA1Olx0XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuIDYwNjpcdFx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gNjA3Olx0XHR9XG4gNjA4Olx0XG4gNjA5Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcbiA2MTA6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX0xPQ0FMX09VVCxcbiA2MTE6XHRcdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBOVUxMLFxuIDYxMjpcdFx0XHRcdCAgICAgICBza2JfZHN0X2Rldihza2IpLCBzZWc2X2lucHV0X2ZpbmlzaCk7XG4gNjEzOlx0XG4gNjE0Olx0XHRyZXR1cm4gc2VnNl9pbnB1dF9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbiA2MTU6XHRkcm9wOlxuIDYxNjpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNjE3Olx0XHRyZXR1cm4gZXJyO1xuIDYxODpcdH1cbiA2MTk6XHRcbiA2MjA6XHRzdGF0aWMgaW50IHNlZzZfaW5wdXRfbmYoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA2MjE6XHR7XG4gNjIyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiX2RzdF9kZXYoc2tiKTtcbiA2MjM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNjI0Olx0XG4gNjI1Olx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIDYyNjpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gNjI3Olx0XHRcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgTlVMTCxcbiA2Mjg6XHRcdFx0XHQgICAgICAgc2tiLCBOVUxMLCBkZXYsIHNlZzZfaW5wdXRfY29yZSk7XG4gNjI5Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuIDYzMDpcdFx0XHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIE5VTEwsXG4gNjMxOlx0XHRcdFx0ICAgICAgIHNrYiwgTlVMTCwgZGV2LCBzZWc2X2lucHV0X2NvcmUpO1xuIDYzMjpcdFx0fVxuIDYzMzpcdFxuIDYzNDpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjM1Olx0fVxuIDYzNjpcdFxuIDYzNzpcdHN0YXRpYyBpbnQgc2VnNl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDYzODpcdHtcbiA2Mzk6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNm5mX2hvb2tzX2x3dHVubmVsX2VuYWJsZWQpKVxuIDY0MDpcdFx0XHRyZXR1cm4gc2VnNl9pbnB1dF9uZihza2IpO1xuIDY0MTpcdFxuIDY0MjpcdFx0cmV0dXJuIHNlZzZfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xuIDY0MzpcdH1cbiA2NDQ6XHRcbiA2NDU6XHQvKiBsb29rIHVwIHRoZSByb3V0ZSBmb3IgdGhlIGZpcnN0IFNJRCBvbiB0aGUgb3V0cHV0IHBhdGguIEFsd2F5cyByZXR1cm5zIGFcbiA2NDY6XHQgKiByZWZjb3VudGVkIGRzdC5cbiA2NDc6XHQgKi9cbiA2NDg6XHRzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2VnNl9vdXRwdXRfZHN0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gNjQ5Olx0XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbiA2NTA6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZmxvd2k2ICpmbDYsXG4gNjUxOlx0XHRcdFx0XHRcdFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0KVxuIDY1MjpcdHtcbiA2NTM6XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiA2NTQ6XHRcbiA2NTU6XHRcdGlmIChzbHd0LVx1MDAzZXRhYmxlKSB7XG4gNjU2Olx0XHRcdGRzdCA9IHNlZzZfdGFibGVfbG9va3VwKG5ldCwgc2tiLCBmbDYsIHNsd3QtXHUwMDNldGFibGUpO1xuIDY1NzpcdFx0XHRpZiAoIWRzdCkge1xuIDY1ODpcdFx0XHRcdGRzdCA9IFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS1cdTAwM2Vkc3Q7XG4gNjU5Olx0XHRcdFx0ZHN0X2hvbGQoZHN0KTtcbiA2NjA6XHRcdFx0fVxuIDY2MTpcdFx0fSBlbHNlIHtcbiA2NjI6XHRcdFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIGZsNik7XG4gNjYzOlx0XHR9XG4gNjY0Olx0XG4gNjY1Olx0XHRyZXR1cm4gZHN0O1xuIDY2NjpcdH1cbiA2Njc6XHRcbiA2Njg6XHRzdGF0aWMgaW50IHNlZzZfb3V0cHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4gNjY5Olx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjEwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgRGVlcCBpbnRvIHNlZzZfaXB0dW5uZWwuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mga2VlcCBwbHVnZ2luZyBhd2F5IGF0IGBzZWc2X2lwdHVubmVsLmNgLiBJIG5lZWQgdG8gZ2V0IGEgZnVsbCBoYW5kbGUgb24gdGhpcyBjb2RlLCBzbyBJJiMzOTttIGdvaW5nIHRvIHJlYWQgaXQgbWV0aG9kaWNhbGx5LCByaWdodCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vIHNraW1taW5nIG9yIGp1bXBpbmcgYXJvdW5kIGp1c3QgeWV0OyBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgc3RydWN0dXJlIGFuZCBsb2dpYyBmbG93IGJlZm9yZSBJIHN0YXJ0IHBpbnBvaW50aW5nIHNwZWNpZmljIGFyZWFzIG9mIGludGVyZXN0IG9yIHBvdGVudGlhbCBpbXByb3ZlbWVudHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1hcCBvZiB0aGlzIG1vZHVsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB3aXRoaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHR7XG4gNjcxOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpvcmlnX2RzdCA9IHNrYl9kc3Qoc2tiKTtcbiA2NzI6XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4gNjczOlx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3Q7XG4gNjc0Olx0XHRpbnQgZXJyO1xuIDY3NTpcdFxuIDY3NjpcdFx0c2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbiA2Nzc6XHRcbiA2Nzg6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiA2Nzk6XHRcdGRzdCA9IGRzdF9jYWNoZV9nZXQoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9vdXRwdXQpO1xuIDY4MDpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gNjgxOlx0XG4gNjgyOlx0XHRlcnIgPSBzZWc2X2RvX3NyaChza2IsIGRzdCk7XG4gNjgzOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiA2ODQ6XHRcdFx0Z290byBkcm9wO1xuIDY4NTpcdFxuIDY4NjpcdFx0aWYgKHVubGlrZWx5KCFkc3QpKSB7XG4gNjg3Olx0XHRcdHN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpO1xuIDY4ODpcdFx0XHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiA2ODk6XHRcbiA2OTA6XHRcdFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXHUwMDI2Zmw2KTtcbiA2OTE6XHRcbiA2OTI6XHRcdFx0ZHN0ID0gc2VnNl9vdXRwdXRfZHN0X2xvb2t1cChuZXQsIHNrYiwgXHUwMDI2Zmw2LCBzbHd0KTtcbiA2OTM6XHRcdFx0aWYgKGRzdC1cdTAwM2VlcnJvcikge1xuIDY5NDpcdFx0XHRcdGVyciA9IGRzdC1cdTAwM2VlcnJvcjtcbiA2OTU6XHRcdFx0XHRnb3RvIGRyb3A7XG4gNjk2Olx0XHRcdH1cbiA2OTc6XHRcbiA2OTg6XHRcdFx0LyogY2FjaGUgb25seSBpZiB3ZSBkb24mIzM5O3QgY3JlYXRlIGEgZHN0IHJlZmVyZW5jZSBsb29wICovXG4gNjk5Olx0XHRcdGlmIChvcmlnX2RzdC1cdTAwM2Vsd3RzdGF0ZSAhPSBkc3QtXHUwMDNlbHd0c3RhdGUpIHtcbiA3MDA6XHRcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNzAxOlx0XHRcdFx0ZHN0X2NhY2hlX3NldF9pcDYoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9vdXRwdXQsIGRzdCwgXHUwMDI2Zmw2LnNhZGRyKTtcbiA3MDI6XHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiA3MDM6XHRcdFx0fVxuIDcwNDpcdFxuIDcwNTpcdFx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShkc3RfZGV2KGRzdCkpKTtcbiA3MDY6XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4gNzA3Olx0XHRcdFx0Z290byBkcm9wO1xuIDcwODpcdFx0fVxuIDcwOTpcdFxuIDcxMDpcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gNzExOlx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gNzEyOlx0XG4gNzEzOlx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcbiA3MTQ6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX0xPQ0FMX09VVCwgbmV0LCBzaywgc2tiLFxuIDcxNTpcdFx0XHRcdCAgICAgICBOVUxMLCBkc3RfZGV2KGRzdCksIGRzdF9vdXRwdXQpO1xuIDcxNjpcdFxuIDcxNzpcdFx0cmV0dXJuIGRzdF9vdXRwdXQobmV0LCBzaywgc2tiKTtcbiA3MTg6XHRkcm9wOlxuIDcxOTpcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbiA3MjA6XHRcdGtmcmVlX3NrYihza2IpO1xuIDcyMTpcdFx0cmV0dXJuIGVycjtcbiA3MjI6XHR9XG4gNzIzOlx0XG4gNzI0Olx0c3RhdGljIGludCBzZWc2X291dHB1dF9uZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA3MjU6XHR7XG4gNzI2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiX2RzdF9kZXYoc2tiKTtcbiA3Mjc6XHRcbiA3Mjg6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4gNzI5Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiA3MzA6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX1BPU1RfUk9VVElORywgbmV0LCBzaywgc2tiLFxuIDczMTpcdFx0XHRcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xuIDczMjpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiA3MzM6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BPU1RfUk9VVElORywgbmV0LCBzaywgc2tiLFxuIDczNDpcdFx0XHRcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xuIDczNTpcdFx0fVxuIDczNjpcdFxuIDczNzpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzM4Olx0fVxuIDczOTpcdFxuIDc0MDpcdHN0YXRpYyBpbnQgc2VnNl9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gNzQxOlx0e1xuIDc0MjpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2bmZfaG9va3NfbHd0dW5uZWxfZW5hYmxlZCkpXG4gNzQzOlx0XHRcdHJldHVybiBzZWc2X291dHB1dF9uZihuZXQsIHNrLCBza2IpO1xuIDc0NDpcdFxuIDc0NTpcdFx0cmV0dXJuIHNlZzZfb3V0cHV0X2NvcmUobmV0LCBzaywgc2tiKTtcbiA3NDY6XHR9XG4gNzQ3Olx0XG4gNzQ4Olx0c3RhdGljIGludCBzZWc2X2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIDc0OTpcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4gNzUwOlx0XHRcdFx0ICAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxuIDc1MTpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNzUyOlx0e1xuIDc1MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbU0VHNl9JUFRVTk5FTF9NQVggJiM0MzsgMV07XG4gNzU0Olx0XHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbztcbiA3NTU6XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3dHM7XG4gNzU2Olx0XHRpbnQgdHVuaW5mb19sZW4sIG1pbl9zaXplO1xuIDc1NzpcdFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0O1xuIDc1ODpcdFx0aW50IGVycjtcbiA3NTk6XHRcbiA3NjA6XHRcdGlmIChmYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgZmFtaWx5ICE9IEFGX0lORVQ2KVxuIDc2MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NjI6XHRcbiA3NjM6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgU0VHNl9JUFRVTk5FTF9NQVgsIG5sYSxcbiA3NjQ6XHRcdFx0XHRcdFx0ICBzZWc2X2lwdHVubmVsX3BvbGljeSwgZXh0YWNrKTtcbiA3NjU6XHRcbiA3NjY6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNzY3Olx0XHRcdHJldHVybiBlcnI7XG4gNzY4Olx0XG4gNzY5Olx0XHRpZiAoIXRiW1NFRzZfSVBUVU5ORUxfU1JIXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgUmVnaXN0cmF0aW9uIFByb2Nlc3MgaW4gYHNlZzZfaXB0dW5uZWwuY2AqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgc2VnNl9pcHR1bm5lbC5jYCBmaWxlLiBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHksIGJ1dCBub3cgSSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgcHJlY2lzZWx5ICpob3cqIHRoaXMgbW9kdWxlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsLiBJIGNhbiYjMzk7dCBqdXN0IHN0b3AgYXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGFwYXRoLiBUaGUgcmVnaXN0cmF0aW9uIGRldGFpbHMgYXJlICpjcml0aWNhbCogZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBlc3BlY2lhbGx5IGluIGEgaGVhdmlseSBpbnRlZ3JhdGVkIGFyZWEgbGlrZSB0aGlzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucywgaG9va3MsIGFuZCBjYWxsYmFja3MuIFNvLCBJIG5lZWQgdG8gc2VlIHRoZSAqcmVzdCogb2YgdGhlIGNvZGUuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBXaGF0IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBvcHVsYXRlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVnaXN0cmF0aW9uIGZsYWdzIHVzZWQ/IEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgaW50ZXJhY3Rpb24gb2YgYHNlZzZfaXB0dW5uZWxgIHdpdGggdGhlIGtlcm5lbC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBwbHVncyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzcxOlx0XG4gNzcyOlx0XHR0dW5pbmZvID0gbmxhX2RhdGEodGJbU0VHNl9JUFRVTk5FTF9TUkhdKTtcbiA3NzM6XHRcdHR1bmluZm9fbGVuID0gbmxhX2xlbih0YltTRUc2X0lQVFVOTkVMX1NSSF0pO1xuIDc3NDpcdFxuIDc3NTpcdFx0LyogdHVuaW5mbyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdGhlIGlwdHVubmVsIGVuY2FwIHN0cnVjdHVyZSxcbiA3NzY6XHRcdCAqIHRoZSBTUkggYW5kIG9uZSBzZWdtZW50XG4gNzc3Olx0XHQgKi9cbiA3Nzg6XHRcdG1pbl9zaXplID0gc2l6ZW9mKCp0dW5pbmZvKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZfc3JfaGRyKSAmIzQzO1xuIDc3OTpcdFx0XHQgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTtcbiA3ODA6XHRcdGlmICh0dW5pbmZvX2xlbiBcdTAwM2MgbWluX3NpemUpXG4gNzgxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc4MjpcdFxuIDc4MzpcdFx0c3dpdGNoICh0dW5pbmZvLVx1MDAzZW1vZGUpIHtcbiA3ODQ6XHRcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0lOTElORTpcbiA3ODU6XHRcdFx0aWYgKGZhbWlseSAhPSBBRl9JTkVUNilcbiA3ODY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3ODc6XHRcbiA3ODg6XHRcdFx0aWYgKHRiW1NFRzZfSVBUVU5ORUxfU1JDXSkge1xuIDc4OTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7aW5jb21wYXRpYmxlIG1vZGUgZm9yIHR1bnNyY1wmIzM0Oyk7XG4gNzkwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzkxOlx0XHRcdH1cbiA3OTI6XHRcdFx0YnJlYWs7XG4gNzkzOlx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9FTkNBUDpcbiA3OTQ6XHRcdFx0YnJlYWs7XG4gNzk1Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQOlxuIDc5NjpcdFx0XHRicmVhaztcbiA3OTc6XHRcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0VOQ0FQX1JFRDpcbiA3OTg6XHRcdFx0YnJlYWs7XG4gNzk5Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQX1JFRDpcbiA4MDA6XHRcdFx0YnJlYWs7XG4gODAxOlx0XHRkZWZhdWx0OlxuIDgwMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MDM6XHRcdH1cbiA4MDQ6XHRcbiA4MDU6XHRcdC8qIHZlcmlmeSB0aGF0IFNSSCBpcyBjb25zaXN0ZW50ICovXG4gODA2Olx0XHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHR1bmluZm8tXHUwMDNlc3JoLCB0dW5pbmZvX2xlbiAtIHNpemVvZigqdHVuaW5mbyksIGZhbHNlKSlcbiA4MDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODA4Olx0XG4gODA5Olx0XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHR1bmluZm9fbGVuICYjNDM7IHNpemVvZigqc2x3dCkpO1xuIDgxMDpcdFx0aWYgKCFuZXd0cylcbiA4MTE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODEyOlx0XG4gODEzOlx0XHRzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobmV3dHMpO1xuIDgxNDpcdFxuIDgxNTpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9pbnB1dCwgR0ZQX0FUT01JQyk7XG4gODE2Olx0XHRpZiAoZXJyKVxuIDgxNzpcdFx0XHRnb3RvIGVycl9mcmVlX25ld3RzO1xuIDgxODpcdFxuIDgxOTpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9vdXRwdXQsIEdGUF9BVE9NSUMpO1xuIDgyMDpcdFx0aWYgKGVycilcbiA4MjE6XHRcdFx0Z290byBlcnJfZGVzdHJveV9pbnB1dDtcbiA4MjI6XHRcbiA4MjM6XHRcdG1lbWNweShcdTAwMjZzbHd0LVx1MDAzZXR1bmluZm8sIHR1bmluZm8sIHR1bmluZm9fbGVuKTtcbiA4MjQ6XHRcbiA4MjU6XHRcdGlmICh0YltTRUc2X0lQVFVOTkVMX1NSQ10pIHtcbiA4MjY6XHRcdFx0c2x3dC1cdTAwM2V0dW5zcmMgPSBubGFfZ2V0X2luNl9hZGRyKHRiW1NFRzZfSVBUVU5ORUxfU1JDXSk7XG4gODI3Olx0XG4gODI4Olx0XHRcdGlmIChpcHY2X2FkZHJfYW55KFx1MDAyNnNsd3QtXHUwMDNldHVuc3JjKSB8fFxuIDgyOTpcdFx0XHQgICAgaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykgfHxcbiA4MzA6XHRcdFx0ICAgIGlwdjZfYWRkcl9sb29wYmFjayhcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykpIHtcbiA4MzE6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2ludmFsaWQgdHVuc3JjIGFkZHJlc3NcJiMzNDspO1xuIDgzMjpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gODMzOlx0XHRcdFx0Z290byBlcnJfZGVzdHJveV9vdXRwdXQ7XG4gODM0Olx0XHRcdH1cbiA4MzU6XHRcdH1cbiA4MzY6XHRcbiA4Mzc6XHRcdGlmICh0YltTRUc2X0lQVFVOTkVMX1RBQkxFXSkge1xuIDgzODpcdFx0XHRzbHd0LVx1MDAzZXRhYmxlID0gbmxhX2dldF91MzIodGJbU0VHNl9JUFRVTk5FTF9UQUJMRV0pO1xuIDgzOTpcdFx0XHRpZiAoIXNsd3QtXHUwMDNldGFibGUpIHtcbiA4NDA6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2ludmFsaWQgbG9va3VwIHRhYmxlXCYjMzQ7KTtcbiA4NDE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDg0MjpcdFx0XHRcdGdvdG8gZXJyX2Rlc3Ryb3lfb3V0cHV0O1xuIDg0MzpcdFx0XHR9XG4gODQ0Olx0XHR9XG4gODQ1Olx0XG4gODQ2Olx0XHRuZXd0cy1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfU0VHNjtcbiA4NDc6XHRcdG5ld3RzLVx1MDAzZWZsYWdzIHw9IExXVFVOTkVMX1NUQVRFX0lOUFVUX1JFRElSRUNUO1xuIDg0ODpcdFxuIDg0OTpcdFx0aWYgKHR1bmluZm8tXHUwMDNlbW9kZSAhPSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUCBcdTAwMjZcdTAwMjZcbiA4NTA6XHRcdCAgICB0dW5pbmZvLVx1MDAzZW1vZGUgIT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEKVxuIDg1MTpcdFx0XHRuZXd0cy1cdTAwM2VmbGFncyB8PSBMV1RVTk5FTF9TVEFURV9PVVRQVVRfUkVESVJFQ1Q7XG4gODUyOlx0XG4gODUzOlx0XHRuZXd0cy1cdTAwM2VoZWFkcm9vbSA9IHNlZzZfbHd0X2hlYWRyb29tKHR1bmluZm8pO1xuIDg1NDpcdFxuIDg1NTpcdFx0KnRzID0gbmV3dHM7XG4gODU2Olx0XG4gODU3Olx0XHRyZXR1cm4gMDtcbiA4NTg6XHRcbiA4NTk6XHRlcnJfZGVzdHJveV9vdXRwdXQ6XG4gODYwOlx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX291dHB1dCk7XG4gODYxOlx0ZXJyX2Rlc3Ryb3lfaW5wdXQ6XG4gODYyOlx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX2lucHV0KTtcbiA4NjM6XHRlcnJfZnJlZV9uZXd0czpcbiA4NjQ6XHRcdGtmcmVlKG5ld3RzKTtcbiA4NjU6XHRcdHJldHVybiBlcnI7XG4gODY2Olx0fVxuIDg2NzpcdFxuIDg2ODpcdHN0YXRpYyB2b2lkIHNlZzZfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcbiA4Njk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgc2VnNl9pcHR1bm5lbC5jYCBTb3VyY2UqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiBgc2VnNl9pcHR1bm5lbC5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyDigJMgdGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGludGVyYWN0aW9uIHBvaW50cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGlzIGNydWNpYWwgdG8gc2VlIGhvdyB0aGlzIGltcGxlbWVudGF0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYXMgd2VsbC4gS25vd2luZyBob3cgdGhlIG1vZHVsZSBzZXRzIGl0c2VsZiB1cCBpcyBmdW5kYW1lbnRhbCB0byBncmFzcCBpdHMgcnVudGltZSBiZWhhdmlvciwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uLiBVbHRpbWF0ZWx5LCBnZXR0aW5nIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZ2l2ZXMgdGhlIGdyZWF0ZXN0IGluc2lnaHRzIG9uIHBlcmZvcm1hbmNlIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChsd3QpO1xuIDg3MTpcdFxuIDg3MjpcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9pbnB1dCk7XG4gODczOlx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX291dHB1dCk7XG4gODc0Olx0fVxuIDg3NTpcdFxuIDg3NjpcdHN0YXRpYyBpbnQgc2VnNl9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA4Nzc6XHRcdFx0XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXG4gODc4Olx0e1xuIDg3OTpcdFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKnR1bmluZm8gPSBzZWc2X2VuY2FwX2x3dHVubmVsKGx3dHN0YXRlKTtcbiA4ODA6XHRcdHN0cnVjdCBzZWc2X2x3dCAqc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGx3dHN0YXRlKTtcbiA4ODE6XHRcbiA4ODI6XHRcdGlmIChubGFfcHV0X3NyaChza2IsIFNFRzZfSVBUVU5ORUxfU1JILCB0dW5pbmZvKSlcbiA4ODM6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA4ODQ6XHRcbiA4ODU6XHRcdGlmICghaXB2Nl9hZGRyX2FueShcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykgXHUwMDI2XHUwMDI2XG4gODg2Olx0XHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIFNFRzZfSVBUVU5ORUxfU1JDLCBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykpXG4gODg3Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gODg4Olx0XG4gODg5Olx0XHRpZiAoc2x3dC1cdTAwM2V0YWJsZSBcdTAwMjZcdTAwMjZcbiA4OTA6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIFNFRzZfSVBUVU5ORUxfVEFCTEUsIHNsd3QtXHUwMDNldGFibGUpKVxuIDg5MTpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDg5MjpcdFxuIDg5MzpcdFx0cmV0dXJuIDA7XG4gODk0Olx0fVxuIDg5NTpcdFxuIDg5NjpcdHN0YXRpYyBpbnQgc2VnNl9lbmNhcF9ubHNpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcbiA4OTc6XHR7XG4gODk4Olx0XHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbyA9IHNlZzZfZW5jYXBfbHd0dW5uZWwobHd0c3RhdGUpO1xuIDg5OTpcdFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobHd0c3RhdGUpO1xuIDkwMDpcdFx0aW50IG5sc2l6ZTtcbiA5MDE6XHRcbiA5MDI6XHRcdG5sc2l6ZSA9IG5sYV90b3RhbF9zaXplKFNFRzZfSVBUVU5fRU5DQVBfU0laRSh0dW5pbmZvKSk7XG4gOTAzOlx0XG4gOTA0Olx0XHRpZiAoIWlwdjZfYWRkcl9hbnkoXHUwMDI2c2x3dC1cdTAwM2V0dW5zcmMpKVxuIDkwNTpcdFx0XHRubHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihzbHd0LVx1MDAzZXR1bnNyYykpO1xuIDkwNjpcdFxuIDkwNzpcdFx0aWYgKHNsd3QtXHUwMDNldGFibGUpXG4gOTA4Olx0XHRcdG5sc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuIDkwOTpcdFxuIDkxMDpcdFx0cmV0dXJuIG5sc2l6ZTtcbiA5MTE6XHR9XG4gOTEyOlx0XG4gOTEzOlx0c3RhdGljIGludCBzZWc2X2VuY2FwX2NtcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcbiA5MTQ6XHR7XG4gOTE1Olx0XHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqYV9oZHIgPSBzZWc2X2VuY2FwX2x3dHVubmVsKGEpO1xuIDkxNjpcdFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKmJfaGRyID0gc2VnNl9lbmNhcF9sd3R1bm5lbChiKTtcbiA5MTc6XHRcdHN0cnVjdCBzZWc2X2x3dCAqYV9zbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwoYSk7XG4gOTE4Olx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKmJfc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGIpO1xuIDkxOTpcdFx0aW50IGxlbiA9IFNFRzZfSVBUVU5fRU5DQVBfU0laRShhX2hkcik7XG4gOTIwOlx0XG4gOTIxOlx0XHRpZiAobGVuICE9IFNFRzZfSVBUVU5fRU5DQVBfU0laRShiX2hkcikpXG4gOTIyOlx0XHRcdHJldHVybiAxO1xuIDkyMzpcdFxuIDkyNDpcdFx0aWYgKCFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2YV9zbHd0LVx1MDAzZXR1bnNyYywgXHUwMDI2Yl9zbHd0LVx1MDAzZXR1bnNyYykpXG4gOTI1Olx0XHRcdHJldHVybiAxO1xuIDkyNjpcdFxuIDkyNzpcdFx0aWYgKGFfc2x3dC1cdTAwM2V0YWJsZSAhPSBiX3Nsd3QtXHUwMDNldGFibGUpXG4gOTI4Olx0XHRcdHJldHVybiAxO1xuIDkyOTpcdFxuIDkzMDpcdFx0cmV0dXJuIG1lbWNtcChhX2hkciwgYl9oZHIsIGxlbik7XG4gOTMxOlx0fVxuIDkzMjpcdFxuIDkzMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfaXB0dW5fb3BzID0ge1xuIDkzNDpcdFx0LmJ1aWxkX3N0YXRlID0gc2VnNl9idWlsZF9zdGF0ZSxcbiA5MzU6XHRcdC5kZXN0cm95X3N0YXRlID0gc2VnNl9kZXN0cm95X3N0YXRlLFxuIDkzNjpcdFx0Lm91dHB1dCA9IHNlZzZfb3V0cHV0LFxuIDkzNzpcdFx0LmlucHV0ID0gc2VnNl9pbnB1dCxcbiA5Mzg6XHRcdC5maWxsX2VuY2FwID0gc2VnNl9maWxsX2VuY2FwX2luZm8sXG4gOTM5Olx0XHQuZ2V0X2VuY2FwX3NpemUgPSBzZWc2X2VuY2FwX25sc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSBhdCBsaW5lIDk0MCwgaHVoPyBSaWdodC4gVGhlIGNvbnRleHQgYXJvdW5kIGhlcmUgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGdldCBhIHNlbnNlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGJleW9uZCB0aGlzIGltbWVkaWF0ZSBzbmlwcGV0LiAqV2hhdCYjMzk7cyogdGhlIHJlbGV2YW50IGxvZ2ljLCB0aGUgcG90ZW50aWFsIGNvbnRyb2wgZmxvdz8gSG9uZXN0bHksIEnigJltIGdldHRpbmcgYSBiaXQgaW1wYXRpZW50LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIG5leHQgaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzY3JvbGwgZG93biwgZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSYjMzk7cyBhY3RpbmcgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkbywgb3Igd2hhdCBpdCAqaXNuJiMzOTt0Ki4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbWVzIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHRcdC5jbXBfZW5jYXAgPSBzZWc2X2VuY2FwX2NtcCxcbiA5NDE6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIDk0MjpcdH07XG4gOTQzOlx0XG4gOTQ0Olx0aW50IF9faW5pdCBzZWc2X2lwdHVubmVsX2luaXQodm9pZClcbiA5NDU6XHR7XG4gOTQ2Olx0XHRyZXR1cm4gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XG4gOTQ3Olx0fVxuIDk0ODpcdFxuIDk0OTpcdHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpXG4gOTUwOlx0e1xuIDk1MTpcdFx0bHd0dW5uZWxfZW5jYXBfZGVsX29wcyhcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XG4gOTUyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNSdjYgTGlnaHR3ZWlnaHQgVHVubmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBzZWc2X2RvX3NyaGAgd2l0aGluIGBuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBgIGFuZCBgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEYCBjYXNlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIHRoZSB1bmNvbmRpdGlvbmFsIGBwc2tiX2V4cGFuZF9oZWFkYCBjYWxsIHdpdGggYHNrYl9jb3dfaGVhZGAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudDsgdGhlIGZvcm1lciB1bm5lY2Vzc2FyaWx5IGV4cGFuZHMgaGVhZHJvb20sIHdoaWxlIHRoZSBsYXR0ZXIgaW50ZWxsaWdlbnRseSBleHBhbmRzIG9ubHkgaWYgdGhlIGhlYWQgaXMgc2hhcmVkIG9yIGluc3VmZmljaWVudC4gVGhpcyBpcyBjb3JlIFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIHByb2Nlc3NpbmcsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWxseSBzb3VuZC4gVGhlIHBhdGggaXMgd2VsbC1kZWZpbmVkIGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIOKAkyBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3MgdmlhIGBpcCByb3V0ZWAgb3IgbmV0bGluayBhcmUgdGhlIHdheSBpbi4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHByZXJlcXVpc2l0ZXMuIEV4YW1pbmluZyBgbmV0L2lwdjYvTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYHNlZzZfaXB0dW5uZWwub2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgaXMgc2V0LCBhbmQgdGhlIGBLY29uZmlnYCByZXZlYWxzIHRoYXQgYElQVjZfU0VHNl9MV1RVTk5FTGAgcmVxdWlyZXMgYElQVjZgIHRvIGJlIGVuYWJsZWQuIFNvLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBJUFY2YCBhbmQgYElQVjZfU0VHNl9MV1RVTk5FTGAgYXMga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBJIHdpbGwga2VlcCBhbiBleWUgb24gYElQVjZfU0VHNl9ITUFDYCwgYWx0aG91Z2ggdGhlIGZvY3VzIGlzIG9uIHRoZSBTUnY2IHR1bm5lbCBlbmNhcHN1bGF0aW9uIGl0c2VsZi4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeXBvaW50cyBoZXJlLiBJbiBgc2VnNl9pcHR1bm5lbC5jYCBpdHNlbGYsIHRoZXJlIGFyZSBzZXZlcmFsIGtleSBub24taG90LXBhdGggQVBJIGVudHJpZXM6IGBzZWc2X2lucHV0YCAoY2FsbGVkIHZpYSB0aGUgbHd0dW5uZWwgb3BzIGBpbnB1dGApLCBgc2VnNl9vdXRwdXRgIChsd3R1bm5lbCBvcHMgYG91dHB1dGApLCBgc2VnNl9idWlsZF9zdGF0ZWAgKG5ldGxpbmsvbHd0dW5uZWwgYGJ1aWxkX3N0YXRlYCksIGBzZWc2X2RvX3NyaF9pbmxpbmVgICh3aGljaCBpcyBleHBvcnRlZCksIGFuZCBgc2VnNl9pcHR1bm5lbF9pbml0YC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBzZWc2X2lucHV0YCwgYHNlZzZfb3V0cHV0YCwgYW5kIGBzZWc2X2J1aWxkX3N0YXRlYCBhcmUgbm90IHN0YXRpYywgb3IgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCwgbm9uLXN0YXRpYywgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2VnNiBmYW1pbHkgb2YgZmlsZXMuIEluIHRoZSBrZXJuZWwsIGl04oCZcyByYXJlIGZvciBzdGF0aWMgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgKGxpa2UgdGhlIHNlZzZfKiBmdW5jdGlvbnMpIHRvIGJlIGlubGluZWQgdW5sZXNzIHRoZSBjb21waWxlciBpcyB1bmRlciBleHRyZW1lIHByZXNzdXJlIHRvIG9wdGltaXplLiBUaGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGZvciBgc2VnNl9pcHR1bl9vcHNgLCBzbyB0aGUgY29tcGlsZXIgKnNob3VsZCogcmV0YWluIHRoZSBzeW1ib2xzLiBMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBvdGhlciBgbmV0L2lwdjYvc2VnNiouY2AgZmlsZXMganVzdCB0byBiZSBzdXJlLCBhbmQgdmVyaWZ5IHRob3NlIHN5bWJvbHMgYXJlIGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvcmUgY29kZSwgcGFydGljdWxhcmx5IGBuZXQvaXB2Ni9zZWc2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgU1J2NiBsb2dpYyBzaG91bGQgcmVzaWRlLCBoYW5kbGluZyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gT2YgY291cnNlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIElQdjYgYW5kIGl0cyBmbGV4aWJpbGl0eSwgdGhlIGltcGxlbWVudGF0aW9uIGNvdWxkIGJlIHNwcmVhZCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gKm90aGVyKiBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9gIGRpcmVjdG9yeSBhcyB3ZWxsLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlZmluZWQgZWxzZXdoZXJlLCBwb3RlbnRpYWxseSBpbiBmaWxlcyBsaWtlIHRob3NlIHJlbGF0ZWQgdG8gcm91dGluZyBoZWFkZXJzLCBleHRlbnNpb24gaGVhZGVycywgb3IgZXZlbiB0aGUgSVB2NiBwcm90b2NvbCBpdHNlbGYuIEkgc2hvdWxkIGJlIHByZXBhcmVkIHRvIHRyYWNlIGZ1bmN0aW9uIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgY29tcG9uZW50cyB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgc2VnNi5jYCBhbmQgc2VlIHdoZXJlIGl0IGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzZWc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9obWFjLmM9MTAwPWludCBzZWc2X2htYWNfY29tcHV0ZShzdHJ1Y3Qgc2VnNl9obWFjX2luZm8gKmhpbmZvLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmhkcixcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0xNjgtfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MTY5OkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2NvbXB1dGUpO1xubmV0L2lwdjYvc2VnNl9obWFjLmMtMTcwLVxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTE3Nj1ib29sIHNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMjAtfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjIxOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX3ZhbGlkYXRlX3NrYik7XG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMjItXG4tLVxubmV0L2lwdjYvc2VnNl9obWFjLmM9MjI0PXN0cnVjdCBzZWc2X2htYWNfaW5mbyAqc2VnNl9obWFjX2luZm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMzItfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjMzOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fbG9va3VwKTtcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTIzNC1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTIzNT1pbnQgc2VnNl9obWFjX2luZm9fYWRkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSwgc3RydWN0IHNlZzZfaG1hY19pbmZvICpoaW5mbylcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yNTctfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjU4OkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fYWRkKTtcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI1OS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTI2MD1pbnQgc2VnNl9obWFjX2luZm9fZGVsKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yNzktfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjgwOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fZGVsKTtcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI4MS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTI4Mj1pbnQgc2VnNl9wdXNoX2htYWMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMwNS19XG5uZXQvaXB2Ni9zZWc2X2htYWMuYzozMDY6RVhQT1JUX1NZTUJPTChzZWc2X3B1c2hfaG1hYyk7XG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0zMDctXG4tLVxubmV0L2lwdjYvc2VnNl9obWFjLmM9MzE1PXZvaWQgX19uZXRfZXhpdCBzZWc2X2htYWNfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMyMC19XG5uZXQvaXB2Ni9zZWc2X2htYWMuYzozMjE6RVhQT1JUX1NZTUJPTChzZWc2X2htYWNfbmV0X2V4aXQpO1xuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMTg9aW50IHNlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCwgaW50IHByb3RvKVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yMjEtfVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIyMjpFWFBPUlRfU1lNQk9MX0dQTChzZWc2X2RvX3NyaF9lbmNhcCk7XG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjIzLVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz00Nzk9aW50IHNlZzZfZG9fc3JoX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgpXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTQ4Mi19XG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6NDgzOkVYUE9SVF9TWU1CT0xfR1BMKHNlZzZfZG9fc3JoX2lubGluZSk7XG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDg0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQwNQoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzZWc2X2lwdHVubmVsLmNgIE1vZHVsZSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIGBzZWc2X2lwdHVubmVsLmNgIHJldmVhbHMgc29tZSBrZXkgZnVuY3Rpb25zOiBgc2VnNl9kb19zcmhfZW5jYXBgLCBgc2VnNl9kb19zcmhfaW5saW5lYCwgYHNlZzZfYnVpbGRfc3RhdGVgLCBgc2VnNl9pbnB1dGAsIGFuZCBgc2VnNl9vdXRwdXRgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBoYW5kbGluZyBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSB3aXRoaW4gdGhlIGxpZ2h0d2VpZ2h0IHR1bm5lbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIFNSdjYgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIFRoZSBwcmVzZW5jZSBvZiBgSVBWNmAgYW5kIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGlzIGV4cGVjdGVkLiBUaGlzIGNvbmZpcm1zIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgYXJlIGF2YWlsYWJsZS4KClRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgcGF0Y2ggZml4aW5nIHRoZSBidWZmZXIgaGFuZGxpbmcgaW4gYHNlZzZfZG9fc3JoYCDigJMgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgZnJvbSBgcHNrYl9leHBhbmRfaGVhZGAgdG8gYHNrYl9jb3dfaGVhZGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2Ygd2hlcmUgeW91IGNhbiBnZXQgaW50byB0cm91YmxlIHdpdGggYnVmZmVyIG92ZXJmbG93cyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIFRoaXMgZGlyZWN0bHkgdG91Y2hlcyBkYXRhIHBhdGggcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIG1ha2VzIGl0IGFic29sdXRlbHkgcHJpbWUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyBpbiBTUnY2IEwyRU5DQVAgbW9kZSBhbmQgdGVzdGFibGUgd2l0aCBzdGFuZGFyZCBuZXR3b3JrIHRvb2xzIChzb2NrZXRzLCBuZXRsaW5rKSBhbmQgc2ltdWxhdGlvbiBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBzZWFscyB0aGUgZGVhbC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAgaGVyZS4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgc3VidGxlLCBoYXJkLXRvLWZpbmQgYnVncyB0aGF0IGZ1enppbmcgd2lsbCBleHBvc2UuCgpTbywgbXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiB0aG9zZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IOKAkyBhbGwgdGhvc2UgZnVuY3Rpb25zIG1lbnRpb25lZCBhYm92ZSwgYnV0IGVzcGVjaWFsbHkgYHNlZzZfZG9fc3JoX2VuY2FwYCBhbmQgYHNlZzZfZG9fc3JoX2lubGluZWAgZHVlIHRvIHRoZSBidWZmZXIgaGFuZGxpbmcgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGlucHV0IGZvcm1hdHMgSSBmZWVkIHRoZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyB0aGUgb3V0cHV0IGdlbmVyYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBzYW5pdHkgY2hlY2sgb24gc2V0LXJlc3VsdHMgY2FsbHMuIEkmIzM5O20gaW1hZ2luaW5nIGEgZnV6emVyIHRoYXQgY2FuIGNyYWZ0IFNSdjYgcGFja2V0cyB3aXRoIHZhcmlvdXMgc2VnbWVudCBsaXN0cyBhbmQgZW5jYXBzdWxhdGlvbiBvcHRpb25zLCB0aGVuIG1vbml0b3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVzZSBwYWNrZXRzLiBUaGUgZ29hbCBpcyB0byB0cmlnZ2VyIHRob3NlIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkKCkgd2l0aCBza2JfY293X2hlYWQoKSBpbiBzZWc2X2RvX3NyaCgpIHRvIGVuc3VyZSBhZGVxdWF0ZSBoZWFkcm9vbSBhbmQgdGhhdCB0aGUgc2tiIGhlYWRlciBpcyB1bnNoYXJlZC93cml0YWJsZSBiZWZvcmUgcmVidWlsZGluZyB0aGUgTUFDIGhlYWRlciBhbmQgcHVzaGluZyBpdC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGJ1ZmZlciBoZWFkZXIgaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgd3JpdGFiaWxpdHkgY2hlY2tzIGZvciBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChza19idWZmKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gbmV0d29yayBza2IgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzE3OTY3ZmNiZDdiYmUxZDc3ZDM3MDdhOWQ2ODYwNzIwNDU2Njc4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDA6NDE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMKaW5kZXggNjFjNmEyN2JmMjAyZC4uYTY1NTZlZmQ4ZTBiMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYwpAQCAtNDQ2LDggJiM0Mzs0NDYsOSBAQCBzdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdCkKIAkJaWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi0mZ3Q7bWFjX2xlbiwgMCwgR0ZQX0FUT01JQykgJmx0OyAwKQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQllcnIgPSBza2JfY293X2hlYWQoc2tiLCBza2ItJmd0O21hY19sZW4pOwomIzQzOwkJaWYgKHVubGlrZWx5KGVycikpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAogCQlza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7CiAJCXNrYl9wdXNoKHNrYiwgc2tiLSZndDttYWNfbGVuKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgYW5kIENvbnRleHR1YWxpemluZyB0aGUgUGF0Y2gqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzLiBGaXJzdCwgSSB3YW50IHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZi4gVGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IElzIHRoaXMgYSBmaXgsIGEgZmVhdHVyZSwgYW4gb3B0aW1pemF0aW9uPyBXaGF0JiMzOTtzIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2U/CgpUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGxhY2UgdG8gc3RhcnQgc2VlbXMgdG8gYmUgYG5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY2AgYXJvdW5kIGxpbmUgNDQ2LiBUaGF0IGFyZWEgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgc2VjdGlvbiwgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIGltcGFjdC4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjA6XHRcdFx0aWYgKGVycilcbiA0MjE6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDQyMjpcdFxuIDQyMzpcdFx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKVxuIDQyNDpcdFx0XHRcdHByb3RvID0gSVBQUk9UT19JUFY2O1xuIDQyNTpcdFx0XHRlbHNlIGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxuIDQyNjpcdFx0XHRcdHByb3RvID0gSVBQUk9UT19JUElQO1xuIDQyNzpcdFx0XHRlbHNlXG4gNDI4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI5Olx0XG4gNDMwOlx0XHRcdGlmICh0aW5mby1cdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9FTkNBUClcbiA0MzE6XHRcdFx0XHRlcnIgPSBfX3NlZzZfZG9fc3JoX2VuY2FwKHNrYiwgdGluZm8tXHUwMDNlc3JoLCBwcm90byxcbiA0MzI6XHRcdFx0XHRcdFx0XHQgIGNhY2hlX2RzdCwgXHUwMDI2c2x3dC1cdTAwM2V0dW5zcmMpO1xuIDQzMzpcdFx0XHRlbHNlXG4gNDM0Olx0XHRcdFx0ZXJyID0gc2VnNl9kb19zcmhfZW5jYXBfcmVkKHNrYiwgdGluZm8tXHUwMDNlc3JoLCBwcm90byxcbiA0MzU6XHRcdFx0XHRcdFx0XHQgICAgY2FjaGVfZHN0LCBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDM2Olx0XG4gNDM3Olx0XHRcdGlmIChlcnIpXG4gNDM4Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA0Mzk6XHRcbiA0NDA6XHRcdFx0c2tiX3NldF9pbm5lcl90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gNDQxOlx0XHRcdHNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wpO1xuIDQ0MjpcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiA0NDM6XHRcdFx0YnJlYWs7XG4gNDQ0Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQOlxuIDQ0NTpcdFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRUQ6XG4gNDQ2Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIDQ0NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0ODpcdFxuIDQ0OTpcdFx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gNDUwOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDQ1MTpcdFx0XHRcdHJldHVybiBlcnI7XG4gNDUyOlx0XG4gNDUzOlx0XHRcdHNrYl9tYWNfaGVhZGVyX3JlYnVpbGQoc2tiKTtcbiA0NTQ6XHRcdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gNDU1Olx0XG4gNDU2Olx0XHRcdGlmICh0aW5mby1cdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQKVxuIDQ1NzpcdFx0XHRcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cdTAwM2VzcmgsXG4gNDU4Olx0XHRcdFx0XHRcdFx0ICBJUFBST1RPX0VUSEVSTkVULCBjYWNoZV9kc3QsXG4gNDU5Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDYwOlx0XHRcdGVsc2VcbiA0NjE6XHRcdFx0XHRlcnIgPSBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc2tiLCB0aW5mby1cdTAwM2VzcmgsXG4gNDYyOlx0XHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fRVRIRVJORVQsIGNhY2hlX2RzdCxcbiA0NjM6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2c2x3dC1cdTAwM2V0dW5zcmMpO1xuIDQ2NDpcdFxuIDQ2NTpcdFx0XHRpZiAoZXJyKVxuIDQ2NjpcdFx0XHRcdHJldHVybiBlcnI7XG4gNDY3Olx0XG4gNDY4Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIDQ2OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSGVhZHJvb20gTWFuYWdlbWVudCBpbiBTS0JzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBza2JfY293X2hlYWQoc2tiLCBza2ItJmd0O21hY19sZW4pYCBhbmQgYHBza2JfZXhwYW5kX2hlYWQoc2tiLCBza2ItJmd0O21hY19sZW4sIDAsIEdGUF9BVE9NSUMpYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHBza2JfZXhwYW5kX2hlYWRgIHNlZW1zIHRvIGhhdmUgYmVlbiByYXRoZXIgdW5jb25kaXRpb25hbCBhYm91dCBleHBhbmRpbmcgdGhlIFNLQiYjMzk7cyBoZWFkLCBvciBtYXliZSBpdCB3YXNuJiMzOTt0IHVuc2hhcmluZyB0aGUgU0tCIGlmIGl0IHdhcyBhbHJlYWR5IGNsb25lZCwgZXZlbiBpZiBleHBhbnNpb24gd2FzbiYjMzk7dCBuZWNlc3NhcnkuCgpJIHNlZSB0aGF0IGBza2JfY293X2hlYWQoc2tiLCBkZWx0YSlgIGlzIG1vcmUgdGFyZ2V0ZWQuIEl0IHNlZW1zIHRvIGd1YXJhbnRlZSB0d28gdGhpbmdzOiBGaXJzdCwgaXQgKmVuc3VyZXMqIHRoZXJlJiMzOTtzIGF0IGxlYXN0IGBkZWx0YWAgYnl0ZXMgb2YgaGVhZHJvb20uIFNlY29uZCwgYW5kIGNydWNpYWxseSwgaXQgbWFrZXMgc3VyZSB0aGUgaGVhZGVyIGlzbiYjMzk7dCBzaGFyZWQgb3IgY2xvbmVkLiBJdCBlc3NlbnRpYWxseSBtYWtlcyB0aGUgU0tCJiMzOTtzIGhlYWRlciB3cml0YWJsZSBieSBlbnN1cmluZyBpdCBoYXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tLiBUaGlzIGlzIHRoZSBjb3JlIGRpZmZlcmVuY2UsIEkgYmVsaWV2ZS4KCkkgbWlnaHQgbmVlZCB0byBkaWcgaW50byB0aGUgYHNrYl9jb3dfaGVhZGAgaW1wbGVtZW50YXRpb24gb3IgcGVyaGFwcyB0aGUgZGVmaW5pdGlvbnMgaWYgSSBuZWVkIHRvIGNsYXJpZnkgYW55dGhpbmcgZnVydGhlciwgYnV0IHRoaXMgaXMgdGhlIGdpc3Qgb2YgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3dfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0zOTIxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzNS0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzkzNjpzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNrYnVmZi5oYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUg4oCTIHNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDM5MzYgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyBsaWtlbHkgdG8gbG9vayBhdCBob3cgZGF0YSBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZSwgbWF5YmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgZnJhZ21lbnRhdGlvbiwgb3IgcGVyaGFwcyBzcGVjaWZpYyBmbGFncyB0aGF0IGNvbnRyb2wgcGFja2V0IHByb2Nlc3NpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgbWFjcm8gaW1wbGVtZW50YXRpb25zIGluIHRoYXQgdmljaW5pdHksIGFuZCBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIHRoZW0gd2l0aCBhIGZpbmUtdG9vdGggY29tYi4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaGVscHMgbWUgcmVzb2x2ZSB0aGUgY3VycmVudCBwcm9ibGVtIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzkyMDpcdCAqL1xuMzkyMTpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuMzkyMjpcdHtcbjM5MjM6XHRcdHJldHVybiBfX3NrYl9jb3coc2tiLCBoZWFkcm9vbSwgc2tiX2Nsb25lZChza2IpKTtcbjM5MjQ6XHR9XG4zOTI1Olx0XG4zOTI2Olx0LyoqXG4zOTI3Olx0ICpcdHNrYl9jb3dfaGVhZCAtIHNrYl9jb3cgYnV0IG9ubHkgbWFraW5nIHRoZSBoZWFkIHdyaXRhYmxlXG4zOTI4Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBjb3dcbjM5Mjk6XHQgKlx0QGhlYWRyb29tOiBuZWVkZWQgaGVhZHJvb21cbjM5MzA6XHQgKlxuMzkzMTpcdCAqXHRUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBza2JfY293IGV4Y2VwdCB0aGF0IHdlIHJlcGxhY2UgdGhlXG4zOTMyOlx0ICpcdHNrYl9jbG9uZWQgY2hlY2sgYnkgc2tiX2hlYWRlcl9jbG9uZWQuICBJdCBzaG91bGQgYmUgdXNlZCB3aGVuXG4zOTMzOlx0ICpcdHlvdSBvbmx5IG5lZWQgdG8gcHVzaCBvbiBzb21lIGhlYWRlciBhbmQgZG8gbm90IG5lZWQgdG8gbW9kaWZ5XG4zOTM0Olx0ICpcdHRoZSBkYXRhLlxuMzkzNTpcdCAqL1xuMzkzNjpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3dfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4zOTM3Olx0e1xuMzkzODpcdFx0cmV0dXJuIF9fc2tiX2Nvdyhza2IsIGhlYWRyb29tLCBza2JfaGVhZGVyX2Nsb25lZChza2IpKTtcbjM5Mzk6XHR9XG4zOTQwOlx0XG4zOTQxOlx0LyoqXG4zOTQyOlx0ICpcdHNrYl9wYWR0b1x0LSBwYWQgYW4gc2tidWZmIHVwIHRvIGEgbWluaW1hbCBzaXplXG4zOTQzOlx0ICpcdEBza2I6IGJ1ZmZlciB0byBwYWRcbjM5NDQ6XHQgKlx0QGxlbjogbWluaW1hbCBsZW5ndGhcbjM5NDU6XHQgKlxuMzk0NjpcdCAqXHRQYWRzIHVwIGEgYnVmZmVyIHRvIGVuc3VyZSB0aGUgdHJhaWxpbmcgYnl0ZXMgZXhpc3QgYW5kIGFyZVxuMzk0NzpcdCAqXHRibGFua2VkLiBJZiB0aGUgYnVmZmVyIGFscmVhZHkgY29udGFpbnMgc3VmZmljaWVudCBkYXRhIGl0XG4zOTQ4Olx0ICpcdGlzIHVudG91Y2hlZC4gT3RoZXJ3aXNlIGl0IGlzIGV4dGVuZGVkLiBSZXR1cm5zIHplcm8gb25cbjM5NDk6XHQgKlx0c3VjY2Vzcy4gVGhlIHNrYiBpcyBmcmVlZCBvbiBlcnJvci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwNgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA0NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTS0IgSGVhZHJvb20gQ2hhbmdlIGluIGBzZWc2X2RvX3NyaF9lbmNhcGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGhlcmUgaXMgcmVwbGFjaW5nIGBwc2tiX2V4cGFuZF9oZWFkYCB3aXRoIGBza2JfY293X2hlYWRgIHdpdGhpbiBgc2VnNl9kb19zcmhgIHNwZWNpZmljYWxseSBmb3IgTDIgZW5jYXBzdWxhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuIEl0IHNlZW1zIHRoaXMgaXMgYWJvdXQgbWFuYWdpbmcgdGhlIFNvY2tldCBCdWZmZXIgKHNrYikgaGVhZCwgZW5zdXJpbmcgaXQmIzM5O3Mgd3JpdGFibGUgYW5kIG5vdCBzaGFyZWQgYmVmb3JlIHdlIG1vZGlmeSB0aGUgaGVhZGVyIGR1cmluZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24g4oCTIHRoaW5rIGBza2JfbWFjX2hlYWRlcl9yZWJ1aWxkYCwgYHNrYl9wdXNoYCwgYW5kIHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXRzZWxmLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIENvdWxkIHRoaXMgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eT8gRGlnZ2luZyBkZWVwZXIsIGBza2JfY293X2hlYWRgIHNlZW1zIHNhZmUgaW4gdGhpcyByZWdhcmQuIEl0IGVpdGhlciByZWFsbG9jYXRlcyB0aGUgc2tiIGhlYWQgKGVmZmVjdGl2ZWx5IGNhbGxpbmcgYHBza2JfZXhwYW5kX2hlYWRgIGJlaGluZCB0aGUgc2NlbmVzKSBvciwgaWYgdGhlIGhlYWRyb29tIGlzIGFscmVhZHkgYXZhaWxhYmxlIGFuZCBpbml0aWFsaXplZCwgbGVhdmVzIGl0IHVudG91Y2hlZC4gQ3J1Y2lhbGx5LCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG5vciBkb2VzIGl0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZGlyZWN0bHkuIFdlJiMzOTtyZSBvcGVyYXRpbmcgb24gbmV0d29yayBwYWNrZXQgYnVmZmVycywgd2hpY2ggYXJlICpzdXBwb3NlZCogdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUmIzM5O3Mgbm8gaW5kaWNhdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8gbGVha3MsIG9yIGlzc3VlcyB3aXRoIHN0cnVjdCBwYWRkaW5nIGhlcmUuCgpOb3csIGxldCYjMzk7cyBzaGlmdCB0byBLTVNBTiBjb25zaWRlcmF0aW9ucy4gS01TQU4gZmxhZ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGlzIGNoYW5nZSwgYXQgaXRzIGhlYXJ0LCBpcyBhIHN0YW5kYXJkIFNLQiBoZWFkcm9vbS9jbG9uaW5nIG1hbmFnZW1lbnQgY29ycmVjdGlvbjogZW5zdXJpbmcgdGhlIHNrYiBoZWFkIGlzIHdyaXRhYmxlLCBhbmQgaGFuZGxpbmcgZXJyb3JzIGNvcnJlY3RseS4gU2luY2Ugd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcG90ZW50aWFsIGxlYWtzIHRoYXQgSSBjYW4gc2VlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGlzIGlzIGEgZml4LCBub3QgYSBuZXcgZmVhdHVyZSB0aGF0IGNvdWxkIGludHJvZHVjZSBuZXcgaXNzdWVzLiBUaGUgdG9vbCYjMzk7cyBjaGVja3Mgb2YgS01TQU4gdnMgS0FTQU4gYXJlIHJlbGV2YW50IGhlcmUsIGFuZCBpdCBwcm9wZXJseSBhc3Nlc3NlcyB0aGUgcmlza3MuCgpUaGVyZWZvcmUsIHRoaXMgaXMgYSBzdGFuZGFyZCBhbmQgc2FmZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgcHNrYl9leHBhbmRfaGVhZCgpIHdpdGggc2tiX2Nvd19oZWFkKCkgaW4gc2VnNl9kb19zcmgoKSB0byBlbnN1cmUgYWRlcXVhdGUgaGVhZHJvb20gYW5kIHRoYXQgdGhlIHNrYiBoZWFkZXIgaXMgdW5zaGFyZWQvd3JpdGFibGUgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIE1BQyBoZWFkZXIgYW5kIHB1c2hpbmcgaXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBidWZmZXIgaGVhZGVyIGhlYWRyb29tIG1hbmFnZW1lbnQgYW5kIHdyaXRhYmlsaXR5IGNoZWNrcyBmb3IgbmV0d29yayBwYWNrZXQgYnVmZmVycyAoc2tfYnVmZikuIEl0IGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGJ1ZmZlciBib3VuZHMgaXNzdWVzIGluIG5ldHdvcmsgc2tiIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjA5LjM3NDc2NDczMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTY2MjA1MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfZG9fc3JoX2VuY2FwXCIsXG4gICAgXCJzZWc2X2RvX3NyaF9pbmxpbmVcIixcbiAgICBcInNlZzZfYnVpbGRfc3RhdGVcIixcbiAgICBcInNlZzZfaW5wdXRcIixcbiAgICBcInNlZzZfb3V0cHV0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkKCkgd2l0aCBza2JfY293X2hlYWQoKSBpbiBzZWc2X2RvX3NyaCgpIHRvIGVuc3VyZSBhZGVxdWF0ZSBoZWFkcm9vbSBhbmQgdGhhdCB0aGUgc2tiIGhlYWRlciBpcyB1bnNoYXJlZC93cml0YWJsZSBiZWZvcmUgcmVidWlsZGluZyB0aGUgTUFDIGhlYWRlciBhbmQgcHVzaGluZyBpdC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGJ1ZmZlciBoZWFkZXIgaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgd3JpdGFiaWxpdHkgY2hlY2tzIGZvciBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChza19idWZmKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gbmV0d29yayBza2IgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjA5LjM3NDc2OTA0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODkwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzE3OTY3ZmNiZDdiYmUxZDc3ZDM3MDdhOWQ2ODYwNzIwNDU2Njc4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjQxOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY1xcbmluZGV4IDYxYzZhMjdiZjIwMmQuLmE2NTU2ZWZkOGUwYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXFxuQEAgLTQ0Niw4ICs0NDYsOSBAQCBzdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdClcXG4gXFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBza2ItXFx1MDAzZW1hY19sZW4sIDAsIEdGUF9BVE9NSUMpIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuK1xcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0XFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xcbiBcXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjA5Ljg2NDM1NTcxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzA5MTkyMDU0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9kb19zcmhfZW5jYXBcIixcbiAgICBcInNlZzZfZG9fc3JoX2lubGluZVwiLFxuICAgIFwic2VnNl9idWlsZF9zdGF0ZVwiLFxuICAgIFwic2VnNl9pbnB1dFwiLFxuICAgIFwic2VnNl9vdXRwdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcxNzk2N2ZjYmQ3YmJlMWQ3N2QzNzA3YTlkNjg2MDcyMDQ1NjY3ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjQxOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jIGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG5pbmRleCA2MWM2YTI3YmYyMDJkLi5hNjU1NmVmZDhlMGIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG4rKysgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbkBAIC00NDYsOCArNDQ2LDkgQEAgc3RhdGljIGludCBzZWc2X2RvX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpjYWNoZV9kc3QpXG4gXHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0XHRza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MDkuODY0MzU3NjA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQxNDg3MjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IGBzZWc2X2lwdHVubmVsLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0IGFuZCBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW5zcGVjdCB0aGUgZGlmZiwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jYC4gSSBzZWUgdGhlIGBzZWc2X2RvX3NyaGAgZnVuY3Rpb24gaGFzIGJlZW4gYWx0ZXJlZCwgc3BlY2lmaWNhbGx5IHRoZSBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIHRoZSByZXBsYWNlbWVudCBvZiBgcHNrYl9leHBhbmRfaGVhZGAgd2l0aCBgc2tiX2Nvd19oZWFkYC5cblxuTm93LCB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUuIFRvIG1ha2UgYSBqdWRnZW1lbnQgY2FsbCBhYm91dCB3aGV0aGVyIGZ1enppbmcgaXMgd29ydGh3aGlsZSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLCBhbmQgZGV0ZXJtaW5lIGlmIGl0J3MgZXZlbiByZWFjaGFibGUuIEknbGwgcmVhZCB0aGUgZmlsZSBpdHNlbGYgdXNpbmcgYHJlYWQtZmlsZWAgYW5kIGVtcGxveSBgZ3JlcHBlcmAgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGlkZW50aWZ5IHRoZSBjb25maWd1cmF0aW9uIHBhdGhzIGFuZCBuYXJyb3cgZG93biB0aGUgc2NvcGUuIFVsdGltYXRlbHksIHRoaXMgd2lsbCBpbmZvcm0gbWUgb2Ygd2hhdCBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldCBhbmQgd2hpY2ggaW5wdXRzIHdpbGwgcHJvdmlkZSB0aGUgbW9zdCBlZmZpY2llbnQgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNC4yNzkyMzI1NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdFxcdFxcdGVsc2UgaWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxcbiA0MjY6XFx0XFx0XFx0XFx0cHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuIDQyNzpcXHRcXHRcXHRlbHNlXFxuIDQyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0XFx0aWYgKHRpbmZvLVxcdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9FTkNBUClcXG4gNDMxOlxcdFxcdFxcdFxcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cXHUwMDNlc3JoLCBwcm90byxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgY2FjaGVfZHN0LCBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDMzOlxcdFxcdFxcdGVsc2VcXG4gNDM0OlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsIHByb3RvLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNhY2hlX2RzdCwgXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYyk7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdFxcdGlmIChlcnIpXFxuIDQzODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcXG4gNDQxOlxcdFxcdFxcdHNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBza2ItXFx1MDAzZXByb3RvY29sKTtcXG4gNDQyOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gNDQzOlxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUDpcXG4gNDQ1OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEOlxcbiA0NDY6XFx0XFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDQ0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gNDUwOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiA0NTE6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0XFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xcbiA0NTQ6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBza2ItXFx1MDAzZW1hY19sZW4pO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRcXHRpZiAodGluZm8tXFx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVApXFxuIDQ1NzpcXHRcXHRcXHRcXHRlcnIgPSBfX3NlZzZfZG9fc3JoX2VuY2FwKHNrYiwgdGluZm8tXFx1MDAzZXNyaCxcXG4gNDU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDYwOlxcdFxcdFxcdGVsc2VcXG4gNDYxOlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0NjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiA0Njk6XFx0XFx0XFx0YnJlYWs7XFxuIDQ3MDpcXHRcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbiA0NzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gNDc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNC4yNzkzMjI4MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0OTgxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9TRUc2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxubmV0L2lwdjYvS2NvbmZpZzozMTQ6XFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxNS1cXHRkZXBlbmRzIG9uIElQVjYgPSB5XFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI2OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjctaXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMjktXFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIzMDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXFx0LnNlZzZfcmVxdWlyZV9obWFjXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNDY9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mX2RmbHQgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVxcdC5zZWc2X2VuYWJsZWRcXHRcXHQ9IDAsXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTU6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk2LVxcdC5zZWc2X3JlcXVpcmVfaG1hY1xcdD0gMCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM4LVxcdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXNlZzZfZW5hYmxlZCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzM5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3NDAtXFx0YXJyYXlbREVWQ09ORl9TRUc2X1JFUVVJUkVfSE1BQ10gPSBSRUFEX09OQ0UoY25mLVxcdTAwM2VzZWc2X3JlcXVpcmVfaG1hYyk7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMjUtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNy1cXHR7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2LmhcXHUwMDNlXFxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDktI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODgtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTM5MC1cXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTExMjQ9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1Mi1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1MzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTExNTQtXFx0aWYgKHNyX2hhc19obWFjKHNyX3BoZHIpKSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2dlbmxfcG9saWN5W1NFRzZfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy0xNTAtXFxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNi5jLTE1Mi1cXG4tLVxcbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTI5OS1cXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2LmMtMzAxLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X2NhY2hlLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0xNDE9c3RhdGljIGludCBfX3NlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yMDEtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIwMjojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMy1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjU9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMjgtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTMzMC1cXHRpZiAodW5saWtlbHkoIXNraXBfc3JoIFxcdTAwMjZcXHUwMDI2IHNyX2hhc19obWFjKGlzcmgpKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0NT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODAtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM4MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTM4Mi1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Mjg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI1LVxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyLVxcdGlmIChzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz03NTg9c3RhdGljIGludCBlbmRfZmx2ODk4Nl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjktXFx0cGluZm8gPSBzZWc2X2dldF9zcmhfcGt0aW5mbyhzcmgpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NzEtXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNC4zMjg4MjYxNDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ5ODE4Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBpcyB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBuZXQvaXB2Ni9LY29uZmlnYC4gSSdsbCB3YW50IHRvIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDI4NiB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIGxheSBvdXQgYWxsIHRoZSBvcHRpb25zIGFuZCBhbnkgY29uZGl0aW9ucyB0aGF0IGNvbnRyb2wgd2hlbiB0aGV5IGFyZSBlbmFibGVkLiBUaW1lIHRvIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MTYuMjc4NjQ3MDYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbiAyODE6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbiAyODI6XFx0XFx0aGVscFxcbiAyODM6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IFBJTSBtdWx0aWNhc3Qgcm91dGluZyBwcm90b2NvbCBQSU0tU012Mi5cXG4gMjg0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjg1OlxcdFxcbiAyODY6XFx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAyODc6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDI4ODpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjg5OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAyOTA6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyOTE6XFx0XFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXFxuIDI5MjpcXHRcXHRoZWxwXFxuIDI5MzpcXHRcXHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxcbiAyOTQ6XFx0XFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMjk1OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXFxuIDI5NjpcXHRcXHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbiAzMDE6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMDM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAzMDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNi4yNzg3MzQ4OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY2NDcyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlIHlvdSBtZW50aW9uZWQ6XG5cbioqRXhhbWluaW5nIHNlZzZfaXB0dW5uZWwuYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0VHNiBvdmVyIElQdjYgdHVubmVsaW5nIGlzIGltcGxlbWVudGVkLCBhbmQgSSdtIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIGZpbGUgYHNlZzZfaXB0dW5uZWwuY2AuIE15IHByaW1hcnkgZ29hbCBpcyB0byBncmFzcCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgd2l0aGluIHRoaXMgZmlsZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvcmUgbG9naWMgb2YgY3JlYXRpbmcsIGNvbmZpZ3VyaW5nLCBhbmQgbWFuYWdpbmcgdGhlc2UgdHVubmVscy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgYXJjaGl0ZWN0dXJhbCBvdmVydmlldyBieSBzdHVkeWluZyB0aGlzIGZpbGUuIEkgZXhwZWN0IHRvIGZpbmQsIGF0IGEgbWluaW11bSwgdGhlIGRhdGEgc3RydWN0dXJlcyBkZXNjcmliaW5nIGEgU0VHNiB0dW5uZWwsIGFuZCBlbnRyeSBwb2ludHMgZm9yIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb24sIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgYW55IHJlbGV2YW50IGVycm9yIGhhbmRsaW5nIG9yIGhlbHBlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjE4LjM0NTIxMDUwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbiA0NzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3NjpcXHR9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdC8qIGluc2VydCBhbiBTUkggd2l0aGluIGFuIElQdjYgcGFja2V0LCBqdXN0IGFmdGVyIHRoZSBJUHY2IGhlYWRlciAqL1xcbiA0Nzk6XFx0aW50IHNlZzZfZG9fc3JoX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgpXFxuIDQ4MDpcXHR7XFxuIDQ4MTpcXHRcXHRyZXR1cm4gX19zZWc2X2RvX3NyaF9pbmxpbmUoc2tiLCBvc3JoLCBOVUxMKTtcXG4gNDgyOlxcdH1cXG4gNDgzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNlZzZfZG9fc3JoX2lubGluZSk7XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdC8qIGxvb2sgdXAgYSByb3V0ZSBpbiBhIHNwZWNpZmljIEZJQiB0YWJsZS5cXG4gNDg2OlxcdCAqIFJldHVybnMgYSByZWZjb3VudGVkIGRzdCwgb3IgTlVMTCBpZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QuXFxuIDQ4NzpcXHQgKi9cXG4gNDg4OlxcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X3RhYmxlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0OTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dpNiAqZmw2LCB1MzIgdGJsX2lkKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xcbiA0OTM6XFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0dGFibGUgPSBmaWI2X2dldF90YWJsZShuZXQsIHRibF9pZCk7XFxuIDQ5NjpcXHRcXHRpZiAoIXRhYmxlKVxcbiA0OTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdFxcdHJ0ID0gaXA2X3BvbF9yb3V0ZShuZXQsIHRhYmxlLCAwLCBmbDYsIHNrYiwgUlQ2X0xPT0tVUF9GX0hBU19TQUREUik7XFxuIDUwMDpcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuIDUwMTpcXHR9XFxuIDUwMjpcXHRcXG4gNTAzOlxcdHN0YXRpYyB2b2lkIHNlZzZfaW5pdF9mbG93aTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKmhkcixcXG4gNTA0OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dpNiAqZmw2KVxcbiA1MDU6XFx0e1xcbiA1MDY6XFx0XFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0Zmw2LVxcdTAwM2VkYWRkciA9IGhkci1cXHUwMDNlZGFkZHI7XFxuIDUwOTpcXHRcXHRmbDYtXFx1MDAzZXNhZGRyID0gaGRyLVxcdTAwM2VzYWRkcjtcXG4gNTEwOlxcdFxcdGZsNi1cXHUwMDNlZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGhkcik7XFxuIDUxMTpcXHRcXHRmbDYtXFx1MDAzZWZsb3dpNl9tYXJrID0gc2tiLVxcdTAwM2VtYXJrO1xcbiA1MTI6XFx0XFx0Zmw2LVxcdTAwM2VmbG93aTZfcHJvdG8gPSBoZHItXFx1MDAzZW5leHRoZHI7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdC8qIGxvb2sgdXAgdGhlIHJvdXRlIGZvciB0aGUgZmlyc3QgU0lEIG9uIHRoZSBpbnB1dCBwYXRoIGFuZCBzZXQgaXQgb24gdGhlIHNrYi5cXG4gNTE2OlxcdCAqIFJldHVybnMgdGhlIHJlZmNvdW50ZWQgZHN0LCBvciBOVUxMIGlmIGEgcmVmZXJlbmNlIGNvdWxkIG5vdCBiZSBzYWZlbHkgdGFrZW4uXFxuIDUxNzpcXHQgKi9cXG4gNTE4OlxcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X2lucHV0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gNTE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNlZzZfbHd0ICpzbHd0KVxcbiA1MjE6XFx0e1xcbiA1MjI6XFx0XFx0dTMyIHRhYmxlID0gc2x3dC1cXHUwMDNldGFibGU7XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdGlmICh0YWJsZSkge1xcbiA1MjU6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7XFxuIDUyNjpcXHRcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIDUyNzpcXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0XFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXFx1MDAyNmZsNik7XFxuIDUzMDpcXHRcXHRcXHRmbDYuZmxvd2k2X2lpZiA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4O1xcbiA1MzE6XFx0XFxuIDUzMjpcXHRcXHRcXHRkc3QgPSBzZWc2X3RhYmxlX2xvb2t1cChuZXQsIHNrYiwgXFx1MDAyNmZsNiwgdGFibGUpO1xcbiA1MzM6XFx0XFx0XFx0aWYgKCFkc3QpIHtcXG4gNTM0OlxcdFxcdFxcdFxcdGRzdCA9IFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LVxcdTAwM2Vkc3Q7XFxuIDUzNTpcXHRcXHRcXHRcXHRkc3RfaG9sZChkc3QpO1xcbiA1MzY6XFx0XFx0XFx0fVxcbiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4gNTM5OlxcdFxcdFxcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcXG4gNTQwOlxcdFxcdH0gZWxzZSB7XFxuIDU0MTpcXHRcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0XFx0LyogaXA2X3JvdXRlX2lucHV0KCkgc2V0cyBhIE5PUkVGIGRzdDsgZm9yY2UgYSByZWZjb3VudCBvbiBpdFxcbiA1NDQ6XFx0XFx0XFx0ICogYmVmb3JlIGNhY2hpbmcgb3IgZnVydGhlciB1c2UuXFxuIDU0NTpcXHRcXHRcXHQgKi9cXG4gNTQ2OlxcdFxcdFxcdHNrYl9kc3RfZm9yY2Uoc2tiKTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0cmV0dXJuIHNrYl9kc3Qoc2tiKTtcXG4gNTUwOlxcdH1cXG4gNTUxOlxcdFxcbiA1NTI6XFx0c3RhdGljIGludCBzZWc2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4gNTUzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTU0OlxcdHtcXG4gNTU1OlxcdFxcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcXG4gNTU2OlxcdH1cXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIGludCBzZWc2X2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuIDU1OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA1NjA6XFx0e1xcbiA1NjE6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb3JpZ19kc3QgPSBza2JfZHN0KHNrYik7XFxuIDU2MjpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbiA1NjM6XFx0XFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdDtcXG4gNTY0OlxcdFxcdHN0cnVjdCBzZWc2X2x3dCAqc2x3dDtcXG4gNTY1OlxcdFxcdGludCBlcnI7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdC8qIFdlIGNhbm5vdCBkZXJlZmVyZW5jZSBcXFwib3JpZ19kc3RcXFwiIG9uY2UgaXA2X3JvdXRlX2lucHV0KCkgb3JcXG4gNTY4OlxcdFxcdCAqIHNrYl9kc3RfZHJvcCgpIGlzIGNhbGxlZC4gSG93ZXZlciwgaW4gb3JkZXIgdG8gZGV0ZWN0IGEgZHN0IGxvb3AsIHdlXFxuIDU2OTpcXHRcXHQgKiBuZWVkIHRoZSBhZGRyZXNzIG9mIGl0cyBsd3RzdGF0ZS4gU28sIHNhdmUgdGhlIGFkZHJlc3Mgb2YgbHd0c3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MTguMzQ1MzI3OTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzE1NTY5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgc2VnNl9pcHR1bm5lbC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiBzb21lIGtleSBhc3BlY3RzLCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIG51YW5jZXMgb2YgdGhpcyBgc2VnNl9pcHR1bm5lbC5jYCBtb2R1bGUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgdHJhY2UgdGhyb3VnaCB0aGUgZW50aXJlIGNvZGUuIEkgd2FudCB0byBzZWUgKmFsbCogdGhlIG9wZXJhdGlvbnMgYW5kIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbi4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGZ1bmN0aW9uIG5hbWVzOyBpdCdzIGFib3V0IHNlZWluZyBob3cgdGhleSdyZSAqY29ubmVjdGVkKiwgaG93IHRoZSBkYXRhIGZsb3dzLCBhbmQgd2hlcmUgdGhlIGNyaXRpY2FsIGRlY2lzaW9ucyBhcmUgbWFkZSBpbiB0aGUgY29udHJvbCBhbmQgZGF0YSBwYXRocy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmFsIHZpZXcgc28gSSBkb24ndCBtaXNzIGFueXRoaW5nIHN1YnRsZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCBhbmQgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MjAuMDc2ODg3NDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHQgKiBub3cgYW5kIHVzZSBpdCBsYXRlciBhcyBhIGNvbXBhcmlzb24uXFxuIDU3MTpcXHRcXHQgKi9cXG4gNTcyOlxcdFxcdGx3dHN0ID0gb3JpZ19kc3QtXFx1MDAzZWx3dHN0YXRlO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobHd0c3QpO1xcbiA1NzU6XFx0XFxuIDU3NjpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIDU3NzpcXHRcXHRkc3QgPSBkc3RfY2FjaGVfZ2V0KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9pbnB1dCk7XFxuIDU3ODpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0ZXJyID0gc2VnNl9kb19zcmgoc2tiLCBkc3QpO1xcbiA1ODE6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4gNTgyOlxcdFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIDU4MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDU4NDpcXHRcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdGlmICh1bmxpa2VseSghZHN0KSkge1xcbiA1ODc6XFx0XFx0XFx0ZHN0ID0gc2VnNl9pbnB1dF9yb3V0ZShuZXQsIHNrYiwgc2x3dCk7XFxuIDU4ODpcXHRcXHRcXHRpZiAoIWRzdCkge1xcbiA1ODk6XFx0XFx0XFx0XFx0ZXJyID0gLUVORVRVTlJFQUNIO1xcbiA1OTA6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiA1OTE6XFx0XFx0XFx0fVxcbiA1OTI6XFx0XFxuIDU5MzpcXHRcXHRcXHQvKiBjYWNoZSBvbmx5IGlmIHdlIGRvbid0IGNyZWF0ZSBhIGRzdCByZWZlcmVuY2UgbG9vcCAqL1xcbiA1OTQ6XFx0XFx0XFx0aWYgKCFkc3QtXFx1MDAzZWVycm9yIFxcdTAwMjZcXHUwMDI2IGx3dHN0ICE9IGRzdC1cXHUwMDNlbHd0c3RhdGUpIHtcXG4gNTk1OlxcdFxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNTk2OlxcdFxcdFxcdFxcdGRzdF9jYWNoZV9zZXRfaXA2KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9pbnB1dCwgZHN0LFxcbiA1OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlc2FkZHIpO1xcbiA1OTg6XFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIDU5OTpcXHRcXHRcXHR9XFxuIDYwMDpcXHRcXG4gNjAxOlxcdFxcdFxcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIExMX1JFU0VSVkVEX1NQQUNFKGRzdF9kZXYoZHN0KSkpO1xcbiA2MDI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDYwMzpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDYwNDpcXHRcXHR9IGVsc2Uge1xcbiA2MDU6XFx0XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuIDYwNjpcXHRcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuIDYwNzpcXHRcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNjEwOlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9MT0NBTF9PVVQsXFxuIDYxMTpcXHRcXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgTlVMTCxcXG4gNjEyOlxcdFxcdFxcdFxcdCAgICAgICBza2JfZHN0X2Rldihza2IpLCBzZWc2X2lucHV0X2ZpbmlzaCk7XFxuIDYxMzpcXHRcXG4gNjE0OlxcdFxcdHJldHVybiBzZWc2X2lucHV0X2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4gNjE1OlxcdGRyb3A6XFxuIDYxNjpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNjE3OlxcdFxcdHJldHVybiBlcnI7XFxuIDYxODpcXHR9XFxuIDYxOTpcXHRcXG4gNjIwOlxcdHN0YXRpYyBpbnQgc2VnNl9pbnB1dF9uZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA2MjE6XFx0e1xcbiA2MjI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3RfZGV2KHNrYik7XFxuIDYyMzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDYyNjpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gNjI3OlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgTlVMTCxcXG4gNjI4OlxcdFxcdFxcdFxcdCAgICAgICBza2IsIE5VTEwsIGRldiwgc2VnNl9pbnB1dF9jb3JlKTtcXG4gNjI5OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuIDYzMDpcXHRcXHRcXHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIE5VTEwsXFxuIDYzMTpcXHRcXHRcXHRcXHQgICAgICAgc2tiLCBOVUxMLCBkZXYsIHNlZzZfaW5wdXRfY29yZSk7XFxuIDYzMjpcXHRcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2MzU6XFx0fVxcbiA2MzY6XFx0XFxuIDYzNzpcXHRzdGF0aWMgaW50IHNlZzZfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNjM4OlxcdHtcXG4gNjM5OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNjQwOlxcdFxcdFxcdHJldHVybiBzZWc2X2lucHV0X25mKHNrYik7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHJldHVybiBzZWc2X2lucHV0X2NvcmUoZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYik7XFxuIDY0MzpcXHR9XFxuIDY0NDpcXHRcXG4gNjQ1OlxcdC8qIGxvb2sgdXAgdGhlIHJvdXRlIGZvciB0aGUgZmlyc3QgU0lEIG9uIHRoZSBvdXRwdXQgcGF0aC4gQWx3YXlzIHJldHVybnMgYVxcbiA2NDY6XFx0ICogcmVmY291bnRlZCBkc3QuXFxuIDY0NzpcXHQgKi9cXG4gNjQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X291dHB1dF9kc3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2ICpmbDYsXFxuIDY1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QpXFxuIDY1MjpcXHR7XFxuIDY1MzpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdGlmIChzbHd0LVxcdTAwM2V0YWJsZSkge1xcbiA2NTY6XFx0XFx0XFx0ZHN0ID0gc2VnNl90YWJsZV9sb29rdXAobmV0LCBza2IsIGZsNiwgc2x3dC1cXHUwMDNldGFibGUpO1xcbiA2NTc6XFx0XFx0XFx0aWYgKCFkc3QpIHtcXG4gNjU4OlxcdFxcdFxcdFxcdGRzdCA9IFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LVxcdTAwM2Vkc3Q7XFxuIDY1OTpcXHRcXHRcXHRcXHRkc3RfaG9sZChkc3QpO1xcbiA2NjA6XFx0XFx0XFx0fVxcbiA2NjE6XFx0XFx0fSBlbHNlIHtcXG4gNjYyOlxcdFxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBmbDYpO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRcXHRyZXR1cm4gZHN0O1xcbiA2NjY6XFx0fVxcbiA2Njc6XFx0XFxuIDY2ODpcXHRzdGF0aWMgaW50IHNlZzZfb3V0cHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuIDY2OTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MjAuMDc2OTk4NDM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDI4MTc1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIERlZXAgaW50byBzZWc2X2lwdHVubmVsLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBrZWVwIHBsdWdnaW5nIGF3YXkgYXQgYHNlZzZfaXB0dW5uZWwuY2AuIEkgbmVlZCB0byBnZXQgYSBmdWxsIGhhbmRsZSBvbiB0aGlzIGNvZGUsIHNvIEknbSBnb2luZyB0byByZWFkIGl0IG1ldGhvZGljYWxseSwgcmlnaHQgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBObyBza2ltbWluZyBvciBqdW1waW5nIGFyb3VuZCBqdXN0IHlldDsgSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIHN0cnVjdHVyZSBhbmQgbG9naWMgZmxvdyBiZWZvcmUgSSBzdGFydCBwaW5wb2ludGluZyBzcGVjaWZpYyBhcmVhcyBvZiBpbnRlcmVzdCBvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtYXAgb2YgdGhpcyBtb2R1bGUuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB3aXRoaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjIxLjk3OTgxODg0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0e1xcbiA2NzE6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb3JpZ19kc3QgPSBza2JfZHN0KHNrYik7XFxuIDY3MjpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbiA2NzM6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0O1xcbiA2NzQ6XFx0XFx0aW50IGVycjtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0c2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKG9yaWdfZHN0LVxcdTAwM2Vsd3RzdGF0ZSk7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjc5OlxcdFxcdGRzdCA9IGRzdF9jYWNoZV9nZXQoXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX291dHB1dCk7XFxuIDY4MDpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0ZXJyID0gc2VnNl9kb19zcmgoc2tiLCBkc3QpO1xcbiA2ODM6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDY4NDpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY4NTpcXHRcXG4gNjg2OlxcdFxcdGlmICh1bmxpa2VseSghZHN0KSkge1xcbiA2ODc6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7XFxuIDY4ODpcXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcXG4gNjg5OlxcdFxcbiA2OTA6XFx0XFx0XFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXFx1MDAyNmZsNik7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdFxcdGRzdCA9IHNlZzZfb3V0cHV0X2RzdF9sb29rdXAobmV0LCBza2IsIFxcdTAwMjZmbDYsIHNsd3QpO1xcbiA2OTM6XFx0XFx0XFx0aWYgKGRzdC1cXHUwMDNlZXJyb3IpIHtcXG4gNjk0OlxcdFxcdFxcdFxcdGVyciA9IGRzdC1cXHUwMDNlZXJyb3I7XFxuIDY5NTpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY5NjpcXHRcXHRcXHR9XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdFxcdC8qIGNhY2hlIG9ubHkgaWYgd2UgZG9uJ3QgY3JlYXRlIGEgZHN0IHJlZmVyZW5jZSBsb29wICovXFxuIDY5OTpcXHRcXHRcXHRpZiAob3JpZ19kc3QtXFx1MDAzZWx3dHN0YXRlICE9IGRzdC1cXHUwMDNlbHd0c3RhdGUpIHtcXG4gNzAwOlxcdFxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNzAxOlxcdFxcdFxcdFxcdGRzdF9jYWNoZV9zZXRfaXA2KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9vdXRwdXQsIGRzdCwgXFx1MDAyNmZsNi5zYWRkcik7XFxuIDcwMjpcXHRcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAzOlxcdFxcdFxcdH1cXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UoZHN0X2Rldihkc3QpKSk7XFxuIDcwNjpcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gNzA3OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuIDcxMTpcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNzE0OlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9MT0NBTF9PVVQsIG5ldCwgc2ssIHNrYixcXG4gNzE1OlxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBkc3RfZGV2KGRzdCksIGRzdF9vdXRwdXQpO1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRcXHRyZXR1cm4gZHN0X291dHB1dChuZXQsIHNrLCBza2IpO1xcbiA3MTg6XFx0ZHJvcDpcXG4gNzE5OlxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIDcyMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNzIxOlxcdFxcdHJldHVybiBlcnI7XFxuIDcyMjpcXHR9XFxuIDcyMzpcXHRcXG4gNzI0OlxcdHN0YXRpYyBpbnQgc2VnNl9vdXRwdXRfbmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDcyNTpcXHR7XFxuIDcyNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiX2RzdF9kZXYoc2tiKTtcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDcyOTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gNzMwOlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG4gNzMxOlxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xcbiA3MzI6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4gNzMzOlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG4gNzM0OlxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xcbiA3MzU6XFx0XFx0fVxcbiA3MzY6XFx0XFxuIDczNzpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzM4OlxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0c3RhdGljIGludCBzZWc2X291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNzQxOlxcdHtcXG4gNzQyOlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNzQzOlxcdFxcdFxcdHJldHVybiBzZWc2X291dHB1dF9uZihuZXQsIHNrLCBza2IpO1xcbiA3NDQ6XFx0XFxuIDc0NTpcXHRcXHRyZXR1cm4gc2VnNl9vdXRwdXRfY29yZShuZXQsIHNrLCBza2IpO1xcbiA3NDY6XFx0fVxcbiA3NDc6XFx0XFxuIDc0ODpcXHRzdGF0aWMgaW50IHNlZzZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuIDc0OTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxcbiA3NTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxcbiA3NTE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNzUyOlxcdHtcXG4gNzUzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1NFRzZfSVBUVU5ORUxfTUFYICsgMV07XFxuIDc1NDpcXHRcXHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbztcXG4gNzU1OlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3dHM7XFxuIDc1NjpcXHRcXHRpbnQgdHVuaW5mb19sZW4sIG1pbl9zaXplO1xcbiA3NTc6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0O1xcbiA3NTg6XFx0XFx0aW50IGVycjtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0aWYgKGZhbWlseSAhPSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2IGZhbWlseSAhPSBBRl9JTkVUNilcXG4gNzYxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFNFRzZfSVBUVU5ORUxfTUFYLCBubGEsXFxuIDc2NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHNlZzZfaXB0dW5uZWxfcG9saWN5LCBleHRhY2spO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNzY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc2ODpcXHRcXG4gNzY5OlxcdFxcdGlmICghdGJbU0VHNl9JUFRVTk5FTF9TUkhdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToyMS45Nzk5Mjk1NzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3NDY5MTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzIGluIGBzZWc2X2lwdHVubmVsLmNgKipcblxuQWxyaWdodCwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2lwdHVubmVsLmNgIGZpbGUuIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5LCBidXQgbm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSAqaG93KiB0aGlzIG1vZHVsZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4ndCBqdXN0IHN0b3AgYXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGFwYXRoLiBUaGUgcmVnaXN0cmF0aW9uIGRldGFpbHMgYXJlICpjcml0aWNhbCogZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBlc3BlY2lhbGx5IGluIGEgaGVhdmlseSBpbnRlZ3JhdGVkIGFyZWEgbGlrZSB0aGlzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zLCBob29rcywgYW5kIGNhbGxiYWNrcy4gU28sIEkgbmVlZCB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgY29kZS4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/IFdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgcG9wdWxhdGVkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSByZWdpc3RyYXRpb24gZmxhZ3MgdXNlZD8gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGFuZCBpbnRlcmFjdGlvbiBvZiBgc2VnNl9pcHR1bm5lbGAgd2l0aCB0aGUga2VybmVsLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQncyBzZWUgaG93IHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBwbHVncyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjI0LjI1NDYyMzY3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdHR1bmluZm8gPSBubGFfZGF0YSh0YltTRUc2X0lQVFVOTkVMX1NSSF0pO1xcbiA3NzM6XFx0XFx0dHVuaW5mb19sZW4gPSBubGFfbGVuKHRiW1NFRzZfSVBUVU5ORUxfU1JIXSk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdC8qIHR1bmluZm8gbXVzdCBjb250YWluIGF0IGxlYXN0IHRoZSBpcHR1bm5lbCBlbmNhcCBzdHJ1Y3R1cmUsXFxuIDc3NjpcXHRcXHQgKiB0aGUgU1JIIGFuZCBvbmUgc2VnbWVudFxcbiA3Nzc6XFx0XFx0ICovXFxuIDc3ODpcXHRcXHRtaW5fc2l6ZSA9IHNpemVvZigqdHVuaW5mbykgKyBzaXplb2Yoc3RydWN0IGlwdjZfc3JfaGRyKSArXFxuIDc3OTpcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTtcXG4gNzgwOlxcdFxcdGlmICh0dW5pbmZvX2xlbiBcXHUwMDNjIG1pbl9zaXplKVxcbiA3ODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdHN3aXRjaCAodHVuaW5mby1cXHUwMDNlbW9kZSkge1xcbiA3ODQ6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfSU5MSU5FOlxcbiA3ODU6XFx0XFx0XFx0aWYgKGZhbWlseSAhPSBBRl9JTkVUNilcXG4gNzg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRcXHRpZiAodGJbU0VHNl9JUFRVTk5FTF9TUkNdKSB7XFxuIDc4OTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbmNvbXBhdGlibGUgbW9kZSBmb3IgdHVuc3JjXFxcIik7XFxuIDc5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzkxOlxcdFxcdFxcdH1cXG4gNzkyOlxcdFxcdFxcdGJyZWFrO1xcbiA3OTM6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfRU5DQVA6XFxuIDc5NDpcXHRcXHRcXHRicmVhaztcXG4gNzk1OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVA6XFxuIDc5NjpcXHRcXHRcXHRicmVhaztcXG4gNzk3OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0VOQ0FQX1JFRDpcXG4gNzk4OlxcdFxcdFxcdGJyZWFrO1xcbiA3OTk6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRUQ6XFxuIDgwMDpcXHRcXHRcXHRicmVhaztcXG4gODAxOlxcdFxcdGRlZmF1bHQ6XFxuIDgwMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODAzOlxcdFxcdH1cXG4gODA0OlxcdFxcbiA4MDU6XFx0XFx0LyogdmVyaWZ5IHRoYXQgU1JIIGlzIGNvbnNpc3RlbnQgKi9cXG4gODA2OlxcdFxcdGlmICghc2VnNl92YWxpZGF0ZV9zcmgodHVuaW5mby1cXHUwMDNlc3JoLCB0dW5pbmZvX2xlbiAtIHNpemVvZigqdHVuaW5mbyksIGZhbHNlKSlcXG4gODA3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHR1bmluZm9fbGVuICsgc2l6ZW9mKCpzbHd0KSk7XFxuIDgxMDpcXHRcXHRpZiAoIW5ld3RzKVxcbiA4MTE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdHNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChuZXd0cyk7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdGVyciA9IGRzdF9jYWNoZV9pbml0KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9pbnB1dCwgR0ZQX0FUT01JQyk7XFxuIDgxNjpcXHRcXHRpZiAoZXJyKVxcbiA4MTc6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9uZXd0cztcXG4gODE4OlxcdFxcbiA4MTk6XFx0XFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX291dHB1dCwgR0ZQX0FUT01JQyk7XFxuIDgyMDpcXHRcXHRpZiAoZXJyKVxcbiA4MjE6XFx0XFx0XFx0Z290byBlcnJfZGVzdHJveV9pbnB1dDtcXG4gODIyOlxcdFxcbiA4MjM6XFx0XFx0bWVtY3B5KFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5pbmZvLCB0dW5pbmZvLCB0dW5pbmZvX2xlbik7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdGlmICh0YltTRUc2X0lQVFVOTkVMX1NSQ10pIHtcXG4gODI2OlxcdFxcdFxcdHNsd3QtXFx1MDAzZXR1bnNyYyA9IG5sYV9nZXRfaW42X2FkZHIodGJbU0VHNl9JUFRVTk5FTF9TUkNdKTtcXG4gODI3OlxcdFxcbiA4Mjg6XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl9hbnkoXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYykgfHxcXG4gODI5OlxcdFxcdFxcdCAgICBpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpIHx8XFxuIDgzMDpcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2xvb3BiYWNrKFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpKSB7XFxuIDgzMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbnZhbGlkIHR1bnNyYyBhZGRyZXNzXFxcIik7XFxuIDgzMjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MzM6XFx0XFx0XFx0XFx0Z290byBlcnJfZGVzdHJveV9vdXRwdXQ7XFxuIDgzNDpcXHRcXHRcXHR9XFxuIDgzNTpcXHRcXHR9XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGlmICh0YltTRUc2X0lQVFVOTkVMX1RBQkxFXSkge1xcbiA4Mzg6XFx0XFx0XFx0c2x3dC1cXHUwMDNldGFibGUgPSBubGFfZ2V0X3UzMih0YltTRUc2X0lQVFVOTkVMX1RBQkxFXSk7XFxuIDgzOTpcXHRcXHRcXHRpZiAoIXNsd3QtXFx1MDAzZXRhYmxlKSB7XFxuIDg0MDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbnZhbGlkIGxvb2t1cCB0YWJsZVxcXCIpO1xcbiA4NDE6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gODQyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfb3V0cHV0O1xcbiA4NDM6XFx0XFx0XFx0fVxcbiA4NDQ6XFx0XFx0fVxcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRuZXd0cy1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX1NFRzY7XFxuIDg0NzpcXHRcXHRuZXd0cy1cXHUwMDNlZmxhZ3MgfD0gTFdUVU5ORUxfU1RBVEVfSU5QVVRfUkVESVJFQ1Q7XFxuIDg0ODpcXHRcXG4gODQ5OlxcdFxcdGlmICh0dW5pbmZvLVxcdTAwM2Vtb2RlICE9IFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQIFxcdTAwMjZcXHUwMDI2XFxuIDg1MDpcXHRcXHQgICAgdHVuaW5mby1cXHUwMDNlbW9kZSAhPSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRUQpXFxuIDg1MTpcXHRcXHRcXHRuZXd0cy1cXHUwMDNlZmxhZ3MgfD0gTFdUVU5ORUxfU1RBVEVfT1VUUFVUX1JFRElSRUNUO1xcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRuZXd0cy1cXHUwMDNlaGVhZHJvb20gPSBzZWc2X2x3dF9oZWFkcm9vbSh0dW5pbmZvKTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0KnRzID0gbmV3dHM7XFxuIDg1NjpcXHRcXG4gODU3OlxcdFxcdHJldHVybiAwO1xcbiA4NTg6XFx0XFxuIDg1OTpcXHRlcnJfZGVzdHJveV9vdXRwdXQ6XFxuIDg2MDpcXHRcXHRkc3RfY2FjaGVfZGVzdHJveShcXHUwMDI2c2x3dC1cXHUwMDNlY2FjaGVfb3V0cHV0KTtcXG4gODYxOlxcdGVycl9kZXN0cm95X2lucHV0OlxcbiA4NjI6XFx0XFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX2lucHV0KTtcXG4gODYzOlxcdGVycl9mcmVlX25ld3RzOlxcbiA4NjQ6XFx0XFx0a2ZyZWUobmV3dHMpO1xcbiA4NjU6XFx0XFx0cmV0dXJuIGVycjtcXG4gODY2OlxcdH1cXG4gODY3OlxcdFxcbiA4Njg6XFx0c3RhdGljIHZvaWQgc2VnNl9kZXN0cm95X3N0YXRlKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxcbiA4Njk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToyNC4yNTQ3NDM3ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxOTkyMDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2VnNl9pcHR1bm5lbC5jYCBTb3VyY2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIGBzZWc2X2lwdHVubmVsLmNgLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMg4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gVW5kZXJzdGFuZGluZyB0aGVzZSBpcyBjcnVjaWFsIHRvIHNlZSBob3cgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzIGFuZCBob3cgaXQncyBpbml0aWFsaXplZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhcyB3ZWxsLiBLbm93aW5nIGhvdyB0aGUgbW9kdWxlIHNldHMgaXRzZWxmIHVwIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwIGl0cyBydW50aW1lIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uIFVsdGltYXRlbHksIGdldHRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBnaXZlcyB0aGUgZ3JlYXRlc3QgaW5zaWdodHMgb24gcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToyNS45NzQ2NjYyNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobHd0KTtcXG4gODcxOlxcdFxcbiA4NzI6XFx0XFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX2lucHV0KTtcXG4gODczOlxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9vdXRwdXQpO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW50IHNlZzZfZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuIDg3NzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxcbiA4Nzg6XFx0e1xcbiA4Nzk6XFx0XFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKnR1bmluZm8gPSBzZWc2X2VuY2FwX2x3dHVubmVsKGx3dHN0YXRlKTtcXG4gODgwOlxcdFxcdHN0cnVjdCBzZWc2X2x3dCAqc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGx3dHN0YXRlKTtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0aWYgKG5sYV9wdXRfc3JoKHNrYiwgU0VHNl9JUFRVTk5FTF9TUkgsIHR1bmluZm8pKVxcbiA4ODM6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0aWYgKCFpcHY2X2FkZHJfYW55KFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpIFxcdTAwMjZcXHUwMDI2XFxuIDg4NjpcXHRcXHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIFNFRzZfSVBUVU5ORUxfU1JDLCBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKSlcXG4gODg3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDg4ODpcXHRcXG4gODg5OlxcdFxcdGlmIChzbHd0LVxcdTAwM2V0YWJsZSBcXHUwMDI2XFx1MDAyNlxcbiA4OTA6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgU0VHNl9JUFRVTk5FTF9UQUJMRSwgc2x3dC1cXHUwMDNldGFibGUpKVxcbiA4OTE6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0cmV0dXJuIDA7XFxuIDg5NDpcXHR9XFxuIDg5NTpcXHRcXG4gODk2OlxcdHN0YXRpYyBpbnQgc2VnNl9lbmNhcF9ubHNpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcXG4gODk3OlxcdHtcXG4gODk4OlxcdFxcdHN0cnVjdCBzZWc2X2lwdHVubmVsX2VuY2FwICp0dW5pbmZvID0gc2VnNl9lbmNhcF9sd3R1bm5lbChsd3RzdGF0ZSk7XFxuIDg5OTpcXHRcXHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChsd3RzdGF0ZSk7XFxuIDkwMDpcXHRcXHRpbnQgbmxzaXplO1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRcXHRubHNpemUgPSBubGFfdG90YWxfc2l6ZShTRUc2X0lQVFVOX0VOQ0FQX1NJWkUodHVuaW5mbykpO1xcbiA5MDM6XFx0XFxuIDkwNDpcXHRcXHRpZiAoIWlwdjZfYWRkcl9hbnkoXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYykpXFxuIDkwNTpcXHRcXHRcXHRubHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHNsd3QtXFx1MDAzZXR1bnNyYykpO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRpZiAoc2x3dC1cXHUwMDNldGFibGUpXFxuIDkwODpcXHRcXHRcXHRubHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbiA5MDk6XFx0XFxuIDkxMDpcXHRcXHRyZXR1cm4gbmxzaXplO1xcbiA5MTE6XFx0fVxcbiA5MTI6XFx0XFxuIDkxMzpcXHRzdGF0aWMgaW50IHNlZzZfZW5jYXBfY21wKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxcbiA5MTQ6XFx0e1xcbiA5MTU6XFx0XFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKmFfaGRyID0gc2VnNl9lbmNhcF9sd3R1bm5lbChhKTtcXG4gOTE2OlxcdFxcdHN0cnVjdCBzZWc2X2lwdHVubmVsX2VuY2FwICpiX2hkciA9IHNlZzZfZW5jYXBfbHd0dW5uZWwoYik7XFxuIDkxNzpcXHRcXHRzdHJ1Y3Qgc2VnNl9sd3QgKmFfc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGEpO1xcbiA5MTg6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpiX3Nsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChiKTtcXG4gOTE5OlxcdFxcdGludCBsZW4gPSBTRUc2X0lQVFVOX0VOQ0FQX1NJWkUoYV9oZHIpO1xcbiA5MjA6XFx0XFxuIDkyMTpcXHRcXHRpZiAobGVuICE9IFNFRzZfSVBUVU5fRU5DQVBfU0laRShiX2hkcikpXFxuIDkyMjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0aWYgKCFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmFfc2x3dC1cXHUwMDNldHVuc3JjLCBcXHUwMDI2Yl9zbHd0LVxcdTAwM2V0dW5zcmMpKVxcbiA5MjU6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGlmIChhX3Nsd3QtXFx1MDAzZXRhYmxlICE9IGJfc2x3dC1cXHUwMDNldGFibGUpXFxuIDkyODpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gOTI5OlxcdFxcbiA5MzA6XFx0XFx0cmV0dXJuIG1lbWNtcChhX2hkciwgYl9oZHIsIGxlbik7XFxuIDkzMTpcXHR9XFxuIDkzMjpcXHRcXG4gOTMzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfaXB0dW5fb3BzID0ge1xcbiA5MzQ6XFx0XFx0LmJ1aWxkX3N0YXRlID0gc2VnNl9idWlsZF9zdGF0ZSxcXG4gOTM1OlxcdFxcdC5kZXN0cm95X3N0YXRlID0gc2VnNl9kZXN0cm95X3N0YXRlLFxcbiA5MzY6XFx0XFx0Lm91dHB1dCA9IHNlZzZfb3V0cHV0LFxcbiA5Mzc6XFx0XFx0LmlucHV0ID0gc2VnNl9pbnB1dCxcXG4gOTM4OlxcdFxcdC5maWxsX2VuY2FwID0gc2VnNl9maWxsX2VuY2FwX2luZm8sXFxuIDkzOTpcXHRcXHQuZ2V0X2VuY2FwX3NpemUgPSBzZWc2X2VuY2FwX25sc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MjUuOTc0Nzc4NTkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMjgxMTc5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBhdCBsaW5lIDk0MCwgaHVoPyBSaWdodC4gVGhlIGNvbnRleHQgYXJvdW5kIGhlcmUgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGdldCBhIHNlbnNlIG9mIHdoYXQncyBoYXBwZW5pbmcgYmV5b25kIHRoaXMgaW1tZWRpYXRlIHNuaXBwZXQuICpXaGF0J3MqIHRoZSByZWxldmFudCBsb2dpYywgdGhlIHBvdGVudGlhbCBjb250cm9sIGZsb3c/IEhvbmVzdGx5LCBJ4oCZbSBnZXR0aW5nIGEgYml0IGltcGF0aWVudCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIG5leHQgaW4gdGhlIGNvZGUuIExldCdzIHNjcm9sbCBkb3duLCBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlJ3MgYWN0aW5nIGFuZCBmaWd1cmUgb3V0IHdoYXQgaXQncyBzdXBwb3NlZCB0byBkbywgb3Igd2hhdCBpdCAqaXNuJ3QqLiBJIG5lZWQgdG8gc2VlIHdoYXQgY29tZXMgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjI4LjAwMjg5OTYxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdFxcdC5jbXBfZW5jYXAgPSBzZWc2X2VuY2FwX2NtcCxcXG4gOTQxOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiA5NDI6XFx0fTtcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0aW50IF9faW5pdCBzZWc2X2lwdHVubmVsX2luaXQodm9pZClcXG4gOTQ1OlxcdHtcXG4gOTQ2OlxcdFxcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XFxuIDk0NzpcXHR9XFxuIDk0ODpcXHRcXG4gOTQ5OlxcdHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpXFxuIDk1MDpcXHR7XFxuIDk1MTpcXHRcXHRsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XFxuIDk1MjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjI4LjAwMzAxOTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMjIyMTI4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTUnY2IExpZ2h0d2VpZ2h0IFR1bm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYHNlZzZfZG9fc3JoYCB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY2AsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBTRUc2X0lQVFVOX01PREVfTDJFTkNBUGAgYW5kIGBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRURgIGNhc2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyB0aGUgdW5jb25kaXRpb25hbCBgcHNrYl9leHBhbmRfaGVhZGAgY2FsbCB3aXRoIGBza2JfY293X2hlYWRgLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudDsgdGhlIGZvcm1lciB1bm5lY2Vzc2FyaWx5IGV4cGFuZHMgaGVhZHJvb20sIHdoaWxlIHRoZSBsYXR0ZXIgaW50ZWxsaWdlbnRseSBleHBhbmRzIG9ubHkgaWYgdGhlIGhlYWQgaXMgc2hhcmVkIG9yIGluc3VmZmljaWVudC4gVGhpcyBpcyBjb3JlIFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIHByb2Nlc3NpbmcsIGFuZCBpdCdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbGx5IHNvdW5kLiBUaGUgcGF0aCBpcyB3ZWxsLWRlZmluZWQgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29uZmlncyB2aWEgYGlwIHJvdXRlYCBvciBuZXRsaW5rIGFyZSB0aGUgd2F5IGluLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHByZXJlcXVpc2l0ZXMuIEV4YW1pbmluZyBgbmV0L2lwdjYvTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYHNlZzZfaXB0dW5uZWwub2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgaXMgc2V0LCBhbmQgdGhlIGBLY29uZmlnYCByZXZlYWxzIHRoYXQgYElQVjZfU0VHNl9MV1RVTk5FTGAgcmVxdWlyZXMgYElQVjZgIHRvIGJlIGVuYWJsZWQuIFNvLCB3ZSdyZSBkZWFsaW5nIHdpdGggYElQVjZgIGFuZCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhcyBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIEkgd2lsbCBrZWVwIGFuIGV5ZSBvbiBgSVBWNl9TRUc2X0hNQUNgLCBhbHRob3VnaCB0aGUgZm9jdXMgaXMgb24gdGhlIFNSdjYgdHVubmVsIGVuY2Fwc3VsYXRpb24gaXRzZWxmLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnlwb2ludHMgaGVyZS4gSW4gYHNlZzZfaXB0dW5uZWwuY2AgaXRzZWxmLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgbm9uLWhvdC1wYXRoIEFQSSBlbnRyaWVzOiBgc2VnNl9pbnB1dGAgKGNhbGxlZCB2aWEgdGhlIGx3dHVubmVsIG9wcyBgaW5wdXRgKSwgYHNlZzZfb3V0cHV0YCAobHd0dW5uZWwgb3BzIGBvdXRwdXRgKSwgYHNlZzZfYnVpbGRfc3RhdGVgIChuZXRsaW5rL2x3dHVubmVsIGBidWlsZF9zdGF0ZWApLCBgc2VnNl9kb19zcmhfaW5saW5lYCAod2hpY2ggaXMgZXhwb3J0ZWQpLCBhbmQgYHNlZzZfaXB0dW5uZWxfaW5pdGAuIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgc2VnNl9pbnB1dGAsIGBzZWc2X291dHB1dGAsIGFuZCBgc2VnNl9idWlsZF9zdGF0ZWAgYXJlIG5vdCBzdGF0aWMsIG9yIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQsIG5vbi1zdGF0aWMsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNlZzYgZmFtaWx5IG9mIGZpbGVzLiBJbiB0aGUga2VybmVsLCBpdOKAmXMgcmFyZSBmb3Igc3RhdGljIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIChsaWtlIHRoZSBzZWc2XyogZnVuY3Rpb25zKSB0byBiZSBpbmxpbmVkIHVubGVzcyB0aGUgY29tcGlsZXIgaXMgdW5kZXIgZXh0cmVtZSBwcmVzc3VyZSB0byBvcHRpbWl6ZS4gVGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBmb3IgYHNlZzZfaXB0dW5fb3BzYCwgc28gdGhlIGNvbXBpbGVyICpzaG91bGQqIHJldGFpbiB0aGUgc3ltYm9scy4gTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBvdGhlciBgbmV0L2lwdjYvc2VnNiouY2AgZmlsZXMganVzdCB0byBiZSBzdXJlLCBhbmQgdmVyaWZ5IHRob3NlIHN5bWJvbHMgYXJlIGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzQuMjI1MjM2MjUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMyMTMzNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzQuMjc1NTY5Mjc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDAyMzQ1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgU2VnbWVudCBSb3V0aW5nIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYgKFNSdjYpIGltcGxlbWVudGF0aW9uLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvcmUgY29kZSwgcGFydGljdWxhcmx5IGBuZXQvaXB2Ni9zZWc2LmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBTUnY2IGxvZ2ljIHNob3VsZCByZXNpZGUsIGhhbmRsaW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBPZiBjb3Vyc2UsIGdpdmVuIHRoZSBuYXR1cmUgb2YgSVB2NiBhbmQgaXRzIGZsZXhpYmlsaXR5LCB0aGUgaW1wbGVtZW50YXRpb24gY291bGQgYmUgc3ByZWFkIG91dC4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uICpvdGhlciogZmlsZXMgd2l0aGluIHRoZSBgbmV0L2lwdjYvYCBkaXJlY3RvcnkgYXMgd2VsbC4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlZmluZWQgZWxzZXdoZXJlLCBwb3RlbnRpYWxseSBpbiBmaWxlcyBsaWtlIHRob3NlIHJlbGF0ZWQgdG8gcm91dGluZyBoZWFkZXJzLCBleHRlbnNpb24gaGVhZGVycywgb3IgZXZlbiB0aGUgSVB2NiBwcm90b2NvbCBpdHNlbGYuIEkgc2hvdWxkIGJlIHByZXBhcmVkIHRvIHRyYWNlIGZ1bmN0aW9uIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgY29tcG9uZW50cyB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQncyBzdGFydCB3aXRoIGBzZWc2LmNgIGFuZCBzZWUgd2hlcmUgaXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzYuNDE1ODA2OTE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUzODAwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzZWc2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfaG1hYy5jPTEwMD1pbnQgc2VnNl9obWFjX2NvbXB1dGUoc3RydWN0IHNlZzZfaG1hY19pbmZvICpoaW5mbywgc3RydWN0IGlwdjZfc3JfaGRyICpoZHIsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0xNjgtfVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjE2OTpFWFBPUlRfU1lNQk9MKHNlZzZfaG1hY19jb21wdXRlKTtcXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0xNzAtXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYz0xNzY9Ym9vbCBzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMjAtfVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjIyMTpFWFBPUlRfU1lNQk9MKHNlZzZfaG1hY192YWxpZGF0ZV9za2IpO1xcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTIyMi1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTIyND1zdHJ1Y3Qgc2VnNl9obWFjX2luZm8gKnNlZzZfaG1hY19pbmZvX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBrZXkpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMzItfVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjIzMzpFWFBPUlRfU1lNQk9MKHNlZzZfaG1hY19pbmZvX2xvb2t1cCk7XFxubmV0L2lwdjYvc2VnNl9obWFjLmMtMjM0LVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTIzNT1pbnQgc2VnNl9obWFjX2luZm9fYWRkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSwgc3RydWN0IHNlZzZfaG1hY19pbmZvICpoaW5mbylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI1Ny19XFxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjU4OkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fYWRkKTtcXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yNTktXFxubmV0L2lwdjYvc2VnNl9obWFjLmM9MjYwPWludCBzZWc2X2htYWNfaW5mb19kZWwoc3RydWN0IG5ldCAqbmV0LCB1MzIga2V5KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9obWFjLmMtMjc5LX1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYzoyODA6RVhQT1JUX1NZTUJPTChzZWc2X2htYWNfaW5mb19kZWwpO1xcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI4MS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYz0yODI9aW50IHNlZzZfcHVzaF9obWFjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGluNl9hZGRyICpzYWRkcixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMwNS19XFxubmV0L2lwdjYvc2VnNl9obWFjLmM6MzA2OkVYUE9SVF9TWU1CT0woc2VnNl9wdXNoX2htYWMpO1xcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMwNy1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTMxNT12b2lkIF9fbmV0X2V4aXQgc2VnNl9obWFjX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMyMC19XFxubmV0L2lwdjYvc2VnNl9obWFjLmM6MzIxOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX25ldF9leGl0KTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMTg9aW50IHNlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIyMS19XFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIyMjpFWFBPUlRfU1lNQk9MX0dQTChzZWc2X2RvX3NyaF9lbmNhcCk7XFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIyMy1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz00Nzk9aW50IHNlZzZfZG9fc3JoX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDgyLX1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6NDgzOkVYUE9SVF9TWU1CT0xfR1BMKHNlZzZfZG9fc3JoX2lubGluZSk7XFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTQ4NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzYuNDYyMzUwNDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMDkyOTg1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzZWc2X2lwdHVubmVsLmNgIE1vZHVsZSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBvZiBgc2VnNl9pcHR1bm5lbC5jYCByZXZlYWxzIHNvbWUga2V5IGZ1bmN0aW9uczogYHNlZzZfZG9fc3JoX2VuY2FwYCwgYHNlZzZfZG9fc3JoX2lubGluZWAsIGBzZWc2X2J1aWxkX3N0YXRlYCwgYHNlZzZfaW5wdXRgLCBhbmQgYHNlZzZfb3V0cHV0YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaGFuZGxpbmcgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2Nikgd2l0aGluIHRoZSBsaWdodHdlaWdodCB0dW5uZWwgZnVuY3Rpb25hbGl0eS4gSSdtIGFzc3VtaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIFNSdjYgY29udGV4dC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBUaGUgcHJlc2VuY2Ugb2YgYElQVjZgIGFuZCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyBleHBlY3RlZC4gVGhpcyBjb25maXJtcyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBhdmFpbGFibGUuXG5cblRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgcGF0Y2ggZml4aW5nIHRoZSBidWZmZXIgaGFuZGxpbmcgaW4gYHNlZzZfZG9fc3JoYCDigJMgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgZnJvbSBgcHNrYl9leHBhbmRfaGVhZGAgdG8gYHNrYl9jb3dfaGVhZGAuIFRoYXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiB3aGVyZSB5b3UgY2FuIGdldCBpbnRvIHRyb3VibGUgd2l0aCBidWZmZXIgb3ZlcmZsb3dzIGFuZCBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyBkaXJlY3RseSB0b3VjaGVzIGRhdGEgcGF0aCBwYWNrZXQgcHJvY2Vzc2luZywgd2hpY2ggbWFrZXMgaXQgYWJzb2x1dGVseSBwcmltZSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGlzIGluIFNSdjYgTDJFTkNBUCBtb2RlIGFuZCB0ZXN0YWJsZSB3aXRoIHN0YW5kYXJkIG5ldHdvcmsgdG9vbHMgKHNvY2tldHMsIG5ldGxpbmspIGFuZCBzaW11bGF0aW9uIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIHNlYWxzIHRoZSBkZWFsLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBoZXJlLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBzdWJ0bGUsIGhhcmQtdG8tZmluZCBidWdzIHRoYXQgZnV6emluZyB3aWxsIGV4cG9zZS5cblxuU28sIG15IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gdGhvc2UgXCJGb2N1c1N5bWJvbHNcIiDigJMgYWxsIHRob3NlIGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUsIGJ1dCBlc3BlY2lhbGx5IGBzZWc2X2RvX3NyaF9lbmNhcGAgYW5kIGBzZWc2X2RvX3NyaF9pbmxpbmVgIGR1ZSB0byB0aGUgYnVmZmVyIGhhbmRsaW5nIGNoYW5nZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGlucHV0IGZvcm1hdHMgSSBmZWVkIHRoZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyB0aGUgb3V0cHV0IGdlbmVyYXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIHNhbml0eSBjaGVjayBvbiBzZXQtcmVzdWx0cyBjYWxscy4gSSdtIGltYWdpbmluZyBhIGZ1enplciB0aGF0IGNhbiBjcmFmdCBTUnY2IHBhY2tldHMgd2l0aCB2YXJpb3VzIHNlZ21lbnQgbGlzdHMgYW5kIGVuY2Fwc3VsYXRpb24gb3B0aW9ucywgdGhlbiBtb25pdG9yIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlc2UgcGFja2V0cy4gVGhlIGdvYWwgaXMgdG8gdHJpZ2dlciB0aG9zZSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDA1LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MTo0MC42NzE2NTMyMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5MDM2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfZG9fc3JoX2VuY2FwXCIsXG4gICAgXCJzZWc2X2RvX3NyaF9pbmxpbmVcIixcbiAgICBcInNlZzZfYnVpbGRfc3RhdGVcIixcbiAgICBcInNlZzZfaW5wdXRcIixcbiAgICBcInNlZzZfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcHNrYl9leHBhbmRfaGVhZCB3aXRoIHNrYl9jb3dfaGVhZCBpbiBzZWc2X2RvX3NyaCB3aGVuIHByb2Nlc3NpbmcgU1J2NiBMMiBlbmNhcHN1bGF0aW9uIG1vZGVzLCBlbnN1cmluZyB0aGUgc2tiIGhlYWQgaXMgcHJvcGVybHkgdW5zaGFyZWQgYW5kIGV4cGFuZGVkIGFzIHJlcXVpcmVkLiBUaGlzIHRvdWNoZXMgdGhlIHJlYWNoYWJsZSBJUHY2IFNlZ21lbnQgUm91dGluZyBsaWdodHdlaWdodCB0dW5uZWwgZGF0YXBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfZG9fc3JoX2VuY2FwXCIsXG4gICAgXCJzZWc2X2RvX3NyaF9pbmxpbmVcIixcbiAgICBcInNlZzZfYnVpbGRfc3RhdGVcIixcbiAgICBcInNlZzZfaW5wdXRcIixcbiAgICBcInNlZzZfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcHNrYl9leHBhbmRfaGVhZCB3aXRoIHNrYl9jb3dfaGVhZCBpbiBzZWc2X2RvX3NyaCB3aGVuIHByb2Nlc3NpbmcgU1J2NiBMMiBlbmNhcHN1bGF0aW9uIG1vZGVzLCBlbnN1cmluZyB0aGUgc2tiIGhlYWQgaXMgcHJvcGVybHkgdW5zaGFyZWQgYW5kIGV4cGFuZGVkIGFzIHJlcXVpcmVkLiBUaGlzIHRvdWNoZXMgdGhlIHJlYWNoYWJsZSBJUHY2IFNlZ21lbnQgUm91dGluZyBsaWdodHdlaWdodCB0dW5uZWwgZGF0YXBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MTo0MC43ODM1NjY1NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU3MzkwMzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6NDAuNzg0MTIzMjU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE3NTY4MjkzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcxNzk2N2ZjYmQ3YmJlMWQ3N2QzNzA3YTlkNjg2MDcyMDQ1NjY3ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjQxOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jIGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG5pbmRleCA2MWM2YTI3YmYyMDJkLi5hNjU1NmVmZDhlMGIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG4rKysgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbkBAIC00NDYsOCArNDQ2LDkgQEAgc3RhdGljIGludCBzZWc2X2RvX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpjYWNoZV9kc3QpXG4gXHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0XHRza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6NDAuNzg0MTI0MjU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNDYyMDM2ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipBbmFseXppbmcgYW5kIENvbnRleHR1YWxpemluZyB0aGUgUGF0Y2gqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMuIEZpcnN0LCBJIHdhbnQgdG8gcHJvcGVybHkgYW5hbHl6ZSB0aGUgcGF0Y2ggaXRzZWxmLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gSXMgdGhpcyBhIGZpeCwgYSBmZWF0dXJlLCBhbiBvcHRpbWl6YXRpb24/IFdoYXQncyB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlP1xuXG5UbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwbGFjZSB0byBzdGFydCBzZWVtcyB0byBiZSBgbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jYCBhcm91bmQgbGluZSA0NDYuIFRoYXQgYXJlYSBsaWtlbHkgaG9sZHMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBtb2RpZmljYXRpb24uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGF0IHNlY3Rpb24sIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3QuIEl0J3MgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjUzLjI0NjE2MzMxMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MjE6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXFxuIDQyNDpcXHRcXHRcXHRcXHRwcm90byA9IElQUFJPVE9fSVBWNjtcXG4gNDI1OlxcdFxcdFxcdGVsc2UgaWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxcbiA0MjY6XFx0XFx0XFx0XFx0cHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuIDQyNzpcXHRcXHRcXHRlbHNlXFxuIDQyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0XFx0aWYgKHRpbmZvLVxcdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9FTkNBUClcXG4gNDMxOlxcdFxcdFxcdFxcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cXHUwMDNlc3JoLCBwcm90byxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgY2FjaGVfZHN0LCBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDMzOlxcdFxcdFxcdGVsc2VcXG4gNDM0OlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsIHByb3RvLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNhY2hlX2RzdCwgXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYyk7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdFxcdGlmIChlcnIpXFxuIDQzODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcXG4gNDQxOlxcdFxcdFxcdHNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBza2ItXFx1MDAzZXByb3RvY29sKTtcXG4gNDQyOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gNDQzOlxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUDpcXG4gNDQ1OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEOlxcbiA0NDY6XFx0XFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDQ0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gNDUwOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiA0NTE6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0XFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xcbiA0NTQ6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBza2ItXFx1MDAzZW1hY19sZW4pO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRcXHRpZiAodGluZm8tXFx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVApXFxuIDQ1NzpcXHRcXHRcXHRcXHRlcnIgPSBfX3NlZzZfZG9fc3JoX2VuY2FwKHNrYiwgdGluZm8tXFx1MDAzZXNyaCxcXG4gNDU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDYwOlxcdFxcdFxcdGVsc2VcXG4gNDYxOlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0NjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiA0Njk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjUzLjI0NjI3MDI1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDUyNjg4ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIZWFkcm9vbSBNYW5hZ2VtZW50IGluIFNLQnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBza2JfY293X2hlYWQoc2tiLCBza2ItXHUwMDNlbWFjX2xlbilgIGFuZCBgcHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKWAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBzZWVtcyB0byBoYXZlIGJlZW4gcmF0aGVyIHVuY29uZGl0aW9uYWwgYWJvdXQgZXhwYW5kaW5nIHRoZSBTS0IncyBoZWFkLCBvciBtYXliZSBpdCB3YXNuJ3QgdW5zaGFyaW5nIHRoZSBTS0IgaWYgaXQgd2FzIGFscmVhZHkgY2xvbmVkLCBldmVuIGlmIGV4cGFuc2lvbiB3YXNuJ3QgbmVjZXNzYXJ5LlxuXG5JIHNlZSB0aGF0IGBza2JfY293X2hlYWQoc2tiLCBkZWx0YSlgIGlzIG1vcmUgdGFyZ2V0ZWQuIEl0IHNlZW1zIHRvIGd1YXJhbnRlZSB0d28gdGhpbmdzOiBGaXJzdCwgaXQgKmVuc3VyZXMqIHRoZXJlJ3MgYXQgbGVhc3QgYGRlbHRhYCBieXRlcyBvZiBoZWFkcm9vbS4gU2Vjb25kLCBhbmQgY3J1Y2lhbGx5LCBpdCBtYWtlcyBzdXJlIHRoZSBoZWFkZXIgaXNuJ3Qgc2hhcmVkIG9yIGNsb25lZC4gSXQgZXNzZW50aWFsbHkgbWFrZXMgdGhlIFNLQidzIGhlYWRlciB3cml0YWJsZSBieSBlbnN1cmluZyBpdCBoYXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tLiBUaGlzIGlzIHRoZSBjb3JlIGRpZmZlcmVuY2UsIEkgYmVsaWV2ZS5cblxuSSBtaWdodCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgc2tiX2Nvd19oZWFkYCBpbXBsZW1lbnRhdGlvbiBvciBwZXJoYXBzIHRoZSBkZWZpbml0aW9ucyBpZiBJIG5lZWQgdG8gY2xhcmlmeSBhbnl0aGluZyBmdXJ0aGVyLCBidXQgdGhpcyBpcyB0aGUgZ2lzdCBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjU1LjY5ODk2NDAzOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTQ1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBpbnQgc2tiX2Nvd19oZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zOTIxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTM1LSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzkzNjpzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjU1Ljc0NjIyNDk0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI3MjgxNTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBza2J1ZmYuaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGBza2J1ZmZgIHN0cnVjdHVyZSDigJMgc3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSAzOTM2IGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgbGlrZWx5IHRvIGxvb2sgYXQgaG93IGRhdGEgaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUsIG1heWJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGZyYWdtZW50YXRpb24sIG9yIHBlcmhhcHMgc3BlY2lmaWMgZmxhZ3MgdGhhdCBjb250cm9sIHBhY2tldCBwcm9jZXNzaW5nLiBJJ20gZXhwZWN0aW5nIHNvbWUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgbWFjcm8gaW1wbGVtZW50YXRpb25zIGluIHRoYXQgdmljaW5pdHksIGFuZCBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlbSB3aXRoIGEgZmluZS10b290aCBjb21iLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBoZWxwcyBtZSByZXNvbHZlIHRoZSBjdXJyZW50IHByb2JsZW0gYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjU3LjU3MzUwOTMwN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTIwOlxcdCAqL1xcbjM5MjE6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuMzkyMjpcXHR7XFxuMzkyMzpcXHRcXHRyZXR1cm4gX19za2JfY293KHNrYiwgaGVhZHJvb20sIHNrYl9jbG9uZWQoc2tiKSk7XFxuMzkyNDpcXHR9XFxuMzkyNTpcXHRcXG4zOTI2OlxcdC8qKlxcbjM5Mjc6XFx0ICpcXHRza2JfY293X2hlYWQgLSBza2JfY293IGJ1dCBvbmx5IG1ha2luZyB0aGUgaGVhZCB3cml0YWJsZVxcbjM5Mjg6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gY293XFxuMzkyOTpcXHQgKlxcdEBoZWFkcm9vbTogbmVlZGVkIGhlYWRyb29tXFxuMzkzMDpcXHQgKlxcbjM5MzE6XFx0ICpcXHRUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBza2JfY293IGV4Y2VwdCB0aGF0IHdlIHJlcGxhY2UgdGhlXFxuMzkzMjpcXHQgKlxcdHNrYl9jbG9uZWQgY2hlY2sgYnkgc2tiX2hlYWRlcl9jbG9uZWQuICBJdCBzaG91bGQgYmUgdXNlZCB3aGVuXFxuMzkzMzpcXHQgKlxcdHlvdSBvbmx5IG5lZWQgdG8gcHVzaCBvbiBzb21lIGhlYWRlciBhbmQgZG8gbm90IG5lZWQgdG8gbW9kaWZ5XFxuMzkzNDpcXHQgKlxcdHRoZSBkYXRhLlxcbjM5MzU6XFx0ICovXFxuMzkzNjpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbjM5Mzc6XFx0e1xcbjM5Mzg6XFx0XFx0cmV0dXJuIF9fc2tiX2Nvdyhza2IsIGhlYWRyb29tLCBza2JfaGVhZGVyX2Nsb25lZChza2IpKTtcXG4zOTM5OlxcdH1cXG4zOTQwOlxcdFxcbjM5NDE6XFx0LyoqXFxuMzk0MjpcXHQgKlxcdHNrYl9wYWR0b1xcdC0gcGFkIGFuIHNrYnVmZiB1cCB0byBhIG1pbmltYWwgc2l6ZVxcbjM5NDM6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gcGFkXFxuMzk0NDpcXHQgKlxcdEBsZW46IG1pbmltYWwgbGVuZ3RoXFxuMzk0NTpcXHQgKlxcbjM5NDY6XFx0ICpcXHRQYWRzIHVwIGEgYnVmZmVyIHRvIGVuc3VyZSB0aGUgdHJhaWxpbmcgYnl0ZXMgZXhpc3QgYW5kIGFyZVxcbjM5NDc6XFx0ICpcXHRibGFua2VkLiBJZiB0aGUgYnVmZmVyIGFscmVhZHkgY29udGFpbnMgc3VmZmljaWVudCBkYXRhIGl0XFxuMzk0ODpcXHQgKlxcdGlzIHVudG91Y2hlZC4gT3RoZXJ3aXNlIGl0IGlzIGV4dGVuZGVkLiBSZXR1cm5zIHplcm8gb25cXG4zOTQ5OlxcdCAqXFx0c3VjY2Vzcy4gVGhlIHNrYiBpcyBmcmVlZCBvbiBlcnJvci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6NTcuNTczODQ0ODQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NjcwNzI4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTS0IgSGVhZHJvb20gQ2hhbmdlIGluIGBzZWc2X2RvX3NyaF9lbmNhcGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIHJlcGxhY2luZyBgcHNrYl9leHBhbmRfaGVhZGAgd2l0aCBgc2tiX2Nvd19oZWFkYCB3aXRoaW4gYHNlZzZfZG9fc3JoYCBzcGVjaWZpY2FsbHkgZm9yIEwyIGVuY2Fwc3VsYXRpb24uIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LiBJdCBzZWVtcyB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIHRoZSBTb2NrZXQgQnVmZmVyIChza2IpIGhlYWQsIGVuc3VyaW5nIGl0J3Mgd3JpdGFibGUgYW5kIG5vdCBzaGFyZWQgYmVmb3JlIHdlIG1vZGlmeSB0aGUgaGVhZGVyIGR1cmluZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24g4oCTIHRoaW5rIGBza2JfbWFjX2hlYWRlcl9yZWJ1aWxkYCwgYHNrYl9wdXNoYCwgYW5kIHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXRzZWxmLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQ291bGQgdGhpcyBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5PyBEaWdnaW5nIGRlZXBlciwgYHNrYl9jb3dfaGVhZGAgc2VlbXMgc2FmZSBpbiB0aGlzIHJlZ2FyZC4gSXQgZWl0aGVyIHJlYWxsb2NhdGVzIHRoZSBza2IgaGVhZCAoZWZmZWN0aXZlbHkgY2FsbGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYmVoaW5kIHRoZSBzY2VuZXMpIG9yLCBpZiB0aGUgaGVhZHJvb20gaXMgYWxyZWFkeSBhdmFpbGFibGUgYW5kIGluaXRpYWxpemVkLCBsZWF2ZXMgaXQgdW50b3VjaGVkLiBDcnVjaWFsbHksIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBub3IgZG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRpcmVjdGx5LiBXZSdyZSBvcGVyYXRpbmcgb24gbmV0d29yayBwYWNrZXQgYnVmZmVycywgd2hpY2ggYXJlICpzdXBwb3NlZCogdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUncyBubyBpbmRpY2F0aW9uIG9mIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mbyBsZWFrcywgb3IgaXNzdWVzIHdpdGggc3RydWN0IHBhZGRpbmcgaGVyZS5cblxuTm93LCBsZXQncyBzaGlmdCB0byBLTVNBTiBjb25zaWRlcmF0aW9ucy4gS01TQU4gZmxhZ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGlzIGNoYW5nZSwgYXQgaXRzIGhlYXJ0LCBpcyBhIHN0YW5kYXJkIFNLQiBoZWFkcm9vbS9jbG9uaW5nIG1hbmFnZW1lbnQgY29ycmVjdGlvbjogZW5zdXJpbmcgdGhlIHNrYiBoZWFkIGlzIHdyaXRhYmxlLCBhbmQgaGFuZGxpbmcgZXJyb3JzIGNvcnJlY3RseS4gU2luY2Ugd2UncmUgbm90IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBwb3RlbnRpYWwgbGVha3MgdGhhdCBJIGNhbiBzZWUsIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gVGhpcyBpcyBhIGZpeCwgbm90IGEgbmV3IGZlYXR1cmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4gVGhlIHRvb2wncyBjaGVja3Mgb2YgS01TQU4gdnMgS0FTQU4gYXJlIHJlbGV2YW50IGhlcmUsIGFuZCBpdCBwcm9wZXJseSBhc3Nlc3NlcyB0aGUgcmlza3MuXG5cblRoZXJlZm9yZSwgdGhpcyBpcyBhIHN0YW5kYXJkIGFuZCBzYWZlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwNiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MjowMi41NDA5MjA4MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 00:39:53 +0000 UTC FinishedAt: 2026-09-03 00:42:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL" ], "series_id": "d15277d8-b214-41bb-82c4-9dd330e36833" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "seg6_do_srh_encap", "seg6_do_srh_inline", "seg6_build_state", "seg6_input", "seg6_output" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MTc5NjdmY2JkN2JiZTFkNzdkMzcwN2E5ZDY4NjA3MjA0NTY2Nzg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMDo0MTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbmluZGV4IDYxYzZhMjdiZjIwMmQuLmE2NTU2ZWZkOGUwYjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY1xuQEAgLTQ0Niw4ICYjNDM7NDQ2LDkgQEAgc3RhdGljIGludCBzZWc2X2RvX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpjYWNoZV9kc3QpXG4gXHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShlcnIpKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0XHRza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MTc5NjdmY2JkN2JiZTFkNzdkMzcwN2E5ZDY4NjA3MjA0NTY2Nzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDo0MTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYwppbmRleCA2MWM2YTI3YmYyMDJkLi5hNjU1NmVmZDhlMGIxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jCkBAIC00NDYsOCAmIzQzOzQ0Niw5IEBAIHN0YXRpYyBpbnQgc2VnNl9kb19zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqY2FjaGVfZHN0KQogCQlpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgc2tiLSZndDttYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSAmbHQ7IDApCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi0mZ3Q7bWFjX2xlbik7CiYjNDM7CQlpZiAodW5saWtlbHkoZXJyKSkKJiM0MzsJCQlyZXR1cm4gZXJyOwogCiAJCXNrYl9tYWNfaGVhZGVyX3JlYnVpbGQoc2tiKTsKIAkJc2tiX3B1c2goc2tiLCBza2ItJmd0O21hY19sZW4pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU2CgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogYHNlZzZfaXB0dW5uZWwuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGluc3BlY3QgdGhlIGRpZmYsIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY2AuIEkgc2VlIHRoZSBgc2VnNl9kb19zcmhgIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aCB0aGUgcmVwbGFjZW1lbnQgb2YgYHBza2JfZXhwYW5kX2hlYWRgIHdpdGggYHNrYl9jb3dfaGVhZGAuCgpOb3csIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY29kZS4gVG8gbWFrZSBhIGp1ZGdlbWVudCBjYWxsIGFib3V0IHdoZXRoZXIgZnV6emluZyBpcyB3b3J0aHdoaWxlLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLCBhbmQgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGV2ZW4gcmVhY2hhYmxlLiBJJiMzOTtsbCByZWFkIHRoZSBmaWxlIGl0c2VsZiB1c2luZyBgcmVhZC1maWxlYCBhbmQgZW1wbG95IGBncmVwcGVyYCB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aHMgYW5kIG5hcnJvdyBkb3duIHRoZSBzY29wZS4gVWx0aW1hdGVseSwgdGhpcyB3aWxsIGluZm9ybSBtZSBvZiB3aGF0IGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0IGFuZCB3aGljaCBpbnB1dHMgd2lsbCBwcm92aWRlIHRoZSBtb3N0IGVmZmljaWVudCBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRcdGVsc2UgaWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXG4gNDI2Olx0XHRcdFx0cHJvdG8gPSBJUFBST1RPX0lQSVA7XG4gNDI3Olx0XHRcdGVsc2VcbiA0Mjg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Mjk6XHRcbiA0MzA6XHRcdFx0aWYgKHRpbmZvLVx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0VOQ0FQKVxuIDQzMTpcdFx0XHRcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cdTAwM2VzcmgsIHByb3RvLFxuIDQzMjpcdFx0XHRcdFx0XHRcdCAgY2FjaGVfZHN0LCBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDMzOlx0XHRcdGVsc2VcbiA0MzQ6XHRcdFx0XHRlcnIgPSBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc2tiLCB0aW5mby1cdTAwM2VzcmgsIHByb3RvLFxuIDQzNTpcdFx0XHRcdFx0XHRcdCAgICBjYWNoZV9kc3QsIFx1MDAyNnNsd3QtXHUwMDNldHVuc3JjKTtcbiA0MzY6XHRcbiA0Mzc6XHRcdFx0aWYgKGVycilcbiA0Mzg6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDQzOTpcdFxuIDQ0MDpcdFx0XHRza2Jfc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiA0NDE6XHRcdFx0c2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4gNDQyOlx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIDQ0MzpcdFx0XHRicmVhaztcbiA0NDQ6XHRcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVA6XG4gNDQ1Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQX1JFRDpcbiA0NDY6XHRcdFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4gNDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiA0NTA6XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4gNDUxOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA0NTI6XHRcbiA0NTM6XHRcdFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xuIDQ1NDpcdFx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiA0NTU6XHRcbiA0NTY6XHRcdFx0aWYgKHRpbmZvLVx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVApXG4gNDU3Olx0XHRcdFx0ZXJyID0gX19zZWc2X2RvX3NyaF9lbmNhcChza2IsIHRpbmZvLVx1MDAzZXNyaCxcbiA0NTg6XHRcdFx0XHRcdFx0XHQgIElQUFJPVE9fRVRIRVJORVQsIGNhY2hlX2RzdCxcbiA0NTk6XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnNsd3QtXHUwMDNldHVuc3JjKTtcbiA0NjA6XHRcdFx0ZWxzZVxuIDQ2MTpcdFx0XHRcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVx1MDAzZXNyaCxcbiA0NjI6XHRcdFx0XHRcdFx0XHQgICAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxuIDQ2MzpcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDY0Olx0XG4gNDY1Olx0XHRcdGlmIChlcnIpXG4gNDY2Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA0Njc6XHRcbiA0Njg6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gNDY5Olx0XHRcdGJyZWFrO1xuIDQ3MDpcdFx0fVxuIDQ3MTpcdFxuIDQ3MjpcdFx0c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRuZl9yZXNldF9jdChza2IpO1xuIDQ3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjZfU0VHNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbm5ldC9pcHY2L0tjb25maWc6MzE0Olx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE1LVx0ZGVwZW5kcyBvbiBJUFY2ID0geVxuLS1cbm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjYWxpcHNvLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xubmV0L2lwdjYvTWFrZWZpbGU6MjY6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgJiM0Mzs9IHNlZzZfaG1hYy5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNy1pcHY2LSQoQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMKSAmIzQzOz0gcnBsX2lwdHVubmVsLm9cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOS1cdC5zZWc2X2VuYWJsZWRcdFx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXHQuc2VnNl9yZXF1aXJlX2htYWNcdD0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5Ni1cdC5zZWc2X3JlcXVpcmVfaG1hY1x0PSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczOC1cdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTczOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3NDAtXHRhcnJheVtERVZDT05GX1NFRzZfUkVRVUlSRV9ITUFDXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9yZXF1aXJlX2htYWMpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMjUtXHR9LFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3MjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNy1cdHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2V4dGhkcnMuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM4OC1cbm5ldC9pcHY2L2V4dGhkcnMuYzozODk6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvZXh0aGRycy5jLTM5MC1cdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTExMjQ9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTExNTItXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1MzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1NC1cdGlmIChzcl9oYXNfaG1hYyhzcl9waGRyKSkge1xuLS1cbm5ldC9pcHY2L3NlZzYuYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfZ2VubF9wb2xpY3lbU0VHNl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtMTUwLVxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2LmMtMTUyLVxuLS1cbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY2L3NlZzYuYy0yOTktXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzYuYy0zMDEtXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFx1MDAzY25ldC9kc3RfY2FjaGUuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yNy0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MTQxPXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgsXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzoyMDI6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMy1cdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjU9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI4LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzMwLVx0aWYgKHVubGlrZWx5KCFza2lwX3NyaCBcdTAwMjZcdTAwMjYgc3JfaGFzX2htYWMoaXNyaCkpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0NT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgwLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM4MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgyLVx0aWYgKHNyX2hhc19obWFjKGlzcmgpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3LSNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyODojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjktI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzZfaG1hYy5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjUtXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjMyPXN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDE6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0Mi1cdGlmIChzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc1OD1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjktXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzcwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NzEtXHRpZiAoc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4ODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIElQdjYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgaXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBuZXQvaXB2Ni9LY29uZmlnYC4gSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyODYgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIHNob3VsZCBsYXkgb3V0IGFsbCB0aGUgb3B0aW9ucyBhbmQgYW55IGNvbmRpdGlvbnMgdGhhdCBjb250cm9sIHdoZW4gdGhleSBhcmUgZW5hYmxlZC4gVGltZSB0byBnZXQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbiAyODE6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyODI6XHRcdGhlbHBcbiAyODM6XHRcdCAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuXG4gMjg0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjg1Olx0XG4gMjg2Olx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxuIDI4NzpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDI4ODpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMjg5Olx0XHRzZWxlY3QgTFdUVU5ORUxcbiAyOTA6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAyOTE6XHRcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xuIDI5MjpcdFx0aGVscFxuIDI5MzpcdFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcbiAyOTQ6XHRcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XG4gMjk1Olx0XHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxuIDI5NjpcdFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cbiAyOTc6XHRcbiAyOTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyOTk6XHRcbiAzMDA6XHRjb25maWcgSVBWNl9TRUc2X0hNQUNcbiAzMDE6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuIDMwMjpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzAzOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gMzA0Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4gMzEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzExOlx0XG4gMzEyOlx0Y29uZmlnIElQVjZfU0VHNl9CUEZcbiAzMTM6XHRcdGRlZl9ib29sIHlcbiAzMTQ6XHRcdGRlcGVuZHMgb24gSVBWNl9TRUc2X0xXVFVOTkVMXG4gMzE1Olx0XHRkZXBlbmRzIG9uIElQVjYgPSB5XG4gMzE2Olx0XG4gMzE3Olx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG4gMzE4Olx0XHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuIDMxOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYzOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZSB5b3UgbWVudGlvbmVkOgoKKipFeGFtaW5pbmcgc2VnNl9pcHR1bm5lbC5jKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0VHNiBvdmVyIElQdjYgdHVubmVsaW5nIGlzIGltcGxlbWVudGVkLCBhbmQgSSYjMzk7bSBzdGFydGluZyBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBmaWxlIGBzZWc2X2lwdHVubmVsLmNgLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIHdpdGhpbiB0aGlzIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBjb3JlIGxvZ2ljIG9mIGNyZWF0aW5nLCBjb25maWd1cmluZywgYW5kIG1hbmFnaW5nIHRoZXNlIHR1bm5lbHMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBhcmNoaXRlY3R1cmFsIG92ZXJ2aWV3IGJ5IHN0dWR5aW5nIHRoaXMgZmlsZS4gSSBleHBlY3QgdG8gZmluZCwgYXQgYSBtaW5pbXVtLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGRlc2NyaWJpbmcgYSBTRUc2IHR1bm5lbCwgYW5kIGVudHJ5IHBvaW50cyBmb3IgY29udHJvbCBwbGFuZSBpbnRlcmFjdGlvbiwgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgcmVsZXZhbnQgZXJyb3IgaGFuZGxpbmcgb3IgaGVscGVyIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0fVxuIDQ3MTpcdFxuIDQ3MjpcdFx0c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRuZl9yZXNldF9jdChza2IpO1xuIDQ3NDpcdFxuIDQ3NTpcdFx0cmV0dXJuIDA7XG4gNDc2Olx0fVxuIDQ3NzpcdFxuIDQ3ODpcdC8qIGluc2VydCBhbiBTUkggd2l0aGluIGFuIElQdjYgcGFja2V0LCBqdXN0IGFmdGVyIHRoZSBJUHY2IGhlYWRlciAqL1xuIDQ3OTpcdGludCBzZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoKVxuIDQ4MDpcdHtcbiA0ODE6XHRcdHJldHVybiBfX3NlZzZfZG9fc3JoX2lubGluZShza2IsIG9zcmgsIE5VTEwpO1xuIDQ4MjpcdH1cbiA0ODM6XHRFWFBPUlRfU1lNQk9MX0dQTChzZWc2X2RvX3NyaF9pbmxpbmUpO1xuIDQ4NDpcdFxuIDQ4NTpcdC8qIGxvb2sgdXAgYSByb3V0ZSBpbiBhIHNwZWNpZmljIEZJQiB0YWJsZS5cbiA0ODY6XHQgKiBSZXR1cm5zIGEgcmVmY291bnRlZCBkc3QsIG9yIE5VTEwgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LlxuIDQ4NzpcdCAqL1xuIDQ4ODpcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X3RhYmxlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gNDg5Olx0XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4gNDkwOlx0XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93aTYgKmZsNiwgdTMyIHRibF9pZClcbiA0OTE6XHR7XG4gNDkyOlx0XHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG4gNDkzOlx0XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xuIDQ5NDpcdFxuIDQ5NTpcdFx0dGFibGUgPSBmaWI2X2dldF90YWJsZShuZXQsIHRibF9pZCk7XG4gNDk2Olx0XHRpZiAoIXRhYmxlKVxuIDQ5NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0OTg6XHRcbiA0OTk6XHRcdHJ0ID0gaXA2X3BvbF9yb3V0ZShuZXQsIHRhYmxlLCAwLCBmbDYsIHNrYiwgUlQ2X0xPT0tVUF9GX0hBU19TQUREUik7XG4gNTAwOlx0XHRyZXR1cm4gXHUwMDI2cnQtXHUwMDNlZHN0O1xuIDUwMTpcdH1cbiA1MDI6XHRcbiA1MDM6XHRzdGF0aWMgdm9pZCBzZWc2X2luaXRfZmxvd2k2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpoZHIsXG4gNTA0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd2k2ICpmbDYpXG4gNTA1Olx0e1xuIDUwNjpcdFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcbiA1MDc6XHRcbiA1MDg6XHRcdGZsNi1cdTAwM2VkYWRkciA9IGhkci1cdTAwM2VkYWRkcjtcbiA1MDk6XHRcdGZsNi1cdTAwM2VzYWRkciA9IGhkci1cdTAwM2VzYWRkcjtcbiA1MTA6XHRcdGZsNi1cdTAwM2VmbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaGRyKTtcbiA1MTE6XHRcdGZsNi1cdTAwM2VmbG93aTZfbWFyayA9IHNrYi1cdTAwM2VtYXJrO1xuIDUxMjpcdFx0Zmw2LVx1MDAzZWZsb3dpNl9wcm90byA9IGhkci1cdTAwM2VuZXh0aGRyO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiA1MTU6XHQvKiBsb29rIHVwIHRoZSByb3V0ZSBmb3IgdGhlIGZpcnN0IFNJRCBvbiB0aGUgaW5wdXQgcGF0aCBhbmQgc2V0IGl0IG9uIHRoZSBza2IuXG4gNTE2Olx0ICogUmV0dXJucyB0aGUgcmVmY291bnRlZCBkc3QsIG9yIE5VTEwgaWYgYSByZWZlcmVuY2UgY291bGQgbm90IGJlIHNhZmVseSB0YWtlbi5cbiA1MTc6XHQgKi9cbiA1MTg6XHRzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2VnNl9pbnB1dF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gNTE5Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1MjA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QpXG4gNTIxOlx0e1xuIDUyMjpcdFx0dTMyIHRhYmxlID0gc2x3dC1cdTAwM2V0YWJsZTtcbiA1MjM6XHRcbiA1MjQ6XHRcdGlmICh0YWJsZSkge1xuIDUyNTpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTtcbiA1MjY6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIDUyNzpcdFx0XHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiA1Mjg6XHRcbiA1Mjk6XHRcdFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXHUwMDI2Zmw2KTtcbiA1MzA6XHRcdFx0Zmw2LmZsb3dpNl9paWYgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXg7XG4gNTMxOlx0XG4gNTMyOlx0XHRcdGRzdCA9IHNlZzZfdGFibGVfbG9va3VwKG5ldCwgc2tiLCBcdTAwMjZmbDYsIHRhYmxlKTtcbiA1MzM6XHRcdFx0aWYgKCFkc3QpIHtcbiA1MzQ6XHRcdFx0XHRkc3QgPSBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktXHUwMDNlZHN0O1xuIDUzNTpcdFx0XHRcdGRzdF9ob2xkKGRzdCk7XG4gNTM2Olx0XHRcdH1cbiA1Mzc6XHRcbiA1Mzg6XHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gNTM5Olx0XHRcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcbiA1NDA6XHRcdH0gZWxzZSB7XG4gNTQxOlx0XHRcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIDU0MjpcdFxuIDU0MzpcdFx0XHQvKiBpcDZfcm91dGVfaW5wdXQoKSBzZXRzIGEgTk9SRUYgZHN0OyBmb3JjZSBhIHJlZmNvdW50IG9uIGl0XG4gNTQ0Olx0XHRcdCAqIGJlZm9yZSBjYWNoaW5nIG9yIGZ1cnRoZXIgdXNlLlxuIDU0NTpcdFx0XHQgKi9cbiA1NDY6XHRcdFx0c2tiX2RzdF9mb3JjZShza2IpO1xuIDU0NzpcdFx0fVxuIDU0ODpcdFxuIDU0OTpcdFx0cmV0dXJuIHNrYl9kc3Qoc2tiKTtcbiA1NTA6XHR9XG4gNTUxOlx0XG4gNTUyOlx0c3RhdGljIGludCBzZWc2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbiA1NTM6XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNTU0Olx0e1xuIDU1NTpcdFx0cmV0dXJuIGRzdF9pbnB1dChza2IpO1xuIDU1NjpcdH1cbiA1NTc6XHRcbiA1NTg6XHRzdGF0aWMgaW50IHNlZzZfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbiA1NTk6XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDU2MDpcdHtcbiA1NjE6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm9yaWdfZHN0ID0gc2tiX2RzdChza2IpO1xuIDU2MjpcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDtcbiA1NjM6XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3Q7XG4gNTY0Olx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3Q7XG4gNTY1Olx0XHRpbnQgZXJyO1xuIDU2NjpcdFxuIDU2NzpcdFx0LyogV2UgY2Fubm90IGRlcmVmZXJlbmNlIFwmIzM0O29yaWdfZHN0XCYjMzQ7IG9uY2UgaXA2X3JvdXRlX2lucHV0KCkgb3JcbiA1Njg6XHRcdCAqIHNrYl9kc3RfZHJvcCgpIGlzIGNhbGxlZC4gSG93ZXZlciwgaW4gb3JkZXIgdG8gZGV0ZWN0IGEgZHN0IGxvb3AsIHdlXG4gNTY5Olx0XHQgKiBuZWVkIHRoZSBhZGRyZXNzIG9mIGl0cyBsd3RzdGF0ZS4gU28sIHNhdmUgdGhlIGFkZHJlc3Mgb2YgbHd0c3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgc2VnNl9pcHR1bm5lbC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4gSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHNvbWUga2V5IGFzcGVjdHMsIGJ1dCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gbnVhbmNlcyBvZiB0aGlzIGBzZWc2X2lwdHVubmVsLmNgIG1vZHVsZSwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjZSB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZS4gSSB3YW50IHRvIHNlZSAqYWxsKiB0aGUgb3BlcmF0aW9ucyBhbmQgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGZ1bmN0aW9uIG5hbWVzOyBpdCYjMzk7cyBhYm91dCBzZWVpbmcgaG93IHRoZXkmIzM5O3JlICpjb25uZWN0ZWQqLCBob3cgdGhlIGRhdGEgZmxvd3MsIGFuZCB3aGVyZSB0aGUgY3JpdGljYWwgZGVjaXNpb25zIGFyZSBtYWRlIGluIHRoZSBjb250cm9sIGFuZCBkYXRhIHBhdGhzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmFsIHZpZXcgc28gSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCBhbmQgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdCAqIG5vdyBhbmQgdXNlIGl0IGxhdGVyIGFzIGEgY29tcGFyaXNvbi5cbiA1NzE6XHRcdCAqL1xuIDU3MjpcdFx0bHd0c3QgPSBvcmlnX2RzdC1cdTAwM2Vsd3RzdGF0ZTtcbiA1NzM6XHRcbiA1NzQ6XHRcdHNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChsd3RzdCk7XG4gNTc1Olx0XG4gNTc2Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNTc3Olx0XHRkc3QgPSBkc3RfY2FjaGVfZ2V0KFx1MDAyNnNsd3QtXHUwMDNlY2FjaGVfaW5wdXQpO1xuIDU3ODpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gNTc5Olx0XG4gNTgwOlx0XHRlcnIgPSBzZWc2X2RvX3NyaChza2IsIGRzdCk7XG4gNTgxOlx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuIDU4MjpcdFx0XHRkc3RfcmVsZWFzZShkc3QpO1xuIDU4MzpcdFx0XHRnb3RvIGRyb3A7XG4gNTg0Olx0XHR9XG4gNTg1Olx0XG4gNTg2Olx0XHRpZiAodW5saWtlbHkoIWRzdCkpIHtcbiA1ODc6XHRcdFx0ZHN0ID0gc2VnNl9pbnB1dF9yb3V0ZShuZXQsIHNrYiwgc2x3dCk7XG4gNTg4Olx0XHRcdGlmICghZHN0KSB7XG4gNTg5Olx0XHRcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIDU5MDpcdFx0XHRcdGdvdG8gZHJvcDtcbiA1OTE6XHRcdFx0fVxuIDU5MjpcdFxuIDU5MzpcdFx0XHQvKiBjYWNoZSBvbmx5IGlmIHdlIGRvbiYjMzk7dCBjcmVhdGUgYSBkc3QgcmVmZXJlbmNlIGxvb3AgKi9cbiA1OTQ6XHRcdFx0aWYgKCFkc3QtXHUwMDNlZXJyb3IgXHUwMDI2XHUwMDI2IGx3dHN0ICE9IGRzdC1cdTAwM2Vsd3RzdGF0ZSkge1xuIDU5NTpcdFx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiA1OTY6XHRcdFx0XHRkc3RfY2FjaGVfc2V0X2lwNihcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX2lucHV0LCBkc3QsXG4gNTk3Olx0XHRcdFx0XHRcdCAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcik7XG4gNTk4Olx0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gNTk5Olx0XHRcdH1cbiA2MDA6XHRcbiA2MDE6XHRcdFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UoZHN0X2Rldihkc3QpKSk7XG4gNjAyOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDYwMzpcdFx0XHRcdGdvdG8gZHJvcDtcbiA2MDQ6XHRcdH0gZWxzZSB7XG4gNjA1Olx0XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuIDYwNjpcdFx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gNjA3Olx0XHR9XG4gNjA4Olx0XG4gNjA5Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcbiA2MTA6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX0xPQ0FMX09VVCxcbiA2MTE6XHRcdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBOVUxMLFxuIDYxMjpcdFx0XHRcdCAgICAgICBza2JfZHN0X2Rldihza2IpLCBzZWc2X2lucHV0X2ZpbmlzaCk7XG4gNjEzOlx0XG4gNjE0Olx0XHRyZXR1cm4gc2VnNl9pbnB1dF9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbiA2MTU6XHRkcm9wOlxuIDYxNjpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNjE3Olx0XHRyZXR1cm4gZXJyO1xuIDYxODpcdH1cbiA2MTk6XHRcbiA2MjA6XHRzdGF0aWMgaW50IHNlZzZfaW5wdXRfbmYoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA2MjE6XHR7XG4gNjIyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiX2RzdF9kZXYoc2tiKTtcbiA2MjM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNjI0Olx0XG4gNjI1Olx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIDYyNjpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gNjI3Olx0XHRcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgTlVMTCxcbiA2Mjg6XHRcdFx0XHQgICAgICAgc2tiLCBOVUxMLCBkZXYsIHNlZzZfaW5wdXRfY29yZSk7XG4gNjI5Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuIDYzMDpcdFx0XHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIE5VTEwsXG4gNjMxOlx0XHRcdFx0ICAgICAgIHNrYiwgTlVMTCwgZGV2LCBzZWc2X2lucHV0X2NvcmUpO1xuIDYzMjpcdFx0fVxuIDYzMzpcdFxuIDYzNDpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjM1Olx0fVxuIDYzNjpcdFxuIDYzNzpcdHN0YXRpYyBpbnQgc2VnNl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDYzODpcdHtcbiA2Mzk6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNm5mX2hvb2tzX2x3dHVubmVsX2VuYWJsZWQpKVxuIDY0MDpcdFx0XHRyZXR1cm4gc2VnNl9pbnB1dF9uZihza2IpO1xuIDY0MTpcdFxuIDY0MjpcdFx0cmV0dXJuIHNlZzZfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xuIDY0MzpcdH1cbiA2NDQ6XHRcbiA2NDU6XHQvKiBsb29rIHVwIHRoZSByb3V0ZSBmb3IgdGhlIGZpcnN0IFNJRCBvbiB0aGUgb3V0cHV0IHBhdGguIEFsd2F5cyByZXR1cm5zIGFcbiA2NDY6XHQgKiByZWZjb3VudGVkIGRzdC5cbiA2NDc6XHQgKi9cbiA2NDg6XHRzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2VnNl9vdXRwdXRfZHN0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gNjQ5Olx0XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbiA2NTA6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZmxvd2k2ICpmbDYsXG4gNjUxOlx0XHRcdFx0XHRcdFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0KVxuIDY1MjpcdHtcbiA2NTM6XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiA2NTQ6XHRcbiA2NTU6XHRcdGlmIChzbHd0LVx1MDAzZXRhYmxlKSB7XG4gNjU2Olx0XHRcdGRzdCA9IHNlZzZfdGFibGVfbG9va3VwKG5ldCwgc2tiLCBmbDYsIHNsd3QtXHUwMDNldGFibGUpO1xuIDY1NzpcdFx0XHRpZiAoIWRzdCkge1xuIDY1ODpcdFx0XHRcdGRzdCA9IFx1MDAyNm5ldC1cdTAwM2VpcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS1cdTAwM2Vkc3Q7XG4gNjU5Olx0XHRcdFx0ZHN0X2hvbGQoZHN0KTtcbiA2NjA6XHRcdFx0fVxuIDY2MTpcdFx0fSBlbHNlIHtcbiA2NjI6XHRcdFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIGZsNik7XG4gNjYzOlx0XHR9XG4gNjY0Olx0XG4gNjY1Olx0XHRyZXR1cm4gZHN0O1xuIDY2NjpcdH1cbiA2Njc6XHRcbiA2Njg6XHRzdGF0aWMgaW50IHNlZzZfb3V0cHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4gNjY5Olx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjEwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgRGVlcCBpbnRvIHNlZzZfaXB0dW5uZWwuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mga2VlcCBwbHVnZ2luZyBhd2F5IGF0IGBzZWc2X2lwdHVubmVsLmNgLiBJIG5lZWQgdG8gZ2V0IGEgZnVsbCBoYW5kbGUgb24gdGhpcyBjb2RlLCBzbyBJJiMzOTttIGdvaW5nIHRvIHJlYWQgaXQgbWV0aG9kaWNhbGx5LCByaWdodCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vIHNraW1taW5nIG9yIGp1bXBpbmcgYXJvdW5kIGp1c3QgeWV0OyBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgc3RydWN0dXJlIGFuZCBsb2dpYyBmbG93IGJlZm9yZSBJIHN0YXJ0IHBpbnBvaW50aW5nIHNwZWNpZmljIGFyZWFzIG9mIGludGVyZXN0IG9yIHBvdGVudGlhbCBpbXByb3ZlbWVudHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1hcCBvZiB0aGlzIG1vZHVsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB3aXRoaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHR7XG4gNjcxOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpvcmlnX2RzdCA9IHNrYl9kc3Qoc2tiKTtcbiA2NzI6XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4gNjczOlx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3Q7XG4gNjc0Olx0XHRpbnQgZXJyO1xuIDY3NTpcdFxuIDY3NjpcdFx0c2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbiA2Nzc6XHRcbiA2Nzg6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiA2Nzk6XHRcdGRzdCA9IGRzdF9jYWNoZV9nZXQoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9vdXRwdXQpO1xuIDY4MDpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gNjgxOlx0XG4gNjgyOlx0XHRlcnIgPSBzZWc2X2RvX3NyaChza2IsIGRzdCk7XG4gNjgzOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiA2ODQ6XHRcdFx0Z290byBkcm9wO1xuIDY4NTpcdFxuIDY4NjpcdFx0aWYgKHVubGlrZWx5KCFkc3QpKSB7XG4gNjg3Olx0XHRcdHN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpO1xuIDY4ODpcdFx0XHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiA2ODk6XHRcbiA2OTA6XHRcdFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXHUwMDI2Zmw2KTtcbiA2OTE6XHRcbiA2OTI6XHRcdFx0ZHN0ID0gc2VnNl9vdXRwdXRfZHN0X2xvb2t1cChuZXQsIHNrYiwgXHUwMDI2Zmw2LCBzbHd0KTtcbiA2OTM6XHRcdFx0aWYgKGRzdC1cdTAwM2VlcnJvcikge1xuIDY5NDpcdFx0XHRcdGVyciA9IGRzdC1cdTAwM2VlcnJvcjtcbiA2OTU6XHRcdFx0XHRnb3RvIGRyb3A7XG4gNjk2Olx0XHRcdH1cbiA2OTc6XHRcbiA2OTg6XHRcdFx0LyogY2FjaGUgb25seSBpZiB3ZSBkb24mIzM5O3QgY3JlYXRlIGEgZHN0IHJlZmVyZW5jZSBsb29wICovXG4gNjk5Olx0XHRcdGlmIChvcmlnX2RzdC1cdTAwM2Vsd3RzdGF0ZSAhPSBkc3QtXHUwMDNlbHd0c3RhdGUpIHtcbiA3MDA6XHRcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNzAxOlx0XHRcdFx0ZHN0X2NhY2hlX3NldF9pcDYoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9vdXRwdXQsIGRzdCwgXHUwMDI2Zmw2LnNhZGRyKTtcbiA3MDI6XHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiA3MDM6XHRcdFx0fVxuIDcwNDpcdFxuIDcwNTpcdFx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShkc3RfZGV2KGRzdCkpKTtcbiA3MDY6XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4gNzA3Olx0XHRcdFx0Z290byBkcm9wO1xuIDcwODpcdFx0fVxuIDcwOTpcdFxuIDcxMDpcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gNzExOlx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gNzEyOlx0XG4gNzEzOlx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcbiA3MTQ6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX0xPQ0FMX09VVCwgbmV0LCBzaywgc2tiLFxuIDcxNTpcdFx0XHRcdCAgICAgICBOVUxMLCBkc3RfZGV2KGRzdCksIGRzdF9vdXRwdXQpO1xuIDcxNjpcdFxuIDcxNzpcdFx0cmV0dXJuIGRzdF9vdXRwdXQobmV0LCBzaywgc2tiKTtcbiA3MTg6XHRkcm9wOlxuIDcxOTpcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbiA3MjA6XHRcdGtmcmVlX3NrYihza2IpO1xuIDcyMTpcdFx0cmV0dXJuIGVycjtcbiA3MjI6XHR9XG4gNzIzOlx0XG4gNzI0Olx0c3RhdGljIGludCBzZWc2X291dHB1dF9uZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA3MjU6XHR7XG4gNzI2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiX2RzdF9kZXYoc2tiKTtcbiA3Mjc6XHRcbiA3Mjg6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4gNzI5Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiA3MzA6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX1BPU1RfUk9VVElORywgbmV0LCBzaywgc2tiLFxuIDczMTpcdFx0XHRcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xuIDczMjpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiA3MzM6XHRcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BPU1RfUk9VVElORywgbmV0LCBzaywgc2tiLFxuIDczNDpcdFx0XHRcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xuIDczNTpcdFx0fVxuIDczNjpcdFxuIDczNzpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzM4Olx0fVxuIDczOTpcdFxuIDc0MDpcdHN0YXRpYyBpbnQgc2VnNl9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gNzQxOlx0e1xuIDc0MjpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2bmZfaG9va3NfbHd0dW5uZWxfZW5hYmxlZCkpXG4gNzQzOlx0XHRcdHJldHVybiBzZWc2X291dHB1dF9uZihuZXQsIHNrLCBza2IpO1xuIDc0NDpcdFxuIDc0NTpcdFx0cmV0dXJuIHNlZzZfb3V0cHV0X2NvcmUobmV0LCBzaywgc2tiKTtcbiA3NDY6XHR9XG4gNzQ3Olx0XG4gNzQ4Olx0c3RhdGljIGludCBzZWc2X2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIDc0OTpcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4gNzUwOlx0XHRcdFx0ICAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxuIDc1MTpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNzUyOlx0e1xuIDc1MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbU0VHNl9JUFRVTk5FTF9NQVggJiM0MzsgMV07XG4gNzU0Olx0XHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbztcbiA3NTU6XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3dHM7XG4gNzU2Olx0XHRpbnQgdHVuaW5mb19sZW4sIG1pbl9zaXplO1xuIDc1NzpcdFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0O1xuIDc1ODpcdFx0aW50IGVycjtcbiA3NTk6XHRcbiA3NjA6XHRcdGlmIChmYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgZmFtaWx5ICE9IEFGX0lORVQ2KVxuIDc2MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NjI6XHRcbiA3NjM6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgU0VHNl9JUFRVTk5FTF9NQVgsIG5sYSxcbiA3NjQ6XHRcdFx0XHRcdFx0ICBzZWc2X2lwdHVubmVsX3BvbGljeSwgZXh0YWNrKTtcbiA3NjU6XHRcbiA3NjY6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNzY3Olx0XHRcdHJldHVybiBlcnI7XG4gNzY4Olx0XG4gNzY5Olx0XHRpZiAoIXRiW1NFRzZfSVBUVU5ORUxfU1JIXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgUmVnaXN0cmF0aW9uIFByb2Nlc3MgaW4gYHNlZzZfaXB0dW5uZWwuY2AqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgc2VnNl9pcHR1bm5lbC5jYCBmaWxlLiBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHksIGJ1dCBub3cgSSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgcHJlY2lzZWx5ICpob3cqIHRoaXMgbW9kdWxlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsLiBJIGNhbiYjMzk7dCBqdXN0IHN0b3AgYXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGFwYXRoLiBUaGUgcmVnaXN0cmF0aW9uIGRldGFpbHMgYXJlICpjcml0aWNhbCogZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBlc3BlY2lhbGx5IGluIGEgaGVhdmlseSBpbnRlZ3JhdGVkIGFyZWEgbGlrZSB0aGlzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucywgaG9va3MsIGFuZCBjYWxsYmFja3MuIFNvLCBJIG5lZWQgdG8gc2VlIHRoZSAqcmVzdCogb2YgdGhlIGNvZGUuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBXaGF0IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBvcHVsYXRlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVnaXN0cmF0aW9uIGZsYWdzIHVzZWQ/IEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgaW50ZXJhY3Rpb24gb2YgYHNlZzZfaXB0dW5uZWxgIHdpdGggdGhlIGtlcm5lbC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBwbHVncyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzcxOlx0XG4gNzcyOlx0XHR0dW5pbmZvID0gbmxhX2RhdGEodGJbU0VHNl9JUFRVTk5FTF9TUkhdKTtcbiA3NzM6XHRcdHR1bmluZm9fbGVuID0gbmxhX2xlbih0YltTRUc2X0lQVFVOTkVMX1NSSF0pO1xuIDc3NDpcdFxuIDc3NTpcdFx0LyogdHVuaW5mbyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdGhlIGlwdHVubmVsIGVuY2FwIHN0cnVjdHVyZSxcbiA3NzY6XHRcdCAqIHRoZSBTUkggYW5kIG9uZSBzZWdtZW50XG4gNzc3Olx0XHQgKi9cbiA3Nzg6XHRcdG1pbl9zaXplID0gc2l6ZW9mKCp0dW5pbmZvKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZfc3JfaGRyKSAmIzQzO1xuIDc3OTpcdFx0XHQgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTtcbiA3ODA6XHRcdGlmICh0dW5pbmZvX2xlbiBcdTAwM2MgbWluX3NpemUpXG4gNzgxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc4MjpcdFxuIDc4MzpcdFx0c3dpdGNoICh0dW5pbmZvLVx1MDAzZW1vZGUpIHtcbiA3ODQ6XHRcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0lOTElORTpcbiA3ODU6XHRcdFx0aWYgKGZhbWlseSAhPSBBRl9JTkVUNilcbiA3ODY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3ODc6XHRcbiA3ODg6XHRcdFx0aWYgKHRiW1NFRzZfSVBUVU5ORUxfU1JDXSkge1xuIDc4OTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7aW5jb21wYXRpYmxlIG1vZGUgZm9yIHR1bnNyY1wmIzM0Oyk7XG4gNzkwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzkxOlx0XHRcdH1cbiA3OTI6XHRcdFx0YnJlYWs7XG4gNzkzOlx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9FTkNBUDpcbiA3OTQ6XHRcdFx0YnJlYWs7XG4gNzk1Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQOlxuIDc5NjpcdFx0XHRicmVhaztcbiA3OTc6XHRcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0VOQ0FQX1JFRDpcbiA3OTg6XHRcdFx0YnJlYWs7XG4gNzk5Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQX1JFRDpcbiA4MDA6XHRcdFx0YnJlYWs7XG4gODAxOlx0XHRkZWZhdWx0OlxuIDgwMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MDM6XHRcdH1cbiA4MDQ6XHRcbiA4MDU6XHRcdC8qIHZlcmlmeSB0aGF0IFNSSCBpcyBjb25zaXN0ZW50ICovXG4gODA2Olx0XHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHR1bmluZm8tXHUwMDNlc3JoLCB0dW5pbmZvX2xlbiAtIHNpemVvZigqdHVuaW5mbyksIGZhbHNlKSlcbiA4MDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODA4Olx0XG4gODA5Olx0XHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHR1bmluZm9fbGVuICYjNDM7IHNpemVvZigqc2x3dCkpO1xuIDgxMDpcdFx0aWYgKCFuZXd0cylcbiA4MTE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODEyOlx0XG4gODEzOlx0XHRzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobmV3dHMpO1xuIDgxNDpcdFxuIDgxNTpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9pbnB1dCwgR0ZQX0FUT01JQyk7XG4gODE2Olx0XHRpZiAoZXJyKVxuIDgxNzpcdFx0XHRnb3RvIGVycl9mcmVlX25ld3RzO1xuIDgxODpcdFxuIDgxOTpcdFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9vdXRwdXQsIEdGUF9BVE9NSUMpO1xuIDgyMDpcdFx0aWYgKGVycilcbiA4MjE6XHRcdFx0Z290byBlcnJfZGVzdHJveV9pbnB1dDtcbiA4MjI6XHRcbiA4MjM6XHRcdG1lbWNweShcdTAwMjZzbHd0LVx1MDAzZXR1bmluZm8sIHR1bmluZm8sIHR1bmluZm9fbGVuKTtcbiA4MjQ6XHRcbiA4MjU6XHRcdGlmICh0YltTRUc2X0lQVFVOTkVMX1NSQ10pIHtcbiA4MjY6XHRcdFx0c2x3dC1cdTAwM2V0dW5zcmMgPSBubGFfZ2V0X2luNl9hZGRyKHRiW1NFRzZfSVBUVU5ORUxfU1JDXSk7XG4gODI3Olx0XG4gODI4Olx0XHRcdGlmIChpcHY2X2FkZHJfYW55KFx1MDAyNnNsd3QtXHUwMDNldHVuc3JjKSB8fFxuIDgyOTpcdFx0XHQgICAgaXB2Nl9hZGRyX2lzX211bHRpY2FzdChcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykgfHxcbiA4MzA6XHRcdFx0ICAgIGlwdjZfYWRkcl9sb29wYmFjayhcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykpIHtcbiA4MzE6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2ludmFsaWQgdHVuc3JjIGFkZHJlc3NcJiMzNDspO1xuIDgzMjpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gODMzOlx0XHRcdFx0Z290byBlcnJfZGVzdHJveV9vdXRwdXQ7XG4gODM0Olx0XHRcdH1cbiA4MzU6XHRcdH1cbiA4MzY6XHRcbiA4Mzc6XHRcdGlmICh0YltTRUc2X0lQVFVOTkVMX1RBQkxFXSkge1xuIDgzODpcdFx0XHRzbHd0LVx1MDAzZXRhYmxlID0gbmxhX2dldF91MzIodGJbU0VHNl9JUFRVTk5FTF9UQUJMRV0pO1xuIDgzOTpcdFx0XHRpZiAoIXNsd3QtXHUwMDNldGFibGUpIHtcbiA4NDA6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2ludmFsaWQgbG9va3VwIHRhYmxlXCYjMzQ7KTtcbiA4NDE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDg0MjpcdFx0XHRcdGdvdG8gZXJyX2Rlc3Ryb3lfb3V0cHV0O1xuIDg0MzpcdFx0XHR9XG4gODQ0Olx0XHR9XG4gODQ1Olx0XG4gODQ2Olx0XHRuZXd0cy1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfU0VHNjtcbiA4NDc6XHRcdG5ld3RzLVx1MDAzZWZsYWdzIHw9IExXVFVOTkVMX1NUQVRFX0lOUFVUX1JFRElSRUNUO1xuIDg0ODpcdFxuIDg0OTpcdFx0aWYgKHR1bmluZm8tXHUwMDNlbW9kZSAhPSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUCBcdTAwMjZcdTAwMjZcbiA4NTA6XHRcdCAgICB0dW5pbmZvLVx1MDAzZW1vZGUgIT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEKVxuIDg1MTpcdFx0XHRuZXd0cy1cdTAwM2VmbGFncyB8PSBMV1RVTk5FTF9TVEFURV9PVVRQVVRfUkVESVJFQ1Q7XG4gODUyOlx0XG4gODUzOlx0XHRuZXd0cy1cdTAwM2VoZWFkcm9vbSA9IHNlZzZfbHd0X2hlYWRyb29tKHR1bmluZm8pO1xuIDg1NDpcdFxuIDg1NTpcdFx0KnRzID0gbmV3dHM7XG4gODU2Olx0XG4gODU3Olx0XHRyZXR1cm4gMDtcbiA4NTg6XHRcbiA4NTk6XHRlcnJfZGVzdHJveV9vdXRwdXQ6XG4gODYwOlx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX291dHB1dCk7XG4gODYxOlx0ZXJyX2Rlc3Ryb3lfaW5wdXQ6XG4gODYyOlx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX2lucHV0KTtcbiA4NjM6XHRlcnJfZnJlZV9uZXd0czpcbiA4NjQ6XHRcdGtmcmVlKG5ld3RzKTtcbiA4NjU6XHRcdHJldHVybiBlcnI7XG4gODY2Olx0fVxuIDg2NzpcdFxuIDg2ODpcdHN0YXRpYyB2b2lkIHNlZzZfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcbiA4Njk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgc2VnNl9pcHR1bm5lbC5jYCBTb3VyY2UqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiBgc2VnNl9pcHR1bm5lbC5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyDigJMgdGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGludGVyYWN0aW9uIHBvaW50cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGlzIGNydWNpYWwgdG8gc2VlIGhvdyB0aGlzIGltcGxlbWVudGF0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYXMgd2VsbC4gS25vd2luZyBob3cgdGhlIG1vZHVsZSBzZXRzIGl0c2VsZiB1cCBpcyBmdW5kYW1lbnRhbCB0byBncmFzcCBpdHMgcnVudGltZSBiZWhhdmlvciwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uLiBVbHRpbWF0ZWx5LCBnZXR0aW5nIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZ2l2ZXMgdGhlIGdyZWF0ZXN0IGluc2lnaHRzIG9uIHBlcmZvcm1hbmNlIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChsd3QpO1xuIDg3MTpcdFxuIDg3MjpcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2c2x3dC1cdTAwM2VjYWNoZV9pbnB1dCk7XG4gODczOlx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZzbHd0LVx1MDAzZWNhY2hlX291dHB1dCk7XG4gODc0Olx0fVxuIDg3NTpcdFxuIDg3NjpcdHN0YXRpYyBpbnQgc2VnNl9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA4Nzc6XHRcdFx0XHRcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXG4gODc4Olx0e1xuIDg3OTpcdFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKnR1bmluZm8gPSBzZWc2X2VuY2FwX2x3dHVubmVsKGx3dHN0YXRlKTtcbiA4ODA6XHRcdHN0cnVjdCBzZWc2X2x3dCAqc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGx3dHN0YXRlKTtcbiA4ODE6XHRcbiA4ODI6XHRcdGlmIChubGFfcHV0X3NyaChza2IsIFNFRzZfSVBUVU5ORUxfU1JILCB0dW5pbmZvKSlcbiA4ODM6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA4ODQ6XHRcbiA4ODU6XHRcdGlmICghaXB2Nl9hZGRyX2FueShcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykgXHUwMDI2XHUwMDI2XG4gODg2Olx0XHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIFNFRzZfSVBUVU5ORUxfU1JDLCBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYykpXG4gODg3Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gODg4Olx0XG4gODg5Olx0XHRpZiAoc2x3dC1cdTAwM2V0YWJsZSBcdTAwMjZcdTAwMjZcbiA4OTA6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIFNFRzZfSVBUVU5ORUxfVEFCTEUsIHNsd3QtXHUwMDNldGFibGUpKVxuIDg5MTpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDg5MjpcdFxuIDg5MzpcdFx0cmV0dXJuIDA7XG4gODk0Olx0fVxuIDg5NTpcdFxuIDg5NjpcdHN0YXRpYyBpbnQgc2VnNl9lbmNhcF9ubHNpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcbiA4OTc6XHR7XG4gODk4Olx0XHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbyA9IHNlZzZfZW5jYXBfbHd0dW5uZWwobHd0c3RhdGUpO1xuIDg5OTpcdFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobHd0c3RhdGUpO1xuIDkwMDpcdFx0aW50IG5sc2l6ZTtcbiA5MDE6XHRcbiA5MDI6XHRcdG5sc2l6ZSA9IG5sYV90b3RhbF9zaXplKFNFRzZfSVBUVU5fRU5DQVBfU0laRSh0dW5pbmZvKSk7XG4gOTAzOlx0XG4gOTA0Olx0XHRpZiAoIWlwdjZfYWRkcl9hbnkoXHUwMDI2c2x3dC1cdTAwM2V0dW5zcmMpKVxuIDkwNTpcdFx0XHRubHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihzbHd0LVx1MDAzZXR1bnNyYykpO1xuIDkwNjpcdFxuIDkwNzpcdFx0aWYgKHNsd3QtXHUwMDNldGFibGUpXG4gOTA4Olx0XHRcdG5sc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuIDkwOTpcdFxuIDkxMDpcdFx0cmV0dXJuIG5sc2l6ZTtcbiA5MTE6XHR9XG4gOTEyOlx0XG4gOTEzOlx0c3RhdGljIGludCBzZWc2X2VuY2FwX2NtcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcbiA5MTQ6XHR7XG4gOTE1Olx0XHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqYV9oZHIgPSBzZWc2X2VuY2FwX2x3dHVubmVsKGEpO1xuIDkxNjpcdFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKmJfaGRyID0gc2VnNl9lbmNhcF9sd3R1bm5lbChiKTtcbiA5MTc6XHRcdHN0cnVjdCBzZWc2X2x3dCAqYV9zbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwoYSk7XG4gOTE4Olx0XHRzdHJ1Y3Qgc2VnNl9sd3QgKmJfc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGIpO1xuIDkxOTpcdFx0aW50IGxlbiA9IFNFRzZfSVBUVU5fRU5DQVBfU0laRShhX2hkcik7XG4gOTIwOlx0XG4gOTIxOlx0XHRpZiAobGVuICE9IFNFRzZfSVBUVU5fRU5DQVBfU0laRShiX2hkcikpXG4gOTIyOlx0XHRcdHJldHVybiAxO1xuIDkyMzpcdFxuIDkyNDpcdFx0aWYgKCFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2YV9zbHd0LVx1MDAzZXR1bnNyYywgXHUwMDI2Yl9zbHd0LVx1MDAzZXR1bnNyYykpXG4gOTI1Olx0XHRcdHJldHVybiAxO1xuIDkyNjpcdFxuIDkyNzpcdFx0aWYgKGFfc2x3dC1cdTAwM2V0YWJsZSAhPSBiX3Nsd3QtXHUwMDNldGFibGUpXG4gOTI4Olx0XHRcdHJldHVybiAxO1xuIDkyOTpcdFxuIDkzMDpcdFx0cmV0dXJuIG1lbWNtcChhX2hkciwgYl9oZHIsIGxlbik7XG4gOTMxOlx0fVxuIDkzMjpcdFxuIDkzMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfaXB0dW5fb3BzID0ge1xuIDkzNDpcdFx0LmJ1aWxkX3N0YXRlID0gc2VnNl9idWlsZF9zdGF0ZSxcbiA5MzU6XHRcdC5kZXN0cm95X3N0YXRlID0gc2VnNl9kZXN0cm95X3N0YXRlLFxuIDkzNjpcdFx0Lm91dHB1dCA9IHNlZzZfb3V0cHV0LFxuIDkzNzpcdFx0LmlucHV0ID0gc2VnNl9pbnB1dCxcbiA5Mzg6XHRcdC5maWxsX2VuY2FwID0gc2VnNl9maWxsX2VuY2FwX2luZm8sXG4gOTM5Olx0XHQuZ2V0X2VuY2FwX3NpemUgPSBzZWc2X2VuY2FwX25sc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSBhdCBsaW5lIDk0MCwgaHVoPyBSaWdodC4gVGhlIGNvbnRleHQgYXJvdW5kIGhlcmUgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGdldCBhIHNlbnNlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGJleW9uZCB0aGlzIGltbWVkaWF0ZSBzbmlwcGV0LiAqV2hhdCYjMzk7cyogdGhlIHJlbGV2YW50IGxvZ2ljLCB0aGUgcG90ZW50aWFsIGNvbnRyb2wgZmxvdz8gSG9uZXN0bHksIEnigJltIGdldHRpbmcgYSBiaXQgaW1wYXRpZW50LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIG5leHQgaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzY3JvbGwgZG93biwgZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSYjMzk7cyBhY3RpbmcgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkbywgb3Igd2hhdCBpdCAqaXNuJiMzOTt0Ki4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbWVzIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHRcdC5jbXBfZW5jYXAgPSBzZWc2X2VuY2FwX2NtcCxcbiA5NDE6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIDk0MjpcdH07XG4gOTQzOlx0XG4gOTQ0Olx0aW50IF9faW5pdCBzZWc2X2lwdHVubmVsX2luaXQodm9pZClcbiA5NDU6XHR7XG4gOTQ2Olx0XHRyZXR1cm4gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XG4gOTQ3Olx0fVxuIDk0ODpcdFxuIDk0OTpcdHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpXG4gOTUwOlx0e1xuIDk1MTpcdFx0bHd0dW5uZWxfZW5jYXBfZGVsX29wcyhcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XG4gOTUyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNSdjYgTGlnaHR3ZWlnaHQgVHVubmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBzZWc2X2RvX3NyaGAgd2l0aGluIGBuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBgIGFuZCBgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEYCBjYXNlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIHRoZSB1bmNvbmRpdGlvbmFsIGBwc2tiX2V4cGFuZF9oZWFkYCBjYWxsIHdpdGggYHNrYl9jb3dfaGVhZGAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudDsgdGhlIGZvcm1lciB1bm5lY2Vzc2FyaWx5IGV4cGFuZHMgaGVhZHJvb20sIHdoaWxlIHRoZSBsYXR0ZXIgaW50ZWxsaWdlbnRseSBleHBhbmRzIG9ubHkgaWYgdGhlIGhlYWQgaXMgc2hhcmVkIG9yIGluc3VmZmljaWVudC4gVGhpcyBpcyBjb3JlIFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIHByb2Nlc3NpbmcsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWxseSBzb3VuZC4gVGhlIHBhdGggaXMgd2VsbC1kZWZpbmVkIGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIOKAkyBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3MgdmlhIGBpcCByb3V0ZWAgb3IgbmV0bGluayBhcmUgdGhlIHdheSBpbi4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHByZXJlcXVpc2l0ZXMuIEV4YW1pbmluZyBgbmV0L2lwdjYvTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYHNlZzZfaXB0dW5uZWwub2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgaXMgc2V0LCBhbmQgdGhlIGBLY29uZmlnYCByZXZlYWxzIHRoYXQgYElQVjZfU0VHNl9MV1RVTk5FTGAgcmVxdWlyZXMgYElQVjZgIHRvIGJlIGVuYWJsZWQuIFNvLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBJUFY2YCBhbmQgYElQVjZfU0VHNl9MV1RVTk5FTGAgYXMga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBJIHdpbGwga2VlcCBhbiBleWUgb24gYElQVjZfU0VHNl9ITUFDYCwgYWx0aG91Z2ggdGhlIGZvY3VzIGlzIG9uIHRoZSBTUnY2IHR1bm5lbCBlbmNhcHN1bGF0aW9uIGl0c2VsZi4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeXBvaW50cyBoZXJlLiBJbiBgc2VnNl9pcHR1bm5lbC5jYCBpdHNlbGYsIHRoZXJlIGFyZSBzZXZlcmFsIGtleSBub24taG90LXBhdGggQVBJIGVudHJpZXM6IGBzZWc2X2lucHV0YCAoY2FsbGVkIHZpYSB0aGUgbHd0dW5uZWwgb3BzIGBpbnB1dGApLCBgc2VnNl9vdXRwdXRgIChsd3R1bm5lbCBvcHMgYG91dHB1dGApLCBgc2VnNl9idWlsZF9zdGF0ZWAgKG5ldGxpbmsvbHd0dW5uZWwgYGJ1aWxkX3N0YXRlYCksIGBzZWc2X2RvX3NyaF9pbmxpbmVgICh3aGljaCBpcyBleHBvcnRlZCksIGFuZCBgc2VnNl9pcHR1bm5lbF9pbml0YC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBzZWc2X2lucHV0YCwgYHNlZzZfb3V0cHV0YCwgYW5kIGBzZWc2X2J1aWxkX3N0YXRlYCBhcmUgbm90IHN0YXRpYywgb3IgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCwgbm9uLXN0YXRpYywgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2VnNiBmYW1pbHkgb2YgZmlsZXMuIEluIHRoZSBrZXJuZWwsIGl04oCZcyByYXJlIGZvciBzdGF0aWMgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgKGxpa2UgdGhlIHNlZzZfKiBmdW5jdGlvbnMpIHRvIGJlIGlubGluZWQgdW5sZXNzIHRoZSBjb21waWxlciBpcyB1bmRlciBleHRyZW1lIHByZXNzdXJlIHRvIG9wdGltaXplLiBUaGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGZvciBgc2VnNl9pcHR1bl9vcHNgLCBzbyB0aGUgY29tcGlsZXIgKnNob3VsZCogcmV0YWluIHRoZSBzeW1ib2xzLiBMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBvdGhlciBgbmV0L2lwdjYvc2VnNiouY2AgZmlsZXMganVzdCB0byBiZSBzdXJlLCBhbmQgdmVyaWZ5IHRob3NlIHN5bWJvbHMgYXJlIGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvcmUgY29kZSwgcGFydGljdWxhcmx5IGBuZXQvaXB2Ni9zZWc2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgU1J2NiBsb2dpYyBzaG91bGQgcmVzaWRlLCBoYW5kbGluZyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gT2YgY291cnNlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIElQdjYgYW5kIGl0cyBmbGV4aWJpbGl0eSwgdGhlIGltcGxlbWVudGF0aW9uIGNvdWxkIGJlIHNwcmVhZCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gKm90aGVyKiBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9gIGRpcmVjdG9yeSBhcyB3ZWxsLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlZmluZWQgZWxzZXdoZXJlLCBwb3RlbnRpYWxseSBpbiBmaWxlcyBsaWtlIHRob3NlIHJlbGF0ZWQgdG8gcm91dGluZyBoZWFkZXJzLCBleHRlbnNpb24gaGVhZGVycywgb3IgZXZlbiB0aGUgSVB2NiBwcm90b2NvbCBpdHNlbGYuIEkgc2hvdWxkIGJlIHByZXBhcmVkIHRvIHRyYWNlIGZ1bmN0aW9uIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgY29tcG9uZW50cyB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgc2VnNi5jYCBhbmQgc2VlIHdoZXJlIGl0IGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzZWc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9obWFjLmM9MTAwPWludCBzZWc2X2htYWNfY29tcHV0ZShzdHJ1Y3Qgc2VnNl9obWFjX2luZm8gKmhpbmZvLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmhkcixcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0xNjgtfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MTY5OkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2NvbXB1dGUpO1xubmV0L2lwdjYvc2VnNl9obWFjLmMtMTcwLVxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTE3Nj1ib29sIHNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMjAtfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjIxOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX3ZhbGlkYXRlX3NrYik7XG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMjItXG4tLVxubmV0L2lwdjYvc2VnNl9obWFjLmM9MjI0PXN0cnVjdCBzZWc2X2htYWNfaW5mbyAqc2VnNl9obWFjX2luZm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMzItfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjMzOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fbG9va3VwKTtcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTIzNC1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTIzNT1pbnQgc2VnNl9obWFjX2luZm9fYWRkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSwgc3RydWN0IHNlZzZfaG1hY19pbmZvICpoaW5mbylcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yNTctfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjU4OkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fYWRkKTtcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI1OS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTI2MD1pbnQgc2VnNl9obWFjX2luZm9fZGVsKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yNzktfVxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjgwOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fZGVsKTtcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI4MS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTI4Mj1pbnQgc2VnNl9wdXNoX2htYWMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMwNS19XG5uZXQvaXB2Ni9zZWc2X2htYWMuYzozMDY6RVhQT1JUX1NZTUJPTChzZWc2X3B1c2hfaG1hYyk7XG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0zMDctXG4tLVxubmV0L2lwdjYvc2VnNl9obWFjLmM9MzE1PXZvaWQgX19uZXRfZXhpdCBzZWc2X2htYWNfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMyMC19XG5uZXQvaXB2Ni9zZWc2X2htYWMuYzozMjE6RVhQT1JUX1NZTUJPTChzZWc2X2htYWNfbmV0X2V4aXQpO1xuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMTg9aW50IHNlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCwgaW50IHByb3RvKVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yMjEtfVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIyMjpFWFBPUlRfU1lNQk9MX0dQTChzZWc2X2RvX3NyaF9lbmNhcCk7XG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjIzLVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz00Nzk9aW50IHNlZzZfZG9fc3JoX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgpXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTQ4Mi19XG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6NDgzOkVYUE9SVF9TWU1CT0xfR1BMKHNlZzZfZG9fc3JoX2lubGluZSk7XG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDg0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQwNQoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzZWc2X2lwdHVubmVsLmNgIE1vZHVsZSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIGBzZWc2X2lwdHVubmVsLmNgIHJldmVhbHMgc29tZSBrZXkgZnVuY3Rpb25zOiBgc2VnNl9kb19zcmhfZW5jYXBgLCBgc2VnNl9kb19zcmhfaW5saW5lYCwgYHNlZzZfYnVpbGRfc3RhdGVgLCBgc2VnNl9pbnB1dGAsIGFuZCBgc2VnNl9vdXRwdXRgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBoYW5kbGluZyBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSB3aXRoaW4gdGhlIGxpZ2h0d2VpZ2h0IHR1bm5lbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIFNSdjYgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIFRoZSBwcmVzZW5jZSBvZiBgSVBWNmAgYW5kIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGlzIGV4cGVjdGVkLiBUaGlzIGNvbmZpcm1zIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgYXJlIGF2YWlsYWJsZS4KClRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgcGF0Y2ggZml4aW5nIHRoZSBidWZmZXIgaGFuZGxpbmcgaW4gYHNlZzZfZG9fc3JoYCDigJMgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgZnJvbSBgcHNrYl9leHBhbmRfaGVhZGAgdG8gYHNrYl9jb3dfaGVhZGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2Ygd2hlcmUgeW91IGNhbiBnZXQgaW50byB0cm91YmxlIHdpdGggYnVmZmVyIG92ZXJmbG93cyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIFRoaXMgZGlyZWN0bHkgdG91Y2hlcyBkYXRhIHBhdGggcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIG1ha2VzIGl0IGFic29sdXRlbHkgcHJpbWUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyBpbiBTUnY2IEwyRU5DQVAgbW9kZSBhbmQgdGVzdGFibGUgd2l0aCBzdGFuZGFyZCBuZXR3b3JrIHRvb2xzIChzb2NrZXRzLCBuZXRsaW5rKSBhbmQgc2ltdWxhdGlvbiBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBzZWFscyB0aGUgZGVhbC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAgaGVyZS4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgc3VidGxlLCBoYXJkLXRvLWZpbmQgYnVncyB0aGF0IGZ1enppbmcgd2lsbCBleHBvc2UuCgpTbywgbXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiB0aG9zZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IOKAkyBhbGwgdGhvc2UgZnVuY3Rpb25zIG1lbnRpb25lZCBhYm92ZSwgYnV0IGVzcGVjaWFsbHkgYHNlZzZfZG9fc3JoX2VuY2FwYCBhbmQgYHNlZzZfZG9fc3JoX2lubGluZWAgZHVlIHRvIHRoZSBidWZmZXIgaGFuZGxpbmcgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGlucHV0IGZvcm1hdHMgSSBmZWVkIHRoZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyB0aGUgb3V0cHV0IGdlbmVyYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBzYW5pdHkgY2hlY2sgb24gc2V0LXJlc3VsdHMgY2FsbHMuIEkmIzM5O20gaW1hZ2luaW5nIGEgZnV6emVyIHRoYXQgY2FuIGNyYWZ0IFNSdjYgcGFja2V0cyB3aXRoIHZhcmlvdXMgc2VnbWVudCBsaXN0cyBhbmQgZW5jYXBzdWxhdGlvbiBvcHRpb25zLCB0aGVuIG1vbml0b3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVzZSBwYWNrZXRzLiBUaGUgZ29hbCBpcyB0byB0cmlnZ2VyIHRob3NlIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9kb19zcmhfZW5jYXAmIzM0OywKICAgICYjMzQ7c2VnNl9kb19zcmhfaW5saW5lJiMzNDssCiAgICAmIzM0O3NlZzZfYnVpbGRfc3RhdGUmIzM0OywKICAgICYjMzQ7c2VnNl9pbnB1dCYjMzQ7LAogICAgJiMzNDtzZWc2X291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkKCkgd2l0aCBza2JfY293X2hlYWQoKSBpbiBzZWc2X2RvX3NyaCgpIHRvIGVuc3VyZSBhZGVxdWF0ZSBoZWFkcm9vbSBhbmQgdGhhdCB0aGUgc2tiIGhlYWRlciBpcyB1bnNoYXJlZC93cml0YWJsZSBiZWZvcmUgcmVidWlsZGluZyB0aGUgTUFDIGhlYWRlciBhbmQgcHVzaGluZyBpdC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGJ1ZmZlciBoZWFkZXIgaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgd3JpdGFiaWxpdHkgY2hlY2tzIGZvciBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChza19idWZmKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gbmV0d29yayBza2IgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzE3OTY3ZmNiZDdiYmUxZDc3ZDM3MDdhOWQ2ODYwNzIwNDU2Njc4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDA6NDE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMKaW5kZXggNjFjNmEyN2JmMjAyZC4uYTY1NTZlZmQ4ZTBiMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYwpAQCAtNDQ2LDggJiM0Mzs0NDYsOSBAQCBzdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdCkKIAkJaWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi0mZ3Q7bWFjX2xlbiwgMCwgR0ZQX0FUT01JQykgJmx0OyAwKQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQllcnIgPSBza2JfY293X2hlYWQoc2tiLCBza2ItJmd0O21hY19sZW4pOwomIzQzOwkJaWYgKHVubGlrZWx5KGVycikpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAogCQlza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7CiAJCXNrYl9wdXNoKHNrYiwgc2tiLSZndDttYWNfbGVuKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgYW5kIENvbnRleHR1YWxpemluZyB0aGUgUGF0Y2gqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzLiBGaXJzdCwgSSB3YW50IHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZi4gVGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IElzIHRoaXMgYSBmaXgsIGEgZmVhdHVyZSwgYW4gb3B0aW1pemF0aW9uPyBXaGF0JiMzOTtzIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2U/CgpUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGxhY2UgdG8gc3RhcnQgc2VlbXMgdG8gYmUgYG5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY2AgYXJvdW5kIGxpbmUgNDQ2LiBUaGF0IGFyZWEgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgc2VjdGlvbiwgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIGltcGFjdC4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjA6XHRcdFx0aWYgKGVycilcbiA0MjE6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDQyMjpcdFxuIDQyMzpcdFx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKVxuIDQyNDpcdFx0XHRcdHByb3RvID0gSVBQUk9UT19JUFY2O1xuIDQyNTpcdFx0XHRlbHNlIGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxuIDQyNjpcdFx0XHRcdHByb3RvID0gSVBQUk9UT19JUElQO1xuIDQyNzpcdFx0XHRlbHNlXG4gNDI4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI5Olx0XG4gNDMwOlx0XHRcdGlmICh0aW5mby1cdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9FTkNBUClcbiA0MzE6XHRcdFx0XHRlcnIgPSBfX3NlZzZfZG9fc3JoX2VuY2FwKHNrYiwgdGluZm8tXHUwMDNlc3JoLCBwcm90byxcbiA0MzI6XHRcdFx0XHRcdFx0XHQgIGNhY2hlX2RzdCwgXHUwMDI2c2x3dC1cdTAwM2V0dW5zcmMpO1xuIDQzMzpcdFx0XHRlbHNlXG4gNDM0Olx0XHRcdFx0ZXJyID0gc2VnNl9kb19zcmhfZW5jYXBfcmVkKHNrYiwgdGluZm8tXHUwMDNlc3JoLCBwcm90byxcbiA0MzU6XHRcdFx0XHRcdFx0XHQgICAgY2FjaGVfZHN0LCBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDM2Olx0XG4gNDM3Olx0XHRcdGlmIChlcnIpXG4gNDM4Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA0Mzk6XHRcbiA0NDA6XHRcdFx0c2tiX3NldF9pbm5lcl90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gNDQxOlx0XHRcdHNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wpO1xuIDQ0MjpcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiA0NDM6XHRcdFx0YnJlYWs7XG4gNDQ0Olx0XHRjYXNlIFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQOlxuIDQ0NTpcdFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRUQ6XG4gNDQ2Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIDQ0NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0ODpcdFxuIDQ0OTpcdFx0XHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gNDUwOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDQ1MTpcdFx0XHRcdHJldHVybiBlcnI7XG4gNDUyOlx0XG4gNDUzOlx0XHRcdHNrYl9tYWNfaGVhZGVyX3JlYnVpbGQoc2tiKTtcbiA0NTQ6XHRcdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gNDU1Olx0XG4gNDU2Olx0XHRcdGlmICh0aW5mby1cdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQKVxuIDQ1NzpcdFx0XHRcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cdTAwM2VzcmgsXG4gNDU4Olx0XHRcdFx0XHRcdFx0ICBJUFBST1RPX0VUSEVSTkVULCBjYWNoZV9kc3QsXG4gNDU5Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZzbHd0LVx1MDAzZXR1bnNyYyk7XG4gNDYwOlx0XHRcdGVsc2VcbiA0NjE6XHRcdFx0XHRlcnIgPSBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc2tiLCB0aW5mby1cdTAwM2VzcmgsXG4gNDYyOlx0XHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fRVRIRVJORVQsIGNhY2hlX2RzdCxcbiA0NjM6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2c2x3dC1cdTAwM2V0dW5zcmMpO1xuIDQ2NDpcdFxuIDQ2NTpcdFx0XHRpZiAoZXJyKVxuIDQ2NjpcdFx0XHRcdHJldHVybiBlcnI7XG4gNDY3Olx0XG4gNDY4Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIDQ2OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSGVhZHJvb20gTWFuYWdlbWVudCBpbiBTS0JzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBza2JfY293X2hlYWQoc2tiLCBza2ItJmd0O21hY19sZW4pYCBhbmQgYHBza2JfZXhwYW5kX2hlYWQoc2tiLCBza2ItJmd0O21hY19sZW4sIDAsIEdGUF9BVE9NSUMpYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHBza2JfZXhwYW5kX2hlYWRgIHNlZW1zIHRvIGhhdmUgYmVlbiByYXRoZXIgdW5jb25kaXRpb25hbCBhYm91dCBleHBhbmRpbmcgdGhlIFNLQiYjMzk7cyBoZWFkLCBvciBtYXliZSBpdCB3YXNuJiMzOTt0IHVuc2hhcmluZyB0aGUgU0tCIGlmIGl0IHdhcyBhbHJlYWR5IGNsb25lZCwgZXZlbiBpZiBleHBhbnNpb24gd2FzbiYjMzk7dCBuZWNlc3NhcnkuCgpJIHNlZSB0aGF0IGBza2JfY293X2hlYWQoc2tiLCBkZWx0YSlgIGlzIG1vcmUgdGFyZ2V0ZWQuIEl0IHNlZW1zIHRvIGd1YXJhbnRlZSB0d28gdGhpbmdzOiBGaXJzdCwgaXQgKmVuc3VyZXMqIHRoZXJlJiMzOTtzIGF0IGxlYXN0IGBkZWx0YWAgYnl0ZXMgb2YgaGVhZHJvb20uIFNlY29uZCwgYW5kIGNydWNpYWxseSwgaXQgbWFrZXMgc3VyZSB0aGUgaGVhZGVyIGlzbiYjMzk7dCBzaGFyZWQgb3IgY2xvbmVkLiBJdCBlc3NlbnRpYWxseSBtYWtlcyB0aGUgU0tCJiMzOTtzIGhlYWRlciB3cml0YWJsZSBieSBlbnN1cmluZyBpdCBoYXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tLiBUaGlzIGlzIHRoZSBjb3JlIGRpZmZlcmVuY2UsIEkgYmVsaWV2ZS4KCkkgbWlnaHQgbmVlZCB0byBkaWcgaW50byB0aGUgYHNrYl9jb3dfaGVhZGAgaW1wbGVtZW50YXRpb24gb3IgcGVyaGFwcyB0aGUgZGVmaW5pdGlvbnMgaWYgSSBuZWVkIHRvIGNsYXJpZnkgYW55dGhpbmcgZnVydGhlciwgYnV0IHRoaXMgaXMgdGhlIGdpc3Qgb2YgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3dfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0zOTIxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzNS0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzkzNjpzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNrYnVmZi5oYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUg4oCTIHNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDM5MzYgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyBsaWtlbHkgdG8gbG9vayBhdCBob3cgZGF0YSBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZSwgbWF5YmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgZnJhZ21lbnRhdGlvbiwgb3IgcGVyaGFwcyBzcGVjaWZpYyBmbGFncyB0aGF0IGNvbnRyb2wgcGFja2V0IHByb2Nlc3NpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgbWFjcm8gaW1wbGVtZW50YXRpb25zIGluIHRoYXQgdmljaW5pdHksIGFuZCBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIHRoZW0gd2l0aCBhIGZpbmUtdG9vdGggY29tYi4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaGVscHMgbWUgcmVzb2x2ZSB0aGUgY3VycmVudCBwcm9ibGVtIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzkyMDpcdCAqL1xuMzkyMTpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuMzkyMjpcdHtcbjM5MjM6XHRcdHJldHVybiBfX3NrYl9jb3coc2tiLCBoZWFkcm9vbSwgc2tiX2Nsb25lZChza2IpKTtcbjM5MjQ6XHR9XG4zOTI1Olx0XG4zOTI2Olx0LyoqXG4zOTI3Olx0ICpcdHNrYl9jb3dfaGVhZCAtIHNrYl9jb3cgYnV0IG9ubHkgbWFraW5nIHRoZSBoZWFkIHdyaXRhYmxlXG4zOTI4Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBjb3dcbjM5Mjk6XHQgKlx0QGhlYWRyb29tOiBuZWVkZWQgaGVhZHJvb21cbjM5MzA6XHQgKlxuMzkzMTpcdCAqXHRUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBza2JfY293IGV4Y2VwdCB0aGF0IHdlIHJlcGxhY2UgdGhlXG4zOTMyOlx0ICpcdHNrYl9jbG9uZWQgY2hlY2sgYnkgc2tiX2hlYWRlcl9jbG9uZWQuICBJdCBzaG91bGQgYmUgdXNlZCB3aGVuXG4zOTMzOlx0ICpcdHlvdSBvbmx5IG5lZWQgdG8gcHVzaCBvbiBzb21lIGhlYWRlciBhbmQgZG8gbm90IG5lZWQgdG8gbW9kaWZ5XG4zOTM0Olx0ICpcdHRoZSBkYXRhLlxuMzkzNTpcdCAqL1xuMzkzNjpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3dfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4zOTM3Olx0e1xuMzkzODpcdFx0cmV0dXJuIF9fc2tiX2Nvdyhza2IsIGhlYWRyb29tLCBza2JfaGVhZGVyX2Nsb25lZChza2IpKTtcbjM5Mzk6XHR9XG4zOTQwOlx0XG4zOTQxOlx0LyoqXG4zOTQyOlx0ICpcdHNrYl9wYWR0b1x0LSBwYWQgYW4gc2tidWZmIHVwIHRvIGEgbWluaW1hbCBzaXplXG4zOTQzOlx0ICpcdEBza2I6IGJ1ZmZlciB0byBwYWRcbjM5NDQ6XHQgKlx0QGxlbjogbWluaW1hbCBsZW5ndGhcbjM5NDU6XHQgKlxuMzk0NjpcdCAqXHRQYWRzIHVwIGEgYnVmZmVyIHRvIGVuc3VyZSB0aGUgdHJhaWxpbmcgYnl0ZXMgZXhpc3QgYW5kIGFyZVxuMzk0NzpcdCAqXHRibGFua2VkLiBJZiB0aGUgYnVmZmVyIGFscmVhZHkgY29udGFpbnMgc3VmZmljaWVudCBkYXRhIGl0XG4zOTQ4Olx0ICpcdGlzIHVudG91Y2hlZC4gT3RoZXJ3aXNlIGl0IGlzIGV4dGVuZGVkLiBSZXR1cm5zIHplcm8gb25cbjM5NDk6XHQgKlx0c3VjY2Vzcy4gVGhlIHNrYiBpcyBmcmVlZCBvbiBlcnJvci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwNgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA0NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTS0IgSGVhZHJvb20gQ2hhbmdlIGluIGBzZWc2X2RvX3NyaF9lbmNhcGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGhlcmUgaXMgcmVwbGFjaW5nIGBwc2tiX2V4cGFuZF9oZWFkYCB3aXRoIGBza2JfY293X2hlYWRgIHdpdGhpbiBgc2VnNl9kb19zcmhgIHNwZWNpZmljYWxseSBmb3IgTDIgZW5jYXBzdWxhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuIEl0IHNlZW1zIHRoaXMgaXMgYWJvdXQgbWFuYWdpbmcgdGhlIFNvY2tldCBCdWZmZXIgKHNrYikgaGVhZCwgZW5zdXJpbmcgaXQmIzM5O3Mgd3JpdGFibGUgYW5kIG5vdCBzaGFyZWQgYmVmb3JlIHdlIG1vZGlmeSB0aGUgaGVhZGVyIGR1cmluZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24g4oCTIHRoaW5rIGBza2JfbWFjX2hlYWRlcl9yZWJ1aWxkYCwgYHNrYl9wdXNoYCwgYW5kIHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXRzZWxmLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIENvdWxkIHRoaXMgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eT8gRGlnZ2luZyBkZWVwZXIsIGBza2JfY293X2hlYWRgIHNlZW1zIHNhZmUgaW4gdGhpcyByZWdhcmQuIEl0IGVpdGhlciByZWFsbG9jYXRlcyB0aGUgc2tiIGhlYWQgKGVmZmVjdGl2ZWx5IGNhbGxpbmcgYHBza2JfZXhwYW5kX2hlYWRgIGJlaGluZCB0aGUgc2NlbmVzKSBvciwgaWYgdGhlIGhlYWRyb29tIGlzIGFscmVhZHkgYXZhaWxhYmxlIGFuZCBpbml0aWFsaXplZCwgbGVhdmVzIGl0IHVudG91Y2hlZC4gQ3J1Y2lhbGx5LCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG5vciBkb2VzIGl0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZGlyZWN0bHkuIFdlJiMzOTtyZSBvcGVyYXRpbmcgb24gbmV0d29yayBwYWNrZXQgYnVmZmVycywgd2hpY2ggYXJlICpzdXBwb3NlZCogdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUmIzM5O3Mgbm8gaW5kaWNhdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8gbGVha3MsIG9yIGlzc3VlcyB3aXRoIHN0cnVjdCBwYWRkaW5nIGhlcmUuCgpOb3csIGxldCYjMzk7cyBzaGlmdCB0byBLTVNBTiBjb25zaWRlcmF0aW9ucy4gS01TQU4gZmxhZ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGlzIGNoYW5nZSwgYXQgaXRzIGhlYXJ0LCBpcyBhIHN0YW5kYXJkIFNLQiBoZWFkcm9vbS9jbG9uaW5nIG1hbmFnZW1lbnQgY29ycmVjdGlvbjogZW5zdXJpbmcgdGhlIHNrYiBoZWFkIGlzIHdyaXRhYmxlLCBhbmQgaGFuZGxpbmcgZXJyb3JzIGNvcnJlY3RseS4gU2luY2Ugd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcG90ZW50aWFsIGxlYWtzIHRoYXQgSSBjYW4gc2VlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGlzIGlzIGEgZml4LCBub3QgYSBuZXcgZmVhdHVyZSB0aGF0IGNvdWxkIGludHJvZHVjZSBuZXcgaXNzdWVzLiBUaGUgdG9vbCYjMzk7cyBjaGVja3Mgb2YgS01TQU4gdnMgS0FTQU4gYXJlIHJlbGV2YW50IGhlcmUsIGFuZCBpdCBwcm9wZXJseSBhc3Nlc3NlcyB0aGUgcmlza3MuCgpUaGVyZWZvcmUsIHRoaXMgaXMgYSBzdGFuZGFyZCBhbmQgc2FmZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgcHNrYl9leHBhbmRfaGVhZCgpIHdpdGggc2tiX2Nvd19oZWFkKCkgaW4gc2VnNl9kb19zcmgoKSB0byBlbnN1cmUgYWRlcXVhdGUgaGVhZHJvb20gYW5kIHRoYXQgdGhlIHNrYiBoZWFkZXIgaXMgdW5zaGFyZWQvd3JpdGFibGUgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIE1BQyBoZWFkZXIgYW5kIHB1c2hpbmcgaXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBidWZmZXIgaGVhZGVyIGhlYWRyb29tIG1hbmFnZW1lbnQgYW5kIHdyaXRhYmlsaXR5IGNoZWNrcyBmb3IgbmV0d29yayBwYWNrZXQgYnVmZmVycyAoc2tfYnVmZikuIEl0IGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGJ1ZmZlciBib3VuZHMgaXNzdWVzIGluIG5ldHdvcmsgc2tiIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjA5LjM3NDc2NDczMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTY2MjA1MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfZG9fc3JoX2VuY2FwXCIsXG4gICAgXCJzZWc2X2RvX3NyaF9pbmxpbmVcIixcbiAgICBcInNlZzZfYnVpbGRfc3RhdGVcIixcbiAgICBcInNlZzZfaW5wdXRcIixcbiAgICBcInNlZzZfb3V0cHV0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkKCkgd2l0aCBza2JfY293X2hlYWQoKSBpbiBzZWc2X2RvX3NyaCgpIHRvIGVuc3VyZSBhZGVxdWF0ZSBoZWFkcm9vbSBhbmQgdGhhdCB0aGUgc2tiIGhlYWRlciBpcyB1bnNoYXJlZC93cml0YWJsZSBiZWZvcmUgcmVidWlsZGluZyB0aGUgTUFDIGhlYWRlciBhbmQgcHVzaGluZyBpdC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGJ1ZmZlciBoZWFkZXIgaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgd3JpdGFiaWxpdHkgY2hlY2tzIGZvciBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChza19idWZmKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gbmV0d29yayBza2IgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjA5LjM3NDc2OTA0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODkwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzE3OTY3ZmNiZDdiYmUxZDc3ZDM3MDdhOWQ2ODYwNzIwNDU2Njc4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjQxOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYyBiL25ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY1xcbmluZGV4IDYxYzZhMjdiZjIwMmQuLmE2NTU2ZWZkOGUwYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXFxuQEAgLTQ0Niw4ICs0NDYsOSBAQCBzdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdClcXG4gXFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBza2ItXFx1MDAzZW1hY19sZW4sIDAsIEdGUF9BVE9NSUMpIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuK1xcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0XFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xcbiBcXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjA5Ljg2NDM1NTcxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzA5MTkyMDU0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9kb19zcmhfZW5jYXBcIixcbiAgICBcInNlZzZfZG9fc3JoX2lubGluZVwiLFxuICAgIFwic2VnNl9idWlsZF9zdGF0ZVwiLFxuICAgIFwic2VnNl9pbnB1dFwiLFxuICAgIFwic2VnNl9vdXRwdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwc2tiX2V4cGFuZF9oZWFkIHdpdGggc2tiX2Nvd19oZWFkIGluIHNlZzZfZG9fc3JoIHdoZW4gcHJvY2Vzc2luZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24gbW9kZXMsIGVuc3VyaW5nIHRoZSBza2IgaGVhZCBpcyBwcm9wZXJseSB1bnNoYXJlZCBhbmQgZXhwYW5kZWQgYXMgcmVxdWlyZWQuIFRoaXMgdG91Y2hlcyB0aGUgcmVhY2hhYmxlIElQdjYgU2VnbWVudCBSb3V0aW5nIGxpZ2h0d2VpZ2h0IHR1bm5lbCBkYXRhcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcxNzk2N2ZjYmQ3YmJlMWQ3N2QzNzA3YTlkNjg2MDcyMDQ1NjY3ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjQxOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jIGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG5pbmRleCA2MWM2YTI3YmYyMDJkLi5hNjU1NmVmZDhlMGIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG4rKysgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbkBAIC00NDYsOCArNDQ2LDkgQEAgc3RhdGljIGludCBzZWc2X2RvX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpjYWNoZV9kc3QpXG4gXHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0XHRza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MDkuODY0MzU3NjA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQxNDg3MjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IGBzZWc2X2lwdHVubmVsLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0IGFuZCBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW5zcGVjdCB0aGUgZGlmZiwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jYC4gSSBzZWUgdGhlIGBzZWc2X2RvX3NyaGAgZnVuY3Rpb24gaGFzIGJlZW4gYWx0ZXJlZCwgc3BlY2lmaWNhbGx5IHRoZSBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIHRoZSByZXBsYWNlbWVudCBvZiBgcHNrYl9leHBhbmRfaGVhZGAgd2l0aCBgc2tiX2Nvd19oZWFkYC5cblxuTm93LCB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUuIFRvIG1ha2UgYSBqdWRnZW1lbnQgY2FsbCBhYm91dCB3aGV0aGVyIGZ1enppbmcgaXMgd29ydGh3aGlsZSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLCBhbmQgZGV0ZXJtaW5lIGlmIGl0J3MgZXZlbiByZWFjaGFibGUuIEknbGwgcmVhZCB0aGUgZmlsZSBpdHNlbGYgdXNpbmcgYHJlYWQtZmlsZWAgYW5kIGVtcGxveSBgZ3JlcHBlcmAgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGlkZW50aWZ5IHRoZSBjb25maWd1cmF0aW9uIHBhdGhzIGFuZCBuYXJyb3cgZG93biB0aGUgc2NvcGUuIFVsdGltYXRlbHksIHRoaXMgd2lsbCBpbmZvcm0gbWUgb2Ygd2hhdCBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldCBhbmQgd2hpY2ggaW5wdXRzIHdpbGwgcHJvdmlkZSB0aGUgbW9zdCBlZmZpY2llbnQgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNC4yNzkyMzI1NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdFxcdFxcdGVsc2UgaWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxcbiA0MjY6XFx0XFx0XFx0XFx0cHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuIDQyNzpcXHRcXHRcXHRlbHNlXFxuIDQyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0XFx0aWYgKHRpbmZvLVxcdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9FTkNBUClcXG4gNDMxOlxcdFxcdFxcdFxcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cXHUwMDNlc3JoLCBwcm90byxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgY2FjaGVfZHN0LCBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDMzOlxcdFxcdFxcdGVsc2VcXG4gNDM0OlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsIHByb3RvLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNhY2hlX2RzdCwgXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYyk7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdFxcdGlmIChlcnIpXFxuIDQzODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcXG4gNDQxOlxcdFxcdFxcdHNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBza2ItXFx1MDAzZXByb3RvY29sKTtcXG4gNDQyOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gNDQzOlxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUDpcXG4gNDQ1OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEOlxcbiA0NDY6XFx0XFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDQ0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gNDUwOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiA0NTE6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0XFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xcbiA0NTQ6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBza2ItXFx1MDAzZW1hY19sZW4pO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRcXHRpZiAodGluZm8tXFx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVApXFxuIDQ1NzpcXHRcXHRcXHRcXHRlcnIgPSBfX3NlZzZfZG9fc3JoX2VuY2FwKHNrYiwgdGluZm8tXFx1MDAzZXNyaCxcXG4gNDU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDYwOlxcdFxcdFxcdGVsc2VcXG4gNDYxOlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0NjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiA0Njk6XFx0XFx0XFx0YnJlYWs7XFxuIDQ3MDpcXHRcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbiA0NzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gNDc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNC4yNzkzMjI4MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0OTgxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9TRUc2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxubmV0L2lwdjYvS2NvbmZpZzozMTQ6XFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxNS1cXHRkZXBlbmRzIG9uIElQVjYgPSB5XFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI2OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjctaXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMjktXFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIzMDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXFx0LnNlZzZfcmVxdWlyZV9obWFjXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNDY9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mX2RmbHQgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVxcdC5zZWc2X2VuYWJsZWRcXHRcXHQ9IDAsXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTU6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk2LVxcdC5zZWc2X3JlcXVpcmVfaG1hY1xcdD0gMCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM4LVxcdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXNlZzZfZW5hYmxlZCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzM5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3NDAtXFx0YXJyYXlbREVWQ09ORl9TRUc2X1JFUVVJUkVfSE1BQ10gPSBSRUFEX09OQ0UoY25mLVxcdTAwM2VzZWc2X3JlcXVpcmVfaG1hYyk7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMjUtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNy1cXHR7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2LmhcXHUwMDNlXFxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDktI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODgtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTM5MC1cXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTExMjQ9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1Mi1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1MzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTExNTQtXFx0aWYgKHNyX2hhc19obWFjKHNyX3BoZHIpKSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2dlbmxfcG9saWN5W1NFRzZfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy0xNTAtXFxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNi5jLTE1Mi1cXG4tLVxcbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTI5OS1cXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2LmMtMzAxLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X2NhY2hlLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0xNDE9c3RhdGljIGludCBfX3NlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yMDEtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIwMjojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMy1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjU9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMjgtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTMzMC1cXHRpZiAodW5saWtlbHkoIXNraXBfc3JoIFxcdTAwMjZcXHUwMDI2IHNyX2hhc19obWFjKGlzcmgpKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0NT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODAtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM4MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTM4Mi1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Mjg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI1LVxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyLVxcdGlmIChzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz03NTg9c3RhdGljIGludCBlbmRfZmx2ODk4Nl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjktXFx0cGluZm8gPSBzZWc2X2dldF9zcmhfcGt0aW5mbyhzcmgpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NzEtXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNC4zMjg4MjYxNDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ5ODE4Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBpcyB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBuZXQvaXB2Ni9LY29uZmlnYC4gSSdsbCB3YW50IHRvIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDI4NiB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIGxheSBvdXQgYWxsIHRoZSBvcHRpb25zIGFuZCBhbnkgY29uZGl0aW9ucyB0aGF0IGNvbnRyb2wgd2hlbiB0aGV5IGFyZSBlbmFibGVkLiBUaW1lIHRvIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MTYuMjc4NjQ3MDYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbiAyODE6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbiAyODI6XFx0XFx0aGVscFxcbiAyODM6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IFBJTSBtdWx0aWNhc3Qgcm91dGluZyBwcm90b2NvbCBQSU0tU012Mi5cXG4gMjg0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjg1OlxcdFxcbiAyODY6XFx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAyODc6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDI4ODpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjg5OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAyOTA6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyOTE6XFx0XFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXFxuIDI5MjpcXHRcXHRoZWxwXFxuIDI5MzpcXHRcXHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxcbiAyOTQ6XFx0XFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMjk1OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXFxuIDI5NjpcXHRcXHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbiAzMDE6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMDM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAzMDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToxNi4yNzg3MzQ4OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY2NDcyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlIHlvdSBtZW50aW9uZWQ6XG5cbioqRXhhbWluaW5nIHNlZzZfaXB0dW5uZWwuYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0VHNiBvdmVyIElQdjYgdHVubmVsaW5nIGlzIGltcGxlbWVudGVkLCBhbmQgSSdtIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIGZpbGUgYHNlZzZfaXB0dW5uZWwuY2AuIE15IHByaW1hcnkgZ29hbCBpcyB0byBncmFzcCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgd2l0aGluIHRoaXMgZmlsZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvcmUgbG9naWMgb2YgY3JlYXRpbmcsIGNvbmZpZ3VyaW5nLCBhbmQgbWFuYWdpbmcgdGhlc2UgdHVubmVscy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgYXJjaGl0ZWN0dXJhbCBvdmVydmlldyBieSBzdHVkeWluZyB0aGlzIGZpbGUuIEkgZXhwZWN0IHRvIGZpbmQsIGF0IGEgbWluaW11bSwgdGhlIGRhdGEgc3RydWN0dXJlcyBkZXNjcmliaW5nIGEgU0VHNiB0dW5uZWwsIGFuZCBlbnRyeSBwb2ludHMgZm9yIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb24sIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgYW55IHJlbGV2YW50IGVycm9yIGhhbmRsaW5nIG9yIGhlbHBlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjE4LjM0NTIxMDUwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbiA0NzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3NjpcXHR9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdC8qIGluc2VydCBhbiBTUkggd2l0aGluIGFuIElQdjYgcGFja2V0LCBqdXN0IGFmdGVyIHRoZSBJUHY2IGhlYWRlciAqL1xcbiA0Nzk6XFx0aW50IHNlZzZfZG9fc3JoX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgpXFxuIDQ4MDpcXHR7XFxuIDQ4MTpcXHRcXHRyZXR1cm4gX19zZWc2X2RvX3NyaF9pbmxpbmUoc2tiLCBvc3JoLCBOVUxMKTtcXG4gNDgyOlxcdH1cXG4gNDgzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNlZzZfZG9fc3JoX2lubGluZSk7XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdC8qIGxvb2sgdXAgYSByb3V0ZSBpbiBhIHNwZWNpZmljIEZJQiB0YWJsZS5cXG4gNDg2OlxcdCAqIFJldHVybnMgYSByZWZjb3VudGVkIGRzdCwgb3IgTlVMTCBpZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QuXFxuIDQ4NzpcXHQgKi9cXG4gNDg4OlxcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X3RhYmxlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0OTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dpNiAqZmw2LCB1MzIgdGJsX2lkKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xcbiA0OTM6XFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0dGFibGUgPSBmaWI2X2dldF90YWJsZShuZXQsIHRibF9pZCk7XFxuIDQ5NjpcXHRcXHRpZiAoIXRhYmxlKVxcbiA0OTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdFxcdHJ0ID0gaXA2X3BvbF9yb3V0ZShuZXQsIHRhYmxlLCAwLCBmbDYsIHNrYiwgUlQ2X0xPT0tVUF9GX0hBU19TQUREUik7XFxuIDUwMDpcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuIDUwMTpcXHR9XFxuIDUwMjpcXHRcXG4gNTAzOlxcdHN0YXRpYyB2b2lkIHNlZzZfaW5pdF9mbG93aTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKmhkcixcXG4gNTA0OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dpNiAqZmw2KVxcbiA1MDU6XFx0e1xcbiA1MDY6XFx0XFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0Zmw2LVxcdTAwM2VkYWRkciA9IGhkci1cXHUwMDNlZGFkZHI7XFxuIDUwOTpcXHRcXHRmbDYtXFx1MDAzZXNhZGRyID0gaGRyLVxcdTAwM2VzYWRkcjtcXG4gNTEwOlxcdFxcdGZsNi1cXHUwMDNlZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGhkcik7XFxuIDUxMTpcXHRcXHRmbDYtXFx1MDAzZWZsb3dpNl9tYXJrID0gc2tiLVxcdTAwM2VtYXJrO1xcbiA1MTI6XFx0XFx0Zmw2LVxcdTAwM2VmbG93aTZfcHJvdG8gPSBoZHItXFx1MDAzZW5leHRoZHI7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdC8qIGxvb2sgdXAgdGhlIHJvdXRlIGZvciB0aGUgZmlyc3QgU0lEIG9uIHRoZSBpbnB1dCBwYXRoIGFuZCBzZXQgaXQgb24gdGhlIHNrYi5cXG4gNTE2OlxcdCAqIFJldHVybnMgdGhlIHJlZmNvdW50ZWQgZHN0LCBvciBOVUxMIGlmIGEgcmVmZXJlbmNlIGNvdWxkIG5vdCBiZSBzYWZlbHkgdGFrZW4uXFxuIDUxNzpcXHQgKi9cXG4gNTE4OlxcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X2lucHV0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gNTE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNlZzZfbHd0ICpzbHd0KVxcbiA1MjE6XFx0e1xcbiA1MjI6XFx0XFx0dTMyIHRhYmxlID0gc2x3dC1cXHUwMDNldGFibGU7XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdGlmICh0YWJsZSkge1xcbiA1MjU6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7XFxuIDUyNjpcXHRcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIDUyNzpcXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0XFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXFx1MDAyNmZsNik7XFxuIDUzMDpcXHRcXHRcXHRmbDYuZmxvd2k2X2lpZiA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4O1xcbiA1MzE6XFx0XFxuIDUzMjpcXHRcXHRcXHRkc3QgPSBzZWc2X3RhYmxlX2xvb2t1cChuZXQsIHNrYiwgXFx1MDAyNmZsNiwgdGFibGUpO1xcbiA1MzM6XFx0XFx0XFx0aWYgKCFkc3QpIHtcXG4gNTM0OlxcdFxcdFxcdFxcdGRzdCA9IFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LVxcdTAwM2Vkc3Q7XFxuIDUzNTpcXHRcXHRcXHRcXHRkc3RfaG9sZChkc3QpO1xcbiA1MzY6XFx0XFx0XFx0fVxcbiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4gNTM5OlxcdFxcdFxcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcXG4gNTQwOlxcdFxcdH0gZWxzZSB7XFxuIDU0MTpcXHRcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0XFx0LyogaXA2X3JvdXRlX2lucHV0KCkgc2V0cyBhIE5PUkVGIGRzdDsgZm9yY2UgYSByZWZjb3VudCBvbiBpdFxcbiA1NDQ6XFx0XFx0XFx0ICogYmVmb3JlIGNhY2hpbmcgb3IgZnVydGhlciB1c2UuXFxuIDU0NTpcXHRcXHRcXHQgKi9cXG4gNTQ2OlxcdFxcdFxcdHNrYl9kc3RfZm9yY2Uoc2tiKTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0cmV0dXJuIHNrYl9kc3Qoc2tiKTtcXG4gNTUwOlxcdH1cXG4gNTUxOlxcdFxcbiA1NTI6XFx0c3RhdGljIGludCBzZWc2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4gNTUzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTU0OlxcdHtcXG4gNTU1OlxcdFxcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcXG4gNTU2OlxcdH1cXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIGludCBzZWc2X2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuIDU1OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA1NjA6XFx0e1xcbiA1NjE6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb3JpZ19kc3QgPSBza2JfZHN0KHNrYik7XFxuIDU2MjpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbiA1NjM6XFx0XFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdDtcXG4gNTY0OlxcdFxcdHN0cnVjdCBzZWc2X2x3dCAqc2x3dDtcXG4gNTY1OlxcdFxcdGludCBlcnI7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdC8qIFdlIGNhbm5vdCBkZXJlZmVyZW5jZSBcXFwib3JpZ19kc3RcXFwiIG9uY2UgaXA2X3JvdXRlX2lucHV0KCkgb3JcXG4gNTY4OlxcdFxcdCAqIHNrYl9kc3RfZHJvcCgpIGlzIGNhbGxlZC4gSG93ZXZlciwgaW4gb3JkZXIgdG8gZGV0ZWN0IGEgZHN0IGxvb3AsIHdlXFxuIDU2OTpcXHRcXHQgKiBuZWVkIHRoZSBhZGRyZXNzIG9mIGl0cyBsd3RzdGF0ZS4gU28sIHNhdmUgdGhlIGFkZHJlc3Mgb2YgbHd0c3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MTguMzQ1MzI3OTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzE1NTY5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgc2VnNl9pcHR1bm5lbC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiBzb21lIGtleSBhc3BlY3RzLCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIG51YW5jZXMgb2YgdGhpcyBgc2VnNl9pcHR1bm5lbC5jYCBtb2R1bGUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgdHJhY2UgdGhyb3VnaCB0aGUgZW50aXJlIGNvZGUuIEkgd2FudCB0byBzZWUgKmFsbCogdGhlIG9wZXJhdGlvbnMgYW5kIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbi4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGZ1bmN0aW9uIG5hbWVzOyBpdCdzIGFib3V0IHNlZWluZyBob3cgdGhleSdyZSAqY29ubmVjdGVkKiwgaG93IHRoZSBkYXRhIGZsb3dzLCBhbmQgd2hlcmUgdGhlIGNyaXRpY2FsIGRlY2lzaW9ucyBhcmUgbWFkZSBpbiB0aGUgY29udHJvbCBhbmQgZGF0YSBwYXRocy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmFsIHZpZXcgc28gSSBkb24ndCBtaXNzIGFueXRoaW5nIHN1YnRsZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCBhbmQgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MjAuMDc2ODg3NDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHQgKiBub3cgYW5kIHVzZSBpdCBsYXRlciBhcyBhIGNvbXBhcmlzb24uXFxuIDU3MTpcXHRcXHQgKi9cXG4gNTcyOlxcdFxcdGx3dHN0ID0gb3JpZ19kc3QtXFx1MDAzZWx3dHN0YXRlO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobHd0c3QpO1xcbiA1NzU6XFx0XFxuIDU3NjpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIDU3NzpcXHRcXHRkc3QgPSBkc3RfY2FjaGVfZ2V0KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9pbnB1dCk7XFxuIDU3ODpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0ZXJyID0gc2VnNl9kb19zcmgoc2tiLCBkc3QpO1xcbiA1ODE6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4gNTgyOlxcdFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIDU4MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDU4NDpcXHRcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdGlmICh1bmxpa2VseSghZHN0KSkge1xcbiA1ODc6XFx0XFx0XFx0ZHN0ID0gc2VnNl9pbnB1dF9yb3V0ZShuZXQsIHNrYiwgc2x3dCk7XFxuIDU4ODpcXHRcXHRcXHRpZiAoIWRzdCkge1xcbiA1ODk6XFx0XFx0XFx0XFx0ZXJyID0gLUVORVRVTlJFQUNIO1xcbiA1OTA6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiA1OTE6XFx0XFx0XFx0fVxcbiA1OTI6XFx0XFxuIDU5MzpcXHRcXHRcXHQvKiBjYWNoZSBvbmx5IGlmIHdlIGRvbid0IGNyZWF0ZSBhIGRzdCByZWZlcmVuY2UgbG9vcCAqL1xcbiA1OTQ6XFx0XFx0XFx0aWYgKCFkc3QtXFx1MDAzZWVycm9yIFxcdTAwMjZcXHUwMDI2IGx3dHN0ICE9IGRzdC1cXHUwMDNlbHd0c3RhdGUpIHtcXG4gNTk1OlxcdFxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNTk2OlxcdFxcdFxcdFxcdGRzdF9jYWNoZV9zZXRfaXA2KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9pbnB1dCwgZHN0LFxcbiA1OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlc2FkZHIpO1xcbiA1OTg6XFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIDU5OTpcXHRcXHRcXHR9XFxuIDYwMDpcXHRcXG4gNjAxOlxcdFxcdFxcdGVyciA9IHNrYl9jb3dfaGVhZChza2IsIExMX1JFU0VSVkVEX1NQQUNFKGRzdF9kZXYoZHN0KSkpO1xcbiA2MDI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDYwMzpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDYwNDpcXHRcXHR9IGVsc2Uge1xcbiA2MDU6XFx0XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuIDYwNjpcXHRcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuIDYwNzpcXHRcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNjEwOlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9MT0NBTF9PVVQsXFxuIDYxMTpcXHRcXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgTlVMTCxcXG4gNjEyOlxcdFxcdFxcdFxcdCAgICAgICBza2JfZHN0X2Rldihza2IpLCBzZWc2X2lucHV0X2ZpbmlzaCk7XFxuIDYxMzpcXHRcXG4gNjE0OlxcdFxcdHJldHVybiBzZWc2X2lucHV0X2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4gNjE1OlxcdGRyb3A6XFxuIDYxNjpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNjE3OlxcdFxcdHJldHVybiBlcnI7XFxuIDYxODpcXHR9XFxuIDYxOTpcXHRcXG4gNjIwOlxcdHN0YXRpYyBpbnQgc2VnNl9pbnB1dF9uZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA2MjE6XFx0e1xcbiA2MjI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3RfZGV2KHNrYik7XFxuIDYyMzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDYyNjpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gNjI3OlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgTlVMTCxcXG4gNjI4OlxcdFxcdFxcdFxcdCAgICAgICBza2IsIE5VTEwsIGRldiwgc2VnNl9pbnB1dF9jb3JlKTtcXG4gNjI5OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuIDYzMDpcXHRcXHRcXHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIE5VTEwsXFxuIDYzMTpcXHRcXHRcXHRcXHQgICAgICAgc2tiLCBOVUxMLCBkZXYsIHNlZzZfaW5wdXRfY29yZSk7XFxuIDYzMjpcXHRcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2MzU6XFx0fVxcbiA2MzY6XFx0XFxuIDYzNzpcXHRzdGF0aWMgaW50IHNlZzZfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNjM4OlxcdHtcXG4gNjM5OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNjQwOlxcdFxcdFxcdHJldHVybiBzZWc2X2lucHV0X25mKHNrYik7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHJldHVybiBzZWc2X2lucHV0X2NvcmUoZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYik7XFxuIDY0MzpcXHR9XFxuIDY0NDpcXHRcXG4gNjQ1OlxcdC8qIGxvb2sgdXAgdGhlIHJvdXRlIGZvciB0aGUgZmlyc3QgU0lEIG9uIHRoZSBvdXRwdXQgcGF0aC4gQWx3YXlzIHJldHVybnMgYVxcbiA2NDY6XFx0ICogcmVmY291bnRlZCBkc3QuXFxuIDY0NzpcXHQgKi9cXG4gNjQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzZWc2X291dHB1dF9kc3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2ICpmbDYsXFxuIDY1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QpXFxuIDY1MjpcXHR7XFxuIDY1MzpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdGlmIChzbHd0LVxcdTAwM2V0YWJsZSkge1xcbiA2NTY6XFx0XFx0XFx0ZHN0ID0gc2VnNl90YWJsZV9sb29rdXAobmV0LCBza2IsIGZsNiwgc2x3dC1cXHUwMDNldGFibGUpO1xcbiA2NTc6XFx0XFx0XFx0aWYgKCFkc3QpIHtcXG4gNjU4OlxcdFxcdFxcdFxcdGRzdCA9IFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LVxcdTAwM2Vkc3Q7XFxuIDY1OTpcXHRcXHRcXHRcXHRkc3RfaG9sZChkc3QpO1xcbiA2NjA6XFx0XFx0XFx0fVxcbiA2NjE6XFx0XFx0fSBlbHNlIHtcXG4gNjYyOlxcdFxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBmbDYpO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRcXHRyZXR1cm4gZHN0O1xcbiA2NjY6XFx0fVxcbiA2Njc6XFx0XFxuIDY2ODpcXHRzdGF0aWMgaW50IHNlZzZfb3V0cHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuIDY2OTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MjAuMDc2OTk4NDM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDI4MTc1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIERlZXAgaW50byBzZWc2X2lwdHVubmVsLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBrZWVwIHBsdWdnaW5nIGF3YXkgYXQgYHNlZzZfaXB0dW5uZWwuY2AuIEkgbmVlZCB0byBnZXQgYSBmdWxsIGhhbmRsZSBvbiB0aGlzIGNvZGUsIHNvIEknbSBnb2luZyB0byByZWFkIGl0IG1ldGhvZGljYWxseSwgcmlnaHQgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBObyBza2ltbWluZyBvciBqdW1waW5nIGFyb3VuZCBqdXN0IHlldDsgSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIHN0cnVjdHVyZSBhbmQgbG9naWMgZmxvdyBiZWZvcmUgSSBzdGFydCBwaW5wb2ludGluZyBzcGVjaWZpYyBhcmVhcyBvZiBpbnRlcmVzdCBvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtYXAgb2YgdGhpcyBtb2R1bGUuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB3aXRoaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjIxLjk3OTgxODg0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0e1xcbiA2NzE6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb3JpZ19kc3QgPSBza2JfZHN0KHNrYik7XFxuIDY3MjpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbiA2NzM6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0O1xcbiA2NzQ6XFx0XFx0aW50IGVycjtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0c2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKG9yaWdfZHN0LVxcdTAwM2Vsd3RzdGF0ZSk7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjc5OlxcdFxcdGRzdCA9IGRzdF9jYWNoZV9nZXQoXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX291dHB1dCk7XFxuIDY4MDpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0ZXJyID0gc2VnNl9kb19zcmgoc2tiLCBkc3QpO1xcbiA2ODM6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDY4NDpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY4NTpcXHRcXG4gNjg2OlxcdFxcdGlmICh1bmxpa2VseSghZHN0KSkge1xcbiA2ODc6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7XFxuIDY4ODpcXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcXG4gNjg5OlxcdFxcbiA2OTA6XFx0XFx0XFx0c2VnNl9pbml0X2Zsb3dpNihza2IsIGhkciwgXFx1MDAyNmZsNik7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdFxcdGRzdCA9IHNlZzZfb3V0cHV0X2RzdF9sb29rdXAobmV0LCBza2IsIFxcdTAwMjZmbDYsIHNsd3QpO1xcbiA2OTM6XFx0XFx0XFx0aWYgKGRzdC1cXHUwMDNlZXJyb3IpIHtcXG4gNjk0OlxcdFxcdFxcdFxcdGVyciA9IGRzdC1cXHUwMDNlZXJyb3I7XFxuIDY5NTpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY5NjpcXHRcXHRcXHR9XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdFxcdC8qIGNhY2hlIG9ubHkgaWYgd2UgZG9uJ3QgY3JlYXRlIGEgZHN0IHJlZmVyZW5jZSBsb29wICovXFxuIDY5OTpcXHRcXHRcXHRpZiAob3JpZ19kc3QtXFx1MDAzZWx3dHN0YXRlICE9IGRzdC1cXHUwMDNlbHd0c3RhdGUpIHtcXG4gNzAwOlxcdFxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNzAxOlxcdFxcdFxcdFxcdGRzdF9jYWNoZV9zZXRfaXA2KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9vdXRwdXQsIGRzdCwgXFx1MDAyNmZsNi5zYWRkcik7XFxuIDcwMjpcXHRcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAzOlxcdFxcdFxcdH1cXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UoZHN0X2Rldihkc3QpKSk7XFxuIDcwNjpcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gNzA3OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuIDcxMTpcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNzE0OlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9MT0NBTF9PVVQsIG5ldCwgc2ssIHNrYixcXG4gNzE1OlxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBkc3RfZGV2KGRzdCksIGRzdF9vdXRwdXQpO1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRcXHRyZXR1cm4gZHN0X291dHB1dChuZXQsIHNrLCBza2IpO1xcbiA3MTg6XFx0ZHJvcDpcXG4gNzE5OlxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIDcyMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNzIxOlxcdFxcdHJldHVybiBlcnI7XFxuIDcyMjpcXHR9XFxuIDcyMzpcXHRcXG4gNzI0OlxcdHN0YXRpYyBpbnQgc2VnNl9vdXRwdXRfbmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDcyNTpcXHR7XFxuIDcyNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiX2RzdF9kZXYoc2tiKTtcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDcyOTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gNzMwOlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG4gNzMxOlxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xcbiA3MzI6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4gNzMzOlxcdFxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG4gNzM0OlxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBkZXYsIHNlZzZfb3V0cHV0X2NvcmUpO1xcbiA3MzU6XFx0XFx0fVxcbiA3MzY6XFx0XFxuIDczNzpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzM4OlxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0c3RhdGljIGludCBzZWc2X291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNzQxOlxcdHtcXG4gNzQyOlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZuZl9ob29rc19sd3R1bm5lbF9lbmFibGVkKSlcXG4gNzQzOlxcdFxcdFxcdHJldHVybiBzZWc2X291dHB1dF9uZihuZXQsIHNrLCBza2IpO1xcbiA3NDQ6XFx0XFxuIDc0NTpcXHRcXHRyZXR1cm4gc2VnNl9vdXRwdXRfY29yZShuZXQsIHNrLCBza2IpO1xcbiA3NDY6XFx0fVxcbiA3NDc6XFx0XFxuIDc0ODpcXHRzdGF0aWMgaW50IHNlZzZfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuIDc0OTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxcbiA3NTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxcbiA3NTE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNzUyOlxcdHtcXG4gNzUzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1NFRzZfSVBUVU5ORUxfTUFYICsgMV07XFxuIDc1NDpcXHRcXHRzdHJ1Y3Qgc2VnNl9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbztcXG4gNzU1OlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3dHM7XFxuIDc1NjpcXHRcXHRpbnQgdHVuaW5mb19sZW4sIG1pbl9zaXplO1xcbiA3NTc6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0O1xcbiA3NTg6XFx0XFx0aW50IGVycjtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0aWYgKGZhbWlseSAhPSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2IGZhbWlseSAhPSBBRl9JTkVUNilcXG4gNzYxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFNFRzZfSVBUVU5ORUxfTUFYLCBubGEsXFxuIDc2NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHNlZzZfaXB0dW5uZWxfcG9saWN5LCBleHRhY2spO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNzY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc2ODpcXHRcXG4gNzY5OlxcdFxcdGlmICghdGJbU0VHNl9JUFRVTk5FTF9TUkhdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToyMS45Nzk5Mjk1NzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3NDY5MTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzIGluIGBzZWc2X2lwdHVubmVsLmNgKipcblxuQWxyaWdodCwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2lwdHVubmVsLmNgIGZpbGUuIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5LCBidXQgbm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSAqaG93KiB0aGlzIG1vZHVsZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4ndCBqdXN0IHN0b3AgYXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGFwYXRoLiBUaGUgcmVnaXN0cmF0aW9uIGRldGFpbHMgYXJlICpjcml0aWNhbCogZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBlc3BlY2lhbGx5IGluIGEgaGVhdmlseSBpbnRlZ3JhdGVkIGFyZWEgbGlrZSB0aGlzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zLCBob29rcywgYW5kIGNhbGxiYWNrcy4gU28sIEkgbmVlZCB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgY29kZS4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/IFdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgcG9wdWxhdGVkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSByZWdpc3RyYXRpb24gZmxhZ3MgdXNlZD8gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGFuZCBpbnRlcmFjdGlvbiBvZiBgc2VnNl9pcHR1bm5lbGAgd2l0aCB0aGUga2VybmVsLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQncyBzZWUgaG93IHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBwbHVncyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjI0LjI1NDYyMzY3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdHR1bmluZm8gPSBubGFfZGF0YSh0YltTRUc2X0lQVFVOTkVMX1NSSF0pO1xcbiA3NzM6XFx0XFx0dHVuaW5mb19sZW4gPSBubGFfbGVuKHRiW1NFRzZfSVBUVU5ORUxfU1JIXSk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdC8qIHR1bmluZm8gbXVzdCBjb250YWluIGF0IGxlYXN0IHRoZSBpcHR1bm5lbCBlbmNhcCBzdHJ1Y3R1cmUsXFxuIDc3NjpcXHRcXHQgKiB0aGUgU1JIIGFuZCBvbmUgc2VnbWVudFxcbiA3Nzc6XFx0XFx0ICovXFxuIDc3ODpcXHRcXHRtaW5fc2l6ZSA9IHNpemVvZigqdHVuaW5mbykgKyBzaXplb2Yoc3RydWN0IGlwdjZfc3JfaGRyKSArXFxuIDc3OTpcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTtcXG4gNzgwOlxcdFxcdGlmICh0dW5pbmZvX2xlbiBcXHUwMDNjIG1pbl9zaXplKVxcbiA3ODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdHN3aXRjaCAodHVuaW5mby1cXHUwMDNlbW9kZSkge1xcbiA3ODQ6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfSU5MSU5FOlxcbiA3ODU6XFx0XFx0XFx0aWYgKGZhbWlseSAhPSBBRl9JTkVUNilcXG4gNzg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRcXHRpZiAodGJbU0VHNl9JUFRVTk5FTF9TUkNdKSB7XFxuIDc4OTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbmNvbXBhdGlibGUgbW9kZSBmb3IgdHVuc3JjXFxcIik7XFxuIDc5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzkxOlxcdFxcdFxcdH1cXG4gNzkyOlxcdFxcdFxcdGJyZWFrO1xcbiA3OTM6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfRU5DQVA6XFxuIDc5NDpcXHRcXHRcXHRicmVhaztcXG4gNzk1OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVA6XFxuIDc5NjpcXHRcXHRcXHRicmVhaztcXG4gNzk3OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0VOQ0FQX1JFRDpcXG4gNzk4OlxcdFxcdFxcdGJyZWFrO1xcbiA3OTk6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRUQ6XFxuIDgwMDpcXHRcXHRcXHRicmVhaztcXG4gODAxOlxcdFxcdGRlZmF1bHQ6XFxuIDgwMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODAzOlxcdFxcdH1cXG4gODA0OlxcdFxcbiA4MDU6XFx0XFx0LyogdmVyaWZ5IHRoYXQgU1JIIGlzIGNvbnNpc3RlbnQgKi9cXG4gODA2OlxcdFxcdGlmICghc2VnNl92YWxpZGF0ZV9zcmgodHVuaW5mby1cXHUwMDNlc3JoLCB0dW5pbmZvX2xlbiAtIHNpemVvZigqdHVuaW5mbyksIGZhbHNlKSlcXG4gODA3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRuZXd0cyA9IGx3dHVubmVsX3N0YXRlX2FsbG9jKHR1bmluZm9fbGVuICsgc2l6ZW9mKCpzbHd0KSk7XFxuIDgxMDpcXHRcXHRpZiAoIW5ld3RzKVxcbiA4MTE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdHNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChuZXd0cyk7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdGVyciA9IGRzdF9jYWNoZV9pbml0KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9pbnB1dCwgR0ZQX0FUT01JQyk7XFxuIDgxNjpcXHRcXHRpZiAoZXJyKVxcbiA4MTc6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9uZXd0cztcXG4gODE4OlxcdFxcbiA4MTk6XFx0XFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX291dHB1dCwgR0ZQX0FUT01JQyk7XFxuIDgyMDpcXHRcXHRpZiAoZXJyKVxcbiA4MjE6XFx0XFx0XFx0Z290byBlcnJfZGVzdHJveV9pbnB1dDtcXG4gODIyOlxcdFxcbiA4MjM6XFx0XFx0bWVtY3B5KFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5pbmZvLCB0dW5pbmZvLCB0dW5pbmZvX2xlbik7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdGlmICh0YltTRUc2X0lQVFVOTkVMX1NSQ10pIHtcXG4gODI2OlxcdFxcdFxcdHNsd3QtXFx1MDAzZXR1bnNyYyA9IG5sYV9nZXRfaW42X2FkZHIodGJbU0VHNl9JUFRVTk5FTF9TUkNdKTtcXG4gODI3OlxcdFxcbiA4Mjg6XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl9hbnkoXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYykgfHxcXG4gODI5OlxcdFxcdFxcdCAgICBpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpIHx8XFxuIDgzMDpcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2xvb3BiYWNrKFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpKSB7XFxuIDgzMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbnZhbGlkIHR1bnNyYyBhZGRyZXNzXFxcIik7XFxuIDgzMjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MzM6XFx0XFx0XFx0XFx0Z290byBlcnJfZGVzdHJveV9vdXRwdXQ7XFxuIDgzNDpcXHRcXHRcXHR9XFxuIDgzNTpcXHRcXHR9XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGlmICh0YltTRUc2X0lQVFVOTkVMX1RBQkxFXSkge1xcbiA4Mzg6XFx0XFx0XFx0c2x3dC1cXHUwMDNldGFibGUgPSBubGFfZ2V0X3UzMih0YltTRUc2X0lQVFVOTkVMX1RBQkxFXSk7XFxuIDgzOTpcXHRcXHRcXHRpZiAoIXNsd3QtXFx1MDAzZXRhYmxlKSB7XFxuIDg0MDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbnZhbGlkIGxvb2t1cCB0YWJsZVxcXCIpO1xcbiA4NDE6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gODQyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfb3V0cHV0O1xcbiA4NDM6XFx0XFx0XFx0fVxcbiA4NDQ6XFx0XFx0fVxcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRuZXd0cy1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX1NFRzY7XFxuIDg0NzpcXHRcXHRuZXd0cy1cXHUwMDNlZmxhZ3MgfD0gTFdUVU5ORUxfU1RBVEVfSU5QVVRfUkVESVJFQ1Q7XFxuIDg0ODpcXHRcXG4gODQ5OlxcdFxcdGlmICh0dW5pbmZvLVxcdTAwM2Vtb2RlICE9IFNFRzZfSVBUVU5fTU9ERV9MMkVOQ0FQIFxcdTAwMjZcXHUwMDI2XFxuIDg1MDpcXHRcXHQgICAgdHVuaW5mby1cXHUwMDNlbW9kZSAhPSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRUQpXFxuIDg1MTpcXHRcXHRcXHRuZXd0cy1cXHUwMDNlZmxhZ3MgfD0gTFdUVU5ORUxfU1RBVEVfT1VUUFVUX1JFRElSRUNUO1xcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRuZXd0cy1cXHUwMDNlaGVhZHJvb20gPSBzZWc2X2x3dF9oZWFkcm9vbSh0dW5pbmZvKTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0KnRzID0gbmV3dHM7XFxuIDg1NjpcXHRcXG4gODU3OlxcdFxcdHJldHVybiAwO1xcbiA4NTg6XFx0XFxuIDg1OTpcXHRlcnJfZGVzdHJveV9vdXRwdXQ6XFxuIDg2MDpcXHRcXHRkc3RfY2FjaGVfZGVzdHJveShcXHUwMDI2c2x3dC1cXHUwMDNlY2FjaGVfb3V0cHV0KTtcXG4gODYxOlxcdGVycl9kZXN0cm95X2lucHV0OlxcbiA4NjI6XFx0XFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX2lucHV0KTtcXG4gODYzOlxcdGVycl9mcmVlX25ld3RzOlxcbiA4NjQ6XFx0XFx0a2ZyZWUobmV3dHMpO1xcbiA4NjU6XFx0XFx0cmV0dXJuIGVycjtcXG4gODY2OlxcdH1cXG4gODY3OlxcdFxcbiA4Njg6XFx0c3RhdGljIHZvaWQgc2VnNl9kZXN0cm95X3N0YXRlKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxcbiA4Njk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToyNC4yNTQ3NDM3ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxOTkyMDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2VnNl9pcHR1bm5lbC5jYCBTb3VyY2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIGBzZWc2X2lwdHVubmVsLmNgLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMg4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gVW5kZXJzdGFuZGluZyB0aGVzZSBpcyBjcnVjaWFsIHRvIHNlZSBob3cgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzIGFuZCBob3cgaXQncyBpbml0aWFsaXplZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhcyB3ZWxsLiBLbm93aW5nIGhvdyB0aGUgbW9kdWxlIHNldHMgaXRzZWxmIHVwIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwIGl0cyBydW50aW1lIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uIFVsdGltYXRlbHksIGdldHRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBnaXZlcyB0aGUgZ3JlYXRlc3QgaW5zaWdodHMgb24gcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MToyNS45NzQ2NjYyNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpzbHd0ID0gc2VnNl9sd3RfbHd0dW5uZWwobHd0KTtcXG4gODcxOlxcdFxcbiA4NzI6XFx0XFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXFx1MDAyNnNsd3QtXFx1MDAzZWNhY2hlX2lucHV0KTtcXG4gODczOlxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZzbHd0LVxcdTAwM2VjYWNoZV9vdXRwdXQpO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW50IHNlZzZfZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuIDg3NzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxcbiA4Nzg6XFx0e1xcbiA4Nzk6XFx0XFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKnR1bmluZm8gPSBzZWc2X2VuY2FwX2x3dHVubmVsKGx3dHN0YXRlKTtcXG4gODgwOlxcdFxcdHN0cnVjdCBzZWc2X2x3dCAqc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGx3dHN0YXRlKTtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0aWYgKG5sYV9wdXRfc3JoKHNrYiwgU0VHNl9JUFRVTk5FTF9TUkgsIHR1bmluZm8pKVxcbiA4ODM6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0aWYgKCFpcHY2X2FkZHJfYW55KFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpIFxcdTAwMjZcXHUwMDI2XFxuIDg4NjpcXHRcXHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIFNFRzZfSVBUVU5ORUxfU1JDLCBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKSlcXG4gODg3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDg4ODpcXHRcXG4gODg5OlxcdFxcdGlmIChzbHd0LVxcdTAwM2V0YWJsZSBcXHUwMDI2XFx1MDAyNlxcbiA4OTA6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgU0VHNl9JUFRVTk5FTF9UQUJMRSwgc2x3dC1cXHUwMDNldGFibGUpKVxcbiA4OTE6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0cmV0dXJuIDA7XFxuIDg5NDpcXHR9XFxuIDg5NTpcXHRcXG4gODk2OlxcdHN0YXRpYyBpbnQgc2VnNl9lbmNhcF9ubHNpemUoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZSlcXG4gODk3OlxcdHtcXG4gODk4OlxcdFxcdHN0cnVjdCBzZWc2X2lwdHVubmVsX2VuY2FwICp0dW5pbmZvID0gc2VnNl9lbmNhcF9sd3R1bm5lbChsd3RzdGF0ZSk7XFxuIDg5OTpcXHRcXHRzdHJ1Y3Qgc2VnNl9sd3QgKnNsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChsd3RzdGF0ZSk7XFxuIDkwMDpcXHRcXHRpbnQgbmxzaXplO1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRcXHRubHNpemUgPSBubGFfdG90YWxfc2l6ZShTRUc2X0lQVFVOX0VOQ0FQX1NJWkUodHVuaW5mbykpO1xcbiA5MDM6XFx0XFxuIDkwNDpcXHRcXHRpZiAoIWlwdjZfYWRkcl9hbnkoXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYykpXFxuIDkwNTpcXHRcXHRcXHRubHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHNsd3QtXFx1MDAzZXR1bnNyYykpO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRpZiAoc2x3dC1cXHUwMDNldGFibGUpXFxuIDkwODpcXHRcXHRcXHRubHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbiA5MDk6XFx0XFxuIDkxMDpcXHRcXHRyZXR1cm4gbmxzaXplO1xcbiA5MTE6XFx0fVxcbiA5MTI6XFx0XFxuIDkxMzpcXHRzdGF0aWMgaW50IHNlZzZfZW5jYXBfY21wKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYSwgc3RydWN0IGx3dHVubmVsX3N0YXRlICpiKVxcbiA5MTQ6XFx0e1xcbiA5MTU6XFx0XFx0c3RydWN0IHNlZzZfaXB0dW5uZWxfZW5jYXAgKmFfaGRyID0gc2VnNl9lbmNhcF9sd3R1bm5lbChhKTtcXG4gOTE2OlxcdFxcdHN0cnVjdCBzZWc2X2lwdHVubmVsX2VuY2FwICpiX2hkciA9IHNlZzZfZW5jYXBfbHd0dW5uZWwoYik7XFxuIDkxNzpcXHRcXHRzdHJ1Y3Qgc2VnNl9sd3QgKmFfc2x3dCA9IHNlZzZfbHd0X2x3dHVubmVsKGEpO1xcbiA5MTg6XFx0XFx0c3RydWN0IHNlZzZfbHd0ICpiX3Nsd3QgPSBzZWc2X2x3dF9sd3R1bm5lbChiKTtcXG4gOTE5OlxcdFxcdGludCBsZW4gPSBTRUc2X0lQVFVOX0VOQ0FQX1NJWkUoYV9oZHIpO1xcbiA5MjA6XFx0XFxuIDkyMTpcXHRcXHRpZiAobGVuICE9IFNFRzZfSVBUVU5fRU5DQVBfU0laRShiX2hkcikpXFxuIDkyMjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0aWYgKCFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmFfc2x3dC1cXHUwMDNldHVuc3JjLCBcXHUwMDI2Yl9zbHd0LVxcdTAwM2V0dW5zcmMpKVxcbiA5MjU6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdGlmIChhX3Nsd3QtXFx1MDAzZXRhYmxlICE9IGJfc2x3dC1cXHUwMDNldGFibGUpXFxuIDkyODpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gOTI5OlxcdFxcbiA5MzA6XFx0XFx0cmV0dXJuIG1lbWNtcChhX2hkciwgYl9oZHIsIGxlbik7XFxuIDkzMTpcXHR9XFxuIDkzMjpcXHRcXG4gOTMzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfaXB0dW5fb3BzID0ge1xcbiA5MzQ6XFx0XFx0LmJ1aWxkX3N0YXRlID0gc2VnNl9idWlsZF9zdGF0ZSxcXG4gOTM1OlxcdFxcdC5kZXN0cm95X3N0YXRlID0gc2VnNl9kZXN0cm95X3N0YXRlLFxcbiA5MzY6XFx0XFx0Lm91dHB1dCA9IHNlZzZfb3V0cHV0LFxcbiA5Mzc6XFx0XFx0LmlucHV0ID0gc2VnNl9pbnB1dCxcXG4gOTM4OlxcdFxcdC5maWxsX2VuY2FwID0gc2VnNl9maWxsX2VuY2FwX2luZm8sXFxuIDkzOTpcXHRcXHQuZ2V0X2VuY2FwX3NpemUgPSBzZWc2X2VuY2FwX25sc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MjUuOTc0Nzc4NTkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMjgxMTc5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBhdCBsaW5lIDk0MCwgaHVoPyBSaWdodC4gVGhlIGNvbnRleHQgYXJvdW5kIGhlcmUgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGdldCBhIHNlbnNlIG9mIHdoYXQncyBoYXBwZW5pbmcgYmV5b25kIHRoaXMgaW1tZWRpYXRlIHNuaXBwZXQuICpXaGF0J3MqIHRoZSByZWxldmFudCBsb2dpYywgdGhlIHBvdGVudGlhbCBjb250cm9sIGZsb3c/IEhvbmVzdGx5LCBJ4oCZbSBnZXR0aW5nIGEgYml0IGltcGF0aWVudCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIG5leHQgaW4gdGhlIGNvZGUuIExldCdzIHNjcm9sbCBkb3duLCBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlJ3MgYWN0aW5nIGFuZCBmaWd1cmUgb3V0IHdoYXQgaXQncyBzdXBwb3NlZCB0byBkbywgb3Igd2hhdCBpdCAqaXNuJ3QqLiBJIG5lZWQgdG8gc2VlIHdoYXQgY29tZXMgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjI4LjAwMjg5OTYxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdFxcdC5jbXBfZW5jYXAgPSBzZWc2X2VuY2FwX2NtcCxcXG4gOTQxOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiA5NDI6XFx0fTtcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0aW50IF9faW5pdCBzZWc2X2lwdHVubmVsX2luaXQodm9pZClcXG4gOTQ1OlxcdHtcXG4gOTQ2OlxcdFxcdHJldHVybiBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XFxuIDk0NzpcXHR9XFxuIDk0ODpcXHRcXG4gOTQ5OlxcdHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpXFxuIDk1MDpcXHR7XFxuIDk1MTpcXHRcXHRsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZzZWc2X2lwdHVuX29wcywgTFdUVU5ORUxfRU5DQVBfU0VHNik7XFxuIDk1MjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjI4LjAwMzAxOTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMjIyMTI4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTUnY2IExpZ2h0d2VpZ2h0IFR1bm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYHNlZzZfZG9fc3JoYCB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuY2AsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBTRUc2X0lQVFVOX01PREVfTDJFTkNBUGAgYW5kIGBTRUc2X0lQVFVOX01PREVfTDJFTkNBUF9SRURgIGNhc2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyB0aGUgdW5jb25kaXRpb25hbCBgcHNrYl9leHBhbmRfaGVhZGAgY2FsbCB3aXRoIGBza2JfY293X2hlYWRgLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudDsgdGhlIGZvcm1lciB1bm5lY2Vzc2FyaWx5IGV4cGFuZHMgaGVhZHJvb20sIHdoaWxlIHRoZSBsYXR0ZXIgaW50ZWxsaWdlbnRseSBleHBhbmRzIG9ubHkgaWYgdGhlIGhlYWQgaXMgc2hhcmVkIG9yIGluc3VmZmljaWVudC4gVGhpcyBpcyBjb3JlIFNSdjYgbGlnaHR3ZWlnaHQgdHVubmVsIHByb2Nlc3NpbmcsIGFuZCBpdCdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbGx5IHNvdW5kLiBUaGUgcGF0aCBpcyB3ZWxsLWRlZmluZWQgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29uZmlncyB2aWEgYGlwIHJvdXRlYCBvciBuZXRsaW5rIGFyZSB0aGUgd2F5IGluLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHByZXJlcXVpc2l0ZXMuIEV4YW1pbmluZyBgbmV0L2lwdjYvTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYHNlZzZfaXB0dW5uZWwub2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgaXMgc2V0LCBhbmQgdGhlIGBLY29uZmlnYCByZXZlYWxzIHRoYXQgYElQVjZfU0VHNl9MV1RVTk5FTGAgcmVxdWlyZXMgYElQVjZgIHRvIGJlIGVuYWJsZWQuIFNvLCB3ZSdyZSBkZWFsaW5nIHdpdGggYElQVjZgIGFuZCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhcyBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIEkgd2lsbCBrZWVwIGFuIGV5ZSBvbiBgSVBWNl9TRUc2X0hNQUNgLCBhbHRob3VnaCB0aGUgZm9jdXMgaXMgb24gdGhlIFNSdjYgdHVubmVsIGVuY2Fwc3VsYXRpb24gaXRzZWxmLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnlwb2ludHMgaGVyZS4gSW4gYHNlZzZfaXB0dW5uZWwuY2AgaXRzZWxmLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgbm9uLWhvdC1wYXRoIEFQSSBlbnRyaWVzOiBgc2VnNl9pbnB1dGAgKGNhbGxlZCB2aWEgdGhlIGx3dHVubmVsIG9wcyBgaW5wdXRgKSwgYHNlZzZfb3V0cHV0YCAobHd0dW5uZWwgb3BzIGBvdXRwdXRgKSwgYHNlZzZfYnVpbGRfc3RhdGVgIChuZXRsaW5rL2x3dHVubmVsIGBidWlsZF9zdGF0ZWApLCBgc2VnNl9kb19zcmhfaW5saW5lYCAod2hpY2ggaXMgZXhwb3J0ZWQpLCBhbmQgYHNlZzZfaXB0dW5uZWxfaW5pdGAuIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgc2VnNl9pbnB1dGAsIGBzZWc2X291dHB1dGAsIGFuZCBgc2VnNl9idWlsZF9zdGF0ZWAgYXJlIG5vdCBzdGF0aWMsIG9yIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQsIG5vbi1zdGF0aWMsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNlZzYgZmFtaWx5IG9mIGZpbGVzLiBJbiB0aGUga2VybmVsLCBpdOKAmXMgcmFyZSBmb3Igc3RhdGljIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIChsaWtlIHRoZSBzZWc2XyogZnVuY3Rpb25zKSB0byBiZSBpbmxpbmVkIHVubGVzcyB0aGUgY29tcGlsZXIgaXMgdW5kZXIgZXh0cmVtZSBwcmVzc3VyZSB0byBvcHRpbWl6ZS4gVGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBmb3IgYHNlZzZfaXB0dW5fb3BzYCwgc28gdGhlIGNvbXBpbGVyICpzaG91bGQqIHJldGFpbiB0aGUgc3ltYm9scy4gTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBvdGhlciBgbmV0L2lwdjYvc2VnNiouY2AgZmlsZXMganVzdCB0byBiZSBzdXJlLCBhbmQgdmVyaWZ5IHRob3NlIHN5bWJvbHMgYXJlIGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzQuMjI1MjM2MjUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMyMTMzNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzQuMjc1NTY5Mjc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDAyMzQ1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgU2VnbWVudCBSb3V0aW5nIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYgKFNSdjYpIGltcGxlbWVudGF0aW9uLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvcmUgY29kZSwgcGFydGljdWxhcmx5IGBuZXQvaXB2Ni9zZWc2LmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBTUnY2IGxvZ2ljIHNob3VsZCByZXNpZGUsIGhhbmRsaW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBPZiBjb3Vyc2UsIGdpdmVuIHRoZSBuYXR1cmUgb2YgSVB2NiBhbmQgaXRzIGZsZXhpYmlsaXR5LCB0aGUgaW1wbGVtZW50YXRpb24gY291bGQgYmUgc3ByZWFkIG91dC4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uICpvdGhlciogZmlsZXMgd2l0aGluIHRoZSBgbmV0L2lwdjYvYCBkaXJlY3RvcnkgYXMgd2VsbC4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlZmluZWQgZWxzZXdoZXJlLCBwb3RlbnRpYWxseSBpbiBmaWxlcyBsaWtlIHRob3NlIHJlbGF0ZWQgdG8gcm91dGluZyBoZWFkZXJzLCBleHRlbnNpb24gaGVhZGVycywgb3IgZXZlbiB0aGUgSVB2NiBwcm90b2NvbCBpdHNlbGYuIEkgc2hvdWxkIGJlIHByZXBhcmVkIHRvIHRyYWNlIGZ1bmN0aW9uIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgY29tcG9uZW50cyB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQncyBzdGFydCB3aXRoIGBzZWc2LmNgIGFuZCBzZWUgd2hlcmUgaXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzYuNDE1ODA2OTE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUzODAwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzZWc2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfaG1hYy5jPTEwMD1pbnQgc2VnNl9obWFjX2NvbXB1dGUoc3RydWN0IHNlZzZfaG1hY19pbmZvICpoaW5mbywgc3RydWN0IGlwdjZfc3JfaGRyICpoZHIsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0xNjgtfVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjE2OTpFWFBPUlRfU1lNQk9MKHNlZzZfaG1hY19jb21wdXRlKTtcXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0xNzAtXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYz0xNzY9Ym9vbCBzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMjAtfVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjIyMTpFWFBPUlRfU1lNQk9MKHNlZzZfaG1hY192YWxpZGF0ZV9za2IpO1xcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTIyMi1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTIyND1zdHJ1Y3Qgc2VnNl9obWFjX2luZm8gKnNlZzZfaG1hY19pbmZvX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBrZXkpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yMzItfVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjIzMzpFWFBPUlRfU1lNQk9MKHNlZzZfaG1hY19pbmZvX2xvb2t1cCk7XFxubmV0L2lwdjYvc2VnNl9obWFjLmMtMjM0LVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTIzNT1pbnQgc2VnNl9obWFjX2luZm9fYWRkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGtleSwgc3RydWN0IHNlZzZfaG1hY19pbmZvICpoaW5mbylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI1Ny19XFxubmV0L2lwdjYvc2VnNl9obWFjLmM6MjU4OkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX2luZm9fYWRkKTtcXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy0yNTktXFxubmV0L2lwdjYvc2VnNl9obWFjLmM9MjYwPWludCBzZWc2X2htYWNfaW5mb19kZWwoc3RydWN0IG5ldCAqbmV0LCB1MzIga2V5KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9obWFjLmMtMjc5LX1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYzoyODA6RVhQT1JUX1NZTUJPTChzZWc2X2htYWNfaW5mb19kZWwpO1xcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTI4MS1cXG5uZXQvaXB2Ni9zZWc2X2htYWMuYz0yODI9aW50IHNlZzZfcHVzaF9obWFjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGluNl9hZGRyICpzYWRkcixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMwNS19XFxubmV0L2lwdjYvc2VnNl9obWFjLmM6MzA2OkVYUE9SVF9TWU1CT0woc2VnNl9wdXNoX2htYWMpO1xcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMwNy1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jPTMxNT12b2lkIF9fbmV0X2V4aXQgc2VnNl9obWFjX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTMyMC19XFxubmV0L2lwdjYvc2VnNl9obWFjLmM6MzIxOkVYUE9SVF9TWU1CT0woc2VnNl9obWFjX25ldF9leGl0KTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMTg9aW50IHNlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIyMS19XFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIyMjpFWFBPUlRfU1lNQk9MX0dQTChzZWc2X2RvX3NyaF9lbmNhcCk7XFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIyMy1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz00Nzk9aW50IHNlZzZfZG9fc3JoX2lubGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDgyLX1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6NDgzOkVYUE9SVF9TWU1CT0xfR1BMKHNlZzZfZG9fc3JoX2lubGluZSk7XFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTQ4NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6MzYuNDYyMzUwNDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMDkyOTg1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzZWc2X2lwdHVubmVsLmNgIE1vZHVsZSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBvZiBgc2VnNl9pcHR1bm5lbC5jYCByZXZlYWxzIHNvbWUga2V5IGZ1bmN0aW9uczogYHNlZzZfZG9fc3JoX2VuY2FwYCwgYHNlZzZfZG9fc3JoX2lubGluZWAsIGBzZWc2X2J1aWxkX3N0YXRlYCwgYHNlZzZfaW5wdXRgLCBhbmQgYHNlZzZfb3V0cHV0YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaGFuZGxpbmcgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2Nikgd2l0aGluIHRoZSBsaWdodHdlaWdodCB0dW5uZWwgZnVuY3Rpb25hbGl0eS4gSSdtIGFzc3VtaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIFNSdjYgY29udGV4dC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBUaGUgcHJlc2VuY2Ugb2YgYElQVjZgIGFuZCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyBleHBlY3RlZC4gVGhpcyBjb25maXJtcyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBhdmFpbGFibGUuXG5cblRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgcGF0Y2ggZml4aW5nIHRoZSBidWZmZXIgaGFuZGxpbmcgaW4gYHNlZzZfZG9fc3JoYCDigJMgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgZnJvbSBgcHNrYl9leHBhbmRfaGVhZGAgdG8gYHNrYl9jb3dfaGVhZGAuIFRoYXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiB3aGVyZSB5b3UgY2FuIGdldCBpbnRvIHRyb3VibGUgd2l0aCBidWZmZXIgb3ZlcmZsb3dzIGFuZCBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyBkaXJlY3RseSB0b3VjaGVzIGRhdGEgcGF0aCBwYWNrZXQgcHJvY2Vzc2luZywgd2hpY2ggbWFrZXMgaXQgYWJzb2x1dGVseSBwcmltZSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGlzIGluIFNSdjYgTDJFTkNBUCBtb2RlIGFuZCB0ZXN0YWJsZSB3aXRoIHN0YW5kYXJkIG5ldHdvcmsgdG9vbHMgKHNvY2tldHMsIG5ldGxpbmspIGFuZCBzaW11bGF0aW9uIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIHNlYWxzIHRoZSBkZWFsLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBoZXJlLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBzdWJ0bGUsIGhhcmQtdG8tZmluZCBidWdzIHRoYXQgZnV6emluZyB3aWxsIGV4cG9zZS5cblxuU28sIG15IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gdGhvc2UgXCJGb2N1c1N5bWJvbHNcIiDigJMgYWxsIHRob3NlIGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUsIGJ1dCBlc3BlY2lhbGx5IGBzZWc2X2RvX3NyaF9lbmNhcGAgYW5kIGBzZWc2X2RvX3NyaF9pbmxpbmVgIGR1ZSB0byB0aGUgYnVmZmVyIGhhbmRsaW5nIGNoYW5nZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGlucHV0IGZvcm1hdHMgSSBmZWVkIHRoZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyB0aGUgb3V0cHV0IGdlbmVyYXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIHNhbml0eSBjaGVjayBvbiBzZXQtcmVzdWx0cyBjYWxscy4gSSdtIGltYWdpbmluZyBhIGZ1enplciB0aGF0IGNhbiBjcmFmdCBTUnY2IHBhY2tldHMgd2l0aCB2YXJpb3VzIHNlZ21lbnQgbGlzdHMgYW5kIGVuY2Fwc3VsYXRpb24gb3B0aW9ucywgdGhlbiBtb25pdG9yIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlc2UgcGFja2V0cy4gVGhlIGdvYWwgaXMgdG8gdHJpZ2dlciB0aG9zZSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDA1LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MTo0MC42NzE2NTMyMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5MDM2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfZG9fc3JoX2VuY2FwXCIsXG4gICAgXCJzZWc2X2RvX3NyaF9pbmxpbmVcIixcbiAgICBcInNlZzZfYnVpbGRfc3RhdGVcIixcbiAgICBcInNlZzZfaW5wdXRcIixcbiAgICBcInNlZzZfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcHNrYl9leHBhbmRfaGVhZCB3aXRoIHNrYl9jb3dfaGVhZCBpbiBzZWc2X2RvX3NyaCB3aGVuIHByb2Nlc3NpbmcgU1J2NiBMMiBlbmNhcHN1bGF0aW9uIG1vZGVzLCBlbnN1cmluZyB0aGUgc2tiIGhlYWQgaXMgcHJvcGVybHkgdW5zaGFyZWQgYW5kIGV4cGFuZGVkIGFzIHJlcXVpcmVkLiBUaGlzIHRvdWNoZXMgdGhlIHJlYWNoYWJsZSBJUHY2IFNlZ21lbnQgUm91dGluZyBsaWdodHdlaWdodCB0dW5uZWwgZGF0YXBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfZG9fc3JoX2VuY2FwXCIsXG4gICAgXCJzZWc2X2RvX3NyaF9pbmxpbmVcIixcbiAgICBcInNlZzZfYnVpbGRfc3RhdGVcIixcbiAgICBcInNlZzZfaW5wdXRcIixcbiAgICBcInNlZzZfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcHNrYl9leHBhbmRfaGVhZCB3aXRoIHNrYl9jb3dfaGVhZCBpbiBzZWc2X2RvX3NyaCB3aGVuIHByb2Nlc3NpbmcgU1J2NiBMMiBlbmNhcHN1bGF0aW9uIG1vZGVzLCBlbnN1cmluZyB0aGUgc2tiIGhlYWQgaXMgcHJvcGVybHkgdW5zaGFyZWQgYW5kIGV4cGFuZGVkIGFzIHJlcXVpcmVkLiBUaGlzIHRvdWNoZXMgdGhlIHJlYWNoYWJsZSBJUHY2IFNlZ21lbnQgUm91dGluZyBsaWdodHdlaWdodCB0dW5uZWwgZGF0YXBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MTo0MC43ODM1NjY1NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU3MzkwMzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6NDAuNzg0MTIzMjU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE3NTY4MjkzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcxNzk2N2ZjYmQ3YmJlMWQ3N2QzNzA3YTlkNjg2MDcyMDQ1NjY3ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjQxOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jIGIvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG5pbmRleCA2MWM2YTI3YmYyMDJkLi5hNjU1NmVmZDhlMGIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXG4rKysgYi9uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmNcbkBAIC00NDYsOCArNDQ2LDkgQEAgc3RhdGljIGludCBzZWc2X2RvX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpjYWNoZV9kc3QpXG4gXHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0XHRza2JfbWFjX2hlYWRlcl9yZWJ1aWxkKHNrYik7XG4gXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6NDAuNzg0MTI0MjU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNDYyMDM2ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipBbmFseXppbmcgYW5kIENvbnRleHR1YWxpemluZyB0aGUgUGF0Y2gqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMuIEZpcnN0LCBJIHdhbnQgdG8gcHJvcGVybHkgYW5hbHl6ZSB0aGUgcGF0Y2ggaXRzZWxmLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gSXMgdGhpcyBhIGZpeCwgYSBmZWF0dXJlLCBhbiBvcHRpbWl6YXRpb24/IFdoYXQncyB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlP1xuXG5UbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwbGFjZSB0byBzdGFydCBzZWVtcyB0byBiZSBgbmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jYCBhcm91bmQgbGluZSA0NDYuIFRoYXQgYXJlYSBsaWtlbHkgaG9sZHMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBtb2RpZmljYXRpb24uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGF0IHNlY3Rpb24sIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3QuIEl0J3MgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjUzLjI0NjE2MzMxMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MjE6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXFxuIDQyNDpcXHRcXHRcXHRcXHRwcm90byA9IElQUFJPVE9fSVBWNjtcXG4gNDI1OlxcdFxcdFxcdGVsc2UgaWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxcbiA0MjY6XFx0XFx0XFx0XFx0cHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuIDQyNzpcXHRcXHRcXHRlbHNlXFxuIDQyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0XFx0aWYgKHRpbmZvLVxcdTAwM2Vtb2RlID09IFNFRzZfSVBUVU5fTU9ERV9FTkNBUClcXG4gNDMxOlxcdFxcdFxcdFxcdGVyciA9IF9fc2VnNl9kb19zcmhfZW5jYXAoc2tiLCB0aW5mby1cXHUwMDNlc3JoLCBwcm90byxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgY2FjaGVfZHN0LCBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDMzOlxcdFxcdFxcdGVsc2VcXG4gNDM0OlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsIHByb3RvLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNhY2hlX2RzdCwgXFx1MDAyNnNsd3QtXFx1MDAzZXR1bnNyYyk7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdFxcdGlmIChlcnIpXFxuIDQzODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRcXHRcXHRza2Jfc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcXG4gNDQxOlxcdFxcdFxcdHNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBza2ItXFx1MDAzZXByb3RvY29sKTtcXG4gNDQyOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gNDQzOlxcdFxcdFxcdGJyZWFrO1xcbiA0NDQ6XFx0XFx0Y2FzZSBTRUc2X0lQVFVOX01PREVfTDJFTkNBUDpcXG4gNDQ1OlxcdFxcdGNhc2UgU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVBfUkVEOlxcbiA0NDY6XFx0XFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuIDQ0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0XFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gNDUwOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiA0NTE6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0XFx0c2tiX21hY19oZWFkZXJfcmVidWlsZChza2IpO1xcbiA0NTQ6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBza2ItXFx1MDAzZW1hY19sZW4pO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRcXHRpZiAodGluZm8tXFx1MDAzZW1vZGUgPT0gU0VHNl9JUFRVTl9NT0RFX0wyRU5DQVApXFxuIDQ1NzpcXHRcXHRcXHRcXHRlcnIgPSBfX3NlZzZfZG9fc3JoX2VuY2FwKHNrYiwgdGluZm8tXFx1MDAzZXNyaCxcXG4gNDU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2x3dC1cXHUwMDNldHVuc3JjKTtcXG4gNDYwOlxcdFxcdFxcdGVsc2VcXG4gNDYxOlxcdFxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChza2IsIHRpbmZvLVxcdTAwM2VzcmgsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19FVEhFUk5FVCwgY2FjaGVfZHN0LFxcbiA0NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzbHd0LVxcdTAwM2V0dW5zcmMpO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0NjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiA0Njk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjUzLjI0NjI3MDI1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDUyNjg4ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIZWFkcm9vbSBNYW5hZ2VtZW50IGluIFNLQnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBza2JfY293X2hlYWQoc2tiLCBza2ItXHUwMDNlbWFjX2xlbilgIGFuZCBgcHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cdTAwM2VtYWNfbGVuLCAwLCBHRlBfQVRPTUlDKWAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBzZWVtcyB0byBoYXZlIGJlZW4gcmF0aGVyIHVuY29uZGl0aW9uYWwgYWJvdXQgZXhwYW5kaW5nIHRoZSBTS0IncyBoZWFkLCBvciBtYXliZSBpdCB3YXNuJ3QgdW5zaGFyaW5nIHRoZSBTS0IgaWYgaXQgd2FzIGFscmVhZHkgY2xvbmVkLCBldmVuIGlmIGV4cGFuc2lvbiB3YXNuJ3QgbmVjZXNzYXJ5LlxuXG5JIHNlZSB0aGF0IGBza2JfY293X2hlYWQoc2tiLCBkZWx0YSlgIGlzIG1vcmUgdGFyZ2V0ZWQuIEl0IHNlZW1zIHRvIGd1YXJhbnRlZSB0d28gdGhpbmdzOiBGaXJzdCwgaXQgKmVuc3VyZXMqIHRoZXJlJ3MgYXQgbGVhc3QgYGRlbHRhYCBieXRlcyBvZiBoZWFkcm9vbS4gU2Vjb25kLCBhbmQgY3J1Y2lhbGx5LCBpdCBtYWtlcyBzdXJlIHRoZSBoZWFkZXIgaXNuJ3Qgc2hhcmVkIG9yIGNsb25lZC4gSXQgZXNzZW50aWFsbHkgbWFrZXMgdGhlIFNLQidzIGhlYWRlciB3cml0YWJsZSBieSBlbnN1cmluZyBpdCBoYXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tLiBUaGlzIGlzIHRoZSBjb3JlIGRpZmZlcmVuY2UsIEkgYmVsaWV2ZS5cblxuSSBtaWdodCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgc2tiX2Nvd19oZWFkYCBpbXBsZW1lbnRhdGlvbiBvciBwZXJoYXBzIHRoZSBkZWZpbml0aW9ucyBpZiBJIG5lZWQgdG8gY2xhcmlmeSBhbnl0aGluZyBmdXJ0aGVyLCBidXQgdGhpcyBpcyB0aGUgZ2lzdCBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjU1LjY5ODk2NDAzOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTQ1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBpbnQgc2tiX2Nvd19oZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zOTIxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTM1LSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzkzNjpzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzkzNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjU1Ljc0NjIyNDk0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI3MjgxNTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBza2J1ZmYuaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGBza2J1ZmZgIHN0cnVjdHVyZSDigJMgc3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSAzOTM2IGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgbGlrZWx5IHRvIGxvb2sgYXQgaG93IGRhdGEgaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUsIG1heWJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGZyYWdtZW50YXRpb24sIG9yIHBlcmhhcHMgc3BlY2lmaWMgZmxhZ3MgdGhhdCBjb250cm9sIHBhY2tldCBwcm9jZXNzaW5nLiBJJ20gZXhwZWN0aW5nIHNvbWUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgbWFjcm8gaW1wbGVtZW50YXRpb25zIGluIHRoYXQgdmljaW5pdHksIGFuZCBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlbSB3aXRoIGEgZmluZS10b290aCBjb21iLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBoZWxwcyBtZSByZXNvbHZlIHRoZSBjdXJyZW50IHByb2JsZW0gYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjQxOjU3LjU3MzUwOTMwN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTIwOlxcdCAqL1xcbjM5MjE6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuMzkyMjpcXHR7XFxuMzkyMzpcXHRcXHRyZXR1cm4gX19za2JfY293KHNrYiwgaGVhZHJvb20sIHNrYl9jbG9uZWQoc2tiKSk7XFxuMzkyNDpcXHR9XFxuMzkyNTpcXHRcXG4zOTI2OlxcdC8qKlxcbjM5Mjc6XFx0ICpcXHRza2JfY293X2hlYWQgLSBza2JfY293IGJ1dCBvbmx5IG1ha2luZyB0aGUgaGVhZCB3cml0YWJsZVxcbjM5Mjg6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gY293XFxuMzkyOTpcXHQgKlxcdEBoZWFkcm9vbTogbmVlZGVkIGhlYWRyb29tXFxuMzkzMDpcXHQgKlxcbjM5MzE6XFx0ICpcXHRUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBza2JfY293IGV4Y2VwdCB0aGF0IHdlIHJlcGxhY2UgdGhlXFxuMzkzMjpcXHQgKlxcdHNrYl9jbG9uZWQgY2hlY2sgYnkgc2tiX2hlYWRlcl9jbG9uZWQuICBJdCBzaG91bGQgYmUgdXNlZCB3aGVuXFxuMzkzMzpcXHQgKlxcdHlvdSBvbmx5IG5lZWQgdG8gcHVzaCBvbiBzb21lIGhlYWRlciBhbmQgZG8gbm90IG5lZWQgdG8gbW9kaWZ5XFxuMzkzNDpcXHQgKlxcdHRoZSBkYXRhLlxcbjM5MzU6XFx0ICovXFxuMzkzNjpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfY293X2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbjM5Mzc6XFx0e1xcbjM5Mzg6XFx0XFx0cmV0dXJuIF9fc2tiX2Nvdyhza2IsIGhlYWRyb29tLCBza2JfaGVhZGVyX2Nsb25lZChza2IpKTtcXG4zOTM5OlxcdH1cXG4zOTQwOlxcdFxcbjM5NDE6XFx0LyoqXFxuMzk0MjpcXHQgKlxcdHNrYl9wYWR0b1xcdC0gcGFkIGFuIHNrYnVmZiB1cCB0byBhIG1pbmltYWwgc2l6ZVxcbjM5NDM6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gcGFkXFxuMzk0NDpcXHQgKlxcdEBsZW46IG1pbmltYWwgbGVuZ3RoXFxuMzk0NTpcXHQgKlxcbjM5NDY6XFx0ICpcXHRQYWRzIHVwIGEgYnVmZmVyIHRvIGVuc3VyZSB0aGUgdHJhaWxpbmcgYnl0ZXMgZXhpc3QgYW5kIGFyZVxcbjM5NDc6XFx0ICpcXHRibGFua2VkLiBJZiB0aGUgYnVmZmVyIGFscmVhZHkgY29udGFpbnMgc3VmZmljaWVudCBkYXRhIGl0XFxuMzk0ODpcXHQgKlxcdGlzIHVudG91Y2hlZC4gT3RoZXJ3aXNlIGl0IGlzIGV4dGVuZGVkLiBSZXR1cm5zIHplcm8gb25cXG4zOTQ5OlxcdCAqXFx0c3VjY2Vzcy4gVGhlIHNrYiBpcyBmcmVlZCBvbiBlcnJvci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6NDE6NTcuNTczODQ0ODQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NjcwNzI4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTS0IgSGVhZHJvb20gQ2hhbmdlIGluIGBzZWc2X2RvX3NyaF9lbmNhcGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIHJlcGxhY2luZyBgcHNrYl9leHBhbmRfaGVhZGAgd2l0aCBgc2tiX2Nvd19oZWFkYCB3aXRoaW4gYHNlZzZfZG9fc3JoYCBzcGVjaWZpY2FsbHkgZm9yIEwyIGVuY2Fwc3VsYXRpb24uIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LiBJdCBzZWVtcyB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIHRoZSBTb2NrZXQgQnVmZmVyIChza2IpIGhlYWQsIGVuc3VyaW5nIGl0J3Mgd3JpdGFibGUgYW5kIG5vdCBzaGFyZWQgYmVmb3JlIHdlIG1vZGlmeSB0aGUgaGVhZGVyIGR1cmluZyBTUnY2IEwyIGVuY2Fwc3VsYXRpb24g4oCTIHRoaW5rIGBza2JfbWFjX2hlYWRlcl9yZWJ1aWxkYCwgYHNrYl9wdXNoYCwgYW5kIHRoZSBlbmNhcHN1bGF0aW9uIHByb2Nlc3MgaXRzZWxmLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQ291bGQgdGhpcyBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5PyBEaWdnaW5nIGRlZXBlciwgYHNrYl9jb3dfaGVhZGAgc2VlbXMgc2FmZSBpbiB0aGlzIHJlZ2FyZC4gSXQgZWl0aGVyIHJlYWxsb2NhdGVzIHRoZSBza2IgaGVhZCAoZWZmZWN0aXZlbHkgY2FsbGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYmVoaW5kIHRoZSBzY2VuZXMpIG9yLCBpZiB0aGUgaGVhZHJvb20gaXMgYWxyZWFkeSBhdmFpbGFibGUgYW5kIGluaXRpYWxpemVkLCBsZWF2ZXMgaXQgdW50b3VjaGVkLiBDcnVjaWFsbHksIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBub3IgZG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRpcmVjdGx5LiBXZSdyZSBvcGVyYXRpbmcgb24gbmV0d29yayBwYWNrZXQgYnVmZmVycywgd2hpY2ggYXJlICpzdXBwb3NlZCogdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUncyBubyBpbmRpY2F0aW9uIG9mIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mbyBsZWFrcywgb3IgaXNzdWVzIHdpdGggc3RydWN0IHBhZGRpbmcgaGVyZS5cblxuTm93LCBsZXQncyBzaGlmdCB0byBLTVNBTiBjb25zaWRlcmF0aW9ucy4gS01TQU4gZmxhZ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGlzIGNoYW5nZSwgYXQgaXRzIGhlYXJ0LCBpcyBhIHN0YW5kYXJkIFNLQiBoZWFkcm9vbS9jbG9uaW5nIG1hbmFnZW1lbnQgY29ycmVjdGlvbjogZW5zdXJpbmcgdGhlIHNrYiBoZWFkIGlzIHdyaXRhYmxlLCBhbmQgaGFuZGxpbmcgZXJyb3JzIGNvcnJlY3RseS4gU2luY2Ugd2UncmUgbm90IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBwb3RlbnRpYWwgbGVha3MgdGhhdCBJIGNhbiBzZWUsIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gVGhpcyBpcyBhIGZpeCwgbm90IGEgbmV3IGZlYXR1cmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4gVGhlIHRvb2wncyBjaGVja3Mgb2YgS01TQU4gdnMgS0FTQU4gYXJlIHJlbGV2YW50IGhlcmUsIGFuZCBpdCBwcm9wZXJseSBhc3Nlc3NlcyB0aGUgcmlza3MuXG5cblRoZXJlZm9yZSwgdGhpcyBpcyBhIHN0YW5kYXJkIGFuZCBzYWZlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwNiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDo0MjowMi41NDA5MjA4MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoIHNrYl9jb3dfaGVhZCgpIGluIHNlZzZfZG9fc3JoKCkgdG8gZW5zdXJlIGFkZXF1YXRlIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBza2IgaGVhZGVyIGlzIHVuc2hhcmVkL3dyaXRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBNQUMgaGVhZGVyIGFuZCBwdXNoaW5nIGl0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgYnVmZmVyIGhlYWRlciBoZWFkcm9vbSBtYW5hZ2VtZW50IGFuZCB3cml0YWJpbGl0eSBjaGVja3MgZm9yIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKHNrX2J1ZmYpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiBuZXR3b3JrIHNrYiBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[1] Phase: Succeeded StartedAt: 2026-09-03 00:42:14 +0000 UTC FinishedAt: 2026-09-03 00:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 00:42:14 +0000 UTC FinishedAt: 2026-09-03 00:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2] Phase: Succeeded StartedAt: 2026-09-03 00:42:14 +0000 UTC FinishedAt: 2026-09-03 04:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 00:42:14 +0000 UTC FinishedAt: 2026-09-03 04:23:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 00:42:14 +0000 UTC FinishedAt: 2026-09-03 00:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 00:42:14 +0000 UTC FinishedAt: 2026-09-03 00:42:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd5r59/series-workflowd5r59-convert-artifact-1328226669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 00:42:35 +0000 UTC FinishedAt: 2026-09-03 01:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 00:42:35 +0000 UTC FinishedAt: 2026-09-03 01:00:44 +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:*7c431a2b-e3ff-45c4-b680-730ebfa228d9,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-workflowd5r59/series-workflowd5r59-convert-artifact-1328226669/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": "c2b49fcd-3732-43ba-81dd-d7061581688b", "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-workflowd5r59/series-workflowd5r59-build-action-3316616035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 00:42:35 +0000 UTC FinishedAt: 2026-09-03 01:00:34 +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:*7c431a2b-e3ff-45c4-b680-730ebfa228d9,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-workflowd5r59/series-workflowd5r59-convert-artifact-1328226669/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": "c2b49fcd-3732-43ba-81dd-d7061581688b", "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-workflowd5r59/series-workflowd5r59-build-action-3316616035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 01:00:44 +0000 UTC FinishedAt: 2026-09-03 01:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 01:00:44 +0000 UTC FinishedAt: 2026-09-03 01:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 01:00:44 +0000 UTC FinishedAt: 2026-09-03 01:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 01:00:44 +0000 UTC FinishedAt: 2026-09-03 01:00:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd5r59/series-workflowd5r59-convert-artifact-2774001096/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 01:00:54 +0000 UTC FinishedAt: 2026-09-03 01:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 01:00:54 +0000 UTC FinishedAt: 2026-09-03 01:02:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c2b49fcd-3732-43ba-81dd-d7061581688b,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-workflowd5r59/series-workflowd5r59-build-action-3316616035/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-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 01:02:51 +0000 UTC FinishedAt: 2026-09-03 01:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:02:51 +0000 UTC FinishedAt: 2026-09-03 01:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 01:02:51 +0000 UTC FinishedAt: 2026-09-03 01:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 01:02:51 +0000 UTC FinishedAt: 2026-09-03 01:19:29 +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:*7c431a2b-e3ff-45c4-b680-730ebfa228d9,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-workflowd5r59/series-workflowd5r59-convert-artifact-2774001096/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": "f8ef4987-31df-4456-8f9f-ad8f4392c635", "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-workflowd5r59/series-workflowd5r59-build-action-692132468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:02:51 +0000 UTC FinishedAt: 2026-09-03 01:19:19 +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:*7c431a2b-e3ff-45c4-b680-730ebfa228d9,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-workflowd5r59/series-workflowd5r59-convert-artifact-2774001096/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": "f8ef4987-31df-4456-8f9f-ad8f4392c635", "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-workflowd5r59/series-workflowd5r59-build-action-692132468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 01:19:29 +0000 UTC FinishedAt: 2026-09-03 01:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 01:19:29 +0000 UTC FinishedAt: 2026-09-03 01:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 01:19:29 +0000 UTC FinishedAt: 2026-09-03 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 01:19:29 +0000 UTC FinishedAt: 2026-09-03 01:21:13 +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:*f8ef4987-31df-4456-8f9f-ad8f4392c635,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-workflowd5r59/series-workflowd5r59-build-action-692132468/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-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 04:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 04:23:48 +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":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"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:*c2b49fcd-3732-43ba-81dd-d7061581688b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f8ef4987-31df-4456-8f9f-ad8f4392c635,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-workflowd5r59/series-workflowd5r59-build-action-3316616035/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-workflowd5r59/series-workflowd5r59-build-action-692132468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 01:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 01:21:31 +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":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"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-workflowd5r59/series-workflowd5r59-convert-artifact-2709569921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:21:23 +0000 UTC FinishedAt: 2026-09-03 01:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 01:21:33 +0000 UTC FinishedAt: 2026-09-03 04:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd5r59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["seg6_do_srh_encap","seg6_do_srh_inline","seg6_build_state","seg6_input","seg6_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8ea08ba34f2a2e9bfb18ff3d69eb2d69b324f49","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL"],"series_id":"d15277d8-b214-41bb-82c4-9dd330e36833","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 01:21:33 +0000 UTC FinishedAt: 2026-09-03 04:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c2b49fcd-3732-43ba-81dd-d7061581688b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f8ef4987-31df-4456-8f9f-ad8f4392c635,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-workflowd5r59/series-workflowd5r59-build-action-3316616035/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-workflowd5r59/series-workflowd5r59-build-action-692132468/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-workflowd5r59/series-workflowd5r59-convert-artifact-2709569921/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,}