Name: series-workflowrprcl Phase: Succeeded StartedAt: 2026-09-04 14:19:56 +0000 UTC FinishedAt: 2026-09-04 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[0] Phase: Succeeded StartedAt: 2026-09-04 14:19:56 +0000 UTC FinishedAt: 2026-09-04 14:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 14:19:56 +0000 UTC FinishedAt: 2026-09-04 14:46:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET", "INET" ], "series_id": "dd3c7a5c-da90-4b51-8b94-8e9bdb065af8" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_ops_convert_ctx_access", "bpf_convert_ctx_accesses" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgQlBGIGJ5dGVjb2RlIGNvbnZlcnNpb24gZm9yIHJlYWRpbmcgdGhlIGBydHRfbWluYCBmaWVsZCBvZiBgc3RydWN0IGJwZl9zb2NrX29wc2AgaW4gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gSXQgcmVwbGFjZXMgY3VzdG9tIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIHdpdGggdGhlIHN0YW5kYXJkaXplZCBoZWxwZXIgbWFjcm8gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKWAuXG5cblRoaXMgY2hhbmdlIGFkZHMgYSBzYWZldHkgY2hlY2sgb24gYGlzX2xvY2tlZF90Y3Bfc29ja2AgcHJpb3IgdG8gZGVyZWZlcmVuY2luZyB0aGUgc29ja2V0IGFzIGBzdHJ1Y3QgdGNwX3NvY2tgIGFuZCByZWFkcyB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgKGBydHRfbWluLnNbMF0udmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MGJjMDVjNzI3Mjg2NzdhNzlmZjZlNWNiMjFmNDFjMWRlNmNmYjc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNDo0NDoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTExMDUsMTggJiM0MzsxMTEwNSw3IEBAIHN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKTpcbi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICE9XG4tXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heCkpO1xuLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBtaW5tYXgpIFx1MDAzY1xuLVx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBtaW5tYXhfc2FtcGxlKSk7XG4tXG4tXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4tXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG4tXHRcdFx0XHQgICAgICBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLVx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcbi1cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgJiM0Mztcbi1cdFx0XHRcdCAgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdCkpO1xuJiM0MztcdFx0U09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO1xuIFx0XHRicmVhaztcbiBcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzKTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZUJQRiBzb2NrX29wcyBjb250ZXh0IGFjY2Vzc2VzIHRvIHJ0dF9taW4gYXJlIHJld3JpdHRlbiBpbnRvIG5hdGl2ZSBpbnN0cnVjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi9yZXdyaXRpbmcgKHVzaW5nIFNPQ0tfT1BTX0dFVF9GSUVMRCkuIFRoaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBwYXRoIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgY2FuIGJlIGV4ZXJjaXNlZCBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBwcm9ncmFtcyB0aGF0IGFjY2VzcyB0aGUgcnR0X21pbiBmaWVsZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQwYmMwNWM3MjcyODY3N2E3OWZmNmU1Y2IyMWY0MWMxZGU2Y2ZiNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjQ0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTExMDUsMTggJiM0MzsxMTEwNSw3IEBAIHN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKToKLQkJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICE9Ci0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7Ci0JCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgJmx0OwotCQkJICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTsKLQotCQkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKAotCQkJCQkJc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksCi0JCQkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAotCQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTsKLQkJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLSZndDtkc3RfcmVnLCBzaS0mZ3Q7ZHN0X3JlZywKLQkJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7Ci0JCQkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7CiYjNDM7CQlTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciYjMzk7cyBxdWlja2VzdCB0byBnZXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzcGVjaWZpZXMgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIE5vdyB0aGF0IEkga25vdyB0aGUgdGFyZ2V0LCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCBwcm9iYWJseSBhcm91bmQgbGluZSAxMTEwNSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIGVuc3VyZSB0aGlzIGNoYW5nZSBhbGlnbnMgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIG5ldHdvcmsgZmlsdGVyLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBoeXBvdGhlc2VzIGFib3V0IHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgcm91dGluZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwOTA6XHRcdFx0XHRcdFx0XHRpc19mdWxsc29jayksXG4xMTA5MTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbjExMDkyOlx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sXG4xMTA5MzpcdFx0XHRcdFx0XHQgICAgICAgaXNfZnVsbHNvY2spKTtcbjExMDk0Olx0XHRcdGJyZWFrO1xuMTEwOTU6XHRcbjExMDk2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHN0YXRlKTpcbjExMDk3Olx0XHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpICE9IDEpO1xuMTEwOTg6XHRcbjExMDk5Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4xMTEwMDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxuMTExMDE6XHRcdFx0XHRcdCAgICAgIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4xMTEwMjpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuMTExMDM6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0IsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4xMTEwNDpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpKTtcbjExMTA1Olx0XHRcdGJyZWFrO1xuMTExMDY6XHRcbjExMTA3Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuMTExMDg6XHRcdFx0U09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMDk6XHRcdFx0YnJlYWs7XG4xMTExMDpcdFxuMTExMTE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzKTpcbjExMTEyOlx0XHRcdFNPQ0tfT1BTX0dFVF9GSUVMRChicGZfc29ja19vcHNfY2JfZmxhZ3MsIGJwZl9zb2NrX29wc19jYl9mbGFncyxcbjExMTEzOlx0XHRcdFx0XHQgICBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMTQ6XHRcdFx0YnJlYWs7XG4xMTExNTpcdFxuMTExMTY6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc2tfdHhoYXNoKTpcbjExMTE3Olx0XHRcdFNPQ0tfT1BTX0dFVF9PUl9TRVRfRklFTEQoc2tfdHhoYXNoLCBza190eGhhc2gsXG4xMTExODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzb2NrLCB0eXBlKTtcbjExMTE5Olx0XHRcdGJyZWFrO1xuMTExMjA6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX2N3bmQpOlxuMTExMjE6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9jd25kKTtcbjExMTIyOlx0XHRcdGJyZWFrO1xuMTExMjM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc3J0dF91cyk6XG4xMTEyNDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc3J0dF91cyk7XG4xMTEyNTpcdFx0XHRicmVhaztcbjExMTI2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9zc3RocmVzaCk6XG4xMTEyNzpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc25kX3NzdGhyZXNoKTtcbjExMTI4Olx0XHRcdGJyZWFrO1xuMTExMjk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmN2X254dCk6XG4xMTEzMDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQocmN2X254dCk7XG4xMTEzMTpcdFx0XHRicmVhaztcbjExMTMyOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9ueHQpOlxuMTExMzM6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9ueHQpO1xuMTExMzQ6XHRcdFx0YnJlYWs7XG4xMTEzNTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfdW5hKTpcbjExMTM2Olx0XHRcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzbmRfdW5hKTtcbjExMTM3Olx0XHRcdGJyZWFrO1xuMTExMzg6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgbXNzX2NhY2hlKTpcbjExMTM5Olx0XHRcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChtc3NfY2FjaGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhhdCBNYWNybyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgU09DS19PUFNfR0VUX0ZJRUxEYCBtYWNyby4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBpdHMgZXhhY3QgZGVmaW5pdGlvbi4gV2hlcmUgaXMgaXQgZGVmaW5lZCwgdHlwaWNhbGx5IGluIGEgaGVhZGVyIGZpbGUgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucz8gT25jZSBJIGhhdmUgdGhlIGRlZmluaXRpb24sIEkgY2FuIHN0YXJ0IHRvIHBpZWNlIHRvZ2V0aGVyIHdoYXQgaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcg4oCTIHdoYXQgZmllbGQgb2YgYSBzb2NrZXQgc3RydWN0dXJlIGlzIGl0IHJldHJpZXZpbmcsIGFuZCBob3c/IFRoaXMgd2lsbCBiZSBhIHF1aWNrIGludmVzdGlnYXRpb24gaW50byBpdHMgdXNhZ2UgYW5kIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTA4MTY9c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNS0vKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEwODI2OiNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEKEJQRl9GSUVMRCwgT0JKX0ZJRUxELCBPQkopXHRcdFx0ICAgICAgXFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwODI3LVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhhdCBtYWNybyBkZWZpbml0aW9uLiBXZSYjMzk7cmUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgd2hlcmUgdGhlIG1hZ2ljIGJlaGluZCBwYWNrZXQgZmlsdGVyaW5nIGlzIGxpa2VseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGlzIHN5c3RlbSB3b3Jrcywgc28gZXhhbWluaW5nIHRoZSBtYWNybyBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGNob3NlbiB0byBpbXBsZW1lbnQgdGhpcywgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkgbWF5IGhhdmUgdXNlZCwgYW5kIGhvdyB0aGV5IGFic3RyYWN0IGF3YXkgdGhlIGNvbXBsZXhpdGllcy4gSXQmIzM5O3MgdGltZSB0byBiZWNvbWUgaW50aW1hdGUgd2l0aCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MjA6XHRcdFx0XHRcdCAgICAgICB1MzIgKnRhcmdldF9zaXplKVxuMTA4MjE6XHR7XG4xMDgyMjpcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4xMDgyMzpcdFx0aW50IG9mZjtcbjEwODI0Olx0XG4xMDgyNTpcdC8qIEhlbHBlciBtYWNybyBmb3IgYWRkaW5nIHJlYWQgYWNjZXNzIHRvIHRjcF9zb2NrIG9yIHNvY2sgZmllbGRzLiAqL1xuMTA4MjY6XHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVx0XHRcdCAgICAgIFxcXG4xMDgyNzpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4Mjg6XHRcdFx0aW50IGZ1bGxzb2NrX3JlZyA9IHNpLVx1MDAzZWRzdF9yZWcsIHJlZyA9IEJQRl9SRUdfOSwgam1wID0gMjsgICAgIFxcXG4xMDgyOTpcdFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKE9CSiwgT0JKX0ZJRUxEKSBcdTAwM2VcdFx0ICAgICAgXFxcbjEwODMwOlx0XHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcbjEwODMxOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODMyOlx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODMzOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODM0Olx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODM1Olx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHNpLVx1MDAzZXNyY19yZWcpIHtcdFx0XHQgICAgICBcXFxuMTA4MzY6XHRcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfU1RYX01FTShCUEZfRFcsIHNpLVx1MDAzZXNyY19yZWcsIHJlZyxcdCAgICAgIFxcXG4xMDgzNzpcdFx0XHRcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgIFxcXG4xMDgzODpcdFx0XHRcdFx0XHQgIHRlbXApKTtcdFx0XHQgICAgICBcXFxuMTA4Mzk6XHRcdFx0XHRmdWxsc29ja19yZWcgPSByZWc7XHRcdFx0XHQgICAgICBcXFxuMTA4NDA6XHRcdFx0XHRqbXAgJiM0Mzs9IDI7XHRcdFx0XHRcdCAgICAgIFxcXG4xMDg0MTpcdFx0XHR9XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4NDI6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihcdFx0XHQgICAgICBcXFxuMTA4NDM6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICBcXFxuMTA4NDQ6XHRcdFx0XHRcdFx0XHRpc19sb2NrZWRfdGNwX3NvY2spLFx0ICAgICAgXFxcbjEwODQ1Olx0XHRcdFx0XHQgICAgICBmdWxsc29ja19yZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NDY6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NDc6XHRcdFx0XHRcdFx0ICAgICAgIGlzX2xvY2tlZF90Y3Bfc29jaykpO1x0ICAgICAgXFxcbjEwODQ4Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcdCAgICAgIFxcXG4xMDg0OTpcdFx0XHRpZiAoc2ktXHUwMDNlZHN0X3JlZyA9PSBzaS1cdTAwM2VzcmNfcmVnKVx0XHRcdFx0ICAgICAgXFxcbjEwODUwOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NTE6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NTI6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg1MzpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFx0XHRcdCAgICAgIFxcXG4xMDg1NDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXG4xMDg1NTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcdFx0ICAgICAgXFxcbjEwODU2Olx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcbjEwODU3Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFx0XHQgICAgICBcXFxuMTA4NTg6XHRcdFx0XHRcdFx0XHQgICAgICAgT0JKX0ZJRUxEKSxcdCAgICAgIFxcXG4xMDg1OTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcdFx0ICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgVHJhbnNmb3JtYXRpb24gaW4gQlBGIGBzb2NrX29wc2AgUHJvZ3JhbXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNydWNpYWwgdHJhbnNmb3JtYXRpb24gd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGNvbnRleHQgYWNjZXNzZXMgaW4gYHNvY2tfb3BzYCBwcm9ncmFtcy4gTXkgZm9jdXMgaXMgb24gZW5zdXJpbmcgc2FmZSBhbmQgY29ycmVjdCB0cmFuc2xhdGlvbiBmcm9tIHRoZSByYXcgYWNjZXNzIHBhdHRlcm5zIHRvIGEgcHJvcGVyIGJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGFjY2Vzc2VzIGxpa2UgYGJwZl9zb2NrX29wcy0mZ3Q7cnR0X21pbmAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGp1c3QgZGlyZWN0bHkgbG9hZGVkIGZyb20gYW4gb2Zmc2V0IHJlbGF0ZWQgdG8gYHRjcF9zb2NrYCwgd2l0aG91dCBhbnkgY2hlY2tzLiBUaGlzIHdvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhlIG9sZCBzdHlsZSwgcmF3IGBMRFhfTUVNYCBpbnN0cnVjdGlvbnMuCgpgYGBjCippbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksCgkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAoJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTsKKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLSZndDtkc3RfcmVnLCBzaS0mZ3Q7ZHN0X3JlZywKCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7CgkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7CmBgYAoKVGhlIGlzc3VlIGhlcmUgaXMgdGhlIGxhY2sgb2YgYSBjcml0aWNhbCBzYWZldHkgY2hlY2sgZm9yIGBpc19sb2NrZWRfdGNwX3NvY2tgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGB0Y3Bfc29ja2AgZmllbGRzLiBUaGUgbmV3IHBhdGNoIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgdGhpczogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBTT0NLX09QU19HRVRfRklFTERgIHdoaWNoIHdpbGwgZWl0aGVyIGJlIGEganVtcCBvdmVyIHRoZSBsb2FkIGluc3RydWN0aW9uIGlmIGBpc19sb2NrZWRfdGNwX3NvY2tgIGlzIGZhbHNlLCBvciBwcm9jZWVkIGlmIHRydWUuIEFkZGl0aW9uYWxseSB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgc2xpZ2h0bHkgZGlmZmVyZW50OiBgcnR0X21pbi5zWzBdLnZgLgoKVGhpcyB0cmFuc2xhdGlvbiBpcyBjcnVjaWFsLCBpdCYjMzk7cyB3aGF0IHRyYW5zZm9ybXMgdGhlIGludGVuZGVkIGFjY2VzcyB0byB0aGUgZ2VuZXJhdGVkIGJ5dGVjb2RlLiBUaGlzIGlzIGFsbCBmb3IgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgIHByb2dyYW1zLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBJdCBhYnNvbHV0ZWx5IGlzISBCUEYgYHNvY2tfb3BzYCBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkLCBhdHRhY2hlZCB0byB2YXJpb3VzIHBvaW50cyBpbiB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFyZSBleGVjdXRlZCBkdXJpbmcgVENQIHNvY2tldCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHkgdGhyb3VnaCBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIGFuZCBgYnBmKEJQRl9QUk9HX0FUVEFDSCwgLi4uKWAgY2FsbHMuIENydWNpYWxseSwgSSBzZWUgdGhhdCBkdXJpbmcgdGhlIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBwaGFzZSAoYGJwZl9jaGVja2ApLCBgY29udmVydF9jdHhfYWNjZXNzZXNgIGNhbGxzIG91ciB0YXJnZXQsIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgLiBTbywgaXQmIzM5O3MgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzdWJzeXN0ZW0uIFRoaXMgbWFrZXMgaXQgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUgdG8gc2VjdXJlLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgdG8gYmUgYWN0aXZlLiBJdCByZWxpZXMgb24gdGhlIEJQRiwgQlBGX1NZU0NBTEwsIGFuZCBORVQgY29uZmlncyB0byBiZSBlbmFibGVkLiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCB0byB0cmFjZSBleGFjdGx5IHdoZXJlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTA3Mjc9c3RhdGljIHUzMiBzb2NrX2FkZHJfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MTUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMDgxNjpzdGF0aWMgdTMyIHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MTctXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTU4Nj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBzb2NrX29wc192ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODgtXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IHNvY2tfb3BzX2lzX3ZhbGlkX2FjY2Vzcyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTg5Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU5MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGVlcCBEaXZlIGludG8gYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2AgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2AuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzdXJmYWNlLWxldmVsIHNjYW47IEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgKnVzZWQqLiBJJiMzOTttIHRhbGtpbmcgYWJvdXQgbW9yZSB0aGFuIGp1c3QgZGVmaW5pdGlvbnM7IEkgd2FudCB0byBrbm93IHdoZXJlIGl0JiMzOTtzICpndWFyZGVkKiwgd2hhdCBjb25kaXRpb25zIGRpY3RhdGUgaXRzIGludm9jYXRpb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIGluIHdoaWNoIGl0JiMzOTtzIGFjdGl2ZS4gSSYjMzk7bSBhZnRlciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIGRvd24gdG8gdGhlIGdyYW51bGFyIGxldmVsIG9mIHRoZSByZWxldmFudCBsb2NraW5nLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBCYXNpY2FsbHksIEkgd2FudCB0byBtYXAgb3V0IGl0cyBvcGVyYXRpb25hbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX29wc192ZXJpZmllcl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTE1ODM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19zb2NrX2FkZHJfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4Njpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBzb2NrX29wc192ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4Ny1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfb3BzX2Z1bmNfcHJvdG8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTIFJlZ2lzdHJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBsaWtlbHkgY29uZmlndXJlZCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWFzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvY29yZS9maWx0ZXIuY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSB1c3VhbCBwbGFjZSBmb3IgQlBGLXJlbGF0ZWQgZmlsdGVyaW5nIGFuZCBwcm9ncmFtIGF0dGFjaG1lbnQgbG9naWMuIFNpbXVsdGFuZW91c2x5LCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgIHRvIHNlZSBob3cgdGhlIGVudW0gaXRzZWxmIGlzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgQlBGIHByb2dyYW0gdHlwZXMgYXJlIGRlY2xhcmVkIG5lYXJieS4gVGhpcyB3aWxsIGhlbHAgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgd2hlcmUgdGhlIGtlcm5lbCByZWNvZ25pemVzIGFuZCBwb3RlbnRpYWxseSBpbml0aWFsaXplcyBvciB1c2VzIHRoaXMgc3BlY2lmaWMgcHJvZ3JhbSB0eXBlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI3PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyOTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIHNvY2tfb3BzLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDozMDpcdCAgICAgIHN0cnVjdCBicGZfc29ja19vcHMsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMzEtQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQlBGX1BST0dfVFlQRV9TT0NLX09QUyBhbmQgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTYCBpcyBiZWluZyBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgYnBmX3R5cGVzLmhgIGhlYWRlciBmaWxlLiBJdCYjMzk7cyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgdG8gZXhhbWluZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIHRob3NlIGAjaWZkZWZgIGRpcmVjdGl2ZXMg4oCTIHN1cnJvdW5kaW5nIHRoaXMgcHJvZ3JhbSB0eXBlIGRlZmluaXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgaXRzIGluY2x1c2lvbiwgZXhjbHVzaW9uLCBvciBhbnkgbW9kaWZpY2F0aW9ucyBiYXNlZCBvbiB0aGUga2VybmVsIHZlcnNpb24sIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgdGhlIHByZXNlbmNlIG9mIHNwZWNpZmljIGZlYXR1cmVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSB2YXJpYXRpb25zLCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIG9yIGFueSBpbmRpY2F0aW9ucyBvZiBob3cgdGhpcyB0eXBlIGlzIGV2b2x2aW5nLiBJIGFsc28gd2FudCB0byBxdWlja2x5IGdldCBhbiBpZGVhIG9mIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzY2hlbWUgb2Ygc3VwcG9ydGVkIHByb2dyYW0gdHlwZXMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnYXVnZSBpdHMgcG9ydGFiaWxpdHkgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSBmZWF0dXJlIGZsYWcgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdC8qIGludGVybmFsIGZpbGUgLSBkbyBub3QgaW5jbHVkZSBkaXJlY3RseSAqL1xuICAgMzpcdFxuICAgNDpcdCNpZmRlZiBDT05GSUdfTkVUXG4gICA1Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcbiAgIDY6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAgNzpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIHRjX2Nsc19hY3QsXG4gICA4Olx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgIDk6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxuICAxMDpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gIDExOlx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1hEUCwgeGRwLFxuICAxMjpcdFx0ICAgICAgc3RydWN0IHhkcF9tZCwgc3RydWN0IHhkcF9idWZmKVxuICAxMzpcdCNpZmRlZiBDT05GSUdfQ0dST1VQX0JQRlxuICAxNDpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBjZ19za2IsXG4gIDE1Olx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMTY6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0ssIGNnX3NvY2ssXG4gIDE3Olx0XHQgICAgICBzdHJ1Y3QgYnBmX3NvY2ssIHN0cnVjdCBzb2NrKVxuICAxODpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLCBjZ19zb2NrX2FkZHIsXG4gIDE5Olx0XHQgICAgICBzdHJ1Y3QgYnBmX3NvY2tfYWRkciwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybilcbiAgMjA6XHQjZW5kaWZcbiAgMjE6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX0lOLCBsd3RfaW4sXG4gIDIyOlx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMjM6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgbHd0X291dCxcbiAgMjQ6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAyNTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXG4gIDI2Olx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMjc6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcbiAgMjg6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAyOTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgc29ja19vcHMsXG4gIDMwOlx0XHQgICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4pXG4gIDMxOlx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxuICAzMjpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gIDMzOlx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX01TRywgc2tfbXNnLFxuICAzNDpcdFx0ICAgICAgc3RydWN0IHNrX21zZ19tZCwgc3RydWN0IHNrX21zZylcbiAgMzU6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1IsIGZsb3dfZGlzc2VjdG9yLFxuICAzNjpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IGJwZl9mbG93X2Rpc3NlY3RvcilcbiAgMzc6XHQjZW5kaWZcbiAgMzg6XHQjaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbiAgMzk6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfS1BST0JFLCBrcHJvYmUsXG4gIDQwOlx0XHQgICAgICBicGZfdXNlcl9wdF9yZWdzX3QsIHN0cnVjdCBwdF9yZWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYnkgYSBmZXcgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfTkVUYCwgZGVmaW5pdGVseSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfQ0dST1VQX0JQRmAgaWYgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhdHRhY2hpbmcgdGhlc2UgcHJvZ3JhbXMgdG8gY2dyb3Vwcywgb3IgYENPTkZJR19JTkVUYCBpZiB0aGlzIGlzIHNwZWNpZmljYWxseSBmb3IgVENQIHNvY2tfb3BzLiBLbm93aW5nIHRoaXMgaXMgdGhlIGZvdW5kYXRpb24uCgpOb3csIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2Agc3RydWN0dXJlLiBUaGF04oCZcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBhbmQgYW55IGFzc29jaWF0ZWQgdmVyaWZpY2F0aW9uIHNob3VsZCBiZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRoaW5ncyBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1ODA6XHRcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcdD0gc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyxcbjExNTgxOlx0fTtcbjExNTgyOlx0XG4xMTU4MzpcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfc29ja19hZGRyX3Byb2dfb3BzID0ge1xuMTE1ODQ6XHR9O1xuMTE1ODU6XHRcbjExNTg2Olx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc29ja19vcHNfdmVyaWZpZXJfb3BzID0ge1xuMTE1ODc6XHRcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfb3BzX2Z1bmNfcHJvdG8sXG4xMTU4ODpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBzb2NrX29wc19pc192YWxpZF9hY2Nlc3MsXG4xMTU4OTpcdFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MsXG4xMTU5MDpcdH07XG4xMTU5MTpcdFxuMTE1OTI6XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNvY2tfb3BzX3Byb2dfb3BzID0ge1xuMTE1OTM6XHR9O1xuMTE1OTQ6XHRcbjExNTk1Olx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfc2tiX3ZlcmlmaWVyX29wcyA9IHtcbjExNTk2Olx0XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBza19za2JfZnVuY19wcm90byxcbjExNTk3Olx0XHQuaXNfdmFsaWRfYWNjZXNzXHQ9IHNrX3NrYl9pc192YWxpZF9hY2Nlc3MsXG4xMTU5ODpcdFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBza19za2JfY29udmVydF9jdHhfYWNjZXNzLFxuMTE1OTk6XHRcdC5nZW5fcHJvbG9ndWVcdFx0PSBza19za2JfcHJvbG9ndWUsXG4xMTYwMDpcdH07XG4xMTYwMTpcdFxuMTE2MDI6XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX3NrYl9wcm9nX29wcyA9IHtcbjExNjAzOlx0fTtcbjExNjA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU29ja29wcyBDb250ZXh0IEFjY2VzcyBDb252ZXJzaW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB1c2VkIGluIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgcmV3cml0aW5nIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AgcHJvZ3JhbXMuIFRoZXNlIHByb2dyYW1zIGFyZSBoaXR0aW5nIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBmaWVsZHMgbGlrZSBgcnR0X21pbmAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LgoKU2luY2UgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXMgc3RhdGljLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBjaGVjayBpZiBpdCYjMzk7cyBkaXJlY3RseSBjYWxsZWQgb3IgaW5saW5lZCBpbnRvIHRoZSBgc29ja19vcHNfdmVyaWZpZXJfb3BzYCBmdW5jdGlvbiBwb2ludGVyLCBzcGVjaWZpY2FsbHkgYC5jb252ZXJ0X2N0eF9hY2Nlc3NgLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBpdHMgYWRkcmVzcyBpcyBhc3NpZ25lZCB0byBhIGdsb2JhbCBzdHJ1Y3QgYHNvY2tfb3BzX3ZlcmlmaWVyX29wcy5jb252ZXJ0X2N0eF9hY2Nlc3MgPSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3M7YCBtZWFucyBpdHMgc3ltYm9sICpzaG91bGQqIGV4aXN0IGluIHZtbGludXgsIHVubGVzcyB0aGUgY29tcGlsZXIgZ2V0cyBjbGV2ZXIsIGJ1dCBpdCBzdGlsbCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gSSBjYW4gY2hlY2sgaXRzIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uZmlybS4KCkhhbmcgb24gYSBzZWNvbmQuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHNpbmNlIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyB1c2VkIGluIGBicGZfY2hlY2tgIC8gYGNvbnZlcnRfY3R4X2FjY2Vzc2VzYCAvIGBicGZfY29udmVydF9jdHhfYWNjZXNzYCBpdCBpcyAqbm90KiBpbmxpbmVkLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpZiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBpcyBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZS4gVGhlbiwgSSBjYW4gbG9vayBmb3IgdGhlIGNhbGwgY2hhaW4gb3JpZ2luYXRpbmcgZnJvbSBgY29udmVydF9jdHhfYWNjZXNzZXNgIG9yIGBicGZfY29udmVydF9jdHhfYWNjZXNzYCBpbnN0ZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb252ZXJ0X2N0eF9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTI0NTE9c3RhdGljIGJvb2wgc3lzY3RsX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0NzctXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI0Nzg6c3RhdGljIHUzMiBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0NzktXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNTQyPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3N5c2N0bF92ZXJpZmllcl9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ0LVx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBzeXNjdGxfaXNfdmFsaWRfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTQ1Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ2LX07XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNjA0PXN0YXRpYyBib29sIGNnX3NvY2tvcHRfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY3Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjY3ODpzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2NzktXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnNpLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc2NT1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2Nrb3B0X3ZlcmlmaWVyX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjctXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IGNnX3NvY2tvcHRfaXNfdmFsaWRfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY4Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzcyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2OS1cdC5nZW5fcHJvbG9ndWVcdFx0PSBjZ19zb2Nrb3B0X2dldF9wcm9sb2d1ZSxcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTYzOT1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03NDAtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0MTppbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Mi17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy04MTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSYjNDM7JiM0MzssIGluc24mIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjgxNDpcdFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2Vzcztcbmtlcm5lbC9icGYvZml4dXBzLmMtODE1LVx0XHRlbnVtIGJwZl9yZWdfdHlwZSBwdHJfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxMC1cdFx0Y2FzZSBQVFJfVE9fQ1RYOlxua2VybmVsL2JwZi9maXh1cHMuYzo5MTE6XHRcdFx0aWYgKCFvcHMtXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxua2VybmVsL2JwZi9maXh1cHMuYy05MTItXHRcdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvZml4dXBzLmM6OTEzOlx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy1cdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxNC1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxNi1cdFx0Y2FzZSBQVFJfVE9fU09DS19DT01NT046XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjkxNzpcdFx0XHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxOC1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE5LVx0XHRjYXNlIFBUUl9UT19UQ1BfU09DSzpcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIwOlx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyMS1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvZml4dXBzLmMtOTIyLVx0XHRjYXNlIFBUUl9UT19YRFBfU09DSzpcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIzOlx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl94ZHBfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyNC1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk2OS1cdFx0ICogY29udmVydCB0byBhIDQvOC1ieXRlIGxvYWQsIHRvIG1pbmltdW0gcHJvZ3JhbSB0eXBlIHNwZWNpZmljXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjk3MDpcdFx0ICogY29udmVydF9jdHhfYWNjZXNzIGNoYW5nZXMuIElmIGNvbnZlcnNpb24gaXMgc3VjY2Vzc2Z1bCxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTcxLVx0XHQgKiB3ZSB3aWxsIGFwcGx5IHByb3BlciBtYXNrIHRvIHRoZSByZXN1bHQuXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy05OTQtXHRcdHRhcmdldF9zaXplID0gMDtcbmtlcm5lbC9icGYvZml4dXBzLmM6OTk1Olx0XHRjbnQgPSBjb252ZXJ0X2N0eF9hY2Nlc3ModHlwZSwgaW5zbiwgaW5zbl9idWYsIGVudi1cdTAwM2Vwcm9nLFxua2VybmVsL2JwZi9maXh1cHMuYy05OTYtXHRcdFx0XHRcdCBcdTAwMjZ0YXJnZXRfc2l6ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4OTQ9c3RhdGljIGludCBjaGVja19jdHhfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDkwMi1cdGJvb2wgdmFyX29mZl9vayA9IGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoZW52LVx1MDAzZXByb2cpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5MDM6XHRib29sIGZpeGVkX29mZl9vayA9ICFlbnYtXHUwMDNlb3BzLVx1MDAzZWNvbnZlcnRfY3R4X2FjY2Vzcztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTA0LVx0aW50IGVycjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTk3LVx0XHQvKiBwcm9ncmFtIGlzIHZhbGlkLCBjb252ZXJ0ICoodTMyKikoY3R4ICYjNDM7IG9mZikgYWNjZXNzZXMgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE5ODpcdFx0cmV0ID0gYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBTb2NrZXQgT3BlcmF0aW9ucyB3aXRoIEJQRioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgc29ja19vcHNgIEJQRiBwcm9ncmFtcyBhcmUgYWN0dWFsbHkgYmVpbmcgZXhlY3V0ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkga25vdyB0aGUgZ2VuZXJhbCBjb25jZXB0cywgYnV0IEkgd2FudCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyBhdCBwbGF5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdG8gdXNlIGBncmVwYC4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQsIHRoZSBwcm9ncmFtIHR5cGUuIFRoZW4sIHRvIGJlIG1vcmUgcHJlY2lzZSBpbiBteSBzZWFyY2ggSSBzaG91bGQgYWxzbyBpbmNsdWRlIGB0Y3BfY2FsbF9icGZgIGluIG15IHNlYXJjaCBxdWVyaWVzLCBhcyBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgZXhlY3V0ZSB0aGUgcHJvZ3JhbXMuIFRoaXMgYXBwcm9hY2ggd2lsbCBsaWtlbHkgZXhwb3NlIHRoZSByZWxldmFudCBjYWxsIHNpdGVzIGFuZCBkYXRhIGZsb3cuIEFybWVkIHdpdGggdGhlc2Ugc2VhcmNoIHRlcm1zLCBJIHNob3VsZCBiZSBhYmxlIHRvIG5hdmlnYXRlIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIHBhdGggZm9yIHRoZXNlIHNvY2tfb3BzIHByb2dyYW1zLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgcHJvZ3JhbXMgaW4gbW9yZSBkZXRhaWwuIFRoaXMgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoaW5ncyBsaWtlIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nLCBzZWN1cml0eSBwb2xpY2llcywgYW5kIG90aGVyIHNvY2tldC1yZWxhdGVkIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jYWxsX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvYWZfaW5ldC5jPTE5OD1pbnQgX19pbmV0X2xpc3Rlbl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0yMjgtXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjI5Olx0XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfTElTVEVOX0NCLCAwLCBOVUxMKTtcbm5ldC9pcHY0L2FmX2luZXQuYy0yMzAtXHR9XG4tLVxubmV0L2lwdjQvdGNwLmM9Mjk2MT12b2lkIHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMjk2OS1cdCAqIG5lZWQgdG8gcmVtYXAgdGhlIGludGVybmFsIHZhbHVlIHRvIHRoZSBCUEYgdmFsdWUgYmVmb3JlIGNhbGxpbmdcbm5ldC9pcHY0L3RjcC5jOjI5NzA6XHQgKiB0Y3BfY2FsbF9icGZfMmFyZy5cbm5ldC9pcHY0L3RjcC5jLTI5NzEtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3AuYy0yOTk4LVx0aWYgKEJQRl9TT0NLX09QU19URVNUX0ZMQUcodGNwX3NrKHNrKSwgQlBGX1NPQ0tfT1BTX1NUQVRFX0NCX0ZMQUcpKVxubmV0L2lwdjQvdGNwLmM6Mjk5OTpcdFx0dGNwX2NhbGxfYnBmXzJhcmcoc2ssIEJQRl9TT0NLX09QU19TVEFURV9DQiwgb2xkc3RhdGUsIHN0YXRlKTtcbm5ldC9pcHY0L3RjcC5jLTMwMDAtXG4tLVxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9udi5jLTE0OC1cdCAqL1xubmV0L2lwdjQvdGNwX252LmM6MTQ5Olx0YmFzZV9ydHQgPSB0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19CQVNFX1JUVCwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXHRpZiAoYmFzZV9ydHQgXHUwMDNlIDApIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzU1MD1pbnQgX190Y3BfcmV0cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2Vncylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzY3OC1cdGlmIChCUEZfU09DS19PUFNfVEVTVF9GTEFHKHRwLCBCUEZfU09DS19PUFNfUkVUUkFOU19DQl9GTEFHKSlcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozNjc5Olx0XHR0Y3BfY2FsbF9icGZfM2FyZyhzaywgQlBGX1NPQ0tfT1BTX1JFVFJBTlNfQ0IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzY4MC1cdFx0XHRcdCAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSwgc2VncywgZXJyKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzAzLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzMDQ6XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfQ09OTkVDVF9DQiwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDMwNS1cbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz0yNDM9c3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjg5LVx0aWYgKEJQRl9TT0NLX09QU19URVNUX0ZMQUcodHAsIEJQRl9TT0NLX09QU19SVE9fQ0JfRkxBRykpXG5uZXQvaXB2NC90Y3BfdGltZXIuYzoyOTA6XHRcdHRjcF9jYWxsX2JwZl8zYXJnKHNrLCBCUEZfU09DS19PUFNfUlRPX0NCLFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjkxLVx0XHRcdFx0ICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgU29ja2V0IE9wZXJhdGlvbiBUZXN0aW5nIGluIEJQRioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGFyZWEgYW5kIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkLiBTcGVjaWZpY2FsbHksIHJlZ2FyZGluZyBgc29ja19vcHNgLCBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSB0ZXN0IHN1aXRlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGhhdmUgc29saWQgdGVzdGluZyBoZXJlLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBkZWZpbml0ZWx5IGNvbmZpcm0gdGhhdCB0aGVyZSYjMzk7cyBhIGRlZGljYXRlZCB0ZXN0IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYHNvY2tfb3BzYCB0ZXN0aW5nLiYjMzQ7IFNvbWV0aGluZyBsaWtlIGBicGZfcHJvZ190ZXN0X3J1bl9zb2NrX29wc2Agc291bmRzIGZhbWlsaWFyLCBidXQgSSBuZWVkIHRvIGdvIGxvb2sgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBwcmVzZW50IGFuZCBkb2luZyBpdHMgam9iIHByb3Blcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHRoZSByaWdodCBmdW5jdGlvbiwgb3IgdGhhdCB0aGVyZSYjMzk7cyBzb21lIHNpbWlsYXIgdGVzdGluZyBiZWluZyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfcnVuLipzb2NrX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIEV4cGxvcmF0aW9uIGZvciBTcGVjaWZpYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyBzcGVjaWZpYywgcHJvYmFibHkgcmVsYXRlZCB0byB0ZXN0aW5nIG9yIG5ldHdvcmtpbmcgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBwZXJmb3JtIGEgYnJvYWQgc2VhcmNoLiBUaGUga2VybmVsIHNvdXJjZSB0cmVlIGlzIHZhc3QsIGJ1dCBJIGNhbiBuYXJyb3cgdGhpbmdzIGRvd24gYSBiaXQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgY29kZWJhc2UuIFRoZSB0d28ga2V5IHRlcm1zIEkmIzM5O2xsIHVzZSBhcmUgYHRlc3RfcnVuYCBhbmQgYHNvY2tfb3BzX3Byb2dfb3BzYC4gYHRlc3RfcnVuYCBtaWdodCBpbmRpY2F0ZSBzb21lIGtpbmQgb2YgdGVzdCBpbmZyYXN0cnVjdHVyZSwgcG9zc2libHkgdW5pdCB0ZXN0cyBvciBpbnRlZ3JhdGlvbiB0ZXN0cyB0aGF0IGFyZSBydW4gd2hlbiBkZXZlbG9waW5nIG5ldyBjb2RlLiBUaGUgdGVybSBgc29ja19vcHNfcHJvZ19vcHNgIGlzIGludGVyZXN0aW5nLCBpdCBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHJlZmVycmluZyB0byB0aGUgYHNvY2tfb3BzYCBzdHJ1Y3R1cmUgb3IgdGhlIGFzc29jaWF0ZWQgYHByb2dfb3BzYC4gVGhlIHVzZSBvZiBgcHJvZ19vcHNgIGluZGljYXRlcyBlQlBGLCBhIHByb2dyYW1tYWJsZSB3YXkgb2YgZXh0ZW5kaW5nIHRoZSBrZXJuZWwuIFRoaXMgaXMgd29ydGggaW52ZXN0aWdhdGluZyBiZWNhdXNlIGVCUEYgaXMgcGVydmFzaXZlLCBhbmQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgd2lsbCBwb2ludCB0byBpbXBsZW1lbnRhdGlvbnMgb2Ygc3BlY2lmaWMgc29ja2V0IGZlYXR1cmVzLiBCeSBzZWFyY2hpbmcgYWNyb3NzIHRoZSBrZXJuZWwsIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgdGhlc2UgdGVybXMgYXJlIHVzZWQgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlcmUsIEkgY2FuIGZ1cnRoZXIgcmVmaW5lIG15IHNlYXJjaCBvciBmb2xsb3cgc3BlY2lmaWMgY2FsbCBncmFwaHMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGVsZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX29wc19wcm9nX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMTU4Nj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBzb2NrX29wc192ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU5Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNvY2tfb3BzX3Byb2dfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIGB0Y3BfY2FsbF9icGZgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHRjcF9jYWxsX2JwZmAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXRzIG5hbWUsIGJ1dCBJIGNhbiYjMzk7dCByZWx5IG9uIHRoYXQgYWxvbmUuIEkgbmVlZCB0byB0cmFjZSBpdCBiYWNrIHRvIGl0cyBzb3VyY2UuIEl0IGNvdWxkIGJlIGluIGEgaGVhZGVyIGZpbGUsIHBhcnQgb2YgYSBzcGVjaWZpYyBtb2R1bGUsIG9yIG1heWJlIGV2ZW4gZHluYW1pY2FsbHkgbG9hZGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGNvbnRleHQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlIGFuZCBzZWUgd2hlcmUgYHRjcF9jYWxsX2JwZmAgaXMgZGVjbGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jYWxsX2JwZlxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODgxPXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfc2tvcHNfaW5pdF9za2Ioc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpza29wcyxcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yODkzLSNpZmRlZiBDT05GSUdfQlBGXG5pbmNsdWRlL25ldC90Y3AuaDoyODk0OnN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcCwgdTMyIG5hcmdzLCB1MzIgKmFyZ3MpXG5pbmNsdWRlL25ldC90Y3AuaC0yODk1LXtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yOTE5PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8yYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIpXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjkyMi1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5MjM6XHRyZXR1cm4gdGNwX2NhbGxfYnBmKHNrLCBvcCwgMiwgYXJncyk7XG5pbmNsdWRlL25ldC90Y3AuaC0yOTI0LX1cbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yOTI2PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8zYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjkzMC1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5MzE6XHRyZXR1cm4gdGNwX2NhbGxfYnBmKHNrLCBvcCwgMywgYXJncyk7XG5pbmNsdWRlL25ldC90Y3AuaC0yOTMyLX1cbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yOTM0PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfY2xlYXJfc29ja19vcHNfY2JfZmxhZ3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI5MzktI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oOjI5NDA6c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NDEte1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTI5NjI9c3RhdGljIGlubGluZSB1MzIgdGNwX3RpbWVvdXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjk2NS1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5NjY6XHR0aW1lb3V0ID0gdGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfVElNRU9VVF9JTklULCAwLCBOVUxMKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NjctXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9Mjk3Mz1zdGF0aWMgaW5saW5lIHUzMiB0Y3BfcnduZF9pbml0X2JwZihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjk3Ni1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5Nzc6XHRyd25kID0gdGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfUldORF9JTklULCAwLCBOVUxMKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NzgtXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9Mjk4ND1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2JwZl9jYV9uZWVkc19lY24oc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvdGNwLmgtMjk4NS17XG5pbmNsdWRlL25ldC90Y3AuaDoyOTg2Olx0cmV0dXJuICh0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19ORUVEU19FQ04sIDAsIE5VTEwpID09IDEpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjk4Ny19XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE5OD1pbnQgX19pbmV0X2xpc3Rlbl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0yMjgtXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjI5Olx0XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfTElTVEVOX0NCLCAwLCBOVUxMKTtcbm5ldC9pcHY0L2FmX2luZXQuYy0yMzAtXHR9XG4tLVxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9udi5jLTE0OC1cdCAqL1xubmV0L2lwdjQvdGNwX252LmM6MTQ5Olx0YmFzZV9ydHQgPSB0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19CQVNFX1JUVCwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXHRpZiAoYmFzZV9ydHQgXHUwMDNlIDApIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzAzLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzMDQ6XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfQ09OTkVDVF9DQiwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDMwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgSG9vayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHRjcF9jYWxsX2JwZmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZy4gSXQgbG9va3MgbGlrZSB0aGUgY2FsbCBjaGFpbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCB1bHRpbWF0ZWx5IGNhbGxzIGVpdGhlciBgQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QU2Agb3IgYEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFNfS0VSTmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgYWN0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGB0Y3BfY2FsbF9icGZgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBhcmFtZXRlcnMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhhdCBpbiBgaW5jbHVkZS9uZXQvdGNwLmhgLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiBob3cgdGhpcyBpcyBhbGwgb3JjaGVzdHJhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODkwOlx0ICogcHJvZ3JhbSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaG9zZW4gb3BlcmF0aW9uIG9yIHRoZXJlIGlzIG5vIEJQRlxuMjg5MTpcdCAqIHByb2dyYW0gbG9hZGVkKS5cbjI4OTI6XHQgKi9cbjI4OTM6XHQjaWZkZWYgQ09ORklHX0JQRlxuMjg5NDpcdHN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcCwgdTMyIG5hcmdzLCB1MzIgKmFyZ3MpXG4yODk1Olx0e1xuMjg5NjpcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuIHNvY2tfb3BzO1xuMjg5NzpcdFx0aW50IHJldDtcbjI4OTg6XHRcbjI4OTk6XHRcdG1lbXNldChcdTAwMjZzb2NrX29wcywgMCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCB0ZW1wKSk7XG4yOTAwOlx0XHRpZiAoc2tfZnVsbHNvY2soc2spKSB7XG4yOTAxOlx0XHRcdHNvY2tfb3BzLmlzX2Z1bGxzb2NrID0gMTtcbjI5MDI6XHRcdFx0c29ja19vcHMuaXNfbG9ja2VkX3RjcF9zb2NrID0gMTtcbjI5MDM6XHRcdFx0c29ja19vd25lZF9ieV9tZShzayk7XG4yOTA0Olx0XHR9XG4yOTA1Olx0XG4yOTA2Olx0XHRzb2NrX29wcy5zayA9IHNrO1xuMjkwNzpcdFx0c29ja19vcHMub3AgPSBvcDtcbjI5MDg6XHRcdGlmIChuYXJncyBcdTAwM2UgMClcbjI5MDk6XHRcdFx0bWVtY3B5KHNvY2tfb3BzLmFyZ3MsIGFyZ3MsIG5hcmdzICogc2l6ZW9mKCphcmdzKSk7XG4yOTEwOlx0XG4yOTExOlx0XHRyZXQgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTKFx1MDAyNnNvY2tfb3BzKTtcbjI5MTI6XHRcdGlmIChyZXQgPT0gMClcbjI5MTM6XHRcdFx0cmV0ID0gc29ja19vcHMucmVwbHk7XG4yOTE0Olx0XHRlbHNlXG4yOTE1Olx0XHRcdHJldCA9IC0xO1xuMjkxNjpcdFx0cmV0dXJuIHJldDtcbjI5MTc6XHR9XG4yOTE4Olx0XG4yOTE5Olx0c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmXzJhcmcoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3AsIHUzMiBhcmcxLCB1MzIgYXJnMilcbjI5MjA6XHR7XG4yOTIxOlx0XHR1MzIgYXJnc1syXSA9IHthcmcxLCBhcmcyfTtcbjI5MjI6XHRcbjI5MjM6XHRcdHJldHVybiB0Y3BfY2FsbF9icGYoc2ssIG9wLCAyLCBhcmdzKTtcbjI5MjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDg5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBlQlBGIGFuZCBUQ1AgU29ja2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgaW4gdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGZpbHRlciBpbmZyYXN0cnVjdHVyZSwgc28gd2UgbmVlZCB0byBiZSB2ZXJ5IHRob3JvdWdoLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBmb2N1c2luZyBvbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyBob3cgZUJQRiBwcm9ncmFtcyBhY2Nlc3MgdGhlIGBydHRfbWluYCBmaWVsZCB3aXRoaW4gYSBgYnBmX3NvY2tfb3BzYCBzdHJ1Y3R1cmUuIEluc3RlYWQgb2YgdGhlIG9sZCBpbmxpbmUgaW5zdHJ1Y3Rpb25zLCB3ZSYjMzk7cmUgbm93IHVzaW5nIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgYGZ1bGxzb2NrYCBvciBgbG9ja2VkX3RjcF9zb2NrYCBhbmQgdGhlIGxvYWRpbmcgb2YgYHJ0dF9taW4uc1swXS52YC4gVGhpcyBpbXBhY3RzIHRoZSBnZW5lcmF0ZWQgQlBGIGluc3RydWN0aW9ucywgZXNzZW50aWFsbHkgY2hhbmdpbmcgaG93IHRoZXNlIHByb2dyYW1zIGludGVyYWN0IHdpdGggVENQIHNvY2tldCBpbmZvcm1hdGlvbi4KCk5vdywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IEFic29sdXRlbHkuIFdlIGxvYWQgc29ja19vcHMgQlBGIHByb2dyYW1zIHVzaW5nIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgd2hpY2ggY2FsbHMgYGJwZl9jaGVjaygpYCBhbmQgdGhlbiBjYXNjYWRlcyBpbnRvIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKWAgYW5kIGV2ZW50dWFsbHkgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gTW9yZW92ZXIsIHdlIGNhbiBleGVjdXRlIHRoZSBwcm9ncmFtIHRocm91Z2ggc29ja19vcHMgaG9va3MsIGxpa2Ugd2l0aCBUQ1Agc29ja2V0cyB1bmRlciBjZ3JvdXBzLiBUaGF0IG1ha2VzIHRoaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhpcyBpbXBhY3RzIGNvcmUga2VybmVsIEJQRiBhbmQgbmV0d29ya2luZyBjb2RlIGlzIGVub3VnaCB0byB3YXJyYW50IHJpZ29yb3VzIHRlc3RpbmcuCgpNeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBhcmUgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgYW5kIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgd29ya2luZyBhcyBleHBlY3RlZC4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYsIGNncm91cHMsIGFuZCBuZXR3b3JraW5nLCBzbyBJJiMzOTtsbCBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYE5FVGAsIGFuZCBgSU5FVGAgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIGFnYWluc3QgdGhlIGBLY29uZmlnYCBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM1Mz1jb25maWcgQ0dST1VQX1BFUkZcbi0tXG5pbml0L0tjb25maWctMTM2My1cbmluaXQvS2NvbmZpZzoxMzY0OmNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM2NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgYSBCUEYtcmVsYXRlZCBzZXR0aW5nLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGZpbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGlzIGBjb25maWcgQlBGX1NZU0NBTExgIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtPyYjMzQ7IFRoaXMgcHJvYmFibHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IHJlbGF0ZSB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBvciBzZWN1cml0eSDigJMgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBhcmVhcy4gSSYjMzk7bGwgbGlrZWx5IHVzZSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb250ZXh0dWFsIGNsdWVzIGFyb3VuZCBpdCB0b28sIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBmZWF0dXJlcyBpdCBlbmFibGVzLiBJcyB0aGlzIHBhcnQgb2YgYSBsYXJnZXIgQlBGIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIG9yIGEgc3RhbmRhbG9uZT8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzgKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBORVRgIGFuZCBgSU5FVGAgd2l0aGluIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9LY29uZmlnYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBTdGFuZGFyZCBwcmFjdGljZSwgYnV0IGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4KCk5vdywgbGV0JiMzOTtzIGVuc3VyZSBhbGwgdGhlIHJlcXVpcmVkIGNvbmRpdGlvbnMgYXJlIG1ldC4gSSBzZWUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBgRW5hYmxlQ29uZmlnc2AgYXJlIGFsbCBwcmVzZW50IOKAkyBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGBORVRgLCBhbmQgYElORVRgIOKAkyB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBNeSBmb2N1cyBpcyBvbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBhbmQgYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AuIFRoZSBleHBsYW5hdGlvbiBmb3IgdGhlIHZlcmRpY3QgaXMgY29uY2lzZSwgd2hpY2ggSSBhcHByZWNpYXRlOyBJIGNhbiBtb3ZlIGZvcndhcmQgY29uZmlkZW50bHkuCgpUaW1lIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBDcnVjaWFsbHksIGl0IGNoYW5nZXMgaG93IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAgaXMgaGFuZGxlZCwgdHJhbnNpdGlvbmluZyBpdCB0byBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgVGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZ2VuZXJhdGVkIGJ5dGVjb2RlLCBlc3BlY2lhbGx5IHdoZW4gcmVhZGluZyBgcnR0X21pbmAgZnJvbSBgYnBmX3NvY2tfb3BzYC4gSXQgbm93IGluY2x1ZGVzIGxvY2tpbmcgY2hlY2tzIGFuZCBtb2RpZmllcyB0aGUgc3RydWN0IGZpZWxkIG9mZnNldC4gQW5kLCBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBUQ1Agc29ja19vcHMgZXZlbnRzLgoKVGhhdCBhbGwgbG9va3Mgc29saWQsIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyYjMzQ7LAogICAgJiMzNDticGZfY29udmVydF9jdHhfYWNjZXNzZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBlQlBGIHNvY2tfb3BzIGNvbnRleHQgYWNjZXNzZXMgdG8gcnR0X21pbiBhcmUgcmV3cml0dGVuIGludG8gbmF0aXZlIGluc3RydWN0aW9ucyBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uL3Jld3JpdGluZyAodXNpbmcgU09DS19PUFNfR0VUX0ZJRUxEKS4gVGhpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHBhdGggaW4gY29yZSBCUEYgbmV0d29ya2luZyBjYW4gYmUgZXhlcmNpc2VkIGJ5IGxvYWRpbmcgYW5kIGV4ZWN1dGluZyBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTIHByb2dyYW1zIHRoYXQgYWNjZXNzIHRoZSBydHRfbWluIGZpZWxkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgQlBGIGJ5dGVjb2RlIGNvbnZlcnNpb24gZm9yIHJlYWRpbmcgdGhlIGBydHRfbWluYCBmaWVsZCBvZiBgc3RydWN0IGJwZl9zb2NrX29wc2AgaW4gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gSXQgcmVwbGFjZXMgY3VzdG9tIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIHdpdGggdGhlIHN0YW5kYXJkaXplZCBoZWxwZXIgbWFjcm8gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKWAuXG5cblRoaXMgY2hhbmdlIGFkZHMgYSBzYWZldHkgY2hlY2sgb24gYGlzX2xvY2tlZF90Y3Bfc29ja2AgcHJpb3IgdG8gZGVyZWZlcmVuY2luZyB0aGUgc29ja2V0IGFzIGBzdHJ1Y3QgdGNwX3NvY2tgIGFuZCByZWFkcyB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgKGBydHRfbWluLnNbMF0udmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQwYmMwNWM3MjcyODY3N2E3OWZmNmU1Y2IyMWY0MWMxZGU2Y2ZiNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjQ0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTExMDUsMTggJiM0MzsxMTEwNSw3IEBAIHN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKToKLQkJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICE9Ci0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7Ci0JCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgJmx0OwotCQkJICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTsKLQotCQkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKAotCQkJCQkJc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksCi0JCQkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAotCQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTsKLQkJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLSZndDtkc3RfcmVnLCBzaS0mZ3Q7ZHN0X3JlZywKLQkJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7Ci0JCQkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7CiYjNDM7CQlTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbmV0L2NvcmUvZmlsdGVyLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdG91Y2hlZCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYC4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIG9uIHRoYXQgcGFydGljdWxhciBgb2Zmc2V0b2ZgIGNhc2U6IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAuCgpBaCwgSSBzZWUuIFRoZXkmIzM5O3ZlIHJlcGxhY2VkIHRoZSBtYW51YWwgQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gZm9yIGFjY2Vzc2luZyBgcnR0X21pbmAgd2l0aCBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO2AuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIGxpbmUgMTExMDUuIFRoYXQmIzM5O3Mgd2hlcmUgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgc2hvdWxkIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtYWNybyBkb2VzIGludGVybmFsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaXMgY3J1Y2lhbC4KCkZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBwcmVjaXNlbHkgd2hhdCBgcnR0X21pbmAgcmVwcmVzZW50cyB3aXRoaW4gYHN0cnVjdCB0Y3Bfc29ja2AuIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHRvIHRoZSBUQ1Agc3RhY2sgaW50ZXJuYWxzIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgaXRzIHN0cnVjdHVyZSBhbmQgdXNhZ2UsIHNvIEkgZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZpZWxkJiMzOTtzIGRhdGEgdHlwZSwgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvZiB0aGlzIHJlcGxhY2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEwODE2PXN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MjUtLyogSGVscGVyIG1hY3JvIGZvciBhZGRpbmcgcmVhZCBhY2Nlc3MgdG8gdGNwX3NvY2sgb3Igc29jayBmaWVsZHMuICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMDgyNjojZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVx0XHRcdCAgICAgIFxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNy1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGUgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBTT0NLX09QU19HRVRfRklFTERgLiBUaGUgY29udGV4dCBpcyBjcnVjaWFsLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBncmFiIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBtYWNybywgcGx1cyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzICp1c2VkKi4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZmV0Y2hlcyBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGEgc29ja2V0IG9wZXJhdGlvbiBvciBkYXRhIHN0cnVjdHVyZS4gSXMgaXQgdXNlZCB0byBncmFiIHByb3RvY29sLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBnZW5lcmFsIHNvY2tldCBzdGF0ZT8gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyBJJiMzOTtkIGRlYnVnIGl0IGlmIHNvbWV0aGluZyB3ZW50IHNpZGV3YXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MjA6XHRcdFx0XHRcdCAgICAgICB1MzIgKnRhcmdldF9zaXplKVxuMTA4MjE6XHR7XG4xMDgyMjpcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4xMDgyMzpcdFx0aW50IG9mZjtcbjEwODI0Olx0XG4xMDgyNTpcdC8qIEhlbHBlciBtYWNybyBmb3IgYWRkaW5nIHJlYWQgYWNjZXNzIHRvIHRjcF9zb2NrIG9yIHNvY2sgZmllbGRzLiAqL1xuMTA4MjY6XHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVx0XHRcdCAgICAgIFxcXG4xMDgyNzpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4Mjg6XHRcdFx0aW50IGZ1bGxzb2NrX3JlZyA9IHNpLVx1MDAzZWRzdF9yZWcsIHJlZyA9IEJQRl9SRUdfOSwgam1wID0gMjsgICAgIFxcXG4xMDgyOTpcdFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKE9CSiwgT0JKX0ZJRUxEKSBcdTAwM2VcdFx0ICAgICAgXFxcbjEwODMwOlx0XHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcbjEwODMxOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODMyOlx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODMzOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODM0Olx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODM1Olx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHNpLVx1MDAzZXNyY19yZWcpIHtcdFx0XHQgICAgICBcXFxuMTA4MzY6XHRcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfU1RYX01FTShCUEZfRFcsIHNpLVx1MDAzZXNyY19yZWcsIHJlZyxcdCAgICAgIFxcXG4xMDgzNzpcdFx0XHRcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgIFxcXG4xMDgzODpcdFx0XHRcdFx0XHQgIHRlbXApKTtcdFx0XHQgICAgICBcXFxuMTA4Mzk6XHRcdFx0XHRmdWxsc29ja19yZWcgPSByZWc7XHRcdFx0XHQgICAgICBcXFxuMTA4NDA6XHRcdFx0XHRqbXAgJiM0Mzs9IDI7XHRcdFx0XHRcdCAgICAgIFxcXG4xMDg0MTpcdFx0XHR9XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4NDI6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihcdFx0XHQgICAgICBcXFxuMTA4NDM6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICBcXFxuMTA4NDQ6XHRcdFx0XHRcdFx0XHRpc19sb2NrZWRfdGNwX3NvY2spLFx0ICAgICAgXFxcbjEwODQ1Olx0XHRcdFx0XHQgICAgICBmdWxsc29ja19yZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NDY6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NDc6XHRcdFx0XHRcdFx0ICAgICAgIGlzX2xvY2tlZF90Y3Bfc29jaykpO1x0ICAgICAgXFxcbjEwODQ4Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcdCAgICAgIFxcXG4xMDg0OTpcdFx0XHRpZiAoc2ktXHUwMDNlZHN0X3JlZyA9PSBzaS1cdTAwM2VzcmNfcmVnKVx0XHRcdFx0ICAgICAgXFxcbjEwODUwOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NTE6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NTI6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg1MzpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFx0XHRcdCAgICAgIFxcXG4xMDg1NDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXG4xMDg1NTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcdFx0ICAgICAgXFxcbjEwODU2Olx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcbjEwODU3Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFx0XHQgICAgICBcXFxuMTA4NTg6XHRcdFx0XHRcdFx0XHQgICAgICAgT0JKX0ZJRUxEKSxcdCAgICAgIFxcXG4xMDg1OTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcdFx0ICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgZXhwcmVzc2VkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKQWxyaWdodCwgYmVmb3JlIHdlIGdldCB0b28gZGVlcCBpbnRvIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgbGluZXMgMTExMDAgdGhyb3VnaCAxMTEyMCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGZpbHRlcmluZyB3aXRoaW4gdGhlIGNvcmUgbmV0d29yayBmdW5jdGlvbnMgdGhlcmUuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHdoYXRldmVyJiMzOTtzIGhhcHBlbmluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgaGFzIHNvbWUgYmVhcmluZyBvbiB0aGUgaXNzdWUgYXQgaGFuZC4gVGhvc2UgbGluZXMgbWlnaHQgaG9sZCBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWx0ZXIgaW1wbGVtZW50YXRpb24sIHBvc3NpYmx5IHJldmVhbGluZyB3aGVyZSB0aGUgY3VycmVudCBwcm9ibGVtIHN0ZW1zIGZyb20uIEEgcXVpY2sgc2tpbSBjb3VsZCBqb2cgbXkgbWVtb3J5IGFuZCBoZWxwIGF2b2lkIGEgd2lsZCBnb29zZSBjaGFzZSBsYXRlciBvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBsaW5lcyBjb250YWluIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIG9yIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwOTU6XHRcbjExMDk2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHN0YXRlKTpcbjExMDk3Olx0XHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpICE9IDEpO1xuMTEwOTg6XHRcbjExMDk5Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4xMTEwMDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxuMTExMDE6XHRcdFx0XHRcdCAgICAgIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4xMTEwMjpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuMTExMDM6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0IsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4xMTEwNDpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpKTtcbjExMTA1Olx0XHRcdGJyZWFrO1xuMTExMDY6XHRcbjExMTA3Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuMTExMDg6XHRcdFx0U09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMDk6XHRcdFx0YnJlYWs7XG4xMTExMDpcdFxuMTExMTE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzKTpcbjExMTEyOlx0XHRcdFNPQ0tfT1BTX0dFVF9GSUVMRChicGZfc29ja19vcHNfY2JfZmxhZ3MsIGJwZl9zb2NrX29wc19jYl9mbGFncyxcbjExMTEzOlx0XHRcdFx0XHQgICBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMTQ6XHRcdFx0YnJlYWs7XG4xMTExNTpcdFxuMTExMTY6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc2tfdHhoYXNoKTpcbjExMTE3Olx0XHRcdFNPQ0tfT1BTX0dFVF9PUl9TRVRfRklFTEQoc2tfdHhoYXNoLCBza190eGhhc2gsXG4xMTExODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzb2NrLCB0eXBlKTtcbjExMTE5Olx0XHRcdGJyZWFrO1xuMTExMjA6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX2N3bmQpOlxuMTExMjE6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9jd25kKTtcbjExMTIyOlx0XHRcdGJyZWFrO1xuMTExMjM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc3J0dF91cyk6XG4xMTEyNDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc3J0dF91cyk7XG4xMTEyNTpcdFx0XHRicmVhaztcbjExMTI2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9zc3RocmVzaCk6XG4xMTEyNzpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc25kX3NzdGhyZXNoKTtcbjExMTI4Olx0XHRcdGJyZWFrO1xuMTExMjk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmN2X254dCk6XG4xMTEzMDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQocmN2X254dCk7XG4xMTEzMTpcdFx0XHRicmVhaztcbjExMTMyOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9ueHQpOlxuMTExMzM6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9ueHQpO1xuMTExMzQ6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgZm9yIFRDUCBTb2NrZXQgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSB0byBhY2Nlc3MgdGhlIGBydHRfbWluYCBmaWVsZCB3aXRoaW4gYSBUQ1Agc29ja2V0LiBGaXJzdCwgSSBzZWUgdGhlIGV4cHJlc3Npb24gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtgLiBUaGlzIG1hY3JvIGlzIHRoZSBrZXkuIFByZXZpb3VzbHksIHdoZW4gYWNjZXNzaW5nIHRoaXMgc2FtZSBmaWVsZCwgd2UgaGFkIHRoaXMgY29kZSBzbmlwcGV0IHV0aWxpemluZyBgb2Zmc2V0b2ZgOgoKYGBgYwoJCUJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHRjcF9zb2NrLCBydHRfbWluKSAhPQoJCQkgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7CgkJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbWlubWF4KSAmbHQ7CgkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtaW5tYXhfc2FtcGxlKSk7CgoJCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoCgkJCQkJCXN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLAoJCQkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAoJCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpOwoJCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS0mZ3Q7ZHN0X3JlZywgc2ktJmd0O2RzdF9yZWcsCgkJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7CgkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IG1pbm1heF9zYW1wbGUsIHQpKTsKYGBgCgpUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIEkmIzM5O20gc3BvdHRpbmcgaXMgdGhhdCB0aGUgb2xkZXIgaW1wbGVtZW50YXRpb24gZGlkbiYjMzk7dCBpbmNsdWRlIGEgY3JpdGljYWwgY2hlY2s6IGBpc19sb2NrZWRfdGNwX3NvY2tgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBza2AgYXMgYHN0cnVjdCB0Y3Bfc29ja2AuIFRoZSB1cGRhdGVkIG1hY3JvLCBgU09DS19PUFNfR0VUX0ZJRUxEYCwgc2VlbXMgdG8gaGF2ZSBpbnRlZ3JhdGVkIHRoaXMgc2FmZXR5IGNoZWNrLiBJZiB0aGUgc29ja2V0IGlzbiYjMzk7dCBsb2NrZWQgKGltcGx5aW5nIHRoZSBUQ1Agc29ja2V0IGlzIG5vdCBzYWZlIHRvIHJlYWQpLCB0aGUgbWFjcm8gd2lsbCBlaXRoZXIganVtcCBvdmVyIHRoZSByZWFkLCByZXR1cm5pbmcgMCAob3Igd2hhdGV2ZXIgb3RoZXIgbWVjaGFuaXNtIGlzIGVtcGxveWVkIHRvIGhhbmRsZSBhbiBpbnZhbGlkIHNvY2tldCBzdGF0ZSkuIEZ1cnRoZXJtb3JlLCBpdCBsb29rcyBsaWtlIGBTT0NLX09QU19HRVRfRklFTERgIG5vdyBjb3JyZWN0bHkgdXNlcyBgcnR0X21pbi5zWzBdLnZgIHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIGZpZWxkIG9mIGBtaW5tYXhfc2FtcGxlYC4gVGhhdCBtZWFucyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHVzZXMgYG9mZnNldG9mKHJ0dF9taW4pICYjNDM7IHNpemVvZih0KWAuCgpUbyBlbnN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbWlubWF4YCB0byBjb25maXJtIHRoYXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZpZWxkIGFjY2Vzc2VzIGlzIGNvcnJlY3Qgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbWlubWF4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMTEtLyogQSBzaW5nbGUgZGF0YSBwb2ludCBmb3Igb3VyIHBhcmFtZXRlcml6ZWQgbWluLW1heCB0cmFja2VyICovXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoxMjpzdHJ1Y3QgbWlubWF4X3NhbXBsZSB7XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0xMy1cdHUzMlx0dDtcdC8qIHRpbWUgbWVhc3VyZW1lbnQgd2FzIHRha2VuICovXG4tLVxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMTctLyogU3RhdGUgZm9yIHRoZSBwYXJhbWV0ZXJpemVkIG1pbi1tYXggdHJhY2tlciAqL1xuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MTg6c3RydWN0IG1pbm1heCB7XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoxOTpcdHN0cnVjdCBtaW5tYXhfc2FtcGxlIHNbM107XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMC19O1xuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMjEtXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyMjpzdGF0aWMgaW5saW5lIHUzMiBtaW5tYXhfZ2V0KGNvbnN0IHN0cnVjdCBtaW5tYXggKm0pXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMy17XG4tLVxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMjYtXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyNzpzdGF0aWMgaW5saW5lIHUzMiBtaW5tYXhfcmVzZXQoc3RydWN0IG1pbm1heCAqbSwgdTMyIHQsIHUzMiBtZWFzKVxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMjgte1xuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6Mjk6XHRzdHJ1Y3QgbWlubWF4X3NhbXBsZSB2YWwgPSB7IC50ID0gdCwgLnYgPSBtZWFzIH07XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0zMC1cbi0tXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0zNC1cbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjM1OnUzMiBtaW5tYXhfcnVubmluZ19tYXgoc3RydWN0IG1pbm1heCAqbSwgdTMyIHdpbiwgdTMyIHQsIHUzMiBtZWFzKTtcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjM2OnUzMiBtaW5tYXhfcnVubmluZ19taW4oc3RydWN0IG1pbm1heCAqbSwgdTMyIHdpbiwgdTMyIHQsIHUzMiBtZWFzKTtcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTM3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpc3NlY3RpbmcgdGhlIE1lbW9yeSBMYXlvdXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBtaW5tYXhgIGFuZCBpdCBjb250YWlucyBhbiBhcnJheSBvZiBgc3RydWN0IG1pbm1heF9zYW1wbGVgLCBzcGVjaWZpY2FsbHkgYHNbM11gLiBFYWNoIGBtaW5tYXhfc2FtcGxlYCBoYXMgdHdvIGB1MzJgIG1lbWJlcnMsIGB0YCBhbmQgYHZgLiAgVGhhdCBtZWFucywgaWYgSSB3YW50IHRvIGFjY2VzcyBgcnR0X21pbi5zWzBdLnZgLCB0aGUgYHZgIG1lbWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGF0IGBzYCBhcnJheSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIG1lbW9yeSBhZGRyZXNzLgoKYHJ0dF9taW5gIGlzIHRoZSBiYXNlLCBhbmQgdGhlbiBgb2Zmc2V0b2Yoc3RydWN0IG1pbm1heF9zYW1wbGUsIHQpYCB3aWxsIHByb3ZpZGUgdGhlIG9mZnNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSAqZmlyc3QqIGBtaW5tYXhfc2FtcGxlYC4gVGhlbiwgc2luY2UgYHZgIGZvbGxvd3MgYHRgIHdpdGhpbiB0aGUgc3RydWN0dXJlLCB0aGUgb2Zmc2V0IGZvciBgcnR0X21pbi5zWzBdLnZgIHdpbGwgYmUgdGhlIGJhc2UgYWRkcmVzcyBwbHVzIGBzaXplb2YodTMyKWAgKHRoZSBzaXplIG9mIGB0YCkuIEJhc2ljYWxseSwgSSYjMzk7bSBjYWxjdWxhdGluZyB0aGUgbWVtb3J5IG9mZnNldC4KCk5vdywgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byB0aGlzIGBTT0NLX09QU19HRVRfRklFTERgIG1hY3JvIGJlY2F1c2UgSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgdGhpcyBpcyBnZW5lcmF0aW5nLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgYWNjZXNzZXMgYXJlIGFjdHVhbGx5IGJlaW5nIHBlcmZvcm1lZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBtYWNybyBpcyBiZWluZyBleHBhbmRlZCB0byBhY2Nlc3MgdGhlc2UgdmFsdWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzc2VtYmx5IG9yIG1hY2hpbmUgY29kZSBpcyB1bHRpbWF0ZWx5IGJlaW5nIGdlbmVyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODUwOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NTE6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NTI6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg1MzpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFx0XHRcdCAgICAgIFxcXG4xMDg1NDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXG4xMDg1NTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcdFx0ICAgICAgXFxcbjEwODU2Olx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcbjEwODU3Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFx0XHQgICAgICBcXFxuMTA4NTg6XHRcdFx0XHRcdFx0XHQgICAgICAgT0JKX0ZJRUxEKSxcdCAgICAgIFxcXG4xMDg1OTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcdFx0ICAgICAgXFxcbjEwODYwOlx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihPQkosIE9CSl9GSUVMRCkpO1x0ICAgICAgXFxcbjEwODYxOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHNpLVx1MDAzZXNyY19yZWcpXHR7XHRcdFx0ICAgICAgXFxcbjEwODYyOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9BKDIpO1x0XHRcdFx0ICAgICAgXFxcbjEwODYzOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NjQ6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NjU6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg2NjpcdFx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0oc2ktXHUwMDNlZHN0X3JlZywgMCk7XHQgICAgICBcXFxuMTA4Njc6XHRcdFx0fVx0XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODY4Olx0XHR9IHdoaWxlICgwKVxuMTA4Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4OQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiA0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciBgU09DS19PUFNfR0VUX0ZJRUxEYCBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyBvciBjYXVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgY2hhbmdlIGlzIHRvIHByZXZlbnQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb24gc29ja2V0cyB0aGF0IGFyZW4mIzM5O3QgZnVsbHkgbG9ja2VkIFRDUCBzb2NrZXRzLCBzbyBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgaXNzdWVzLgoKRmlyc3QsIGRvZXMgdGhpcyBuZXcgY29kZSAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8sIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBjb250ZXh0IHdpdGggaW5zdHJ1Y3Rpb24gcmV3cml0aW5nLiBTZWNvbmQsIGRvZXMgaXQgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGZpZWxkIGluIHF1ZXN0aW9uLCBgcnR0X21pbi5zWzBdLnZgLCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgb24gdGhlIGB0Y3Bfc29ja2AuIFRoaXMgaXMgY29uZmlybWVkIGJlY2F1c2UgdGhlIG9sZCBjb2RlIHdhcyBhbHJlYWR5IGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24sIHRoZSBleGFjdCBzYW1lIG9mZnNldCB3aXRoaW4gYHRjcF9zb2NrYCwgd2l0aG91dCB0aGUgY2hlY2suIEFuZCwgdGhpcmQsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcz8gTm8sIGl0JiMzOTtzIGEgY29kZSBzdWJzdGl0dXRpb24sIGEgbWFjcm8gcmVwbGFjZW1lbnQsIG5vdCBuZXcgYWxsb2NhdGlvbnMuCgpTbywgaW4gc2hvcnQsIHRoZXJlIGlzIG5vIGV2aWRlbmNlIG9mIGEgS01TQU4tZGV0ZWN0YWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcgaGVyZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBCUEYgSklUIG9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgQlBGIHZlcmlmaWVyIHRlc3RpbmcuIEtBU0FOIGlzIGFscmVhZHkgZG9pbmcgaXRzIGpvYiwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTi4KCk15IHJlYXNvbmluZyBhbGlnbnMgd2l0aCB0aGUgS01TQU4gZ3VpZGVsaW5lczogdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBydW4gS01TQU4gaWYgc3RhbmRhcmQgZGVidWdnZXJzIGxpa2UgS0FTQU4gY2FuIGNhdGNoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBldmFsdWF0aW9uLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIEJQRiBieXRlY29kZSBjb252ZXJzaW9uIGZvciByZWFkaW5nIHRoZSBgcnR0X21pbmAgZmllbGQgb2YgYHN0cnVjdCBicGZfc29ja19vcHNgIGluIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoKWAuIEl0IHJlcGxhY2VzIGN1c3RvbSBCUEYgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiB3aXRoIHRoZSBzdGFuZGFyZGl6ZWQgaGVscGVyIG1hY3JvIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLlxuXG5UaGlzIGNoYW5nZSBhZGRzIGEgc2FmZXR5IGNoZWNrIG9uIGBpc19sb2NrZWRfdGNwX3NvY2tgIHByaW9yIHRvIGRlcmVmZXJlbmNpbmcgdGhlIHNvY2tldCBhcyBgc3RydWN0IHRjcF9zb2NrYCBhbmQgcmVhZHMgdGhlIGV4YWN0IHNhbWUgb2Zmc2V0IChgcnR0X21pbi5zWzBdLnZgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBCUEYgYnl0ZWNvZGUgY29udmVyc2lvbiBmb3IgcmVhZGluZyB0aGUgYHJ0dF9taW5gIGZpZWxkIG9mIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBpbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCByZXBsYWNlcyBjdXN0b20gQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gd2l0aCB0aGUgc3RhbmRhcmRpemVkIGhlbHBlciBtYWNybyBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC5cblxuVGhpcyBjaGFuZ2UgYWRkcyBhIHNhZmV0eSBjaGVjayBvbiBgaXNfbG9ja2VkX3RjcF9zb2NrYCBwcmlvciB0byBkZXJlZmVyZW5jaW5nIHRoZSBzb2NrZXQgYXMgYHN0cnVjdCB0Y3Bfc29ja2AgYW5kIHJlYWRzIHRoZSBleGFjdCBzYW1lIG9mZnNldCAoYHJ0dF9taW4uc1swXS52YCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcywgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDoyMS4yMjg1ODA4MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2NjEyMDcwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBCUEYgYnl0ZWNvZGUgY29udmVyc2lvbiBmb3IgcmVhZGluZyB0aGUgYHJ0dF9taW5gIGZpZWxkIG9mIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBpbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCByZXBsYWNlcyBjdXN0b20gQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gd2l0aCB0aGUgc3RhbmRhcmRpemVkIGhlbHBlciBtYWNybyBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRzIGEgc2FmZXR5IGNoZWNrIG9uIGBpc19sb2NrZWRfdGNwX3NvY2tgIHByaW9yIHRvIGRlcmVmZXJlbmNpbmcgdGhlIHNvY2tldCBhcyBgc3RydWN0IHRjcF9zb2NrYCBhbmQgcmVhZHMgdGhlIGV4YWN0IHNhbWUgb2Zmc2V0IChgcnR0X21pbi5zWzBdLnZgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjIxLjIyODU5MDE1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMDc1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDBiYzA1YzcyNzI4Njc3YTc5ZmY2ZTVjYjIxZjQxYzFkZTZjZmI3NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjQ0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtMTExMDUsMTggKzExMTA1LDcgQEAgc3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxcbi1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cXG4tXFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heCkpO1xcbi1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBtaW5tYXgpIFxcdTAwM2NcXG4tXFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcXG4tXFxuLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbi1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxuLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcbi1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICtcXG4tXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7XFxuK1xcdFxcdFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGJwZl9zb2NrX29wc19jYl9mbGFncyk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjIxLjg0MjUzODQ3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODAwMDA0OTg3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDBiYzA1YzcyNzI4Njc3YTc5ZmY2ZTVjYjIxZjQxYzFkZTZjZmI3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6NDQ6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTExMDUsMTggKzExMTA1LDcgQEAgc3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cbi1cdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7XG4tXHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgXHUwMDNjXG4tXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcbi1cbi1cdFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4tXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG4tXHRcdFx0XHQgICAgICBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLVx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuLVx0XHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4tXHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICtcbi1cdFx0XHRcdCAgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdCkpO1xuK1x0XHRTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjEuODQyNTQxNDgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg3NjEyMDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBxdWlja2VzdCB0byBnZXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzcGVjaWZpZXMgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIE5vdyB0aGF0IEkga25vdyB0aGUgdGFyZ2V0LCBJJ2xsIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIHByb2JhYmx5IGFyb3VuZCBsaW5lIDExMTA1IGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIsIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBhbmQgZW5zdXJlIHRoaXMgY2hhbmdlIGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgbmV0d29yayBmaWx0ZXIuIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIHJvdXRpbmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjcuNzE4NjY1MjM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTA5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc19mdWxsc29jayksXFxuMTEwOTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbjExMDkyOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybixcXG4xMTA5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaXNfZnVsbHNvY2spKTtcXG4xMTA5NDpcXHRcXHRcXHRicmVhaztcXG4xMTA5NTpcXHRcXG4xMTA5NjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHN0YXRlKTpcXG4xMTA5NzpcXHRcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbiwgc2tjX3N0YXRlKSAhPSAxKTtcXG4xMTA5ODpcXHRcXG4xMTA5OTpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihcXG4xMTEwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSxcXG4xMTEwMTpcXHRcXHRcXHRcXHRcXHQgICAgICBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxuMTExMDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xcbjExMTAzOlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfQiwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcbjExMTA0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBzb2NrX2NvbW1vbiwgc2tjX3N0YXRlKSk7XFxuMTExMDU6XFx0XFx0XFx0YnJlYWs7XFxuMTExMDY6XFx0XFxuMTExMDc6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKTpcXG4xMTEwODpcXHRcXHRcXHRTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7XFxuMTExMDk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMTA6XFx0XFxuMTExMTE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOlxcbjExMTEyOlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9GSUVMRChicGZfc29ja19vcHNfY2JfZmxhZ3MsIGJwZl9zb2NrX29wc19jYl9mbGFncyxcXG4xMTExMzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNwX3NvY2spO1xcbjExMTE0OlxcdFxcdFxcdGJyZWFrO1xcbjExMTE1OlxcdFxcbjExMTE2OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc2tfdHhoYXNoKTpcXG4xMTExNzpcXHRcXHRcXHRTT0NLX09QU19HRVRfT1JfU0VUX0ZJRUxEKHNrX3R4aGFzaCwgc2tfdHhoYXNoLFxcbjExMTE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2ssIHR5cGUpO1xcbjExMTE5OlxcdFxcdFxcdGJyZWFrO1xcbjExMTIwOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX2N3bmQpOlxcbjExMTIxOlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzbmRfY3duZCk7XFxuMTExMjI6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjM6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzcnR0X3VzKTpcXG4xMTEyNDpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc3J0dF91cyk7XFxuMTExMjU6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjY6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfc3N0aHJlc2gpOlxcbjExMTI3OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzbmRfc3N0aHJlc2gpO1xcbjExMTI4OlxcdFxcdFxcdGJyZWFrO1xcbjExMTI5OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmN2X254dCk6XFxuMTExMzA6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHJjdl9ueHQpO1xcbjExMTMxOlxcdFxcdFxcdGJyZWFrO1xcbjExMTMyOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX254dCk6XFxuMTExMzM6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9ueHQpO1xcbjExMTM0OlxcdFxcdFxcdGJyZWFrO1xcbjExMTM1OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX3VuYSk6XFxuMTExMzY6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF91bmEpO1xcbjExMTM3OlxcdFxcdFxcdGJyZWFrO1xcbjExMTM4OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgbXNzX2NhY2hlKTpcXG4xMTEzOTpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQobXNzX2NhY2hlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjcuNzE5MzY0MDk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NjQzMjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoYXQgTWFjcm8qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgU09DS19PUFNfR0VUX0ZJRUxEYCBtYWNyby4gRmlyc3QsIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGl0cyBleGFjdCBkZWZpbml0aW9uLiBXaGVyZSBpcyBpdCBkZWZpbmVkLCB0eXBpY2FsbHkgaW4gYSBoZWFkZXIgZmlsZSByZWxhdGVkIHRvIHNvY2tldCBvcGVyYXRpb25zPyBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgdG8gcGllY2UgdG9nZXRoZXIgd2hhdCBpdCdzIGFjdHVhbGx5IGRvaW5nIOKAkyB3aGF0IGZpZWxkIG9mIGEgc29ja2V0IHN0cnVjdHVyZSBpcyBpdCByZXRyaWV2aW5nLCBhbmQgaG93PyBUaGlzIHdpbGwgYmUgYSBxdWljayBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIHVzYWdlIGFuZCBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjkuNzA1ODAwMDEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDU3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEwODE2PXN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNS0vKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMDgyNjojZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVxcdFxcdFxcdCAgICAgIFxcXFxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNy1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDoyOS43NjMyNjYzNThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzExNDMzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhhdCBtYWNybyBkZWZpbml0aW9uLiBXZSdyZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpcyB3aGVyZSB0aGUgbWFnaWMgYmVoaW5kIHBhY2tldCBmaWx0ZXJpbmcgaXMgbGlrZWx5IGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgaG93IHRoaXMgc3lzdGVtIHdvcmtzLCBzbyBleGFtaW5pbmcgdGhlIG1hY3JvIGlzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGNob3NlbiB0byBpbXBsZW1lbnQgdGhpcywgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkgbWF5IGhhdmUgdXNlZCwgYW5kIGhvdyB0aGV5IGFic3RyYWN0IGF3YXkgdGhlIGNvbXBsZXhpdGllcy4gSXQncyB0aW1lIHRvIGJlY29tZSBpbnRpbWF0ZSB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MzEuNDc0NzAzMTM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyICp0YXJnZXRfc2l6ZSlcXG4xMDgyMTpcXHR7XFxuMTA4MjI6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuMTA4MjM6XFx0XFx0aW50IG9mZjtcXG4xMDgyNDpcXHRcXG4xMDgyNTpcXHQvKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cXG4xMDgyNjpcXHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgyNzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODI4OlxcdFxcdFxcdGludCBmdWxsc29ja19yZWcgPSBzaS1cXHUwMDNlZHN0X3JlZywgcmVnID0gQlBGX1JFR185LCBqbXAgPSAyOyAgICAgXFxcXFxcbjEwODI5OlxcdFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoT0JKLCBPQkpfRklFTEQpIFxcdTAwM2VcXHRcXHQgICAgICBcXFxcXFxuMTA4MzA6XFx0XFx0XFx0XFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcXFxcbjEwODMxOlxcdFxcdFxcdGlmIChzaS1cXHUwMDNlZHN0X3JlZyA9PSByZWcgfHwgc2ktXFx1MDAzZXNyY19yZWcgPT0gcmVnKVxcdFxcdCAgICAgIFxcXFxcXG4xMDgzMjpcXHRcXHRcXHRcXHRyZWctLTtcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzM6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cXHUwMDNlc3JjX3JlZyA9PSByZWcpXFx0XFx0ICAgICAgXFxcXFxcbjEwODM0OlxcdFxcdFxcdFxcdHJlZy0tO1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgzNTpcXHRcXHRcXHRpZiAoc2ktXFx1MDAzZWRzdF9yZWcgPT0gc2ktXFx1MDAzZXNyY19yZWcpIHtcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzY6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9TVFhfTUVNKEJQRl9EVywgc2ktXFx1MDAzZXNyY19yZWcsIHJlZyxcXHQgICAgICBcXFxcXFxuMTA4Mzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICBcXFxcXFxuMTA4Mzg6XFx0XFx0XFx0XFx0XFx0XFx0ICB0ZW1wKSk7XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODM5OlxcdFxcdFxcdFxcdGZ1bGxzb2NrX3JlZyA9IHJlZztcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDA6XFx0XFx0XFx0XFx0am1wICs9IDI7XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQxOlxcdFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDI6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgIFxcXFxcXG4xMDg0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc19sb2NrZWRfdGNwX3NvY2spLFxcdCAgICAgIFxcXFxcXG4xMDg0NTpcXHRcXHRcXHRcXHRcXHQgICAgICBmdWxsc29ja19yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg0NjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODQ3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpc19sb2NrZWRfdGNwX3NvY2spKTtcXHQgICAgICBcXFxcXFxuMTA4NDg6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcXHQgICAgICBcXFxcXFxuMTA4NDk6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHNpLVxcdTAwM2VzcmNfcmVnKVxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1MDpcXHRcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg1MTpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODUyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHRlbXApKTtcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NTM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXFxcXG4xMDg1NTpcXHRcXHRcXHRcXHRcXHQgICAgICBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFx0XFx0ICAgICAgXFxcXFxcbjEwODU2OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTtcXFxcXFxuMTA4NTc6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgT0JKX0ZJRUxEKSxcXHQgICAgICBcXFxcXFxuMTA4NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcdFxcdCAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MzEuNDc1MjU0NDg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU5MTk5ODAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIFRyYW5zZm9ybWF0aW9uIGluIEJQRiBgc29ja19vcHNgIFByb2dyYW1zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjcnVjaWFsIHRyYW5zZm9ybWF0aW9uIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBjb250ZXh0IGFjY2Vzc2VzIGluIGBzb2NrX29wc2AgcHJvZ3JhbXMuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHNhZmUgYW5kIGNvcnJlY3QgdHJhbnNsYXRpb24gZnJvbSB0aGUgcmF3IGFjY2VzcyBwYXR0ZXJucyB0byBhIHByb3BlciBieXRlY29kZSByZXByZXNlbnRhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGFjY2Vzc2VzIGxpa2UgYGJwZl9zb2NrX29wcy1cdTAwM2VydHRfbWluYC4gUHJldmlvdXNseSwgdGhlIGNvZGUganVzdCBkaXJlY3RseSBsb2FkZWQgZnJvbSBhbiBvZmZzZXQgcmVsYXRlZCB0byBgdGNwX3NvY2tgLCB3aXRob3V0IGFueSBjaGVja3MuIFRoaXMgd291bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGUgb2xkIHN0eWxlLCByYXcgYExEWF9NRU1gIGluc3RydWN0aW9ucy5cblxuYGBgY1xuKmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG5cdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcblx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XG4qaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG5cdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHRjcF9zb2NrLCBydHRfbWluKSArXG5cdFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7XG5gYGBcblxuVGhlIGlzc3VlIGhlcmUgaXMgdGhlIGxhY2sgb2YgYSBjcml0aWNhbCBzYWZldHkgY2hlY2sgZm9yIGBpc19sb2NrZWRfdGNwX3NvY2tgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGB0Y3Bfc29ja2AgZmllbGRzLiBUaGUgbmV3IHBhdGNoIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgdGhpczogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBTT0NLX09QU19HRVRfRklFTERgIHdoaWNoIHdpbGwgZWl0aGVyIGJlIGEganVtcCBvdmVyIHRoZSBsb2FkIGluc3RydWN0aW9uIGlmIGBpc19sb2NrZWRfdGNwX3NvY2tgIGlzIGZhbHNlLCBvciBwcm9jZWVkIGlmIHRydWUuIEFkZGl0aW9uYWxseSB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgc2xpZ2h0bHkgZGlmZmVyZW50OiBgcnR0X21pbi5zWzBdLnZgLlxuXG5UaGlzIHRyYW5zbGF0aW9uIGlzIGNydWNpYWwsIGl0J3Mgd2hhdCB0cmFuc2Zvcm1zIHRoZSBpbnRlbmRlZCBhY2Nlc3MgdG8gdGhlIGdlbmVyYXRlZCBieXRlY29kZS4gVGhpcyBpcyBhbGwgZm9yIGBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTYCBwcm9ncmFtcy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gSXQgYWJzb2x1dGVseSBpcyEgQlBGIGBzb2NrX29wc2AgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCwgYXR0YWNoZWQgdG8gdmFyaW91cyBwb2ludHMgaW4gdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhcmUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBzb2NrZXQgb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5IHRocm91Z2ggYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBhbmQgYGJwZihCUEZfUFJPR19BVFRBQ0gsIC4uLilgIGNhbGxzLiBDcnVjaWFsbHksIEkgc2VlIHRoYXQgZHVyaW5nIHRoZSBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gcGhhc2UgKGBicGZfY2hlY2tgKSwgYGNvbnZlcnRfY3R4X2FjY2Vzc2VzYCBjYWxscyBvdXIgdGFyZ2V0LCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYC4gU28sIGl0J3MgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzdWJzeXN0ZW0uIFRoaXMgbWFrZXMgaXQgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUgdG8gc2VjdXJlLlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIGJlIGFjdGl2ZS4gSXQgcmVsaWVzIG9uIHRoZSBCUEYsIEJQRl9TWVNDQUxMLCBhbmQgTkVUIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gSSdsbCBkbyBhIHF1aWNrIHNlYXJjaCB0byB0cmFjZSBleGFjdGx5IHdoZXJlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDozOC4wNjcyNTgxNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTUzNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEwNzI3PXN0YXRpYyB1MzIgc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTA4MTY6c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgxNy1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTg2PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNvY2tfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTg4LVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNvY2tfb3BzX2lzX3ZhbGlkX2FjY2VzcyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4OTpcXHQuY29udmVydF9jdHhfYWNjZXNzXFx0PSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MzguMTU5NDI1ODg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODcwNDM4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBzb2NrX29wc192ZXJpZmllcl9vcHNgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2AuIFRoaXMgaXNuJ3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgc2NhbjsgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIHN0cnVjdHVyZSBpcyBhY3R1YWxseSAqdXNlZCouIEknbSB0YWxraW5nIGFib3V0IG1vcmUgdGhhbiBqdXN0IGRlZmluaXRpb25zOyBJIHdhbnQgdG8ga25vdyB3aGVyZSBpdCdzICpndWFyZGVkKiwgd2hhdCBjb25kaXRpb25zIGRpY3RhdGUgaXRzIGludm9jYXRpb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIGluIHdoaWNoIGl0J3MgYWN0aXZlLiBJJ20gYWZ0ZXIgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCBkb3duIHRvIHRoZSBncmFudWxhciBsZXZlbCBvZiB0aGUgcmVsZXZhbnQgbG9ja2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCBpdHMgb3BlcmF0aW9uYWwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjQwLjM0NjQ3NDMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMzNzk2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfb3BzX3ZlcmlmaWVyX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMTU4Mz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGNnX3NvY2tfYWRkcl9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTg1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTg2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNvY2tfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4Ny1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNvY2tfb3BzX2Z1bmNfcHJvdG8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjQzLjA4MDI4MTE0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc4OTU3ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgUmVnaXN0cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgaXQncyBkZWZpbmVkIGFuZCBsaWtlbHkgY29uZmlndXJlZCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWFzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCBiZWNhdXNlIHRoYXQncyB0aGUgdXN1YWwgcGxhY2UgZm9yIEJQRi1yZWxhdGVkIGZpbHRlcmluZyBhbmQgcHJvZ3JhbSBhdHRhY2htZW50IGxvZ2ljLiBTaW11bHRhbmVvdXNseSwgSSBzaG91bGQgcHJvYmFibHkgZ2xhbmNlIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYCB0byBzZWUgaG93IHRoZSBlbnVtIGl0c2VsZiBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIEJQRiBwcm9ncmFtIHR5cGVzIGFyZSBkZWNsYXJlZCBuZWFyYnkuIFRoaXMgd2lsbCBoZWxwIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIHRoZSBrZXJuZWwgcmVjb2duaXplcyBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbGl6ZXMgb3IgdXNlcyB0aGlzIHNwZWNpZmljIHByb2dyYW0gdHlwZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjQ2LjU1OTI0MjQyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NzYzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI3PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyOTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIHNvY2tfb3BzLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MzA6XFx0ICAgICAgc3RydWN0IGJwZl9zb2NrX29wcywgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMzEtQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo0Ni42MTg5MzM2NTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyNDc5ODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQlBGX1BST0dfVFlQRV9TT0NLX09QUyBhbmQgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgIGlzIGJlaW5nIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBicGZfdHlwZXMuaGAgaGVhZGVyIGZpbGUuIEl0J3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyB0aG9zZSBgI2lmZGVmYCBkaXJlY3RpdmVzIOKAkyBzdXJyb3VuZGluZyB0aGlzIHByb2dyYW0gdHlwZSBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHNjZW5hcmlvcyB0cmlnZ2VyIGl0cyBpbmNsdXNpb24sIGV4Y2x1c2lvbiwgb3IgYW55IG1vZGlmaWNhdGlvbnMgYmFzZWQgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIHRoZSBwcmVzZW5jZSBvZiBzcGVjaWZpYyBmZWF0dXJlcy4gSSdtIGxvb2tpbmcgZm9yIGFueSB2YXJpYXRpb25zLCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIG9yIGFueSBpbmRpY2F0aW9ucyBvZiBob3cgdGhpcyB0eXBlIGlzIGV2b2x2aW5nLiBJIGFsc28gd2FudCB0byBxdWlja2x5IGdldCBhbiBpZGVhIG9mIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzY2hlbWUgb2Ygc3VwcG9ydGVkIHByb2dyYW0gdHlwZXMuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGdhdWdlIGl0cyBwb3J0YWJpbGl0eSBhbmQgd2hldGhlciBJIG5lZWQgdG8gY29uc2lkZXIgYW55IGZlYXR1cmUgZmxhZyBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo0OS4yNDM3MzU2OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0LyogaW50ZXJuYWwgZmlsZSAtIGRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5ICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpZmRlZiBDT05GSUdfTkVUXFxuICAgNTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgc2tfZmlsdGVyLFxcbiAgIDY6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAgNzpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCB0Y19jbHNfYWN0LFxcbiAgIDg6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAgOTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxcbiAgMTA6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAxMTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfWERQLCB4ZHAsXFxuICAxMjpcXHRcXHQgICAgICBzdHJ1Y3QgeGRwX21kLCBzdHJ1Y3QgeGRwX2J1ZmYpXFxuICAxMzpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUF9CUEZcXG4gIDE0OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBjZ19za2IsXFxuICAxNTpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDE2OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSywgY2dfc29jayxcXG4gIDE3OlxcdFxcdCAgICAgIHN0cnVjdCBicGZfc29jaywgc3RydWN0IHNvY2spXFxuICAxODpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUiwgY2dfc29ja19hZGRyLFxcbiAgMTk6XFx0XFx0ICAgICAgc3RydWN0IGJwZl9zb2NrX2FkZHIsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4pXFxuICAyMDpcXHQjZW5kaWZcXG4gIDIxOlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfSU4sIGx3dF9pbixcXG4gIDIyOlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgMjM6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9PVVQsIGx3dF9vdXQsXFxuICAyNDpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDI1OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuICAyNjpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDI3OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbiAgMjg6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAyOTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIHNvY2tfb3BzLFxcbiAgMzA6XFx0XFx0ICAgICAgc3RydWN0IGJwZl9zb2NrX29wcywgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuKVxcbiAgMzE6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxcbiAgMzI6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAzMzpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0tfTVNHLCBza19tc2csXFxuICAzNDpcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfbXNnX21kLCBzdHJ1Y3Qgc2tfbXNnKVxcbiAgMzU6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0ZMT1dfRElTU0VDVE9SLCBmbG93X2Rpc3NlY3RvcixcXG4gIDM2OlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBicGZfZmxvd19kaXNzZWN0b3IpXFxuICAzNzpcXHQjZW5kaWZcXG4gIDM4OlxcdCNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbiAgMzk6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0tQUk9CRSwga3Byb2JlLFxcbiAgNDA6XFx0XFx0ICAgICAgYnBmX3VzZXJfcHRfcmVnc190LCBzdHJ1Y3QgcHRfcmVncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NDkuMjQzODM5MTEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzU2MTE0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBnYXRlZCBieSBhIGZldyBjb25maWcgb3B0aW9uczogYENPTkZJR19ORVRgLCBkZWZpbml0ZWx5IGBDT05GSUdfQlBGX1NZU0NBTExgLCBhbmQgSSBtaWdodCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19DR1JPVVBfQlBGYCBpZiBJJ20gdGhpbmtpbmcgYWJvdXQgYXR0YWNoaW5nIHRoZXNlIHByb2dyYW1zIHRvIGNncm91cHMsIG9yIGBDT05GSUdfSU5FVGAgaWYgdGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9yIFRDUCBzb2NrX29wcy4gS25vd2luZyB0aGlzIGlzIHRoZSBmb3VuZGF0aW9uLlxuXG5Ob3csIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgdG8gc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgc29ja19vcHNfdmVyaWZpZXJfb3BzYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGFuZCBhbnkgYXNzb2NpYXRlZCB2ZXJpZmljYXRpb24gc2hvdWxkIGJlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3MgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NTEuMzc5NDU0ODQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTU4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1ODA6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG4xMTU4MTpcXHR9O1xcbjExNTgyOlxcdFxcbjExNTgzOlxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfc29ja19hZGRyX3Byb2dfb3BzID0ge1xcbjExNTg0OlxcdH07XFxuMTE1ODU6XFx0XFxuMTE1ODY6XFx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc29ja19vcHNfdmVyaWZpZXJfb3BzID0ge1xcbjExNTg3OlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc29ja19vcHNfZnVuY19wcm90byxcXG4xMTU4ODpcXHRcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBzb2NrX29wc19pc192YWxpZF9hY2Nlc3MsXFxuMTE1ODk6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzLFxcbjExNTkwOlxcdH07XFxuMTE1OTE6XFx0XFxuMTE1OTI6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBzb2NrX29wc19wcm9nX29wcyA9IHtcXG4xMTU5MzpcXHR9O1xcbjExNTk0OlxcdFxcbjExNTk1OlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX3NrYl92ZXJpZmllcl9vcHMgPSB7XFxuMTE1OTY6XFx0XFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBza19za2JfZnVuY19wcm90byxcXG4xMTU5NzpcXHRcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBza19za2JfaXNfdmFsaWRfYWNjZXNzLFxcbjExNTk4OlxcdFxcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcXHQ9IHNrX3NrYl9jb252ZXJ0X2N0eF9hY2Nlc3MsXFxuMTE1OTk6XFx0XFx0Lmdlbl9wcm9sb2d1ZVxcdFxcdD0gc2tfc2tiX3Byb2xvZ3VlLFxcbjExNjAwOlxcdH07XFxuMTE2MDE6XFx0XFxuMTE2MDI6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19za2JfcHJvZ19vcHMgPSB7XFxuMTE2MDM6XFx0fTtcXG4xMTYwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NTEuMzgwMDU2MDY4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNTkyMTE3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTb2Nrb3BzIENvbnRleHQgQWNjZXNzIENvbnZlcnNpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdXNlZCBpbiBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIHJld3JpdGluZyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AgcHJvZ3JhbXMuIFRoZXNlIHByb2dyYW1zIGFyZSBoaXR0aW5nIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBmaWVsZHMgbGlrZSBgcnR0X21pbmAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5TaW5jZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBpcyBzdGF0aWMsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgY2hlY2sgaWYgaXQncyBkaXJlY3RseSBjYWxsZWQgb3IgaW5saW5lZCBpbnRvIHRoZSBgc29ja19vcHNfdmVyaWZpZXJfb3BzYCBmdW5jdGlvbiBwb2ludGVyLCBzcGVjaWZpY2FsbHkgYC5jb252ZXJ0X2N0eF9hY2Nlc3NgLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBpdHMgYWRkcmVzcyBpcyBhc3NpZ25lZCB0byBhIGdsb2JhbCBzdHJ1Y3QgYHNvY2tfb3BzX3ZlcmlmaWVyX29wcy5jb252ZXJ0X2N0eF9hY2Nlc3MgPSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3M7YCBtZWFucyBpdHMgc3ltYm9sICpzaG91bGQqIGV4aXN0IGluIHZtbGludXgsIHVubGVzcyB0aGUgY29tcGlsZXIgZ2V0cyBjbGV2ZXIsIGJ1dCBpdCBzdGlsbCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gSSBjYW4gY2hlY2sgaXRzIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uZmlybS5cblxuSGFuZyBvbiBhIHNlY29uZC4gSXQncyBsaWtlbHkgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgdXNlZCBpbiBgYnBmX2NoZWNrYCAvIGBjb252ZXJ0X2N0eF9hY2Nlc3Nlc2AgLyBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXQgaXMgKm5vdCogaW5saW5lZC4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaWYgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXMgaW4gdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUuIFRoZW4sIEkgY2FuIGxvb2sgZm9yIHRoZSBjYWxsIGNoYWluIG9yaWdpbmF0aW5nIGZyb20gYGNvbnZlcnRfY3R4X2FjY2Vzc2VzYCBvciBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaW5zdGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo1NS40MzkyNzM3OTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTEwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTI0NTE9c3RhdGljIGJvb2wgc3lzY3RsX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjQ3Ny1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI0Nzg6c3RhdGljIHUzMiBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNDc5LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjU0Mj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zeXNjdGxfdmVyaWZpZXJfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ0LVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHN5c2N0bF9pc192YWxpZF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTQ1OlxcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcXHQ9IHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ2LX07XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI2MDQ9c3RhdGljIGJvb2wgY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2NzctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjc4OnN0YXRpYyB1MzIgY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2NzktXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI3NjU9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja29wdF92ZXJpZmllcl9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjctXFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY4OlxcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcXHQ9IGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2OS1cXHQuZ2VuX3Byb2xvZ3VlXFx0XFx0PSBjZ19zb2Nrb3B0X2dldF9wcm9sb2d1ZSxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM5PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQwLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQxOmludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Mi17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxMy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKywgaW5zbisrKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4MTQ6XFx0XFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxNS1cXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSBwdHJfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTEwLVxcdFxcdGNhc2UgUFRSX1RPX0NUWDpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjkxMTpcXHRcXHRcXHRpZiAoIW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTEyLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTEzOlxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05MTYtXFx0XFx0Y2FzZSBQVFJfVE9fU09DS19DT01NT046XFxua2VybmVsL2JwZi9maXh1cHMuYzo5MTc6XFx0XFx0XFx0Y29udmVydF9jdHhfYWNjZXNzID0gYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE4LVxcdFxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE5LVxcdFxcdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIwOlxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XFxua2VybmVsL2JwZi9maXh1cHMuYy05MjEtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9maXh1cHMuYy05MjItXFx0XFx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XFxua2VybmVsL2JwZi9maXh1cHMuYzo5MjM6XFx0XFx0XFx0Y29udmVydF9jdHhfYWNjZXNzID0gYnBmX3hkcF9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTY5LVxcdFxcdCAqIGNvbnZlcnQgdG8gYSA0LzgtYnl0ZSBsb2FkLCB0byBtaW5pbXVtIHByb2dyYW0gdHlwZSBzcGVjaWZpY1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTcwOlxcdFxcdCAqIGNvbnZlcnRfY3R4X2FjY2VzcyBjaGFuZ2VzLiBJZiBjb252ZXJzaW9uIGlzIHN1Y2Nlc3NmdWwsXFxua2VybmVsL2JwZi9maXh1cHMuYy05NzEtXFx0XFx0ICogd2Ugd2lsbCBhcHBseSBwcm9wZXIgbWFzayB0byB0aGUgcmVzdWx0Llxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05OTQtXFx0XFx0dGFyZ2V0X3NpemUgPSAwO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTk1OlxcdFxcdGNudCA9IGNvbnZlcnRfY3R4X2FjY2Vzcyh0eXBlLCBpbnNuLCBpbnNuX2J1ZiwgZW52LVxcdTAwM2Vwcm9nLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTk2LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dGFyZ2V0X3NpemUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4OTQ9c3RhdGljIGludCBjaGVja19jdHhfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTAyLVxcdGJvb2wgdmFyX29mZl9vayA9IGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoZW52LVxcdTAwM2Vwcm9nKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDkwMzpcXHRib29sIGZpeGVkX29mZl9vayA9ICFlbnYtXFx1MDAzZW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTA0LVxcdGludCBlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExOTctXFx0XFx0LyogcHJvZ3JhbSBpcyB2YWxpZCwgY29udmVydCAqKHUzMiopKGN0eCArIG9mZikgYWNjZXNzZXMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExOTg6XFx0XFx0cmV0ID0gYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo1NS41MDE3OTE3NjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5Mzg5MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBTb2NrZXQgT3BlcmF0aW9ucyB3aXRoIEJQRioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBzb2NrX29wc2AgQlBGIHByb2dyYW1zIGFyZSBhY3R1YWxseSBiZWluZyBleGVjdXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IHRoZSBnZW5lcmFsIGNvbmNlcHRzLCBidXQgSSB3YW50IHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBtZWNoYW5pc21zIGF0IHBsYXkuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgLiBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgIGluIHRoZSBrZXJuZWwgc291cmNlLCB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQsIHRoZSBwcm9ncmFtIHR5cGUuIFRoZW4sIHRvIGJlIG1vcmUgcHJlY2lzZSBpbiBteSBzZWFyY2ggSSBzaG91bGQgYWxzbyBpbmNsdWRlIGB0Y3BfY2FsbF9icGZgIGluIG15IHNlYXJjaCBxdWVyaWVzLCBhcyBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBleGVjdXRlIHRoZSBwcm9ncmFtcy4gVGhpcyBhcHByb2FjaCB3aWxsIGxpa2VseSBleHBvc2UgdGhlIHJlbGV2YW50IGNhbGwgc2l0ZXMgYW5kIGRhdGEgZmxvdy4gQXJtZWQgd2l0aCB0aGVzZSBzZWFyY2ggdGVybXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gbmF2aWdhdGUgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgcGF0aCBmb3IgdGhlc2Ugc29ja19vcHMgcHJvZ3JhbXMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUga2VybmVsJ3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgcHJvZ3JhbXMgaW4gbW9yZSBkZXRhaWwuIFRoaXMgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoaW5ncyBsaWtlIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nLCBzZWN1cml0eSBwb2xpY2llcywgYW5kIG90aGVyIHNvY2tldC1yZWxhdGVkIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NTguMTk1Njg1MTgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEyNjkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfY2FsbF9icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9hZl9pbmV0LmM9MTk4PWludCBfX2luZXRfbGlzdGVuX3NrKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMjI4LVxcbm5ldC9pcHY0L2FmX2luZXQuYzoyMjk6XFx0XFx0dGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfVENQX0xJU1RFTl9DQiwgMCwgTlVMTCk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTIzMC1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yOTYxPXZvaWQgdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI5NjktXFx0ICogbmVlZCB0byByZW1hcCB0aGUgaW50ZXJuYWwgdmFsdWUgdG8gdGhlIEJQRiB2YWx1ZSBiZWZvcmUgY2FsbGluZ1xcbm5ldC9pcHY0L3RjcC5jOjI5NzA6XFx0ICogdGNwX2NhbGxfYnBmXzJhcmcuXFxubmV0L2lwdjQvdGNwLmMtMjk3MS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI5OTgtXFx0aWYgKEJQRl9TT0NLX09QU19URVNUX0ZMQUcodGNwX3NrKHNrKSwgQlBGX1NPQ0tfT1BTX1NUQVRFX0NCX0ZMQUcpKVxcbm5ldC9pcHY0L3RjcC5jOjI5OTk6XFx0XFx0dGNwX2NhbGxfYnBmXzJhcmcoc2ssIEJQRl9TT0NLX09QU19TVEFURV9DQiwgb2xkc3RhdGUsIHN0YXRlKTtcXG5uZXQvaXB2NC90Y3AuYy0zMDAwLVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmMtMTQ4LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9udi5jOjE0OTpcXHRiYXNlX3J0dCA9IHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX0JBU0VfUlRULCAwLCBOVUxMKTtcXG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXFx0aWYgKGJhc2VfcnR0IFxcdTAwM2UgMCkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM1NTA9aW50IF9fdGNwX3JldHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzY3OC1cXHRpZiAoQlBGX1NPQ0tfT1BTX1RFU1RfRkxBRyh0cCwgQlBGX1NPQ0tfT1BTX1JFVFJBTlNfQ0JfRkxBRykpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM2Nzk6XFx0XFx0dGNwX2NhbGxfYnBmXzNhcmcoc2ssIEJQRl9TT0NLX09QU19SRVRSQU5TX0NCLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNjgwLVxcdFxcdFxcdFxcdCAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEsIHNlZ3MsIGVycik7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzMDMtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzMDQ6XFx0dGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfVENQX0NPTk5FQ1RfQ0IsIDAsIE5VTEwpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzA1LVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9MjQzPXN0YXRpYyBpbnQgdGNwX3dyaXRlX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjg5LVxcdGlmIChCUEZfU09DS19PUFNfVEVTVF9GTEFHKHRwLCBCUEZfU09DS19PUFNfUlRPX0NCX0ZMQUcpKVxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjI5MDpcXHRcXHR0Y3BfY2FsbF9icGZfM2FyZyhzaywgQlBGX1NPQ0tfT1BTX1JUT19DQixcXG5uZXQvaXB2NC90Y3BfdGltZXIuYy0yOTEtXFx0XFx0XFx0XFx0ICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo1OC4yODI4MTk2MjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzMDQ5NzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgU29ja2V0IE9wZXJhdGlvbiBUZXN0aW5nIGluIEJQRioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBhcmVhIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkLiBTcGVjaWZpY2FsbHksIHJlZ2FyZGluZyBgc29ja19vcHNgLCBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSB0ZXN0IHN1aXRlLiBJdCdzIGNydWNpYWwgdG8gaGF2ZSBzb2xpZCB0ZXN0aW5nIGhlcmUuIEknbSB0aGlua2luZywgXCJMZXQncyBkZWZpbml0ZWx5IGNvbmZpcm0gdGhhdCB0aGVyZSdzIGEgZGVkaWNhdGVkIHRlc3QgZnVuY3Rpb24gcmVsYXRlZCB0byBgc29ja19vcHNgIHRlc3RpbmcuXCIgU29tZXRoaW5nIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NvY2tfb3BzYCBzb3VuZHMgZmFtaWxpYXIsIGJ1dCBJIG5lZWQgdG8gZ28gbG9vayBhbmQgbWFrZSBzdXJlIGl0J3MgcHJlc2VudCBhbmQgZG9pbmcgaXRzIGpvYiBwcm9wZXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHRoZSByaWdodCBmdW5jdGlvbiwgb3IgdGhhdCB0aGVyZSdzIHNvbWUgc2ltaWxhciB0ZXN0aW5nIGJlaW5nIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MDEuNzEzMzIxODg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNjA0OTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RfcnVuLipzb2NrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTowMS44MTk1OTY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNzgxNzU1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEV4cGxvcmF0aW9uIGZvciBTcGVjaWZpYyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHNwZWNpZmljLCBwcm9iYWJseSByZWxhdGVkIHRvIHRlc3Rpbmcgb3IgbmV0d29ya2luZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIHBlcmZvcm0gYSBicm9hZCBzZWFyY2guIFRoZSBrZXJuZWwgc291cmNlIHRyZWUgaXMgdmFzdCwgYnV0IEkgY2FuIG5hcnJvdyB0aGluZ3MgZG93biBhIGJpdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBUaGUgdHdvIGtleSB0ZXJtcyBJJ2xsIHVzZSBhcmUgYHRlc3RfcnVuYCBhbmQgYHNvY2tfb3BzX3Byb2dfb3BzYC4gYHRlc3RfcnVuYCBtaWdodCBpbmRpY2F0ZSBzb21lIGtpbmQgb2YgdGVzdCBpbmZyYXN0cnVjdHVyZSwgcG9zc2libHkgdW5pdCB0ZXN0cyBvciBpbnRlZ3JhdGlvbiB0ZXN0cyB0aGF0IGFyZSBydW4gd2hlbiBkZXZlbG9waW5nIG5ldyBjb2RlLiBUaGUgdGVybSBgc29ja19vcHNfcHJvZ19vcHNgIGlzIGludGVyZXN0aW5nLCBpdCBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHJlZmVycmluZyB0byB0aGUgYHNvY2tfb3BzYCBzdHJ1Y3R1cmUgb3IgdGhlIGFzc29jaWF0ZWQgYHByb2dfb3BzYC4gVGhlIHVzZSBvZiBgcHJvZ19vcHNgIGluZGljYXRlcyBlQlBGLCBhIHByb2dyYW1tYWJsZSB3YXkgb2YgZXh0ZW5kaW5nIHRoZSBrZXJuZWwuIFRoaXMgaXMgd29ydGggaW52ZXN0aWdhdGluZyBiZWNhdXNlIGVCUEYgaXMgcGVydmFzaXZlLCBhbmQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgd2lsbCBwb2ludCB0byBpbXBsZW1lbnRhdGlvbnMgb2Ygc3BlY2lmaWMgc29ja2V0IGZlYXR1cmVzLiBCeSBzZWFyY2hpbmcgYWNyb3NzIHRoZSBrZXJuZWwsIEknbSBob3BpbmcgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGVzZSB0ZXJtcyBhcmUgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eS4gRnJvbSB0aGVyZSwgSSBjYW4gZnVydGhlciByZWZpbmUgbXkgc2VhcmNoIG9yIGZvbGxvdyBzcGVjaWZpYyBjYWxsIGdyYXBocyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZWxlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MDguOTk3Nzc3NTE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ3Njc0MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfb3BzX3Byb2dfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTExNTg2PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNvY2tfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTkxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTkyOmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc29ja19vcHNfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTMtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MTEuNjQ1NDY0NTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTc2NzUyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgYHRjcF9jYWxsX2JwZmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGB0Y3BfY2FsbF9icGZgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBrbm93IGl0cyBuYW1lLCBidXQgSSBjYW4ndCByZWx5IG9uIHRoYXQgYWxvbmUuIEkgbmVlZCB0byB0cmFjZSBpdCBiYWNrIHRvIGl0cyBzb3VyY2UuIEl0IGNvdWxkIGJlIGluIGEgaGVhZGVyIGZpbGUsIHBhcnQgb2YgYSBzcGVjaWZpYyBtb2R1bGUsIG9yIG1heWJlIGV2ZW4gZHluYW1pY2FsbHkgbG9hZGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGNvbnRleHQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlIGFuZCBzZWUgd2hlcmUgYHRjcF9jYWxsX2JwZmAgaXMgZGVjbGFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzE4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MTMuODQzMTQ1ODM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM5NTM4MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9jYWxsX2JwZlxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI4ODE9c3RhdGljIGlubGluZSB2b2lkIGJwZl9za29wc19pbml0X3NrYihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNrb3BzLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg5My0jaWZkZWYgQ09ORklHX0JQRlxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4OTQ6c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcXG5pbmNsdWRlL25ldC90Y3AuaC0yODk1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTI5MTk9c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmXzJhcmcoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3AsIHUzMiBhcmcxLCB1MzIgYXJnMilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5MjItXFxuaW5jbHVkZS9uZXQvdGNwLmg6MjkyMzpcXHRyZXR1cm4gdGNwX2NhbGxfYnBmKHNrLCBvcCwgMiwgYXJncyk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjkyNC19XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yOTI2PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8zYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yOTMwLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI5MzE6XFx0cmV0dXJuIHRjcF9jYWxsX2JwZihzaywgb3AsIDMsIGFyZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI5MzItfVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MjkzND1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NsZWFyX3NvY2tfb3BzX2NiX2ZsYWdzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5MzktI2Vsc2VcXG5pbmNsdWRlL25ldC90Y3AuaDoyOTQwOnN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcCwgdTMyIG5hcmdzLCB1MzIgKmFyZ3MpXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjk0MS17XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yOTYyPXN0YXRpYyBpbmxpbmUgdTMyIHRjcF90aW1lb3V0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjk2NS1cXG5pbmNsdWRlL25ldC90Y3AuaDoyOTY2OlxcdHRpbWVvdXQgPSB0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19USU1FT1VUX0lOSVQsIDAsIE5VTEwpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NjctXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yOTczPXN0YXRpYyBpbmxpbmUgdTMyIHRjcF9yd25kX2luaXRfYnBmKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NzYtXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjk3NzpcXHRyd25kID0gdGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfUldORF9JTklULCAwLCBOVUxMKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0yOTc4LVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9Mjk4ND1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2JwZl9jYV9uZWVkc19lY24oc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5ODUte1xcbmluY2x1ZGUvbmV0L3RjcC5oOjI5ODY6XFx0cmV0dXJuICh0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19ORUVEU19FQ04sIDAsIE5VTEwpID09IDEpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI5ODctfVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE5OD1pbnQgX19pbmV0X2xpc3Rlbl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTIyOC1cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjI5OlxcdFxcdHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX1RDUF9MSVNURU5fQ0IsIDAsIE5VTEwpO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0yMzAtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmMtMTQ4LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9udi5jOjE0OTpcXHRiYXNlX3J0dCA9IHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX0JBU0VfUlRULCAwLCBOVUxMKTtcXG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXFx0aWYgKGJhc2VfcnR0IFxcdTAwM2UgMCkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzAzLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzA0OlxcdHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX1RDUF9DT05ORUNUX0NCLCAwLCBOVUxMKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDMwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MTcuMTgyNjkyNTM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NjY3NTg5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEhvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdGNwX2NhbGxfYnBmYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgdWx0aW1hdGVseSBjYWxscyBlaXRoZXIgYEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFNgIG9yIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTX0tFUk5gLiBUaGF0J3MgdGhlIGNvcmUgYWN0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGB0Y3BfY2FsbF9icGZgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBhcmFtZXRlcnMgaXQncyB3b3JraW5nIHdpdGguIEknbSBnb2luZyB0byBmaW5kIHRoYXQgaW4gYGluY2x1ZGUvbmV0L3RjcC5oYCwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gaG93IHRoaXMgaXMgYWxsIG9yY2hlc3RyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NToyMS45NDk0NTYzMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3RjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4OTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4OTA6XFx0ICogcHJvZ3JhbSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaG9zZW4gb3BlcmF0aW9uIG9yIHRoZXJlIGlzIG5vIEJQRlxcbjI4OTE6XFx0ICogcHJvZ3JhbSBsb2FkZWQpLlxcbjI4OTI6XFx0ICovXFxuMjg5MzpcXHQjaWZkZWYgQ09ORklHX0JQRlxcbjI4OTQ6XFx0c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcXG4yODk1OlxcdHtcXG4yODk2OlxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2VybiBzb2NrX29wcztcXG4yODk3OlxcdFxcdGludCByZXQ7XFxuMjg5ODpcXHRcXG4yODk5OlxcdFxcdG1lbXNldChcXHUwMDI2c29ja19vcHMsIDAsIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgdGVtcCkpO1xcbjI5MDA6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSkge1xcbjI5MDE6XFx0XFx0XFx0c29ja19vcHMuaXNfZnVsbHNvY2sgPSAxO1xcbjI5MDI6XFx0XFx0XFx0c29ja19vcHMuaXNfbG9ja2VkX3RjcF9zb2NrID0gMTtcXG4yOTAzOlxcdFxcdFxcdHNvY2tfb3duZWRfYnlfbWUoc2spO1xcbjI5MDQ6XFx0XFx0fVxcbjI5MDU6XFx0XFxuMjkwNjpcXHRcXHRzb2NrX29wcy5zayA9IHNrO1xcbjI5MDc6XFx0XFx0c29ja19vcHMub3AgPSBvcDtcXG4yOTA4OlxcdFxcdGlmIChuYXJncyBcXHUwMDNlIDApXFxuMjkwOTpcXHRcXHRcXHRtZW1jcHkoc29ja19vcHMuYXJncywgYXJncywgbmFyZ3MgKiBzaXplb2YoKmFyZ3MpKTtcXG4yOTEwOlxcdFxcbjI5MTE6XFx0XFx0cmV0ID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QUyhcXHUwMDI2c29ja19vcHMpO1xcbjI5MTI6XFx0XFx0aWYgKHJldCA9PSAwKVxcbjI5MTM6XFx0XFx0XFx0cmV0ID0gc29ja19vcHMucmVwbHk7XFxuMjkxNDpcXHRcXHRlbHNlXFxuMjkxNTpcXHRcXHRcXHRyZXQgPSAtMTtcXG4yOTE2OlxcdFxcdHJldHVybiByZXQ7XFxuMjkxNzpcXHR9XFxuMjkxODpcXHRcXG4yOTE5OlxcdHN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8yYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIpXFxuMjkyMDpcXHR7XFxuMjkyMTpcXHRcXHR1MzIgYXJnc1syXSA9IHthcmcxLCBhcmcyfTtcXG4yOTIyOlxcdFxcbjI5MjM6XFx0XFx0cmV0dXJuIHRjcF9jYWxsX2JwZihzaywgb3AsIDIsIGFyZ3MpO1xcbjI5MjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NToyMS45NDk2ODAwNTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcxMzg2NTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogZUJQRiBhbmQgVENQIFNvY2tldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCdzIGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUsIHNvIHdlIG5lZWQgdG8gYmUgdmVyeSB0aG9yb3VnaC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSdzIGZvY3VzaW5nIG9uIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoKWAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgaG93IGVCUEYgcHJvZ3JhbXMgYWNjZXNzIHRoZSBgcnR0X21pbmAgZmllbGQgd2l0aGluIGEgYGJwZl9zb2NrX29wc2Agc3RydWN0dXJlLiBJbnN0ZWFkIG9mIHRoZSBvbGQgaW5saW5lIGluc3RydWN0aW9ucywgd2UncmUgbm93IHVzaW5nIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgYGZ1bGxzb2NrYCBvciBgbG9ja2VkX3RjcF9zb2NrYCBhbmQgdGhlIGxvYWRpbmcgb2YgYHJ0dF9taW4uc1swXS52YC4gVGhpcyBpbXBhY3RzIHRoZSBnZW5lcmF0ZWQgQlBGIGluc3RydWN0aW9ucywgZXNzZW50aWFsbHkgY2hhbmdpbmcgaG93IHRoZXNlIHByb2dyYW1zIGludGVyYWN0IHdpdGggVENQIHNvY2tldCBpbmZvcm1hdGlvbi5cblxuTm93LCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKj8gQWJzb2x1dGVseS4gV2UgbG9hZCBzb2NrX29wcyBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCB3aGljaCBjYWxscyBgYnBmX2NoZWNrKClgIGFuZCB0aGVuIGNhc2NhZGVzIGludG8gYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcygpYCBhbmQgZXZlbnR1YWxseSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBNb3Jlb3Zlciwgd2UgY2FuIGV4ZWN1dGUgdGhlIHByb2dyYW0gdGhyb3VnaCBzb2NrX29wcyBob29rcywgbGlrZSB3aXRoIFRDUCBzb2NrZXRzIHVuZGVyIGNncm91cHMuIFRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGltcGFjdHMgY29yZSBrZXJuZWwgQlBGIGFuZCBuZXR3b3JraW5nIGNvZGUgaXMgZW5vdWdoIHRvIHdhcnJhbnQgcmlnb3JvdXMgdGVzdGluZy5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYXJlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIGFuZCBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gV2UncmUgZGVhbGluZyB3aXRoIEJQRiwgY2dyb3VwcywgYW5kIG5ldHdvcmtpbmcsIHNvIEknbGwgbmVlZCBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGBORVRgLCBhbmQgYElORVRgIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIGFnYWluc3QgdGhlIGBLY29uZmlnYCBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0ODksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NToyNy42NjM1NDk2ODRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDkzMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzUzPWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNjMtXFxuaW5pdC9LY29uZmlnOjEzNjQ6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM2NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjI3LjcxODY1MjM1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDc5NjQxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQnbGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjI5LjUyNjYyMzA2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2NjczOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MjkuNTg3MzA5NjA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTgzNzA0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGZpbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzLiBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgaXMgYGNvbmZpZyBCUEZfU1lTQ0FMTGAgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0/XCIgVGhpcyBwcm9iYWJseSBtZWFucyBJIG5lZWQgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpbiB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgcmVsYXRlIHRvIHRyYWNpbmcsIG5ldHdvcmtpbmcsIG9yIHNlY3VyaXR5IOKAkyB0aG9zZSBhcmUgdGhlIG1vc3QgbGlrZWx5IGFyZWFzLiBJJ2xsIGxpa2VseSB1c2UgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBjb250ZXh0dWFsIGNsdWVzIGFyb3VuZCBpdCB0b28sIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBmZWF0dXJlcyBpdCBlbmFibGVzLiBJcyB0aGlzIHBhcnQgb2YgYSBsYXJnZXIgQlBGIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIG9yIGEgc3RhbmRhbG9uZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTozMS41ODU2ODQ1OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzg1MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MzEuNjU2NDgxMjU0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMDkyNjU2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgTkVUYCBhbmQgYElORVRgIHdpdGhpbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2NC9LY29uZmlnYC4gU3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cbk5vdywgbGV0J3MgZW5zdXJlIGFsbCB0aGUgcmVxdWlyZWQgY29uZGl0aW9ucyBhcmUgbWV0LiBJIHNlZSBgV29ydGhGdXp6aW5nOiB0cnVlYCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbGwgcHJlc2VudCDigJMgYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBgTkVUYCwgYW5kIGBJTkVUYCDigJMgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gTXkgZm9jdXMgaXMgb24gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgYW5kIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLiBUaGUgZXhwbGFuYXRpb24gZm9yIHRoZSB2ZXJkaWN0IGlzIGNvbmNpc2UsIHdoaWNoIEkgYXBwcmVjaWF0ZTsgSSBjYW4gbW92ZSBmb3J3YXJkIGNvbmZpZGVudGx5LlxuXG5UaW1lIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBDcnVjaWFsbHksIGl0IGNoYW5nZXMgaG93IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAgaXMgaGFuZGxlZCwgdHJhbnNpdGlvbmluZyBpdCB0byBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgVGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZ2VuZXJhdGVkIGJ5dGVjb2RlLCBlc3BlY2lhbGx5IHdoZW4gcmVhZGluZyBgcnR0X21pbmAgZnJvbSBgYnBmX3NvY2tfb3BzYC4gSXQgbm93IGluY2x1ZGVzIGxvY2tpbmcgY2hlY2tzIGFuZCBtb2RpZmllcyB0aGUgc3RydWN0IGZpZWxkIG9mZnNldC4gQW5kLCBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIFRDUCBzb2NrX29wcyBldmVudHMuXG5cblRoYXQgYWxsIGxvb2tzIHNvbGlkLCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzgsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQxLjc0OTE0MjQ5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODgzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZUJQRiBzb2NrX29wcyBjb250ZXh0IGFjY2Vzc2VzIHRvIHJ0dF9taW4gYXJlIHJld3JpdHRlbiBpbnRvIG5hdGl2ZSBpbnN0cnVjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi9yZXdyaXRpbmcgKHVzaW5nIFNPQ0tfT1BTX0dFVF9GSUVMRCkuIFRoaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBwYXRoIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgY2FuIGJlIGV4ZXJjaXNlZCBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBwcm9ncmFtcyB0aGF0IGFjY2VzcyB0aGUgcnR0X21pbiBmaWVsZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZUJQRiBzb2NrX29wcyBjb250ZXh0IGFjY2Vzc2VzIHRvIHJ0dF9taW4gYXJlIHJld3JpdHRlbiBpbnRvIG5hdGl2ZSBpbnN0cnVjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi9yZXdyaXRpbmcgKHVzaW5nIFNPQ0tfT1BTX0dFVF9GSUVMRCkuIFRoaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBwYXRoIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgY2FuIGJlIGV4ZXJjaXNlZCBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBwcm9ncmFtcyB0aGF0IGFjY2VzcyB0aGUgcnR0X21pbiBmaWVsZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NDEuODQzMDQ5MDY0WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA0NjcyNTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQxLjg0NDE2Mzg5NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMDQ1NjA0NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBCUEYgYnl0ZWNvZGUgY29udmVyc2lvbiBmb3IgcmVhZGluZyB0aGUgYHJ0dF9taW5gIGZpZWxkIG9mIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBpbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCByZXBsYWNlcyBjdXN0b20gQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gd2l0aCB0aGUgc3RhbmRhcmRpemVkIGhlbHBlciBtYWNybyBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRzIGEgc2FmZXR5IGNoZWNrIG9uIGBpc19sb2NrZWRfdGNwX3NvY2tgIHByaW9yIHRvIGRlcmVmZXJlbmNpbmcgdGhlIHNvY2tldCBhcyBgc3RydWN0IHRjcF9zb2NrYCBhbmQgcmVhZHMgdGhlIGV4YWN0IHNhbWUgb2Zmc2V0IChgcnR0X21pbi5zWzBdLnZgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDBiYzA1YzcyNzI4Njc3YTc5ZmY2ZTVjYjIxZjQxYzFkZTZjZmI3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6NDQ6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTExMDUsMTggKzExMTA1LDcgQEAgc3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cbi1cdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7XG4tXHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgXHUwMDNjXG4tXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcbi1cbi1cdFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4tXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG4tXHRcdFx0XHQgICAgICBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLVx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuLVx0XHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4tXHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICtcbi1cdFx0XHRcdCAgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdCkpO1xuK1x0XHRTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NDEuODQ0MTY2Mjg0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Mzk1MDc4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgdG91Y2hlZCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYC4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIG9uIHRoYXQgcGFydGljdWxhciBgb2Zmc2V0b2ZgIGNhc2U6IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAuXG5cbkFoLCBJIHNlZS4gVGhleSd2ZSByZXBsYWNlZCB0aGUgbWFudWFsIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZvciBhY2Nlc3NpbmcgYHJ0dF9taW5gIHdpdGggYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtgLiBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGhlYWQgb3ZlciB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCBsaW5lIDExMTA1LiBUaGF0J3Mgd2hlcmUgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgc2hvdWxkIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtYWNybyBkb2VzIGludGVybmFsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgaXQncyBpbXBsZW1lbnRlZCBpcyBjcnVjaWFsLlxuXG5GdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgcHJlY2lzZWx5IHdoYXQgYHJ0dF9taW5gIHJlcHJlc2VudHMgd2l0aGluIGBzdHJ1Y3QgdGNwX3NvY2tgLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSB0byB0aGUgVENQIHN0YWNrIGludGVybmFscyBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIGl0cyBzdHJ1Y3R1cmUgYW5kIHVzYWdlLCBzbyBJIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZpZWxkJ3MgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyByZXBsYWNlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQ3LjI4MzY4MjU1OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4NDMyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTT0NLX09QU19HRVRfRklFTERcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTA4MTY9c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwODI1LS8qIEhlbHBlciBtYWNybyBmb3IgYWRkaW5nIHJlYWQgYWNjZXNzIHRvIHRjcF9zb2NrIG9yIHNvY2sgZmllbGRzLiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEwODI2OiNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEKEJQRl9GSUVMRCwgT0JKX0ZJRUxELCBPQkopXFx0XFx0XFx0ICAgICAgXFxcXFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwODI3LVxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQ3LjM1MjUzNDk4NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg4MTg5MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBTT0NLX09QU19HRVRfRklFTERgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYFNPQ0tfT1BTX0dFVF9GSUVMRGAuIFRoZSBjb250ZXh0IGlzIGNydWNpYWwsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgZ3JhYiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgbWFjcm8sIHBsdXMgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHNlZSBob3cgdGhpcyB0aGluZyBpcyAqdXNlZCouIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZmV0Y2hlcyBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGEgc29ja2V0IG9wZXJhdGlvbiBvciBkYXRhIHN0cnVjdHVyZS4gSXMgaXQgdXNlZCB0byBncmFiIHByb3RvY29sLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBnZW5lcmFsIHNvY2tldCBzdGF0ZT8gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyBJJ2QgZGVidWcgaXQgaWYgc29tZXRoaW5nIHdlbnQgc2lkZXdheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo0OS41NDA3MjkxNjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyICp0YXJnZXRfc2l6ZSlcXG4xMDgyMTpcXHR7XFxuMTA4MjI6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuMTA4MjM6XFx0XFx0aW50IG9mZjtcXG4xMDgyNDpcXHRcXG4xMDgyNTpcXHQvKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cXG4xMDgyNjpcXHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgyNzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODI4OlxcdFxcdFxcdGludCBmdWxsc29ja19yZWcgPSBzaS1cXHUwMDNlZHN0X3JlZywgcmVnID0gQlBGX1JFR185LCBqbXAgPSAyOyAgICAgXFxcXFxcbjEwODI5OlxcdFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoT0JKLCBPQkpfRklFTEQpIFxcdTAwM2VcXHRcXHQgICAgICBcXFxcXFxuMTA4MzA6XFx0XFx0XFx0XFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcXFxcbjEwODMxOlxcdFxcdFxcdGlmIChzaS1cXHUwMDNlZHN0X3JlZyA9PSByZWcgfHwgc2ktXFx1MDAzZXNyY19yZWcgPT0gcmVnKVxcdFxcdCAgICAgIFxcXFxcXG4xMDgzMjpcXHRcXHRcXHRcXHRyZWctLTtcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzM6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cXHUwMDNlc3JjX3JlZyA9PSByZWcpXFx0XFx0ICAgICAgXFxcXFxcbjEwODM0OlxcdFxcdFxcdFxcdHJlZy0tO1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgzNTpcXHRcXHRcXHRpZiAoc2ktXFx1MDAzZWRzdF9yZWcgPT0gc2ktXFx1MDAzZXNyY19yZWcpIHtcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzY6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9TVFhfTUVNKEJQRl9EVywgc2ktXFx1MDAzZXNyY19yZWcsIHJlZyxcXHQgICAgICBcXFxcXFxuMTA4Mzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICBcXFxcXFxuMTA4Mzg6XFx0XFx0XFx0XFx0XFx0XFx0ICB0ZW1wKSk7XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODM5OlxcdFxcdFxcdFxcdGZ1bGxzb2NrX3JlZyA9IHJlZztcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDA6XFx0XFx0XFx0XFx0am1wICs9IDI7XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQxOlxcdFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDI6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgIFxcXFxcXG4xMDg0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc19sb2NrZWRfdGNwX3NvY2spLFxcdCAgICAgIFxcXFxcXG4xMDg0NTpcXHRcXHRcXHRcXHRcXHQgICAgICBmdWxsc29ja19yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg0NjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODQ3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpc19sb2NrZWRfdGNwX3NvY2spKTtcXHQgICAgICBcXFxcXFxuMTA4NDg6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcXHQgICAgICBcXFxcXFxuMTA4NDk6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHNpLVxcdTAwM2VzcmNfcmVnKVxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1MDpcXHRcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg1MTpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODUyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHRlbXApKTtcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NTM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXFxcXG4xMDg1NTpcXHRcXHRcXHRcXHRcXHQgICAgICBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFx0XFx0ICAgICAgXFxcXFxcbjEwODU2OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTtcXFxcXFxuMTA4NTc6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgT0JKX0ZJRUxEKSxcXHQgICAgICBcXFxcXFxuMTA4NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcdFxcdCAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NDkuNTQxNDQ3MzM1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NzA0MDU5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIGV4cHJlc3NlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0sIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCBsaW5lcyAxMTEwMCB0aHJvdWdoIDExMTIwIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhleSdyZSBoYW5kbGluZyBmaWx0ZXJpbmcgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmsgZnVuY3Rpb25zIHRoZXJlLiBJdCdzIGxpa2VseSB0aGF0IHdoYXRldmVyJ3MgaGFwcGVuaW5nIGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBoYXMgc29tZSBiZWFyaW5nIG9uIHRoZSBpc3N1ZSBhdCBoYW5kLiBUaG9zZSBsaW5lcyBtaWdodCBob2xkIGNsdWVzIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlciBpbXBsZW1lbnRhdGlvbiwgcG9zc2libHkgcmV2ZWFsaW5nIHdoZXJlIHRoZSBjdXJyZW50IHByb2JsZW0gc3RlbXMgZnJvbS4gQSBxdWljayBza2ltIGNvdWxkIGpvZyBteSBtZW1vcnkgYW5kIGhlbHAgYXZvaWQgYSB3aWxkIGdvb3NlIGNoYXNlIGxhdGVyIG9uLiBMZXQncyBzZWUgaWYgdGhvc2UgbGluZXMgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NTEuNTExODU3MzIyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjUzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDk1OlxcdFxcbjExMDk2OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc3RhdGUpOlxcbjExMDk3OlxcdFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpICE9IDEpO1xcbjExMDk4OlxcdFxcbjExMDk5OlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxcbjExMTAwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcbjExMTAxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4xMTEwMjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxuMTExMDM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZWRzdF9yZWcsXFxuMTExMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpKTtcXG4xMTEwNTpcXHRcXHRcXHRicmVhaztcXG4xMTEwNjpcXHRcXG4xMTEwNzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxcbjExMTA4OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtcXG4xMTEwOTpcXHRcXHRcXHRicmVhaztcXG4xMTExMDpcXHRcXG4xMTExMTpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGJwZl9zb2NrX29wc19jYl9mbGFncyk6XFxuMTExMTI6XFx0XFx0XFx0U09DS19PUFNfR0VUX0ZJRUxEKGJwZl9zb2NrX29wc19jYl9mbGFncywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzLFxcbjExMTEzOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y3Bfc29jayk7XFxuMTExMTQ6XFx0XFx0XFx0YnJlYWs7XFxuMTExMTU6XFx0XFxuMTExMTY6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBza190eGhhc2gpOlxcbjExMTE3OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9PUl9TRVRfRklFTEQoc2tfdHhoYXNoLCBza190eGhhc2gsXFxuMTExMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jaywgdHlwZSk7XFxuMTExMTk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjA6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfY3duZCk6XFxuMTExMjE6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9jd25kKTtcXG4xMTEyMjpcXHRcXHRcXHRicmVhaztcXG4xMTEyMzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNydHRfdXMpOlxcbjExMTI0OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzcnR0X3VzKTtcXG4xMTEyNTpcXHRcXHRcXHRicmVhaztcXG4xMTEyNjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9zc3RocmVzaCk6XFxuMTExMjc6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9zc3RocmVzaCk7XFxuMTExMjg6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCByY3Zfbnh0KTpcXG4xMTEzMDpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQocmN2X254dCk7XFxuMTExMzE6XFx0XFx0XFx0YnJlYWs7XFxuMTExMzI6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfbnh0KTpcXG4xMTEzMzpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc25kX254dCk7XFxuMTExMzQ6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjUxLjUxMzg4OTk5MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTQyMjIzMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXZvbHV0aW9uIG9mIGBTT0NLX09QU19HRVRfRklFTERgIGZvciBUQ1AgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBtYWRlIHRvIGFjY2VzcyB0aGUgYHJ0dF9taW5gIGZpZWxkIHdpdGhpbiBhIFRDUCBzb2NrZXQuIEZpcnN0LCBJIHNlZSB0aGUgZXhwcmVzc2lvbiBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO2AuIFRoaXMgbWFjcm8gaXMgdGhlIGtleS4gUHJldmlvdXNseSwgd2hlbiBhY2Nlc3NpbmcgdGhpcyBzYW1lIGZpZWxkLCB3ZSBoYWQgdGhpcyBjb2RlIHNuaXBwZXQgdXRpbGl6aW5nIGBvZmZzZXRvZmA6XG5cbmBgYGNcblx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cblx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBtaW5tYXgpKTtcblx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBtaW5tYXgpIFx1MDAzY1xuXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcblxuXHRcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxuXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG5cdFx0XHRcdCAgICAgIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTtcblx0XHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG5cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgK1xuXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IG1pbm1heF9zYW1wbGUsIHQpKTtcbmBgYFxuXG5UaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIEknbSBzcG90dGluZyBpcyB0aGF0IHRoZSBvbGRlciBpbXBsZW1lbnRhdGlvbiBkaWRuJ3QgaW5jbHVkZSBhIGNyaXRpY2FsIGNoZWNrOiBgaXNfbG9ja2VkX3RjcF9zb2NrYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBgc2tgIGFzIGBzdHJ1Y3QgdGNwX3NvY2tgLiBUaGUgdXBkYXRlZCBtYWNybywgYFNPQ0tfT1BTX0dFVF9GSUVMRGAsIHNlZW1zIHRvIGhhdmUgaW50ZWdyYXRlZCB0aGlzIHNhZmV0eSBjaGVjay4gSWYgdGhlIHNvY2tldCBpc24ndCBsb2NrZWQgKGltcGx5aW5nIHRoZSBUQ1Agc29ja2V0IGlzIG5vdCBzYWZlIHRvIHJlYWQpLCB0aGUgbWFjcm8gd2lsbCBlaXRoZXIganVtcCBvdmVyIHRoZSByZWFkLCByZXR1cm5pbmcgMCAob3Igd2hhdGV2ZXIgb3RoZXIgbWVjaGFuaXNtIGlzIGVtcGxveWVkIHRvIGhhbmRsZSBhbiBpbnZhbGlkIHNvY2tldCBzdGF0ZSkuIEZ1cnRoZXJtb3JlLCBpdCBsb29rcyBsaWtlIGBTT0NLX09QU19HRVRfRklFTERgIG5vdyBjb3JyZWN0bHkgdXNlcyBgcnR0X21pbi5zWzBdLnZgIHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIGZpZWxkIG9mIGBtaW5tYXhfc2FtcGxlYC4gVGhhdCBtZWFucyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHVzZXMgYG9mZnNldG9mKHJ0dF9taW4pICsgc2l6ZW9mKHQpYC5cblxuVG8gZW5zdXJlIEkndmUgZ290IHRoaXMgcmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbWlubWF4YCB0byBjb25maXJtIHRoYXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZpZWxkIGFjY2Vzc2VzIGlzIGNvcnJlY3Qgd2l0aGluIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo1Ni40NTYxMjAyNjNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTYyMjUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWlubWF4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTExLS8qIEEgc2luZ2xlIGRhdGEgcG9pbnQgZm9yIG91ciBwYXJhbWV0ZXJpemVkIG1pbi1tYXggdHJhY2tlciAqL1xcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjEyOnN0cnVjdCBtaW5tYXhfc2FtcGxlIHtcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0xMy1cXHR1MzJcXHR0O1xcdC8qIHRpbWUgbWVhc3VyZW1lbnQgd2FzIHRha2VuICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0xNy0vKiBTdGF0ZSBmb3IgdGhlIHBhcmFtZXRlcml6ZWQgbWluLW1heCB0cmFja2VyICovXFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MTg6c3RydWN0IG1pbm1heCB7XFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MTk6XFx0c3RydWN0IG1pbm1heF9zYW1wbGUgc1szXTtcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMC19O1xcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTIxLVxcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjIyOnN0YXRpYyBpbmxpbmUgdTMyIG1pbm1heF9nZXQoY29uc3Qgc3RydWN0IG1pbm1heCAqbSlcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMy17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yNi1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyNzpzdGF0aWMgaW5saW5lIHUzMiBtaW5tYXhfcmVzZXQoc3RydWN0IG1pbm1heCAqbSwgdTMyIHQsIHUzMiBtZWFzKVxcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTI4LXtcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyOTpcXHRzdHJ1Y3QgbWlubWF4X3NhbXBsZSB2YWwgPSB7IC50ID0gdCwgLnYgPSBtZWFzIH07XFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0zNC1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDozNTp1MzIgbWlubWF4X3J1bm5pbmdfbWF4KHN0cnVjdCBtaW5tYXggKm0sIHUzMiB3aW4sIHUzMiB0LCB1MzIgbWVhcyk7XFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MzY6dTMyIG1pbm1heF9ydW5uaW5nX21pbihzdHJ1Y3QgbWlubWF4ICptLCB1MzIgd2luLCB1MzIgdCwgdTMyIG1lYXMpO1xcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo1Ni42MjU3NjI0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MzE2NTA3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgTWVtb3J5IExheW91dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBtaW5tYXhgIGFuZCBpdCBjb250YWlucyBhbiBhcnJheSBvZiBgc3RydWN0IG1pbm1heF9zYW1wbGVgLCBzcGVjaWZpY2FsbHkgYHNbM11gLiBFYWNoIGBtaW5tYXhfc2FtcGxlYCBoYXMgdHdvIGB1MzJgIG1lbWJlcnMsIGB0YCBhbmQgYHZgLiAgVGhhdCBtZWFucywgaWYgSSB3YW50IHRvIGFjY2VzcyBgcnR0X21pbi5zWzBdLnZgLCB0aGUgYHZgIG1lbWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGF0IGBzYCBhcnJheSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIG1lbW9yeSBhZGRyZXNzLlxuXG5gcnR0X21pbmAgaXMgdGhlIGJhc2UsIGFuZCB0aGVuIGBvZmZzZXRvZihzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdClgIHdpbGwgcHJvdmlkZSB0aGUgb2Zmc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlICpmaXJzdCogYG1pbm1heF9zYW1wbGVgLiBUaGVuLCBzaW5jZSBgdmAgZm9sbG93cyBgdGAgd2l0aGluIHRoZSBzdHJ1Y3R1cmUsIHRoZSBvZmZzZXQgZm9yIGBydHRfbWluLnNbMF0udmAgd2lsbCBiZSB0aGUgYmFzZSBhZGRyZXNzIHBsdXMgYHNpemVvZih1MzIpYCAodGhlIHNpemUgb2YgYHRgKS4gQmFzaWNhbGx5LCBJJ20gY2FsY3VsYXRpbmcgdGhlIG1lbW9yeSBvZmZzZXQuXG5cbk5vdywgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byB0aGlzIGBTT0NLX09QU19HRVRfRklFTERgIG1hY3JvIGJlY2F1c2UgSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgdGhpcyBpcyBnZW5lcmF0aW5nLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkgYmVpbmcgcGVyZm9ybWVkLiBMZXQncyBzZWUgaG93IHRoaXMgbWFjcm8gaXMgYmVpbmcgZXhwYW5kZWQgdG8gYWNjZXNzIHRoZXNlIHZhbHVlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3NlbWJseSBvciBtYWNoaW5lIGNvZGUgaXMgdWx0aW1hdGVseSBiZWluZyBnZW5lcmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NTkuNTU3NDE2Mzg4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4NTA6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXHQgICAgICBcXFxcXFxuMTA4NTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCAgICAgIFxcXFxcXG4xMDg1MjpcXHRcXHRcXHRcXHRcXHQgICAgICB0ZW1wKSk7XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODUzOlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSxcXFxcXFxuMTA4NTU6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1NjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcXFxcbjEwODU3OlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKE9CSixcXHRcXHQgICAgICBcXFxcXFxuMTA4NTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE9CSl9GSUVMRCksXFx0ICAgICAgXFxcXFxcbjEwODU5OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlZHN0X3JlZyxcXHRcXHQgICAgICBcXFxcXFxuMTA4NjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2YoT0JKLCBPQkpfRklFTEQpKTtcXHQgICAgICBcXFxcXFxuMTA4NjE6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHNpLVxcdTAwM2VzcmNfcmVnKVxcdHtcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NjI6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfQSgyKTtcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NjM6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXHQgICAgICBcXFxcXFxuMTA4NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCAgICAgIFxcXFxcXG4xMDg2NTpcXHRcXHRcXHRcXHRcXHQgICAgICB0ZW1wKSk7XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODY2OlxcdFxcdFxcdFxcdCppbnNuKysgPSBCUEZfTU9WNjRfSU1NKHNpLVxcdTAwM2Vkc3RfcmVnLCAwKTtcXHQgICAgICBcXFxcXFxuMTA4Njc6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg2ODpcXHRcXHR9IHdoaWxlICgwKVxcbjEwODY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo1OS41NTc4NjkzNjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTMzMTg2OTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciBgU09DS19PUFNfR0VUX0ZJRUxEYCBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyBvciBjYXVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgY2hhbmdlIGlzIHRvIHByZXZlbnQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb24gc29ja2V0cyB0aGF0IGFyZW4ndCBmdWxseSBsb2NrZWQgVENQIHNvY2tldHMsIHNvIGxldCdzIHdhbGsgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGlzc3Vlcy5cblxuRmlyc3QsIGRvZXMgdGhpcyBuZXcgY29kZSAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8sIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBjb250ZXh0IHdpdGggaW5zdHJ1Y3Rpb24gcmV3cml0aW5nLiBTZWNvbmQsIGRvZXMgaXQgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGZpZWxkIGluIHF1ZXN0aW9uLCBgcnR0X21pbi5zWzBdLnZgLCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgb24gdGhlIGB0Y3Bfc29ja2AuIFRoaXMgaXMgY29uZmlybWVkIGJlY2F1c2UgdGhlIG9sZCBjb2RlIHdhcyBhbHJlYWR5IGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24sIHRoZSBleGFjdCBzYW1lIG9mZnNldCB3aXRoaW4gYHRjcF9zb2NrYCwgd2l0aG91dCB0aGUgY2hlY2suIEFuZCwgdGhpcmQsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcz8gTm8sIGl0J3MgYSBjb2RlIHN1YnN0aXR1dGlvbiwgYSBtYWNybyByZXBsYWNlbWVudCwgbm90IG5ldyBhbGxvY2F0aW9ucy5cblxuU28sIGluIHNob3J0LCB0aGVyZSBpcyBubyBldmlkZW5jZSBvZiBhIEtNU0FOLWRldGVjdGFibGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGZhbGwgdW5kZXIgQlBGIEpJVCBvciBpbnN0cnVjdGlvbiBlbWlzc2lvbiBhbmQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIEJQRiB2ZXJpZmllciB0ZXN0aW5nLiBLQVNBTiBpcyBhbHJlYWR5IGRvaW5nIGl0cyBqb2IsIHdlIGRvbid0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTi5cblxuTXkgcmVhc29uaW5nIGFsaWducyB3aXRoIHRoZSBLTVNBTiBndWlkZWxpbmVzOiB0aGVyZSdzIG5vIG5lZWQgdG8gcnVuIEtNU0FOIGlmIHN0YW5kYXJkIGRlYnVnZ2VycyBsaWtlIEtBU0FOIGNhbiBjYXRjaCBwb3RlbnRpYWwgaXNzdWVzLiBUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhpcyBldmFsdWF0aW9uLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODksIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDY6MDQuODg5NzQxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgQlBGIGJ5dGVjb2RlIGNvbnZlcnNpb24gZm9yIHJlYWRpbmcgdGhlIGBydHRfbWluYCBmaWVsZCBvZiBgc3RydWN0IGJwZl9zb2NrX29wc2AgaW4gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gSXQgcmVwbGFjZXMgY3VzdG9tIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIHdpdGggdGhlIHN0YW5kYXJkaXplZCBoZWxwZXIgbWFjcm8gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcyBhIHNhZmV0eSBjaGVjayBvbiBgaXNfbG9ja2VkX3RjcF9zb2NrYCBwcmlvciB0byBkZXJlZmVyZW5jaW5nIHRoZSBzb2NrZXQgYXMgYHN0cnVjdCB0Y3Bfc29ja2AgYW5kIHJlYWRzIHRoZSBleGFjdCBzYW1lIG9mZnNldCAoYHJ0dF9taW4uc1swXS52YCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcywgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIEJQRiBieXRlY29kZSBjb252ZXJzaW9uIGZvciByZWFkaW5nIHRoZSBgcnR0X21pbmAgZmllbGQgb2YgYHN0cnVjdCBicGZfc29ja19vcHNgIGluIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoKWAuIEl0IHJlcGxhY2VzIGN1c3RvbSBCUEYgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiB3aXRoIHRoZSBzdGFuZGFyZGl6ZWQgaGVscGVyIG1hY3JvIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLlxcblxcblRoaXMgY2hhbmdlIGFkZHMgYSBzYWZldHkgY2hlY2sgb24gYGlzX2xvY2tlZF90Y3Bfc29ja2AgcHJpb3IgdG8gZGVyZWZlcmVuY2luZyB0aGUgc29ja2V0IGFzIGBzdHJ1Y3QgdGNwX3NvY2tgIGFuZCByZWFkcyB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgKGBydHRfbWluLnNbMF0udmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 14:19:56 +0000 UTC FinishedAt: 2026-09-04 14:46:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET", "INET" ], "series_id": "dd3c7a5c-da90-4b51-8b94-8e9bdb065af8" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_ops_convert_ctx_access", "bpf_convert_ctx_accesses" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgQlBGIGJ5dGVjb2RlIGNvbnZlcnNpb24gZm9yIHJlYWRpbmcgdGhlIGBydHRfbWluYCBmaWVsZCBvZiBgc3RydWN0IGJwZl9zb2NrX29wc2AgaW4gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gSXQgcmVwbGFjZXMgY3VzdG9tIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIHdpdGggdGhlIHN0YW5kYXJkaXplZCBoZWxwZXIgbWFjcm8gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKWAuXG5cblRoaXMgY2hhbmdlIGFkZHMgYSBzYWZldHkgY2hlY2sgb24gYGlzX2xvY2tlZF90Y3Bfc29ja2AgcHJpb3IgdG8gZGVyZWZlcmVuY2luZyB0aGUgc29ja2V0IGFzIGBzdHJ1Y3QgdGNwX3NvY2tgIGFuZCByZWFkcyB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgKGBydHRfbWluLnNbMF0udmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MGJjMDVjNzI3Mjg2NzdhNzlmZjZlNWNiMjFmNDFjMWRlNmNmYjc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNDo0NDoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTExMDUsMTggJiM0MzsxMTEwNSw3IEBAIHN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKTpcbi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICE9XG4tXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heCkpO1xuLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBtaW5tYXgpIFx1MDAzY1xuLVx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBtaW5tYXhfc2FtcGxlKSk7XG4tXG4tXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4tXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG4tXHRcdFx0XHQgICAgICBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLVx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcbi1cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgJiM0Mztcbi1cdFx0XHRcdCAgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdCkpO1xuJiM0MztcdFx0U09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO1xuIFx0XHRicmVhaztcbiBcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzKTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZUJQRiBzb2NrX29wcyBjb250ZXh0IGFjY2Vzc2VzIHRvIHJ0dF9taW4gYXJlIHJld3JpdHRlbiBpbnRvIG5hdGl2ZSBpbnN0cnVjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi9yZXdyaXRpbmcgKHVzaW5nIFNPQ0tfT1BTX0dFVF9GSUVMRCkuIFRoaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBwYXRoIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgY2FuIGJlIGV4ZXJjaXNlZCBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBwcm9ncmFtcyB0aGF0IGFjY2VzcyB0aGUgcnR0X21pbiBmaWVsZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQwYmMwNWM3MjcyODY3N2E3OWZmNmU1Y2IyMWY0MWMxZGU2Y2ZiNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjQ0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTExMDUsMTggJiM0MzsxMTEwNSw3IEBAIHN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKToKLQkJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICE9Ci0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7Ci0JCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgJmx0OwotCQkJICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTsKLQotCQkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKAotCQkJCQkJc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksCi0JCQkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAotCQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTsKLQkJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLSZndDtkc3RfcmVnLCBzaS0mZ3Q7ZHN0X3JlZywKLQkJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7Ci0JCQkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7CiYjNDM7CQlTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciYjMzk7cyBxdWlja2VzdCB0byBnZXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzcGVjaWZpZXMgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIE5vdyB0aGF0IEkga25vdyB0aGUgdGFyZ2V0LCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCBwcm9iYWJseSBhcm91bmQgbGluZSAxMTEwNSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIGVuc3VyZSB0aGlzIGNoYW5nZSBhbGlnbnMgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIG5ldHdvcmsgZmlsdGVyLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBoeXBvdGhlc2VzIGFib3V0IHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgcm91dGluZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwOTA6XHRcdFx0XHRcdFx0XHRpc19mdWxsc29jayksXG4xMTA5MTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbjExMDkyOlx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sXG4xMTA5MzpcdFx0XHRcdFx0XHQgICAgICAgaXNfZnVsbHNvY2spKTtcbjExMDk0Olx0XHRcdGJyZWFrO1xuMTEwOTU6XHRcbjExMDk2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHN0YXRlKTpcbjExMDk3Olx0XHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpICE9IDEpO1xuMTEwOTg6XHRcbjExMDk5Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4xMTEwMDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxuMTExMDE6XHRcdFx0XHRcdCAgICAgIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4xMTEwMjpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuMTExMDM6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0IsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4xMTEwNDpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpKTtcbjExMTA1Olx0XHRcdGJyZWFrO1xuMTExMDY6XHRcbjExMTA3Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuMTExMDg6XHRcdFx0U09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMDk6XHRcdFx0YnJlYWs7XG4xMTExMDpcdFxuMTExMTE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzKTpcbjExMTEyOlx0XHRcdFNPQ0tfT1BTX0dFVF9GSUVMRChicGZfc29ja19vcHNfY2JfZmxhZ3MsIGJwZl9zb2NrX29wc19jYl9mbGFncyxcbjExMTEzOlx0XHRcdFx0XHQgICBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMTQ6XHRcdFx0YnJlYWs7XG4xMTExNTpcdFxuMTExMTY6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc2tfdHhoYXNoKTpcbjExMTE3Olx0XHRcdFNPQ0tfT1BTX0dFVF9PUl9TRVRfRklFTEQoc2tfdHhoYXNoLCBza190eGhhc2gsXG4xMTExODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzb2NrLCB0eXBlKTtcbjExMTE5Olx0XHRcdGJyZWFrO1xuMTExMjA6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX2N3bmQpOlxuMTExMjE6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9jd25kKTtcbjExMTIyOlx0XHRcdGJyZWFrO1xuMTExMjM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc3J0dF91cyk6XG4xMTEyNDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc3J0dF91cyk7XG4xMTEyNTpcdFx0XHRicmVhaztcbjExMTI2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9zc3RocmVzaCk6XG4xMTEyNzpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc25kX3NzdGhyZXNoKTtcbjExMTI4Olx0XHRcdGJyZWFrO1xuMTExMjk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmN2X254dCk6XG4xMTEzMDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQocmN2X254dCk7XG4xMTEzMTpcdFx0XHRicmVhaztcbjExMTMyOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9ueHQpOlxuMTExMzM6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9ueHQpO1xuMTExMzQ6XHRcdFx0YnJlYWs7XG4xMTEzNTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfdW5hKTpcbjExMTM2Olx0XHRcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzbmRfdW5hKTtcbjExMTM3Olx0XHRcdGJyZWFrO1xuMTExMzg6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgbXNzX2NhY2hlKTpcbjExMTM5Olx0XHRcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChtc3NfY2FjaGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhhdCBNYWNybyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgU09DS19PUFNfR0VUX0ZJRUxEYCBtYWNyby4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBpdHMgZXhhY3QgZGVmaW5pdGlvbi4gV2hlcmUgaXMgaXQgZGVmaW5lZCwgdHlwaWNhbGx5IGluIGEgaGVhZGVyIGZpbGUgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucz8gT25jZSBJIGhhdmUgdGhlIGRlZmluaXRpb24sIEkgY2FuIHN0YXJ0IHRvIHBpZWNlIHRvZ2V0aGVyIHdoYXQgaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcg4oCTIHdoYXQgZmllbGQgb2YgYSBzb2NrZXQgc3RydWN0dXJlIGlzIGl0IHJldHJpZXZpbmcsIGFuZCBob3c/IFRoaXMgd2lsbCBiZSBhIHF1aWNrIGludmVzdGlnYXRpb24gaW50byBpdHMgdXNhZ2UgYW5kIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTA4MTY9c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNS0vKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEwODI2OiNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEKEJQRl9GSUVMRCwgT0JKX0ZJRUxELCBPQkopXHRcdFx0ICAgICAgXFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwODI3LVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhhdCBtYWNybyBkZWZpbml0aW9uLiBXZSYjMzk7cmUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgd2hlcmUgdGhlIG1hZ2ljIGJlaGluZCBwYWNrZXQgZmlsdGVyaW5nIGlzIGxpa2VseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGlzIHN5c3RlbSB3b3Jrcywgc28gZXhhbWluaW5nIHRoZSBtYWNybyBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGNob3NlbiB0byBpbXBsZW1lbnQgdGhpcywgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkgbWF5IGhhdmUgdXNlZCwgYW5kIGhvdyB0aGV5IGFic3RyYWN0IGF3YXkgdGhlIGNvbXBsZXhpdGllcy4gSXQmIzM5O3MgdGltZSB0byBiZWNvbWUgaW50aW1hdGUgd2l0aCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MjA6XHRcdFx0XHRcdCAgICAgICB1MzIgKnRhcmdldF9zaXplKVxuMTA4MjE6XHR7XG4xMDgyMjpcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4xMDgyMzpcdFx0aW50IG9mZjtcbjEwODI0Olx0XG4xMDgyNTpcdC8qIEhlbHBlciBtYWNybyBmb3IgYWRkaW5nIHJlYWQgYWNjZXNzIHRvIHRjcF9zb2NrIG9yIHNvY2sgZmllbGRzLiAqL1xuMTA4MjY6XHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVx0XHRcdCAgICAgIFxcXG4xMDgyNzpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4Mjg6XHRcdFx0aW50IGZ1bGxzb2NrX3JlZyA9IHNpLVx1MDAzZWRzdF9yZWcsIHJlZyA9IEJQRl9SRUdfOSwgam1wID0gMjsgICAgIFxcXG4xMDgyOTpcdFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKE9CSiwgT0JKX0ZJRUxEKSBcdTAwM2VcdFx0ICAgICAgXFxcbjEwODMwOlx0XHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcbjEwODMxOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODMyOlx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODMzOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODM0Olx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODM1Olx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHNpLVx1MDAzZXNyY19yZWcpIHtcdFx0XHQgICAgICBcXFxuMTA4MzY6XHRcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfU1RYX01FTShCUEZfRFcsIHNpLVx1MDAzZXNyY19yZWcsIHJlZyxcdCAgICAgIFxcXG4xMDgzNzpcdFx0XHRcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgIFxcXG4xMDgzODpcdFx0XHRcdFx0XHQgIHRlbXApKTtcdFx0XHQgICAgICBcXFxuMTA4Mzk6XHRcdFx0XHRmdWxsc29ja19yZWcgPSByZWc7XHRcdFx0XHQgICAgICBcXFxuMTA4NDA6XHRcdFx0XHRqbXAgJiM0Mzs9IDI7XHRcdFx0XHRcdCAgICAgIFxcXG4xMDg0MTpcdFx0XHR9XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4NDI6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihcdFx0XHQgICAgICBcXFxuMTA4NDM6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICBcXFxuMTA4NDQ6XHRcdFx0XHRcdFx0XHRpc19sb2NrZWRfdGNwX3NvY2spLFx0ICAgICAgXFxcbjEwODQ1Olx0XHRcdFx0XHQgICAgICBmdWxsc29ja19yZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NDY6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NDc6XHRcdFx0XHRcdFx0ICAgICAgIGlzX2xvY2tlZF90Y3Bfc29jaykpO1x0ICAgICAgXFxcbjEwODQ4Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcdCAgICAgIFxcXG4xMDg0OTpcdFx0XHRpZiAoc2ktXHUwMDNlZHN0X3JlZyA9PSBzaS1cdTAwM2VzcmNfcmVnKVx0XHRcdFx0ICAgICAgXFxcbjEwODUwOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NTE6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NTI6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg1MzpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFx0XHRcdCAgICAgIFxcXG4xMDg1NDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXG4xMDg1NTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcdFx0ICAgICAgXFxcbjEwODU2Olx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcbjEwODU3Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFx0XHQgICAgICBcXFxuMTA4NTg6XHRcdFx0XHRcdFx0XHQgICAgICAgT0JKX0ZJRUxEKSxcdCAgICAgIFxcXG4xMDg1OTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcdFx0ICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgVHJhbnNmb3JtYXRpb24gaW4gQlBGIGBzb2NrX29wc2AgUHJvZ3JhbXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNydWNpYWwgdHJhbnNmb3JtYXRpb24gd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGNvbnRleHQgYWNjZXNzZXMgaW4gYHNvY2tfb3BzYCBwcm9ncmFtcy4gTXkgZm9jdXMgaXMgb24gZW5zdXJpbmcgc2FmZSBhbmQgY29ycmVjdCB0cmFuc2xhdGlvbiBmcm9tIHRoZSByYXcgYWNjZXNzIHBhdHRlcm5zIHRvIGEgcHJvcGVyIGJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGFjY2Vzc2VzIGxpa2UgYGJwZl9zb2NrX29wcy0mZ3Q7cnR0X21pbmAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGp1c3QgZGlyZWN0bHkgbG9hZGVkIGZyb20gYW4gb2Zmc2V0IHJlbGF0ZWQgdG8gYHRjcF9zb2NrYCwgd2l0aG91dCBhbnkgY2hlY2tzLiBUaGlzIHdvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhlIG9sZCBzdHlsZSwgcmF3IGBMRFhfTUVNYCBpbnN0cnVjdGlvbnMuCgpgYGBjCippbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksCgkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAoJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTsKKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLSZndDtkc3RfcmVnLCBzaS0mZ3Q7ZHN0X3JlZywKCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7CgkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7CmBgYAoKVGhlIGlzc3VlIGhlcmUgaXMgdGhlIGxhY2sgb2YgYSBjcml0aWNhbCBzYWZldHkgY2hlY2sgZm9yIGBpc19sb2NrZWRfdGNwX3NvY2tgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGB0Y3Bfc29ja2AgZmllbGRzLiBUaGUgbmV3IHBhdGNoIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgdGhpczogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBTT0NLX09QU19HRVRfRklFTERgIHdoaWNoIHdpbGwgZWl0aGVyIGJlIGEganVtcCBvdmVyIHRoZSBsb2FkIGluc3RydWN0aW9uIGlmIGBpc19sb2NrZWRfdGNwX3NvY2tgIGlzIGZhbHNlLCBvciBwcm9jZWVkIGlmIHRydWUuIEFkZGl0aW9uYWxseSB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgc2xpZ2h0bHkgZGlmZmVyZW50OiBgcnR0X21pbi5zWzBdLnZgLgoKVGhpcyB0cmFuc2xhdGlvbiBpcyBjcnVjaWFsLCBpdCYjMzk7cyB3aGF0IHRyYW5zZm9ybXMgdGhlIGludGVuZGVkIGFjY2VzcyB0byB0aGUgZ2VuZXJhdGVkIGJ5dGVjb2RlLiBUaGlzIGlzIGFsbCBmb3IgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgIHByb2dyYW1zLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBJdCBhYnNvbHV0ZWx5IGlzISBCUEYgYHNvY2tfb3BzYCBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkLCBhdHRhY2hlZCB0byB2YXJpb3VzIHBvaW50cyBpbiB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFyZSBleGVjdXRlZCBkdXJpbmcgVENQIHNvY2tldCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHkgdGhyb3VnaCBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIGFuZCBgYnBmKEJQRl9QUk9HX0FUVEFDSCwgLi4uKWAgY2FsbHMuIENydWNpYWxseSwgSSBzZWUgdGhhdCBkdXJpbmcgdGhlIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBwaGFzZSAoYGJwZl9jaGVja2ApLCBgY29udmVydF9jdHhfYWNjZXNzZXNgIGNhbGxzIG91ciB0YXJnZXQsIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgLiBTbywgaXQmIzM5O3MgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzdWJzeXN0ZW0uIFRoaXMgbWFrZXMgaXQgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUgdG8gc2VjdXJlLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgdG8gYmUgYWN0aXZlLiBJdCByZWxpZXMgb24gdGhlIEJQRiwgQlBGX1NZU0NBTEwsIGFuZCBORVQgY29uZmlncyB0byBiZSBlbmFibGVkLiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCB0byB0cmFjZSBleGFjdGx5IHdoZXJlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTA3Mjc9c3RhdGljIHUzMiBzb2NrX2FkZHJfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MTUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMDgxNjpzdGF0aWMgdTMyIHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MTctXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTU4Nj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBzb2NrX29wc192ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODgtXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IHNvY2tfb3BzX2lzX3ZhbGlkX2FjY2Vzcyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTg5Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU5MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGVlcCBEaXZlIGludG8gYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2AgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2AuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzdXJmYWNlLWxldmVsIHNjYW47IEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgKnVzZWQqLiBJJiMzOTttIHRhbGtpbmcgYWJvdXQgbW9yZSB0aGFuIGp1c3QgZGVmaW5pdGlvbnM7IEkgd2FudCB0byBrbm93IHdoZXJlIGl0JiMzOTtzICpndWFyZGVkKiwgd2hhdCBjb25kaXRpb25zIGRpY3RhdGUgaXRzIGludm9jYXRpb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIGluIHdoaWNoIGl0JiMzOTtzIGFjdGl2ZS4gSSYjMzk7bSBhZnRlciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIGRvd24gdG8gdGhlIGdyYW51bGFyIGxldmVsIG9mIHRoZSByZWxldmFudCBsb2NraW5nLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBCYXNpY2FsbHksIEkgd2FudCB0byBtYXAgb3V0IGl0cyBvcGVyYXRpb25hbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX29wc192ZXJpZmllcl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTE1ODM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19zb2NrX2FkZHJfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4Njpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBzb2NrX29wc192ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4Ny1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfb3BzX2Z1bmNfcHJvdG8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTIFJlZ2lzdHJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBsaWtlbHkgY29uZmlndXJlZCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWFzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvY29yZS9maWx0ZXIuY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSB1c3VhbCBwbGFjZSBmb3IgQlBGLXJlbGF0ZWQgZmlsdGVyaW5nIGFuZCBwcm9ncmFtIGF0dGFjaG1lbnQgbG9naWMuIFNpbXVsdGFuZW91c2x5LCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgIHRvIHNlZSBob3cgdGhlIGVudW0gaXRzZWxmIGlzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgQlBGIHByb2dyYW0gdHlwZXMgYXJlIGRlY2xhcmVkIG5lYXJieS4gVGhpcyB3aWxsIGhlbHAgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgd2hlcmUgdGhlIGtlcm5lbCByZWNvZ25pemVzIGFuZCBwb3RlbnRpYWxseSBpbml0aWFsaXplcyBvciB1c2VzIHRoaXMgc3BlY2lmaWMgcHJvZ3JhbSB0eXBlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI3PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyOTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIHNvY2tfb3BzLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDozMDpcdCAgICAgIHN0cnVjdCBicGZfc29ja19vcHMsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMzEtQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQlBGX1BST0dfVFlQRV9TT0NLX09QUyBhbmQgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTYCBpcyBiZWluZyBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgYnBmX3R5cGVzLmhgIGhlYWRlciBmaWxlLiBJdCYjMzk7cyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgdG8gZXhhbWluZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIHRob3NlIGAjaWZkZWZgIGRpcmVjdGl2ZXMg4oCTIHN1cnJvdW5kaW5nIHRoaXMgcHJvZ3JhbSB0eXBlIGRlZmluaXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgaXRzIGluY2x1c2lvbiwgZXhjbHVzaW9uLCBvciBhbnkgbW9kaWZpY2F0aW9ucyBiYXNlZCBvbiB0aGUga2VybmVsIHZlcnNpb24sIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgdGhlIHByZXNlbmNlIG9mIHNwZWNpZmljIGZlYXR1cmVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSB2YXJpYXRpb25zLCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIG9yIGFueSBpbmRpY2F0aW9ucyBvZiBob3cgdGhpcyB0eXBlIGlzIGV2b2x2aW5nLiBJIGFsc28gd2FudCB0byBxdWlja2x5IGdldCBhbiBpZGVhIG9mIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzY2hlbWUgb2Ygc3VwcG9ydGVkIHByb2dyYW0gdHlwZXMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnYXVnZSBpdHMgcG9ydGFiaWxpdHkgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSBmZWF0dXJlIGZsYWcgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdC8qIGludGVybmFsIGZpbGUgLSBkbyBub3QgaW5jbHVkZSBkaXJlY3RseSAqL1xuICAgMzpcdFxuICAgNDpcdCNpZmRlZiBDT05GSUdfTkVUXG4gICA1Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcbiAgIDY6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAgNzpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIHRjX2Nsc19hY3QsXG4gICA4Olx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgIDk6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxuICAxMDpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gIDExOlx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1hEUCwgeGRwLFxuICAxMjpcdFx0ICAgICAgc3RydWN0IHhkcF9tZCwgc3RydWN0IHhkcF9idWZmKVxuICAxMzpcdCNpZmRlZiBDT05GSUdfQ0dST1VQX0JQRlxuICAxNDpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBjZ19za2IsXG4gIDE1Olx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMTY6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0ssIGNnX3NvY2ssXG4gIDE3Olx0XHQgICAgICBzdHJ1Y3QgYnBmX3NvY2ssIHN0cnVjdCBzb2NrKVxuICAxODpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLCBjZ19zb2NrX2FkZHIsXG4gIDE5Olx0XHQgICAgICBzdHJ1Y3QgYnBmX3NvY2tfYWRkciwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybilcbiAgMjA6XHQjZW5kaWZcbiAgMjE6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX0lOLCBsd3RfaW4sXG4gIDIyOlx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMjM6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgbHd0X291dCxcbiAgMjQ6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAyNTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXG4gIDI2Olx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMjc6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcbiAgMjg6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAyOTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgc29ja19vcHMsXG4gIDMwOlx0XHQgICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4pXG4gIDMxOlx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxuICAzMjpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gIDMzOlx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX01TRywgc2tfbXNnLFxuICAzNDpcdFx0ICAgICAgc3RydWN0IHNrX21zZ19tZCwgc3RydWN0IHNrX21zZylcbiAgMzU6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1IsIGZsb3dfZGlzc2VjdG9yLFxuICAzNjpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IGJwZl9mbG93X2Rpc3NlY3RvcilcbiAgMzc6XHQjZW5kaWZcbiAgMzg6XHQjaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbiAgMzk6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfS1BST0JFLCBrcHJvYmUsXG4gIDQwOlx0XHQgICAgICBicGZfdXNlcl9wdF9yZWdzX3QsIHN0cnVjdCBwdF9yZWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYnkgYSBmZXcgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfTkVUYCwgZGVmaW5pdGVseSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfQ0dST1VQX0JQRmAgaWYgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhdHRhY2hpbmcgdGhlc2UgcHJvZ3JhbXMgdG8gY2dyb3Vwcywgb3IgYENPTkZJR19JTkVUYCBpZiB0aGlzIGlzIHNwZWNpZmljYWxseSBmb3IgVENQIHNvY2tfb3BzLiBLbm93aW5nIHRoaXMgaXMgdGhlIGZvdW5kYXRpb24uCgpOb3csIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2Agc3RydWN0dXJlLiBUaGF04oCZcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBhbmQgYW55IGFzc29jaWF0ZWQgdmVyaWZpY2F0aW9uIHNob3VsZCBiZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRoaW5ncyBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1ODA6XHRcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcdD0gc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyxcbjExNTgxOlx0fTtcbjExNTgyOlx0XG4xMTU4MzpcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfc29ja19hZGRyX3Byb2dfb3BzID0ge1xuMTE1ODQ6XHR9O1xuMTE1ODU6XHRcbjExNTg2Olx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc29ja19vcHNfdmVyaWZpZXJfb3BzID0ge1xuMTE1ODc6XHRcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHNvY2tfb3BzX2Z1bmNfcHJvdG8sXG4xMTU4ODpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBzb2NrX29wc19pc192YWxpZF9hY2Nlc3MsXG4xMTU4OTpcdFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MsXG4xMTU5MDpcdH07XG4xMTU5MTpcdFxuMTE1OTI6XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNvY2tfb3BzX3Byb2dfb3BzID0ge1xuMTE1OTM6XHR9O1xuMTE1OTQ6XHRcbjExNTk1Olx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfc2tiX3ZlcmlmaWVyX29wcyA9IHtcbjExNTk2Olx0XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBza19za2JfZnVuY19wcm90byxcbjExNTk3Olx0XHQuaXNfdmFsaWRfYWNjZXNzXHQ9IHNrX3NrYl9pc192YWxpZF9hY2Nlc3MsXG4xMTU5ODpcdFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBza19za2JfY29udmVydF9jdHhfYWNjZXNzLFxuMTE1OTk6XHRcdC5nZW5fcHJvbG9ndWVcdFx0PSBza19za2JfcHJvbG9ndWUsXG4xMTYwMDpcdH07XG4xMTYwMTpcdFxuMTE2MDI6XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX3NrYl9wcm9nX29wcyA9IHtcbjExNjAzOlx0fTtcbjExNjA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU29ja29wcyBDb250ZXh0IEFjY2VzcyBDb252ZXJzaW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB1c2VkIGluIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgcmV3cml0aW5nIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AgcHJvZ3JhbXMuIFRoZXNlIHByb2dyYW1zIGFyZSBoaXR0aW5nIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBmaWVsZHMgbGlrZSBgcnR0X21pbmAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LgoKU2luY2UgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXMgc3RhdGljLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBjaGVjayBpZiBpdCYjMzk7cyBkaXJlY3RseSBjYWxsZWQgb3IgaW5saW5lZCBpbnRvIHRoZSBgc29ja19vcHNfdmVyaWZpZXJfb3BzYCBmdW5jdGlvbiBwb2ludGVyLCBzcGVjaWZpY2FsbHkgYC5jb252ZXJ0X2N0eF9hY2Nlc3NgLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBpdHMgYWRkcmVzcyBpcyBhc3NpZ25lZCB0byBhIGdsb2JhbCBzdHJ1Y3QgYHNvY2tfb3BzX3ZlcmlmaWVyX29wcy5jb252ZXJ0X2N0eF9hY2Nlc3MgPSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3M7YCBtZWFucyBpdHMgc3ltYm9sICpzaG91bGQqIGV4aXN0IGluIHZtbGludXgsIHVubGVzcyB0aGUgY29tcGlsZXIgZ2V0cyBjbGV2ZXIsIGJ1dCBpdCBzdGlsbCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gSSBjYW4gY2hlY2sgaXRzIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uZmlybS4KCkhhbmcgb24gYSBzZWNvbmQuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHNpbmNlIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyB1c2VkIGluIGBicGZfY2hlY2tgIC8gYGNvbnZlcnRfY3R4X2FjY2Vzc2VzYCAvIGBicGZfY29udmVydF9jdHhfYWNjZXNzYCBpdCBpcyAqbm90KiBpbmxpbmVkLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpZiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBpcyBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZS4gVGhlbiwgSSBjYW4gbG9vayBmb3IgdGhlIGNhbGwgY2hhaW4gb3JpZ2luYXRpbmcgZnJvbSBgY29udmVydF9jdHhfYWNjZXNzZXNgIG9yIGBicGZfY29udmVydF9jdHhfYWNjZXNzYCBpbnN0ZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb252ZXJ0X2N0eF9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTI0NTE9c3RhdGljIGJvb2wgc3lzY3RsX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0NzctXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI0Nzg6c3RhdGljIHUzMiBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0NzktXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNTQyPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3N5c2N0bF92ZXJpZmllcl9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ0LVx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBzeXNjdGxfaXNfdmFsaWRfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTQ1Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ2LX07XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNjA0PXN0YXRpYyBib29sIGNnX3NvY2tvcHRfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY3Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjY3ODpzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2NzktXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnNpLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc2NT1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2Nrb3B0X3ZlcmlmaWVyX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjctXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IGNnX3NvY2tvcHRfaXNfdmFsaWRfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY4Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzcyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2OS1cdC5nZW5fcHJvbG9ndWVcdFx0PSBjZ19zb2Nrb3B0X2dldF9wcm9sb2d1ZSxcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTYzOT1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03NDAtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0MTppbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Mi17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy04MTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSYjNDM7JiM0MzssIGluc24mIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjgxNDpcdFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2Vzcztcbmtlcm5lbC9icGYvZml4dXBzLmMtODE1LVx0XHRlbnVtIGJwZl9yZWdfdHlwZSBwdHJfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxMC1cdFx0Y2FzZSBQVFJfVE9fQ1RYOlxua2VybmVsL2JwZi9maXh1cHMuYzo5MTE6XHRcdFx0aWYgKCFvcHMtXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxua2VybmVsL2JwZi9maXh1cHMuYy05MTItXHRcdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvZml4dXBzLmM6OTEzOlx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy1cdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxNC1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxNi1cdFx0Y2FzZSBQVFJfVE9fU09DS19DT01NT046XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjkxNzpcdFx0XHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkxOC1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE5LVx0XHRjYXNlIFBUUl9UT19UQ1BfU09DSzpcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIwOlx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyMS1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvZml4dXBzLmMtOTIyLVx0XHRjYXNlIFBUUl9UT19YRFBfU09DSzpcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIzOlx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl94ZHBfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyNC1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk2OS1cdFx0ICogY29udmVydCB0byBhIDQvOC1ieXRlIGxvYWQsIHRvIG1pbmltdW0gcHJvZ3JhbSB0eXBlIHNwZWNpZmljXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjk3MDpcdFx0ICogY29udmVydF9jdHhfYWNjZXNzIGNoYW5nZXMuIElmIGNvbnZlcnNpb24gaXMgc3VjY2Vzc2Z1bCxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTcxLVx0XHQgKiB3ZSB3aWxsIGFwcGx5IHByb3BlciBtYXNrIHRvIHRoZSByZXN1bHQuXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy05OTQtXHRcdHRhcmdldF9zaXplID0gMDtcbmtlcm5lbC9icGYvZml4dXBzLmM6OTk1Olx0XHRjbnQgPSBjb252ZXJ0X2N0eF9hY2Nlc3ModHlwZSwgaW5zbiwgaW5zbl9idWYsIGVudi1cdTAwM2Vwcm9nLFxua2VybmVsL2JwZi9maXh1cHMuYy05OTYtXHRcdFx0XHRcdCBcdTAwMjZ0YXJnZXRfc2l6ZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4OTQ9c3RhdGljIGludCBjaGVja19jdHhfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDkwMi1cdGJvb2wgdmFyX29mZl9vayA9IGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoZW52LVx1MDAzZXByb2cpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5MDM6XHRib29sIGZpeGVkX29mZl9vayA9ICFlbnYtXHUwMDNlb3BzLVx1MDAzZWNvbnZlcnRfY3R4X2FjY2Vzcztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTA0LVx0aW50IGVycjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTk3LVx0XHQvKiBwcm9ncmFtIGlzIHZhbGlkLCBjb252ZXJ0ICoodTMyKikoY3R4ICYjNDM7IG9mZikgYWNjZXNzZXMgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE5ODpcdFx0cmV0ID0gYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBTb2NrZXQgT3BlcmF0aW9ucyB3aXRoIEJQRioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgc29ja19vcHNgIEJQRiBwcm9ncmFtcyBhcmUgYWN0dWFsbHkgYmVpbmcgZXhlY3V0ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkga25vdyB0aGUgZ2VuZXJhbCBjb25jZXB0cywgYnV0IEkgd2FudCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyBhdCBwbGF5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdG8gdXNlIGBncmVwYC4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQsIHRoZSBwcm9ncmFtIHR5cGUuIFRoZW4sIHRvIGJlIG1vcmUgcHJlY2lzZSBpbiBteSBzZWFyY2ggSSBzaG91bGQgYWxzbyBpbmNsdWRlIGB0Y3BfY2FsbF9icGZgIGluIG15IHNlYXJjaCBxdWVyaWVzLCBhcyBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgZXhlY3V0ZSB0aGUgcHJvZ3JhbXMuIFRoaXMgYXBwcm9hY2ggd2lsbCBsaWtlbHkgZXhwb3NlIHRoZSByZWxldmFudCBjYWxsIHNpdGVzIGFuZCBkYXRhIGZsb3cuIEFybWVkIHdpdGggdGhlc2Ugc2VhcmNoIHRlcm1zLCBJIHNob3VsZCBiZSBhYmxlIHRvIG5hdmlnYXRlIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIHBhdGggZm9yIHRoZXNlIHNvY2tfb3BzIHByb2dyYW1zLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgcHJvZ3JhbXMgaW4gbW9yZSBkZXRhaWwuIFRoaXMgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoaW5ncyBsaWtlIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nLCBzZWN1cml0eSBwb2xpY2llcywgYW5kIG90aGVyIHNvY2tldC1yZWxhdGVkIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jYWxsX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvYWZfaW5ldC5jPTE5OD1pbnQgX19pbmV0X2xpc3Rlbl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0yMjgtXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjI5Olx0XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfTElTVEVOX0NCLCAwLCBOVUxMKTtcbm5ldC9pcHY0L2FmX2luZXQuYy0yMzAtXHR9XG4tLVxubmV0L2lwdjQvdGNwLmM9Mjk2MT12b2lkIHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMjk2OS1cdCAqIG5lZWQgdG8gcmVtYXAgdGhlIGludGVybmFsIHZhbHVlIHRvIHRoZSBCUEYgdmFsdWUgYmVmb3JlIGNhbGxpbmdcbm5ldC9pcHY0L3RjcC5jOjI5NzA6XHQgKiB0Y3BfY2FsbF9icGZfMmFyZy5cbm5ldC9pcHY0L3RjcC5jLTI5NzEtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3AuYy0yOTk4LVx0aWYgKEJQRl9TT0NLX09QU19URVNUX0ZMQUcodGNwX3NrKHNrKSwgQlBGX1NPQ0tfT1BTX1NUQVRFX0NCX0ZMQUcpKVxubmV0L2lwdjQvdGNwLmM6Mjk5OTpcdFx0dGNwX2NhbGxfYnBmXzJhcmcoc2ssIEJQRl9TT0NLX09QU19TVEFURV9DQiwgb2xkc3RhdGUsIHN0YXRlKTtcbm5ldC9pcHY0L3RjcC5jLTMwMDAtXG4tLVxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9udi5jLTE0OC1cdCAqL1xubmV0L2lwdjQvdGNwX252LmM6MTQ5Olx0YmFzZV9ydHQgPSB0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19CQVNFX1JUVCwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXHRpZiAoYmFzZV9ydHQgXHUwMDNlIDApIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzU1MD1pbnQgX190Y3BfcmV0cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2Vncylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzY3OC1cdGlmIChCUEZfU09DS19PUFNfVEVTVF9GTEFHKHRwLCBCUEZfU09DS19PUFNfUkVUUkFOU19DQl9GTEFHKSlcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozNjc5Olx0XHR0Y3BfY2FsbF9icGZfM2FyZyhzaywgQlBGX1NPQ0tfT1BTX1JFVFJBTlNfQ0IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzY4MC1cdFx0XHRcdCAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSwgc2VncywgZXJyKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzAzLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzMDQ6XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfQ09OTkVDVF9DQiwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDMwNS1cbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz0yNDM9c3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjg5LVx0aWYgKEJQRl9TT0NLX09QU19URVNUX0ZMQUcodHAsIEJQRl9TT0NLX09QU19SVE9fQ0JfRkxBRykpXG5uZXQvaXB2NC90Y3BfdGltZXIuYzoyOTA6XHRcdHRjcF9jYWxsX2JwZl8zYXJnKHNrLCBCUEZfU09DS19PUFNfUlRPX0NCLFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjkxLVx0XHRcdFx0ICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgU29ja2V0IE9wZXJhdGlvbiBUZXN0aW5nIGluIEJQRioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGFyZWEgYW5kIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkLiBTcGVjaWZpY2FsbHksIHJlZ2FyZGluZyBgc29ja19vcHNgLCBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSB0ZXN0IHN1aXRlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGhhdmUgc29saWQgdGVzdGluZyBoZXJlLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBkZWZpbml0ZWx5IGNvbmZpcm0gdGhhdCB0aGVyZSYjMzk7cyBhIGRlZGljYXRlZCB0ZXN0IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYHNvY2tfb3BzYCB0ZXN0aW5nLiYjMzQ7IFNvbWV0aGluZyBsaWtlIGBicGZfcHJvZ190ZXN0X3J1bl9zb2NrX29wc2Agc291bmRzIGZhbWlsaWFyLCBidXQgSSBuZWVkIHRvIGdvIGxvb2sgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBwcmVzZW50IGFuZCBkb2luZyBpdHMgam9iIHByb3Blcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHRoZSByaWdodCBmdW5jdGlvbiwgb3IgdGhhdCB0aGVyZSYjMzk7cyBzb21lIHNpbWlsYXIgdGVzdGluZyBiZWluZyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfcnVuLipzb2NrX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIEV4cGxvcmF0aW9uIGZvciBTcGVjaWZpYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyBzcGVjaWZpYywgcHJvYmFibHkgcmVsYXRlZCB0byB0ZXN0aW5nIG9yIG5ldHdvcmtpbmcgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBwZXJmb3JtIGEgYnJvYWQgc2VhcmNoLiBUaGUga2VybmVsIHNvdXJjZSB0cmVlIGlzIHZhc3QsIGJ1dCBJIGNhbiBuYXJyb3cgdGhpbmdzIGRvd24gYSBiaXQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgY29kZWJhc2UuIFRoZSB0d28ga2V5IHRlcm1zIEkmIzM5O2xsIHVzZSBhcmUgYHRlc3RfcnVuYCBhbmQgYHNvY2tfb3BzX3Byb2dfb3BzYC4gYHRlc3RfcnVuYCBtaWdodCBpbmRpY2F0ZSBzb21lIGtpbmQgb2YgdGVzdCBpbmZyYXN0cnVjdHVyZSwgcG9zc2libHkgdW5pdCB0ZXN0cyBvciBpbnRlZ3JhdGlvbiB0ZXN0cyB0aGF0IGFyZSBydW4gd2hlbiBkZXZlbG9waW5nIG5ldyBjb2RlLiBUaGUgdGVybSBgc29ja19vcHNfcHJvZ19vcHNgIGlzIGludGVyZXN0aW5nLCBpdCBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHJlZmVycmluZyB0byB0aGUgYHNvY2tfb3BzYCBzdHJ1Y3R1cmUgb3IgdGhlIGFzc29jaWF0ZWQgYHByb2dfb3BzYC4gVGhlIHVzZSBvZiBgcHJvZ19vcHNgIGluZGljYXRlcyBlQlBGLCBhIHByb2dyYW1tYWJsZSB3YXkgb2YgZXh0ZW5kaW5nIHRoZSBrZXJuZWwuIFRoaXMgaXMgd29ydGggaW52ZXN0aWdhdGluZyBiZWNhdXNlIGVCUEYgaXMgcGVydmFzaXZlLCBhbmQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgd2lsbCBwb2ludCB0byBpbXBsZW1lbnRhdGlvbnMgb2Ygc3BlY2lmaWMgc29ja2V0IGZlYXR1cmVzLiBCeSBzZWFyY2hpbmcgYWNyb3NzIHRoZSBrZXJuZWwsIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgdGhlc2UgdGVybXMgYXJlIHVzZWQgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlcmUsIEkgY2FuIGZ1cnRoZXIgcmVmaW5lIG15IHNlYXJjaCBvciBmb2xsb3cgc3BlY2lmaWMgY2FsbCBncmFwaHMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGVsZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX29wc19wcm9nX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMTU4Nj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBzb2NrX29wc192ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU5Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNvY2tfb3BzX3Byb2dfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIGB0Y3BfY2FsbF9icGZgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHRjcF9jYWxsX2JwZmAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXRzIG5hbWUsIGJ1dCBJIGNhbiYjMzk7dCByZWx5IG9uIHRoYXQgYWxvbmUuIEkgbmVlZCB0byB0cmFjZSBpdCBiYWNrIHRvIGl0cyBzb3VyY2UuIEl0IGNvdWxkIGJlIGluIGEgaGVhZGVyIGZpbGUsIHBhcnQgb2YgYSBzcGVjaWZpYyBtb2R1bGUsIG9yIG1heWJlIGV2ZW4gZHluYW1pY2FsbHkgbG9hZGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGNvbnRleHQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlIGFuZCBzZWUgd2hlcmUgYHRjcF9jYWxsX2JwZmAgaXMgZGVjbGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jYWxsX2JwZlxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODgxPXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfc2tvcHNfaW5pdF9za2Ioc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpza29wcyxcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yODkzLSNpZmRlZiBDT05GSUdfQlBGXG5pbmNsdWRlL25ldC90Y3AuaDoyODk0OnN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcCwgdTMyIG5hcmdzLCB1MzIgKmFyZ3MpXG5pbmNsdWRlL25ldC90Y3AuaC0yODk1LXtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yOTE5PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8yYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIpXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjkyMi1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5MjM6XHRyZXR1cm4gdGNwX2NhbGxfYnBmKHNrLCBvcCwgMiwgYXJncyk7XG5pbmNsdWRlL25ldC90Y3AuaC0yOTI0LX1cbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yOTI2PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8zYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjkzMC1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5MzE6XHRyZXR1cm4gdGNwX2NhbGxfYnBmKHNrLCBvcCwgMywgYXJncyk7XG5pbmNsdWRlL25ldC90Y3AuaC0yOTMyLX1cbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yOTM0PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfY2xlYXJfc29ja19vcHNfY2JfZmxhZ3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI5MzktI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oOjI5NDA6c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NDEte1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTI5NjI9c3RhdGljIGlubGluZSB1MzIgdGNwX3RpbWVvdXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjk2NS1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5NjY6XHR0aW1lb3V0ID0gdGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfVElNRU9VVF9JTklULCAwLCBOVUxMKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NjctXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9Mjk3Mz1zdGF0aWMgaW5saW5lIHUzMiB0Y3BfcnduZF9pbml0X2JwZihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjk3Ni1cbmluY2x1ZGUvbmV0L3RjcC5oOjI5Nzc6XHRyd25kID0gdGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfUldORF9JTklULCAwLCBOVUxMKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NzgtXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9Mjk4ND1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2JwZl9jYV9uZWVkc19lY24oc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvdGNwLmgtMjk4NS17XG5pbmNsdWRlL25ldC90Y3AuaDoyOTg2Olx0cmV0dXJuICh0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19ORUVEU19FQ04sIDAsIE5VTEwpID09IDEpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjk4Ny19XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE5OD1pbnQgX19pbmV0X2xpc3Rlbl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0yMjgtXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjI5Olx0XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfTElTVEVOX0NCLCAwLCBOVUxMKTtcbm5ldC9pcHY0L2FmX2luZXQuYy0yMzAtXHR9XG4tLVxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9udi5jLTE0OC1cdCAqL1xubmV0L2lwdjQvdGNwX252LmM6MTQ5Olx0YmFzZV9ydHQgPSB0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19CQVNFX1JUVCwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXHRpZiAoYmFzZV9ydHQgXHUwMDNlIDApIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzAzLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzMDQ6XHR0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19UQ1BfQ09OTkVDVF9DQiwgMCwgTlVMTCk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDMwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgSG9vayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHRjcF9jYWxsX2JwZmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZy4gSXQgbG9va3MgbGlrZSB0aGUgY2FsbCBjaGFpbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCB1bHRpbWF0ZWx5IGNhbGxzIGVpdGhlciBgQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QU2Agb3IgYEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFNfS0VSTmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgYWN0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGB0Y3BfY2FsbF9icGZgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBhcmFtZXRlcnMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhhdCBpbiBgaW5jbHVkZS9uZXQvdGNwLmhgLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiBob3cgdGhpcyBpcyBhbGwgb3JjaGVzdHJhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODkwOlx0ICogcHJvZ3JhbSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaG9zZW4gb3BlcmF0aW9uIG9yIHRoZXJlIGlzIG5vIEJQRlxuMjg5MTpcdCAqIHByb2dyYW0gbG9hZGVkKS5cbjI4OTI6XHQgKi9cbjI4OTM6XHQjaWZkZWYgQ09ORklHX0JQRlxuMjg5NDpcdHN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcCwgdTMyIG5hcmdzLCB1MzIgKmFyZ3MpXG4yODk1Olx0e1xuMjg5NjpcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuIHNvY2tfb3BzO1xuMjg5NzpcdFx0aW50IHJldDtcbjI4OTg6XHRcbjI4OTk6XHRcdG1lbXNldChcdTAwMjZzb2NrX29wcywgMCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCB0ZW1wKSk7XG4yOTAwOlx0XHRpZiAoc2tfZnVsbHNvY2soc2spKSB7XG4yOTAxOlx0XHRcdHNvY2tfb3BzLmlzX2Z1bGxzb2NrID0gMTtcbjI5MDI6XHRcdFx0c29ja19vcHMuaXNfbG9ja2VkX3RjcF9zb2NrID0gMTtcbjI5MDM6XHRcdFx0c29ja19vd25lZF9ieV9tZShzayk7XG4yOTA0Olx0XHR9XG4yOTA1Olx0XG4yOTA2Olx0XHRzb2NrX29wcy5zayA9IHNrO1xuMjkwNzpcdFx0c29ja19vcHMub3AgPSBvcDtcbjI5MDg6XHRcdGlmIChuYXJncyBcdTAwM2UgMClcbjI5MDk6XHRcdFx0bWVtY3B5KHNvY2tfb3BzLmFyZ3MsIGFyZ3MsIG5hcmdzICogc2l6ZW9mKCphcmdzKSk7XG4yOTEwOlx0XG4yOTExOlx0XHRyZXQgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTKFx1MDAyNnNvY2tfb3BzKTtcbjI5MTI6XHRcdGlmIChyZXQgPT0gMClcbjI5MTM6XHRcdFx0cmV0ID0gc29ja19vcHMucmVwbHk7XG4yOTE0Olx0XHRlbHNlXG4yOTE1Olx0XHRcdHJldCA9IC0xO1xuMjkxNjpcdFx0cmV0dXJuIHJldDtcbjI5MTc6XHR9XG4yOTE4Olx0XG4yOTE5Olx0c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmXzJhcmcoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3AsIHUzMiBhcmcxLCB1MzIgYXJnMilcbjI5MjA6XHR7XG4yOTIxOlx0XHR1MzIgYXJnc1syXSA9IHthcmcxLCBhcmcyfTtcbjI5MjI6XHRcbjI5MjM6XHRcdHJldHVybiB0Y3BfY2FsbF9icGYoc2ssIG9wLCAyLCBhcmdzKTtcbjI5MjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDg5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBlQlBGIGFuZCBUQ1AgU29ja2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgaW4gdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGZpbHRlciBpbmZyYXN0cnVjdHVyZSwgc28gd2UgbmVlZCB0byBiZSB2ZXJ5IHRob3JvdWdoLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBmb2N1c2luZyBvbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyBob3cgZUJQRiBwcm9ncmFtcyBhY2Nlc3MgdGhlIGBydHRfbWluYCBmaWVsZCB3aXRoaW4gYSBgYnBmX3NvY2tfb3BzYCBzdHJ1Y3R1cmUuIEluc3RlYWQgb2YgdGhlIG9sZCBpbmxpbmUgaW5zdHJ1Y3Rpb25zLCB3ZSYjMzk7cmUgbm93IHVzaW5nIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgYGZ1bGxzb2NrYCBvciBgbG9ja2VkX3RjcF9zb2NrYCBhbmQgdGhlIGxvYWRpbmcgb2YgYHJ0dF9taW4uc1swXS52YC4gVGhpcyBpbXBhY3RzIHRoZSBnZW5lcmF0ZWQgQlBGIGluc3RydWN0aW9ucywgZXNzZW50aWFsbHkgY2hhbmdpbmcgaG93IHRoZXNlIHByb2dyYW1zIGludGVyYWN0IHdpdGggVENQIHNvY2tldCBpbmZvcm1hdGlvbi4KCk5vdywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IEFic29sdXRlbHkuIFdlIGxvYWQgc29ja19vcHMgQlBGIHByb2dyYW1zIHVzaW5nIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgd2hpY2ggY2FsbHMgYGJwZl9jaGVjaygpYCBhbmQgdGhlbiBjYXNjYWRlcyBpbnRvIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKWAgYW5kIGV2ZW50dWFsbHkgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gTW9yZW92ZXIsIHdlIGNhbiBleGVjdXRlIHRoZSBwcm9ncmFtIHRocm91Z2ggc29ja19vcHMgaG9va3MsIGxpa2Ugd2l0aCBUQ1Agc29ja2V0cyB1bmRlciBjZ3JvdXBzLiBUaGF0IG1ha2VzIHRoaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhpcyBpbXBhY3RzIGNvcmUga2VybmVsIEJQRiBhbmQgbmV0d29ya2luZyBjb2RlIGlzIGVub3VnaCB0byB3YXJyYW50IHJpZ29yb3VzIHRlc3RpbmcuCgpNeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBhcmUgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgYW5kIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgd29ya2luZyBhcyBleHBlY3RlZC4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYsIGNncm91cHMsIGFuZCBuZXR3b3JraW5nLCBzbyBJJiMzOTtsbCBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYE5FVGAsIGFuZCBgSU5FVGAgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIGFnYWluc3QgdGhlIGBLY29uZmlnYCBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM1Mz1jb25maWcgQ0dST1VQX1BFUkZcbi0tXG5pbml0L0tjb25maWctMTM2My1cbmluaXQvS2NvbmZpZzoxMzY0OmNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM2NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgYSBCUEYtcmVsYXRlZCBzZXR0aW5nLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGZpbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGlzIGBjb25maWcgQlBGX1NZU0NBTExgIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtPyYjMzQ7IFRoaXMgcHJvYmFibHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IHJlbGF0ZSB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBvciBzZWN1cml0eSDigJMgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBhcmVhcy4gSSYjMzk7bGwgbGlrZWx5IHVzZSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb250ZXh0dWFsIGNsdWVzIGFyb3VuZCBpdCB0b28sIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBmZWF0dXJlcyBpdCBlbmFibGVzLiBJcyB0aGlzIHBhcnQgb2YgYSBsYXJnZXIgQlBGIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIG9yIGEgc3RhbmRhbG9uZT8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzgKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBORVRgIGFuZCBgSU5FVGAgd2l0aGluIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9LY29uZmlnYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBTdGFuZGFyZCBwcmFjdGljZSwgYnV0IGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4KCk5vdywgbGV0JiMzOTtzIGVuc3VyZSBhbGwgdGhlIHJlcXVpcmVkIGNvbmRpdGlvbnMgYXJlIG1ldC4gSSBzZWUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBgRW5hYmxlQ29uZmlnc2AgYXJlIGFsbCBwcmVzZW50IOKAkyBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGBORVRgLCBhbmQgYElORVRgIOKAkyB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBNeSBmb2N1cyBpcyBvbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBhbmQgYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AuIFRoZSBleHBsYW5hdGlvbiBmb3IgdGhlIHZlcmRpY3QgaXMgY29uY2lzZSwgd2hpY2ggSSBhcHByZWNpYXRlOyBJIGNhbiBtb3ZlIGZvcndhcmQgY29uZmlkZW50bHkuCgpUaW1lIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBDcnVjaWFsbHksIGl0IGNoYW5nZXMgaG93IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAgaXMgaGFuZGxlZCwgdHJhbnNpdGlvbmluZyBpdCB0byBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgVGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZ2VuZXJhdGVkIGJ5dGVjb2RlLCBlc3BlY2lhbGx5IHdoZW4gcmVhZGluZyBgcnR0X21pbmAgZnJvbSBgYnBmX3NvY2tfb3BzYC4gSXQgbm93IGluY2x1ZGVzIGxvY2tpbmcgY2hlY2tzIGFuZCBtb2RpZmllcyB0aGUgc3RydWN0IGZpZWxkIG9mZnNldC4gQW5kLCBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBUQ1Agc29ja19vcHMgZXZlbnRzLgoKVGhhdCBhbGwgbG9va3Mgc29saWQsIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyYjMzQ7LAogICAgJiMzNDticGZfY29udmVydF9jdHhfYWNjZXNzZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBlQlBGIHNvY2tfb3BzIGNvbnRleHQgYWNjZXNzZXMgdG8gcnR0X21pbiBhcmUgcmV3cml0dGVuIGludG8gbmF0aXZlIGluc3RydWN0aW9ucyBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uL3Jld3JpdGluZyAodXNpbmcgU09DS19PUFNfR0VUX0ZJRUxEKS4gVGhpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHBhdGggaW4gY29yZSBCUEYgbmV0d29ya2luZyBjYW4gYmUgZXhlcmNpc2VkIGJ5IGxvYWRpbmcgYW5kIGV4ZWN1dGluZyBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTIHByb2dyYW1zIHRoYXQgYWNjZXNzIHRoZSBydHRfbWluIGZpZWxkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgQlBGIGJ5dGVjb2RlIGNvbnZlcnNpb24gZm9yIHJlYWRpbmcgdGhlIGBydHRfbWluYCBmaWVsZCBvZiBgc3RydWN0IGJwZl9zb2NrX29wc2AgaW4gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gSXQgcmVwbGFjZXMgY3VzdG9tIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIHdpdGggdGhlIHN0YW5kYXJkaXplZCBoZWxwZXIgbWFjcm8gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKWAuXG5cblRoaXMgY2hhbmdlIGFkZHMgYSBzYWZldHkgY2hlY2sgb24gYGlzX2xvY2tlZF90Y3Bfc29ja2AgcHJpb3IgdG8gZGVyZWZlcmVuY2luZyB0aGUgc29ja2V0IGFzIGBzdHJ1Y3QgdGNwX3NvY2tgIGFuZCByZWFkcyB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgKGBydHRfbWluLnNbMF0udmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQwYmMwNWM3MjcyODY3N2E3OWZmNmU1Y2IyMWY0MWMxZGU2Y2ZiNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjQ0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTExMDUsMTggJiM0MzsxMTEwNSw3IEBAIHN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKToKLQkJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICE9Ci0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7Ci0JCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgJmx0OwotCQkJICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTsKLQotCQkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKAotCQkJCQkJc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksCi0JCQkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAotCQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTsKLQkJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLSZndDtkc3RfcmVnLCBzaS0mZ3Q7ZHN0X3JlZywKLQkJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7Ci0JCQkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7CiYjNDM7CQlTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbmV0L2NvcmUvZmlsdGVyLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdG91Y2hlZCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYC4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIG9uIHRoYXQgcGFydGljdWxhciBgb2Zmc2V0b2ZgIGNhc2U6IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAuCgpBaCwgSSBzZWUuIFRoZXkmIzM5O3ZlIHJlcGxhY2VkIHRoZSBtYW51YWwgQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gZm9yIGFjY2Vzc2luZyBgcnR0X21pbmAgd2l0aCBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO2AuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIGxpbmUgMTExMDUuIFRoYXQmIzM5O3Mgd2hlcmUgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgc2hvdWxkIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtYWNybyBkb2VzIGludGVybmFsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaXMgY3J1Y2lhbC4KCkZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBwcmVjaXNlbHkgd2hhdCBgcnR0X21pbmAgcmVwcmVzZW50cyB3aXRoaW4gYHN0cnVjdCB0Y3Bfc29ja2AuIEEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHRvIHRoZSBUQ1Agc3RhY2sgaW50ZXJuYWxzIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgaXRzIHN0cnVjdHVyZSBhbmQgdXNhZ2UsIHNvIEkgZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZpZWxkJiMzOTtzIGRhdGEgdHlwZSwgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvZiB0aGlzIHJlcGxhY2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEwODE2PXN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MjUtLyogSGVscGVyIG1hY3JvIGZvciBhZGRpbmcgcmVhZCBhY2Nlc3MgdG8gdGNwX3NvY2sgb3Igc29jayBmaWVsZHMuICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMDgyNjojZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVx0XHRcdCAgICAgIFxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNy1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGUgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBTT0NLX09QU19HRVRfRklFTERgLiBUaGUgY29udGV4dCBpcyBjcnVjaWFsLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBncmFiIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBtYWNybywgcGx1cyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzICp1c2VkKi4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZmV0Y2hlcyBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGEgc29ja2V0IG9wZXJhdGlvbiBvciBkYXRhIHN0cnVjdHVyZS4gSXMgaXQgdXNlZCB0byBncmFiIHByb3RvY29sLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBnZW5lcmFsIHNvY2tldCBzdGF0ZT8gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyBJJiMzOTtkIGRlYnVnIGl0IGlmIHNvbWV0aGluZyB3ZW50IHNpZGV3YXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MjA6XHRcdFx0XHRcdCAgICAgICB1MzIgKnRhcmdldF9zaXplKVxuMTA4MjE6XHR7XG4xMDgyMjpcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4xMDgyMzpcdFx0aW50IG9mZjtcbjEwODI0Olx0XG4xMDgyNTpcdC8qIEhlbHBlciBtYWNybyBmb3IgYWRkaW5nIHJlYWQgYWNjZXNzIHRvIHRjcF9zb2NrIG9yIHNvY2sgZmllbGRzLiAqL1xuMTA4MjY6XHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVx0XHRcdCAgICAgIFxcXG4xMDgyNzpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4Mjg6XHRcdFx0aW50IGZ1bGxzb2NrX3JlZyA9IHNpLVx1MDAzZWRzdF9yZWcsIHJlZyA9IEJQRl9SRUdfOSwgam1wID0gMjsgICAgIFxcXG4xMDgyOTpcdFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKE9CSiwgT0JKX0ZJRUxEKSBcdTAwM2VcdFx0ICAgICAgXFxcbjEwODMwOlx0XHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcbjEwODMxOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODMyOlx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODMzOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cdTAwM2VzcmNfcmVnID09IHJlZylcdFx0ICAgICAgXFxcbjEwODM0Olx0XHRcdFx0cmVnLS07XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODM1Olx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHNpLVx1MDAzZXNyY19yZWcpIHtcdFx0XHQgICAgICBcXFxuMTA4MzY6XHRcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfU1RYX01FTShCUEZfRFcsIHNpLVx1MDAzZXNyY19yZWcsIHJlZyxcdCAgICAgIFxcXG4xMDgzNzpcdFx0XHRcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgIFxcXG4xMDgzODpcdFx0XHRcdFx0XHQgIHRlbXApKTtcdFx0XHQgICAgICBcXFxuMTA4Mzk6XHRcdFx0XHRmdWxsc29ja19yZWcgPSByZWc7XHRcdFx0XHQgICAgICBcXFxuMTA4NDA6XHRcdFx0XHRqbXAgJiM0Mzs9IDI7XHRcdFx0XHRcdCAgICAgIFxcXG4xMDg0MTpcdFx0XHR9XHRcdFx0XHRcdFx0XHQgICAgICBcXFxuMTA4NDI6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihcdFx0XHQgICAgICBcXFxuMTA4NDM6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICBcXFxuMTA4NDQ6XHRcdFx0XHRcdFx0XHRpc19sb2NrZWRfdGNwX3NvY2spLFx0ICAgICAgXFxcbjEwODQ1Olx0XHRcdFx0XHQgICAgICBmdWxsc29ja19yZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NDY6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NDc6XHRcdFx0XHRcdFx0ICAgICAgIGlzX2xvY2tlZF90Y3Bfc29jaykpO1x0ICAgICAgXFxcbjEwODQ4Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcdCAgICAgIFxcXG4xMDg0OTpcdFx0XHRpZiAoc2ktXHUwMDNlZHN0X3JlZyA9PSBzaS1cdTAwM2VzcmNfcmVnKVx0XHRcdFx0ICAgICAgXFxcbjEwODUwOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NTE6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NTI6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg1MzpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFx0XHRcdCAgICAgIFxcXG4xMDg1NDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXG4xMDg1NTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcdFx0ICAgICAgXFxcbjEwODU2Olx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcbjEwODU3Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFx0XHQgICAgICBcXFxuMTA4NTg6XHRcdFx0XHRcdFx0XHQgICAgICAgT0JKX0ZJRUxEKSxcdCAgICAgIFxcXG4xMDg1OTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcdFx0ICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgZXhwcmVzc2VkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKQWxyaWdodCwgYmVmb3JlIHdlIGdldCB0b28gZGVlcCBpbnRvIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgbGluZXMgMTExMDAgdGhyb3VnaCAxMTEyMCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGZpbHRlcmluZyB3aXRoaW4gdGhlIGNvcmUgbmV0d29yayBmdW5jdGlvbnMgdGhlcmUuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHdoYXRldmVyJiMzOTtzIGhhcHBlbmluZyBpbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgaGFzIHNvbWUgYmVhcmluZyBvbiB0aGUgaXNzdWUgYXQgaGFuZC4gVGhvc2UgbGluZXMgbWlnaHQgaG9sZCBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWx0ZXIgaW1wbGVtZW50YXRpb24sIHBvc3NpYmx5IHJldmVhbGluZyB3aGVyZSB0aGUgY3VycmVudCBwcm9ibGVtIHN0ZW1zIGZyb20uIEEgcXVpY2sgc2tpbSBjb3VsZCBqb2cgbXkgbWVtb3J5IGFuZCBoZWxwIGF2b2lkIGEgd2lsZCBnb29zZSBjaGFzZSBsYXRlciBvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBsaW5lcyBjb250YWluIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIG9yIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwOTU6XHRcbjExMDk2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHN0YXRlKTpcbjExMDk3Olx0XHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpICE9IDEpO1xuMTEwOTg6XHRcbjExMDk5Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4xMTEwMDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxuMTExMDE6XHRcdFx0XHRcdCAgICAgIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4xMTEwMjpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuMTExMDM6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0IsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4xMTEwNDpcdFx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpKTtcbjExMTA1Olx0XHRcdGJyZWFrO1xuMTExMDY6XHRcbjExMTA3Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuMTExMDg6XHRcdFx0U09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMDk6XHRcdFx0YnJlYWs7XG4xMTExMDpcdFxuMTExMTE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzKTpcbjExMTEyOlx0XHRcdFNPQ0tfT1BTX0dFVF9GSUVMRChicGZfc29ja19vcHNfY2JfZmxhZ3MsIGJwZl9zb2NrX29wc19jYl9mbGFncyxcbjExMTEzOlx0XHRcdFx0XHQgICBzdHJ1Y3QgdGNwX3NvY2spO1xuMTExMTQ6XHRcdFx0YnJlYWs7XG4xMTExNTpcdFxuMTExMTY6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc2tfdHhoYXNoKTpcbjExMTE3Olx0XHRcdFNPQ0tfT1BTX0dFVF9PUl9TRVRfRklFTEQoc2tfdHhoYXNoLCBza190eGhhc2gsXG4xMTExODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBzb2NrLCB0eXBlKTtcbjExMTE5Olx0XHRcdGJyZWFrO1xuMTExMjA6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX2N3bmQpOlxuMTExMjE6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9jd25kKTtcbjExMTIyOlx0XHRcdGJyZWFrO1xuMTExMjM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc3J0dF91cyk6XG4xMTEyNDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc3J0dF91cyk7XG4xMTEyNTpcdFx0XHRicmVhaztcbjExMTI2Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9zc3RocmVzaCk6XG4xMTEyNzpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc25kX3NzdGhyZXNoKTtcbjExMTI4Olx0XHRcdGJyZWFrO1xuMTExMjk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmN2X254dCk6XG4xMTEzMDpcdFx0XHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQocmN2X254dCk7XG4xMTEzMTpcdFx0XHRicmVhaztcbjExMTMyOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9ueHQpOlxuMTExMzM6XHRcdFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9ueHQpO1xuMTExMzQ6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgZm9yIFRDUCBTb2NrZXQgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSB0byBhY2Nlc3MgdGhlIGBydHRfbWluYCBmaWVsZCB3aXRoaW4gYSBUQ1Agc29ja2V0LiBGaXJzdCwgSSBzZWUgdGhlIGV4cHJlc3Npb24gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtgLiBUaGlzIG1hY3JvIGlzIHRoZSBrZXkuIFByZXZpb3VzbHksIHdoZW4gYWNjZXNzaW5nIHRoaXMgc2FtZSBmaWVsZCwgd2UgaGFkIHRoaXMgY29kZSBzbmlwcGV0IHV0aWxpemluZyBgb2Zmc2V0b2ZgOgoKYGBgYwoJCUJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHRjcF9zb2NrLCBydHRfbWluKSAhPQoJCQkgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7CgkJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbWlubWF4KSAmbHQ7CgkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtaW5tYXhfc2FtcGxlKSk7CgoJCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoCgkJCQkJCXN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLAoJCQkJICAgICAgc2ktJmd0O2RzdF9yZWcsIHNpLSZndDtzcmNfcmVnLAoJCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpOwoJCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS0mZ3Q7ZHN0X3JlZywgc2ktJmd0O2RzdF9yZWcsCgkJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICYjNDM7CgkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IG1pbm1heF9zYW1wbGUsIHQpKTsKYGBgCgpUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIEkmIzM5O20gc3BvdHRpbmcgaXMgdGhhdCB0aGUgb2xkZXIgaW1wbGVtZW50YXRpb24gZGlkbiYjMzk7dCBpbmNsdWRlIGEgY3JpdGljYWwgY2hlY2s6IGBpc19sb2NrZWRfdGNwX3NvY2tgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBza2AgYXMgYHN0cnVjdCB0Y3Bfc29ja2AuIFRoZSB1cGRhdGVkIG1hY3JvLCBgU09DS19PUFNfR0VUX0ZJRUxEYCwgc2VlbXMgdG8gaGF2ZSBpbnRlZ3JhdGVkIHRoaXMgc2FmZXR5IGNoZWNrLiBJZiB0aGUgc29ja2V0IGlzbiYjMzk7dCBsb2NrZWQgKGltcGx5aW5nIHRoZSBUQ1Agc29ja2V0IGlzIG5vdCBzYWZlIHRvIHJlYWQpLCB0aGUgbWFjcm8gd2lsbCBlaXRoZXIganVtcCBvdmVyIHRoZSByZWFkLCByZXR1cm5pbmcgMCAob3Igd2hhdGV2ZXIgb3RoZXIgbWVjaGFuaXNtIGlzIGVtcGxveWVkIHRvIGhhbmRsZSBhbiBpbnZhbGlkIHNvY2tldCBzdGF0ZSkuIEZ1cnRoZXJtb3JlLCBpdCBsb29rcyBsaWtlIGBTT0NLX09QU19HRVRfRklFTERgIG5vdyBjb3JyZWN0bHkgdXNlcyBgcnR0X21pbi5zWzBdLnZgIHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIGZpZWxkIG9mIGBtaW5tYXhfc2FtcGxlYC4gVGhhdCBtZWFucyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHVzZXMgYG9mZnNldG9mKHJ0dF9taW4pICYjNDM7IHNpemVvZih0KWAuCgpUbyBlbnN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbWlubWF4YCB0byBjb25maXJtIHRoYXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZpZWxkIGFjY2Vzc2VzIGlzIGNvcnJlY3Qgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbWlubWF4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMTEtLyogQSBzaW5nbGUgZGF0YSBwb2ludCBmb3Igb3VyIHBhcmFtZXRlcml6ZWQgbWluLW1heCB0cmFja2VyICovXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoxMjpzdHJ1Y3QgbWlubWF4X3NhbXBsZSB7XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0xMy1cdHUzMlx0dDtcdC8qIHRpbWUgbWVhc3VyZW1lbnQgd2FzIHRha2VuICovXG4tLVxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMTctLyogU3RhdGUgZm9yIHRoZSBwYXJhbWV0ZXJpemVkIG1pbi1tYXggdHJhY2tlciAqL1xuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MTg6c3RydWN0IG1pbm1heCB7XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoxOTpcdHN0cnVjdCBtaW5tYXhfc2FtcGxlIHNbM107XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMC19O1xuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMjEtXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyMjpzdGF0aWMgaW5saW5lIHUzMiBtaW5tYXhfZ2V0KGNvbnN0IHN0cnVjdCBtaW5tYXggKm0pXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMy17XG4tLVxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMjYtXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyNzpzdGF0aWMgaW5saW5lIHUzMiBtaW5tYXhfcmVzZXQoc3RydWN0IG1pbm1heCAqbSwgdTMyIHQsIHUzMiBtZWFzKVxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMjgte1xuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6Mjk6XHRzdHJ1Y3QgbWlubWF4X3NhbXBsZSB2YWwgPSB7IC50ID0gdCwgLnYgPSBtZWFzIH07XG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0zMC1cbi0tXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0zNC1cbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjM1OnUzMiBtaW5tYXhfcnVubmluZ19tYXgoc3RydWN0IG1pbm1heCAqbSwgdTMyIHdpbiwgdTMyIHQsIHUzMiBtZWFzKTtcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjM2OnUzMiBtaW5tYXhfcnVubmluZ19taW4oc3RydWN0IG1pbm1heCAqbSwgdTMyIHdpbiwgdTMyIHQsIHUzMiBtZWFzKTtcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTM3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpc3NlY3RpbmcgdGhlIE1lbW9yeSBMYXlvdXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBtaW5tYXhgIGFuZCBpdCBjb250YWlucyBhbiBhcnJheSBvZiBgc3RydWN0IG1pbm1heF9zYW1wbGVgLCBzcGVjaWZpY2FsbHkgYHNbM11gLiBFYWNoIGBtaW5tYXhfc2FtcGxlYCBoYXMgdHdvIGB1MzJgIG1lbWJlcnMsIGB0YCBhbmQgYHZgLiAgVGhhdCBtZWFucywgaWYgSSB3YW50IHRvIGFjY2VzcyBgcnR0X21pbi5zWzBdLnZgLCB0aGUgYHZgIG1lbWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGF0IGBzYCBhcnJheSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIG1lbW9yeSBhZGRyZXNzLgoKYHJ0dF9taW5gIGlzIHRoZSBiYXNlLCBhbmQgdGhlbiBgb2Zmc2V0b2Yoc3RydWN0IG1pbm1heF9zYW1wbGUsIHQpYCB3aWxsIHByb3ZpZGUgdGhlIG9mZnNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSAqZmlyc3QqIGBtaW5tYXhfc2FtcGxlYC4gVGhlbiwgc2luY2UgYHZgIGZvbGxvd3MgYHRgIHdpdGhpbiB0aGUgc3RydWN0dXJlLCB0aGUgb2Zmc2V0IGZvciBgcnR0X21pbi5zWzBdLnZgIHdpbGwgYmUgdGhlIGJhc2UgYWRkcmVzcyBwbHVzIGBzaXplb2YodTMyKWAgKHRoZSBzaXplIG9mIGB0YCkuIEJhc2ljYWxseSwgSSYjMzk7bSBjYWxjdWxhdGluZyB0aGUgbWVtb3J5IG9mZnNldC4KCk5vdywgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byB0aGlzIGBTT0NLX09QU19HRVRfRklFTERgIG1hY3JvIGJlY2F1c2UgSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgdGhpcyBpcyBnZW5lcmF0aW5nLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgYWNjZXNzZXMgYXJlIGFjdHVhbGx5IGJlaW5nIHBlcmZvcm1lZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBtYWNybyBpcyBiZWluZyBleHBhbmRlZCB0byBhY2Nlc3MgdGhlc2UgdmFsdWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzc2VtYmx5IG9yIG1hY2hpbmUgY29kZSBpcyB1bHRpbWF0ZWx5IGJlaW5nIGdlbmVyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODUwOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NTE6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NTI6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg1MzpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFx0XHRcdCAgICAgIFxcXG4xMDg1NDpcdFx0XHRcdFx0XHRcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXG4xMDg1NTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcdFx0ICAgICAgXFxcbjEwODU2Olx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcbjEwODU3Olx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFx0XHQgICAgICBcXFxuMTA4NTg6XHRcdFx0XHRcdFx0XHQgICAgICAgT0JKX0ZJRUxEKSxcdCAgICAgIFxcXG4xMDg1OTpcdFx0XHRcdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlZHN0X3JlZyxcdFx0ICAgICAgXFxcbjEwODYwOlx0XHRcdFx0XHQgICAgICBvZmZzZXRvZihPQkosIE9CSl9GSUVMRCkpO1x0ICAgICAgXFxcbjEwODYxOlx0XHRcdGlmIChzaS1cdTAwM2Vkc3RfcmVnID09IHNpLVx1MDAzZXNyY19yZWcpXHR7XHRcdFx0ICAgICAgXFxcbjEwODYyOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9BKDIpO1x0XHRcdFx0ICAgICAgXFxcbjEwODYzOlx0XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVx1MDAzZXNyY19yZWcsXHQgICAgICBcXFxuMTA4NjQ6XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgICBcXFxuMTA4NjU6XHRcdFx0XHRcdCAgICAgIHRlbXApKTtcdFx0XHRcdCAgICAgIFxcXG4xMDg2NjpcdFx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0oc2ktXHUwMDNlZHN0X3JlZywgMCk7XHQgICAgICBcXFxuMTA4Njc6XHRcdFx0fVx0XHRcdFx0XHRcdFx0ICAgICAgXFxcbjEwODY4Olx0XHR9IHdoaWxlICgwKVxuMTA4Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4OQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiA0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciBgU09DS19PUFNfR0VUX0ZJRUxEYCBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyBvciBjYXVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgY2hhbmdlIGlzIHRvIHByZXZlbnQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb24gc29ja2V0cyB0aGF0IGFyZW4mIzM5O3QgZnVsbHkgbG9ja2VkIFRDUCBzb2NrZXRzLCBzbyBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgaXNzdWVzLgoKRmlyc3QsIGRvZXMgdGhpcyBuZXcgY29kZSAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8sIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBjb250ZXh0IHdpdGggaW5zdHJ1Y3Rpb24gcmV3cml0aW5nLiBTZWNvbmQsIGRvZXMgaXQgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGZpZWxkIGluIHF1ZXN0aW9uLCBgcnR0X21pbi5zWzBdLnZgLCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgb24gdGhlIGB0Y3Bfc29ja2AuIFRoaXMgaXMgY29uZmlybWVkIGJlY2F1c2UgdGhlIG9sZCBjb2RlIHdhcyBhbHJlYWR5IGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24sIHRoZSBleGFjdCBzYW1lIG9mZnNldCB3aXRoaW4gYHRjcF9zb2NrYCwgd2l0aG91dCB0aGUgY2hlY2suIEFuZCwgdGhpcmQsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcz8gTm8sIGl0JiMzOTtzIGEgY29kZSBzdWJzdGl0dXRpb24sIGEgbWFjcm8gcmVwbGFjZW1lbnQsIG5vdCBuZXcgYWxsb2NhdGlvbnMuCgpTbywgaW4gc2hvcnQsIHRoZXJlIGlzIG5vIGV2aWRlbmNlIG9mIGEgS01TQU4tZGV0ZWN0YWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcgaGVyZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBCUEYgSklUIG9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgQlBGIHZlcmlmaWVyIHRlc3RpbmcuIEtBU0FOIGlzIGFscmVhZHkgZG9pbmcgaXRzIGpvYiwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTi4KCk15IHJlYXNvbmluZyBhbGlnbnMgd2l0aCB0aGUgS01TQU4gZ3VpZGVsaW5lczogdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBydW4gS01TQU4gaWYgc3RhbmRhcmQgZGVidWdnZXJzIGxpa2UgS0FTQU4gY2FuIGNhdGNoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBldmFsdWF0aW9uLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIEJQRiBieXRlY29kZSBjb252ZXJzaW9uIGZvciByZWFkaW5nIHRoZSBgcnR0X21pbmAgZmllbGQgb2YgYHN0cnVjdCBicGZfc29ja19vcHNgIGluIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoKWAuIEl0IHJlcGxhY2VzIGN1c3RvbSBCUEYgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiB3aXRoIHRoZSBzdGFuZGFyZGl6ZWQgaGVscGVyIG1hY3JvIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLlxuXG5UaGlzIGNoYW5nZSBhZGRzIGEgc2FmZXR5IGNoZWNrIG9uIGBpc19sb2NrZWRfdGNwX3NvY2tgIHByaW9yIHRvIGRlcmVmZXJlbmNpbmcgdGhlIHNvY2tldCBhcyBgc3RydWN0IHRjcF9zb2NrYCBhbmQgcmVhZHMgdGhlIGV4YWN0IHNhbWUgb2Zmc2V0IChgcnR0X21pbi5zWzBdLnZgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBCUEYgYnl0ZWNvZGUgY29udmVyc2lvbiBmb3IgcmVhZGluZyB0aGUgYHJ0dF9taW5gIGZpZWxkIG9mIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBpbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCByZXBsYWNlcyBjdXN0b20gQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gd2l0aCB0aGUgc3RhbmRhcmRpemVkIGhlbHBlciBtYWNybyBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC5cblxuVGhpcyBjaGFuZ2UgYWRkcyBhIHNhZmV0eSBjaGVjayBvbiBgaXNfbG9ja2VkX3RjcF9zb2NrYCBwcmlvciB0byBkZXJlZmVyZW5jaW5nIHRoZSBzb2NrZXQgYXMgYHN0cnVjdCB0Y3Bfc29ja2AgYW5kIHJlYWRzIHRoZSBleGFjdCBzYW1lIG9mZnNldCAoYHJ0dF9taW4uc1swXS52YCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcywgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDoyMS4yMjg1ODA4MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2NjEyMDcwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBCUEYgYnl0ZWNvZGUgY29udmVyc2lvbiBmb3IgcmVhZGluZyB0aGUgYHJ0dF9taW5gIGZpZWxkIG9mIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBpbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCByZXBsYWNlcyBjdXN0b20gQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gd2l0aCB0aGUgc3RhbmRhcmRpemVkIGhlbHBlciBtYWNybyBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRzIGEgc2FmZXR5IGNoZWNrIG9uIGBpc19sb2NrZWRfdGNwX3NvY2tgIHByaW9yIHRvIGRlcmVmZXJlbmNpbmcgdGhlIHNvY2tldCBhcyBgc3RydWN0IHRjcF9zb2NrYCBhbmQgcmVhZHMgdGhlIGV4YWN0IHNhbWUgb2Zmc2V0IChgcnR0X21pbi5zWzBdLnZgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjIxLjIyODU5MDE1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMDc1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDBiYzA1YzcyNzI4Njc3YTc5ZmY2ZTVjYjIxZjQxYzFkZTZjZmI3NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjQ0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtMTExMDUsMTggKzExMTA1LDcgQEAgc3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxcbi1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cXG4tXFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heCkpO1xcbi1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBtaW5tYXgpIFxcdTAwM2NcXG4tXFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcXG4tXFxuLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbi1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxuLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcbi1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICtcXG4tXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7XFxuK1xcdFxcdFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGJwZl9zb2NrX29wc19jYl9mbGFncyk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjIxLjg0MjUzODQ3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODAwMDA0OTg3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGVCUEYgc29ja19vcHMgY29udGV4dCBhY2Nlc3NlcyB0byBydHRfbWluIGFyZSByZXdyaXR0ZW4gaW50byBuYXRpdmUgaW5zdHJ1Y3Rpb25zIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24vcmV3cml0aW5nICh1c2luZyBTT0NLX09QU19HRVRfRklFTEQpLiBUaGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgcGF0aCBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGNhbiBiZSBleGVyY2lzZWQgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgdGhlIHJ0dF9taW4gZmllbGQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDBiYzA1YzcyNzI4Njc3YTc5ZmY2ZTVjYjIxZjQxYzFkZTZjZmI3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6NDQ6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTExMDUsMTggKzExMTA1LDcgQEAgc3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cbi1cdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7XG4tXHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgXHUwMDNjXG4tXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcbi1cbi1cdFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4tXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG4tXHRcdFx0XHQgICAgICBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLVx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuLVx0XHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4tXHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICtcbi1cdFx0XHRcdCAgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdCkpO1xuK1x0XHRTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjEuODQyNTQxNDgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg3NjEyMDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBxdWlja2VzdCB0byBnZXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzcGVjaWZpZXMgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIE5vdyB0aGF0IEkga25vdyB0aGUgdGFyZ2V0LCBJJ2xsIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIHByb2JhYmx5IGFyb3VuZCBsaW5lIDExMTA1IGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIsIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBhbmQgZW5zdXJlIHRoaXMgY2hhbmdlIGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgbmV0d29yayBmaWx0ZXIuIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIHJvdXRpbmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjcuNzE4NjY1MjM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTA5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc19mdWxsc29jayksXFxuMTEwOTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbjExMDkyOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybixcXG4xMTA5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaXNfZnVsbHNvY2spKTtcXG4xMTA5NDpcXHRcXHRcXHRicmVhaztcXG4xMTA5NTpcXHRcXG4xMTA5NjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHN0YXRlKTpcXG4xMTA5NzpcXHRcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbiwgc2tjX3N0YXRlKSAhPSAxKTtcXG4xMTA5ODpcXHRcXG4xMTA5OTpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihcXG4xMTEwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSxcXG4xMTEwMTpcXHRcXHRcXHRcXHRcXHQgICAgICBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxuMTExMDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xcbjExMTAzOlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfQiwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcbjExMTA0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBzb2NrX2NvbW1vbiwgc2tjX3N0YXRlKSk7XFxuMTExMDU6XFx0XFx0XFx0YnJlYWs7XFxuMTExMDY6XFx0XFxuMTExMDc6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKTpcXG4xMTEwODpcXHRcXHRcXHRTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7XFxuMTExMDk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMTA6XFx0XFxuMTExMTE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOlxcbjExMTEyOlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9GSUVMRChicGZfc29ja19vcHNfY2JfZmxhZ3MsIGJwZl9zb2NrX29wc19jYl9mbGFncyxcXG4xMTExMzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNwX3NvY2spO1xcbjExMTE0OlxcdFxcdFxcdGJyZWFrO1xcbjExMTE1OlxcdFxcbjExMTE2OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc2tfdHhoYXNoKTpcXG4xMTExNzpcXHRcXHRcXHRTT0NLX09QU19HRVRfT1JfU0VUX0ZJRUxEKHNrX3R4aGFzaCwgc2tfdHhoYXNoLFxcbjExMTE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2ssIHR5cGUpO1xcbjExMTE5OlxcdFxcdFxcdGJyZWFrO1xcbjExMTIwOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX2N3bmQpOlxcbjExMTIxOlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzbmRfY3duZCk7XFxuMTExMjI6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjM6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzcnR0X3VzKTpcXG4xMTEyNDpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc3J0dF91cyk7XFxuMTExMjU6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjY6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfc3N0aHJlc2gpOlxcbjExMTI3OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzbmRfc3N0aHJlc2gpO1xcbjExMTI4OlxcdFxcdFxcdGJyZWFrO1xcbjExMTI5OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmN2X254dCk6XFxuMTExMzA6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHJjdl9ueHQpO1xcbjExMTMxOlxcdFxcdFxcdGJyZWFrO1xcbjExMTMyOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX254dCk6XFxuMTExMzM6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9ueHQpO1xcbjExMTM0OlxcdFxcdFxcdGJyZWFrO1xcbjExMTM1OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc25kX3VuYSk6XFxuMTExMzY6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF91bmEpO1xcbjExMTM3OlxcdFxcdFxcdGJyZWFrO1xcbjExMTM4OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgbXNzX2NhY2hlKTpcXG4xMTEzOTpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQobXNzX2NhY2hlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjcuNzE5MzY0MDk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NjQzMjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoYXQgTWFjcm8qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgU09DS19PUFNfR0VUX0ZJRUxEYCBtYWNyby4gRmlyc3QsIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGl0cyBleGFjdCBkZWZpbml0aW9uLiBXaGVyZSBpcyBpdCBkZWZpbmVkLCB0eXBpY2FsbHkgaW4gYSBoZWFkZXIgZmlsZSByZWxhdGVkIHRvIHNvY2tldCBvcGVyYXRpb25zPyBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgdG8gcGllY2UgdG9nZXRoZXIgd2hhdCBpdCdzIGFjdHVhbGx5IGRvaW5nIOKAkyB3aGF0IGZpZWxkIG9mIGEgc29ja2V0IHN0cnVjdHVyZSBpcyBpdCByZXRyaWV2aW5nLCBhbmQgaG93PyBUaGlzIHdpbGwgYmUgYSBxdWljayBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIHVzYWdlIGFuZCBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MjkuNzA1ODAwMDEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDU3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEwODE2PXN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNS0vKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMDgyNjojZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVxcdFxcdFxcdCAgICAgIFxcXFxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgyNy1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDoyOS43NjMyNjYzNThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzExNDMzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhhdCBtYWNybyBkZWZpbml0aW9uLiBXZSdyZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpcyB3aGVyZSB0aGUgbWFnaWMgYmVoaW5kIHBhY2tldCBmaWx0ZXJpbmcgaXMgbGlrZWx5IGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgaG93IHRoaXMgc3lzdGVtIHdvcmtzLCBzbyBleGFtaW5pbmcgdGhlIG1hY3JvIGlzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGNob3NlbiB0byBpbXBsZW1lbnQgdGhpcywgd2hhdCBvcHRpbWl6YXRpb25zIHRoZXkgbWF5IGhhdmUgdXNlZCwgYW5kIGhvdyB0aGV5IGFic3RyYWN0IGF3YXkgdGhlIGNvbXBsZXhpdGllcy4gSXQncyB0aW1lIHRvIGJlY29tZSBpbnRpbWF0ZSB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MzEuNDc0NzAzMTM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyICp0YXJnZXRfc2l6ZSlcXG4xMDgyMTpcXHR7XFxuMTA4MjI6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuMTA4MjM6XFx0XFx0aW50IG9mZjtcXG4xMDgyNDpcXHRcXG4xMDgyNTpcXHQvKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cXG4xMDgyNjpcXHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgyNzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODI4OlxcdFxcdFxcdGludCBmdWxsc29ja19yZWcgPSBzaS1cXHUwMDNlZHN0X3JlZywgcmVnID0gQlBGX1JFR185LCBqbXAgPSAyOyAgICAgXFxcXFxcbjEwODI5OlxcdFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoT0JKLCBPQkpfRklFTEQpIFxcdTAwM2VcXHRcXHQgICAgICBcXFxcXFxuMTA4MzA6XFx0XFx0XFx0XFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcXFxcbjEwODMxOlxcdFxcdFxcdGlmIChzaS1cXHUwMDNlZHN0X3JlZyA9PSByZWcgfHwgc2ktXFx1MDAzZXNyY19yZWcgPT0gcmVnKVxcdFxcdCAgICAgIFxcXFxcXG4xMDgzMjpcXHRcXHRcXHRcXHRyZWctLTtcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzM6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cXHUwMDNlc3JjX3JlZyA9PSByZWcpXFx0XFx0ICAgICAgXFxcXFxcbjEwODM0OlxcdFxcdFxcdFxcdHJlZy0tO1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgzNTpcXHRcXHRcXHRpZiAoc2ktXFx1MDAzZWRzdF9yZWcgPT0gc2ktXFx1MDAzZXNyY19yZWcpIHtcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzY6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9TVFhfTUVNKEJQRl9EVywgc2ktXFx1MDAzZXNyY19yZWcsIHJlZyxcXHQgICAgICBcXFxcXFxuMTA4Mzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICBcXFxcXFxuMTA4Mzg6XFx0XFx0XFx0XFx0XFx0XFx0ICB0ZW1wKSk7XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODM5OlxcdFxcdFxcdFxcdGZ1bGxzb2NrX3JlZyA9IHJlZztcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDA6XFx0XFx0XFx0XFx0am1wICs9IDI7XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQxOlxcdFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDI6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgIFxcXFxcXG4xMDg0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc19sb2NrZWRfdGNwX3NvY2spLFxcdCAgICAgIFxcXFxcXG4xMDg0NTpcXHRcXHRcXHRcXHRcXHQgICAgICBmdWxsc29ja19yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg0NjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODQ3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpc19sb2NrZWRfdGNwX3NvY2spKTtcXHQgICAgICBcXFxcXFxuMTA4NDg6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcXHQgICAgICBcXFxcXFxuMTA4NDk6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHNpLVxcdTAwM2VzcmNfcmVnKVxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1MDpcXHRcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg1MTpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODUyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHRlbXApKTtcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NTM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXFxcXG4xMDg1NTpcXHRcXHRcXHRcXHRcXHQgICAgICBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFx0XFx0ICAgICAgXFxcXFxcbjEwODU2OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTtcXFxcXFxuMTA4NTc6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgT0JKX0ZJRUxEKSxcXHQgICAgICBcXFxcXFxuMTA4NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcdFxcdCAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MzEuNDc1MjU0NDg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU5MTk5ODAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIFRyYW5zZm9ybWF0aW9uIGluIEJQRiBgc29ja19vcHNgIFByb2dyYW1zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjcnVjaWFsIHRyYW5zZm9ybWF0aW9uIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBjb250ZXh0IGFjY2Vzc2VzIGluIGBzb2NrX29wc2AgcHJvZ3JhbXMuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHNhZmUgYW5kIGNvcnJlY3QgdHJhbnNsYXRpb24gZnJvbSB0aGUgcmF3IGFjY2VzcyBwYXR0ZXJucyB0byBhIHByb3BlciBieXRlY29kZSByZXByZXNlbnRhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGFjY2Vzc2VzIGxpa2UgYGJwZl9zb2NrX29wcy1cdTAwM2VydHRfbWluYC4gUHJldmlvdXNseSwgdGhlIGNvZGUganVzdCBkaXJlY3RseSBsb2FkZWQgZnJvbSBhbiBvZmZzZXQgcmVsYXRlZCB0byBgdGNwX3NvY2tgLCB3aXRob3V0IGFueSBjaGVja3MuIFRoaXMgd291bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGUgb2xkIHN0eWxlLCByYXcgYExEWF9NRU1gIGluc3RydWN0aW9ucy5cblxuYGBgY1xuKmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG5cdFx0ICAgICAgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcblx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XG4qaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG5cdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHRjcF9zb2NrLCBydHRfbWluKSArXG5cdFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBtaW5tYXhfc2FtcGxlLCB0KSk7XG5gYGBcblxuVGhlIGlzc3VlIGhlcmUgaXMgdGhlIGxhY2sgb2YgYSBjcml0aWNhbCBzYWZldHkgY2hlY2sgZm9yIGBpc19sb2NrZWRfdGNwX3NvY2tgIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGB0Y3Bfc29ja2AgZmllbGRzLiBUaGUgbmV3IHBhdGNoIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgdGhpczogaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBTT0NLX09QU19HRVRfRklFTERgIHdoaWNoIHdpbGwgZWl0aGVyIGJlIGEganVtcCBvdmVyIHRoZSBsb2FkIGluc3RydWN0aW9uIGlmIGBpc19sb2NrZWRfdGNwX3NvY2tgIGlzIGZhbHNlLCBvciBwcm9jZWVkIGlmIHRydWUuIEFkZGl0aW9uYWxseSB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgc2xpZ2h0bHkgZGlmZmVyZW50OiBgcnR0X21pbi5zWzBdLnZgLlxuXG5UaGlzIHRyYW5zbGF0aW9uIGlzIGNydWNpYWwsIGl0J3Mgd2hhdCB0cmFuc2Zvcm1zIHRoZSBpbnRlbmRlZCBhY2Nlc3MgdG8gdGhlIGdlbmVyYXRlZCBieXRlY29kZS4gVGhpcyBpcyBhbGwgZm9yIGBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTYCBwcm9ncmFtcy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gSXQgYWJzb2x1dGVseSBpcyEgQlBGIGBzb2NrX29wc2AgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCwgYXR0YWNoZWQgdG8gdmFyaW91cyBwb2ludHMgaW4gdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhcmUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBzb2NrZXQgb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5IHRocm91Z2ggYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBhbmQgYGJwZihCUEZfUFJPR19BVFRBQ0gsIC4uLilgIGNhbGxzLiBDcnVjaWFsbHksIEkgc2VlIHRoYXQgZHVyaW5nIHRoZSBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gcGhhc2UgKGBicGZfY2hlY2tgKSwgYGNvbnZlcnRfY3R4X2FjY2Vzc2VzYCBjYWxscyBvdXIgdGFyZ2V0LCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYC4gU28sIGl0J3MgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzdWJzeXN0ZW0uIFRoaXMgbWFrZXMgaXQgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUgdG8gc2VjdXJlLlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIGJlIGFjdGl2ZS4gSXQgcmVsaWVzIG9uIHRoZSBCUEYsIEJQRl9TWVNDQUxMLCBhbmQgTkVUIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gSSdsbCBkbyBhIHF1aWNrIHNlYXJjaCB0byB0cmFjZSBleGFjdGx5IHdoZXJlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDozOC4wNjcyNTgxNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTUzNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEwNzI3PXN0YXRpYyB1MzIgc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA4MTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTA4MTY6c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDgxNy1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNTg2PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNvY2tfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTg4LVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNvY2tfb3BzX2lzX3ZhbGlkX2FjY2VzcyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4OTpcXHQuY29udmVydF9jdHhfYWNjZXNzXFx0PSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6MzguMTU5NDI1ODg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODcwNDM4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBzb2NrX29wc192ZXJpZmllcl9vcHNgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHNvY2tfb3BzX3ZlcmlmaWVyX29wc2AuIFRoaXMgaXNuJ3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgc2NhbjsgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIHN0cnVjdHVyZSBpcyBhY3R1YWxseSAqdXNlZCouIEknbSB0YWxraW5nIGFib3V0IG1vcmUgdGhhbiBqdXN0IGRlZmluaXRpb25zOyBJIHdhbnQgdG8ga25vdyB3aGVyZSBpdCdzICpndWFyZGVkKiwgd2hhdCBjb25kaXRpb25zIGRpY3RhdGUgaXRzIGludm9jYXRpb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIGluIHdoaWNoIGl0J3MgYWN0aXZlLiBJJ20gYWZ0ZXIgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCBkb3duIHRvIHRoZSBncmFudWxhciBsZXZlbCBvZiB0aGUgcmVsZXZhbnQgbG9ja2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCBpdHMgb3BlcmF0aW9uYWwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjQwLjM0NjQ3NDMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMzNzk2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfb3BzX3ZlcmlmaWVyX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMTU4Mz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGNnX3NvY2tfYWRkcl9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTg1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTg2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNvY2tfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4Ny1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNvY2tfb3BzX2Z1bmNfcHJvdG8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjQzLjA4MDI4MTE0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc4OTU3ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgUmVnaXN0cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgaXQncyBkZWZpbmVkIGFuZCBsaWtlbHkgY29uZmlndXJlZCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWFzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCBiZWNhdXNlIHRoYXQncyB0aGUgdXN1YWwgcGxhY2UgZm9yIEJQRi1yZWxhdGVkIGZpbHRlcmluZyBhbmQgcHJvZ3JhbSBhdHRhY2htZW50IGxvZ2ljLiBTaW11bHRhbmVvdXNseSwgSSBzaG91bGQgcHJvYmFibHkgZ2xhbmNlIGF0IGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYCB0byBzZWUgaG93IHRoZSBlbnVtIGl0c2VsZiBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIEJQRiBwcm9ncmFtIHR5cGVzIGFyZSBkZWNsYXJlZCBuZWFyYnkuIFRoaXMgd2lsbCBoZWxwIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIHRoZSBrZXJuZWwgcmVjb2duaXplcyBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbGl6ZXMgb3IgdXNlcyB0aGlzIHNwZWNpZmljIHByb2dyYW0gdHlwZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ0OjQ2LjU1OTI0MjQyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NzYzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI3PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyOTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIHNvY2tfb3BzLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MzA6XFx0ICAgICAgc3RydWN0IGJwZl9zb2NrX29wcywgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMzEtQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo0Ni42MTg5MzM2NTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyNDc5ODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQlBGX1BST0dfVFlQRV9TT0NLX09QUyBhbmQgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgIGlzIGJlaW5nIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBicGZfdHlwZXMuaGAgaGVhZGVyIGZpbGUuIEl0J3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyB0aG9zZSBgI2lmZGVmYCBkaXJlY3RpdmVzIOKAkyBzdXJyb3VuZGluZyB0aGlzIHByb2dyYW0gdHlwZSBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHNjZW5hcmlvcyB0cmlnZ2VyIGl0cyBpbmNsdXNpb24sIGV4Y2x1c2lvbiwgb3IgYW55IG1vZGlmaWNhdGlvbnMgYmFzZWQgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIHRoZSBwcmVzZW5jZSBvZiBzcGVjaWZpYyBmZWF0dXJlcy4gSSdtIGxvb2tpbmcgZm9yIGFueSB2YXJpYXRpb25zLCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIG9yIGFueSBpbmRpY2F0aW9ucyBvZiBob3cgdGhpcyB0eXBlIGlzIGV2b2x2aW5nLiBJIGFsc28gd2FudCB0byBxdWlja2x5IGdldCBhbiBpZGVhIG9mIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzY2hlbWUgb2Ygc3VwcG9ydGVkIHByb2dyYW0gdHlwZXMuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGdhdWdlIGl0cyBwb3J0YWJpbGl0eSBhbmQgd2hldGhlciBJIG5lZWQgdG8gY29uc2lkZXIgYW55IGZlYXR1cmUgZmxhZyBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo0OS4yNDM3MzU2OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0LyogaW50ZXJuYWwgZmlsZSAtIGRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5ICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpZmRlZiBDT05GSUdfTkVUXFxuICAgNTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgc2tfZmlsdGVyLFxcbiAgIDY6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAgNzpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCB0Y19jbHNfYWN0LFxcbiAgIDg6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAgOTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxcbiAgMTA6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAxMTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfWERQLCB4ZHAsXFxuICAxMjpcXHRcXHQgICAgICBzdHJ1Y3QgeGRwX21kLCBzdHJ1Y3QgeGRwX2J1ZmYpXFxuICAxMzpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUF9CUEZcXG4gIDE0OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBjZ19za2IsXFxuICAxNTpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDE2OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSywgY2dfc29jayxcXG4gIDE3OlxcdFxcdCAgICAgIHN0cnVjdCBicGZfc29jaywgc3RydWN0IHNvY2spXFxuICAxODpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUiwgY2dfc29ja19hZGRyLFxcbiAgMTk6XFx0XFx0ICAgICAgc3RydWN0IGJwZl9zb2NrX2FkZHIsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4pXFxuICAyMDpcXHQjZW5kaWZcXG4gIDIxOlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfSU4sIGx3dF9pbixcXG4gIDIyOlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgMjM6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9PVVQsIGx3dF9vdXQsXFxuICAyNDpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDI1OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuICAyNjpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDI3OlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbiAgMjg6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAyOTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIHNvY2tfb3BzLFxcbiAgMzA6XFx0XFx0ICAgICAgc3RydWN0IGJwZl9zb2NrX29wcywgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuKVxcbiAgMzE6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NLX1NLQiwgc2tfc2tiLFxcbiAgMzI6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAzMzpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0tfTVNHLCBza19tc2csXFxuICAzNDpcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfbXNnX21kLCBzdHJ1Y3Qgc2tfbXNnKVxcbiAgMzU6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0ZMT1dfRElTU0VDVE9SLCBmbG93X2Rpc3NlY3RvcixcXG4gIDM2OlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBicGZfZmxvd19kaXNzZWN0b3IpXFxuICAzNzpcXHQjZW5kaWZcXG4gIDM4OlxcdCNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbiAgMzk6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0tQUk9CRSwga3Byb2JlLFxcbiAgNDA6XFx0XFx0ICAgICAgYnBmX3VzZXJfcHRfcmVnc190LCBzdHJ1Y3QgcHRfcmVncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NDkuMjQzODM5MTEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzU2MTE0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRl9QUk9HX1RZUEVfU09DS19PUFMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBnYXRlZCBieSBhIGZldyBjb25maWcgb3B0aW9uczogYENPTkZJR19ORVRgLCBkZWZpbml0ZWx5IGBDT05GSUdfQlBGX1NZU0NBTExgLCBhbmQgSSBtaWdodCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19DR1JPVVBfQlBGYCBpZiBJJ20gdGhpbmtpbmcgYWJvdXQgYXR0YWNoaW5nIHRoZXNlIHByb2dyYW1zIHRvIGNncm91cHMsIG9yIGBDT05GSUdfSU5FVGAgaWYgdGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9yIFRDUCBzb2NrX29wcy4gS25vd2luZyB0aGlzIGlzIHRoZSBmb3VuZGF0aW9uLlxuXG5Ob3csIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgdG8gc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgc29ja19vcHNfdmVyaWZpZXJfb3BzYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGFuZCBhbnkgYXNzb2NpYXRlZCB2ZXJpZmljYXRpb24gc2hvdWxkIGJlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3MgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NTEuMzc5NDU0ODQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTU4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1ODA6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc29ja19hZGRyX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG4xMTU4MTpcXHR9O1xcbjExNTgyOlxcdFxcbjExNTgzOlxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfc29ja19hZGRyX3Byb2dfb3BzID0ge1xcbjExNTg0OlxcdH07XFxuMTE1ODU6XFx0XFxuMTE1ODY6XFx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc29ja19vcHNfdmVyaWZpZXJfb3BzID0ge1xcbjExNTg3OlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc29ja19vcHNfZnVuY19wcm90byxcXG4xMTU4ODpcXHRcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBzb2NrX29wc19pc192YWxpZF9hY2Nlc3MsXFxuMTE1ODk6XFx0XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzLFxcbjExNTkwOlxcdH07XFxuMTE1OTE6XFx0XFxuMTE1OTI6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBzb2NrX29wc19wcm9nX29wcyA9IHtcXG4xMTU5MzpcXHR9O1xcbjExNTk0OlxcdFxcbjExNTk1OlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX3NrYl92ZXJpZmllcl9vcHMgPSB7XFxuMTE1OTY6XFx0XFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBza19za2JfZnVuY19wcm90byxcXG4xMTU5NzpcXHRcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBza19za2JfaXNfdmFsaWRfYWNjZXNzLFxcbjExNTk4OlxcdFxcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcXHQ9IHNrX3NrYl9jb252ZXJ0X2N0eF9hY2Nlc3MsXFxuMTE1OTk6XFx0XFx0Lmdlbl9wcm9sb2d1ZVxcdFxcdD0gc2tfc2tiX3Byb2xvZ3VlLFxcbjExNjAwOlxcdH07XFxuMTE2MDE6XFx0XFxuMTE2MDI6XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19za2JfcHJvZ19vcHMgPSB7XFxuMTE2MDM6XFx0fTtcXG4xMTYwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NTEuMzgwMDU2MDY4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNTkyMTE3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTb2Nrb3BzIENvbnRleHQgQWNjZXNzIENvbnZlcnNpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdXNlZCBpbiBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIHJld3JpdGluZyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQlBGX1BST0dfVFlQRV9TT0NLX09QU2AgcHJvZ3JhbXMuIFRoZXNlIHByb2dyYW1zIGFyZSBoaXR0aW5nIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBmaWVsZHMgbGlrZSBgcnR0X21pbmAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5TaW5jZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBpcyBzdGF0aWMsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgY2hlY2sgaWYgaXQncyBkaXJlY3RseSBjYWxsZWQgb3IgaW5saW5lZCBpbnRvIHRoZSBgc29ja19vcHNfdmVyaWZpZXJfb3BzYCBmdW5jdGlvbiBwb2ludGVyLCBzcGVjaWZpY2FsbHkgYC5jb252ZXJ0X2N0eF9hY2Nlc3NgLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBpdHMgYWRkcmVzcyBpcyBhc3NpZ25lZCB0byBhIGdsb2JhbCBzdHJ1Y3QgYHNvY2tfb3BzX3ZlcmlmaWVyX29wcy5jb252ZXJ0X2N0eF9hY2Nlc3MgPSBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3M7YCBtZWFucyBpdHMgc3ltYm9sICpzaG91bGQqIGV4aXN0IGluIHZtbGludXgsIHVubGVzcyB0aGUgY29tcGlsZXIgZ2V0cyBjbGV2ZXIsIGJ1dCBpdCBzdGlsbCBzaG91bGQgYmUgYWNjZXNzaWJsZS4gSSBjYW4gY2hlY2sgaXRzIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uZmlybS5cblxuSGFuZyBvbiBhIHNlY29uZC4gSXQncyBsaWtlbHkgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgdXNlZCBpbiBgYnBmX2NoZWNrYCAvIGBjb252ZXJ0X2N0eF9hY2Nlc3Nlc2AgLyBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXQgaXMgKm5vdCogaW5saW5lZC4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaWYgYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXMgaW4gdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUuIFRoZW4sIEkgY2FuIGxvb2sgZm9yIHRoZSBjYWxsIGNoYWluIG9yaWdpbmF0aW5nIGZyb20gYGNvbnZlcnRfY3R4X2FjY2Vzc2VzYCBvciBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2AgaW5zdGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo1NS40MzkyNzM3OTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTEwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTI0NTE9c3RhdGljIGJvb2wgc3lzY3RsX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjQ3Ny1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI0Nzg6c3RhdGljIHUzMiBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNDc5LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjU0Mj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zeXNjdGxfdmVyaWZpZXJfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ0LVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHN5c2N0bF9pc192YWxpZF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTQ1OlxcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcXHQ9IHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQ2LX07XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI2MDQ9c3RhdGljIGJvb2wgY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2NzctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjc4OnN0YXRpYyB1MzIgY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2NzktXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI3NjU9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja29wdF92ZXJpZmllcl9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjctXFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY4OlxcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcXHQ9IGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2OS1cXHQuZ2VuX3Byb2xvZ3VlXFx0XFx0PSBjZ19zb2Nrb3B0X2dldF9wcm9sb2d1ZSxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM5PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQwLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQxOmludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Mi17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxMy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKywgaW5zbisrKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4MTQ6XFx0XFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxNS1cXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSBwdHJfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTEwLVxcdFxcdGNhc2UgUFRSX1RPX0NUWDpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjkxMTpcXHRcXHRcXHRpZiAoIW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTEyLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTEzOlxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05MTYtXFx0XFx0Y2FzZSBQVFJfVE9fU09DS19DT01NT046XFxua2VybmVsL2JwZi9maXh1cHMuYzo5MTc6XFx0XFx0XFx0Y29udmVydF9jdHhfYWNjZXNzID0gYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE4LVxcdFxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtOTE5LVxcdFxcdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIwOlxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XFxua2VybmVsL2JwZi9maXh1cHMuYy05MjEtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9maXh1cHMuYy05MjItXFx0XFx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XFxua2VybmVsL2JwZi9maXh1cHMuYzo5MjM6XFx0XFx0XFx0Y29udmVydF9jdHhfYWNjZXNzID0gYnBmX3hkcF9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTY5LVxcdFxcdCAqIGNvbnZlcnQgdG8gYSA0LzgtYnl0ZSBsb2FkLCB0byBtaW5pbXVtIHByb2dyYW0gdHlwZSBzcGVjaWZpY1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTcwOlxcdFxcdCAqIGNvbnZlcnRfY3R4X2FjY2VzcyBjaGFuZ2VzLiBJZiBjb252ZXJzaW9uIGlzIHN1Y2Nlc3NmdWwsXFxua2VybmVsL2JwZi9maXh1cHMuYy05NzEtXFx0XFx0ICogd2Ugd2lsbCBhcHBseSBwcm9wZXIgbWFzayB0byB0aGUgcmVzdWx0Llxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05OTQtXFx0XFx0dGFyZ2V0X3NpemUgPSAwO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTk1OlxcdFxcdGNudCA9IGNvbnZlcnRfY3R4X2FjY2Vzcyh0eXBlLCBpbnNuLCBpbnNuX2J1ZiwgZW52LVxcdTAwM2Vwcm9nLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtOTk2LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dGFyZ2V0X3NpemUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4OTQ9c3RhdGljIGludCBjaGVja19jdHhfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTAyLVxcdGJvb2wgdmFyX29mZl9vayA9IGlzX3Zhcl9jdHhfb2ZmX2FsbG93ZWQoZW52LVxcdTAwM2Vwcm9nKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDkwMzpcXHRib29sIGZpeGVkX29mZl9vayA9ICFlbnYtXFx1MDAzZW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTA0LVxcdGludCBlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExOTctXFx0XFx0LyogcHJvZ3JhbSBpcyB2YWxpZCwgY29udmVydCAqKHUzMiopKGN0eCArIG9mZikgYWNjZXNzZXMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExOTg6XFx0XFx0cmV0ID0gYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo1NS41MDE3OTE3NjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5Mzg5MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBTb2NrZXQgT3BlcmF0aW9ucyB3aXRoIEJQRioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBzb2NrX29wc2AgQlBGIHByb2dyYW1zIGFyZSBhY3R1YWxseSBiZWluZyBleGVjdXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IHRoZSBnZW5lcmFsIGNvbmNlcHRzLCBidXQgSSB3YW50IHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBtZWNoYW5pc21zIGF0IHBsYXkuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgLiBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgYEJQRl9QUk9HX1RZUEVfU09DS19PUFNgIGluIHRoZSBrZXJuZWwgc291cmNlLCB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQsIHRoZSBwcm9ncmFtIHR5cGUuIFRoZW4sIHRvIGJlIG1vcmUgcHJlY2lzZSBpbiBteSBzZWFyY2ggSSBzaG91bGQgYWxzbyBpbmNsdWRlIGB0Y3BfY2FsbF9icGZgIGluIG15IHNlYXJjaCBxdWVyaWVzLCBhcyBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBleGVjdXRlIHRoZSBwcm9ncmFtcy4gVGhpcyBhcHByb2FjaCB3aWxsIGxpa2VseSBleHBvc2UgdGhlIHJlbGV2YW50IGNhbGwgc2l0ZXMgYW5kIGRhdGEgZmxvdy4gQXJtZWQgd2l0aCB0aGVzZSBzZWFyY2ggdGVybXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gbmF2aWdhdGUgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgcGF0aCBmb3IgdGhlc2Ugc29ja19vcHMgcHJvZ3JhbXMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUga2VybmVsJ3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgcHJvZ3JhbXMgaW4gbW9yZSBkZXRhaWwuIFRoaXMgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoaW5ncyBsaWtlIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nLCBzZWN1cml0eSBwb2xpY2llcywgYW5kIG90aGVyIHNvY2tldC1yZWxhdGVkIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDQ6NTguMTk1Njg1MTgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEyNjkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfY2FsbF9icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9hZl9pbmV0LmM9MTk4PWludCBfX2luZXRfbGlzdGVuX3NrKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMjI4LVxcbm5ldC9pcHY0L2FmX2luZXQuYzoyMjk6XFx0XFx0dGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfVENQX0xJU1RFTl9DQiwgMCwgTlVMTCk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTIzMC1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yOTYxPXZvaWQgdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI5NjktXFx0ICogbmVlZCB0byByZW1hcCB0aGUgaW50ZXJuYWwgdmFsdWUgdG8gdGhlIEJQRiB2YWx1ZSBiZWZvcmUgY2FsbGluZ1xcbm5ldC9pcHY0L3RjcC5jOjI5NzA6XFx0ICogdGNwX2NhbGxfYnBmXzJhcmcuXFxubmV0L2lwdjQvdGNwLmMtMjk3MS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI5OTgtXFx0aWYgKEJQRl9TT0NLX09QU19URVNUX0ZMQUcodGNwX3NrKHNrKSwgQlBGX1NPQ0tfT1BTX1NUQVRFX0NCX0ZMQUcpKVxcbm5ldC9pcHY0L3RjcC5jOjI5OTk6XFx0XFx0dGNwX2NhbGxfYnBmXzJhcmcoc2ssIEJQRl9TT0NLX09QU19TVEFURV9DQiwgb2xkc3RhdGUsIHN0YXRlKTtcXG5uZXQvaXB2NC90Y3AuYy0zMDAwLVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmMtMTQ4LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9udi5jOjE0OTpcXHRiYXNlX3J0dCA9IHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX0JBU0VfUlRULCAwLCBOVUxMKTtcXG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXFx0aWYgKGJhc2VfcnR0IFxcdTAwM2UgMCkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM1NTA9aW50IF9fdGNwX3JldHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzY3OC1cXHRpZiAoQlBGX1NPQ0tfT1BTX1RFU1RfRkxBRyh0cCwgQlBGX1NPQ0tfT1BTX1JFVFJBTlNfQ0JfRkxBRykpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM2Nzk6XFx0XFx0dGNwX2NhbGxfYnBmXzNhcmcoc2ssIEJQRl9TT0NLX09QU19SRVRSQU5TX0NCLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNjgwLVxcdFxcdFxcdFxcdCAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEsIHNlZ3MsIGVycik7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzMDMtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzMDQ6XFx0dGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfVENQX0NPTk5FQ1RfQ0IsIDAsIE5VTEwpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzA1LVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9MjQzPXN0YXRpYyBpbnQgdGNwX3dyaXRlX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjg5LVxcdGlmIChCUEZfU09DS19PUFNfVEVTVF9GTEFHKHRwLCBCUEZfU09DS19PUFNfUlRPX0NCX0ZMQUcpKVxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjI5MDpcXHRcXHR0Y3BfY2FsbF9icGZfM2FyZyhzaywgQlBGX1NPQ0tfT1BTX1JUT19DQixcXG5uZXQvaXB2NC90Y3BfdGltZXIuYy0yOTEtXFx0XFx0XFx0XFx0ICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NDo1OC4yODI4MTk2MjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzMDQ5NzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgU29ja2V0IE9wZXJhdGlvbiBUZXN0aW5nIGluIEJQRioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBhcmVhIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkLiBTcGVjaWZpY2FsbHksIHJlZ2FyZGluZyBgc29ja19vcHNgLCBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSB0ZXN0IHN1aXRlLiBJdCdzIGNydWNpYWwgdG8gaGF2ZSBzb2xpZCB0ZXN0aW5nIGhlcmUuIEknbSB0aGlua2luZywgXCJMZXQncyBkZWZpbml0ZWx5IGNvbmZpcm0gdGhhdCB0aGVyZSdzIGEgZGVkaWNhdGVkIHRlc3QgZnVuY3Rpb24gcmVsYXRlZCB0byBgc29ja19vcHNgIHRlc3RpbmcuXCIgU29tZXRoaW5nIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NvY2tfb3BzYCBzb3VuZHMgZmFtaWxpYXIsIGJ1dCBJIG5lZWQgdG8gZ28gbG9vayBhbmQgbWFrZSBzdXJlIGl0J3MgcHJlc2VudCBhbmQgZG9pbmcgaXRzIGpvYiBwcm9wZXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHRoZSByaWdodCBmdW5jdGlvbiwgb3IgdGhhdCB0aGVyZSdzIHNvbWUgc2ltaWxhciB0ZXN0aW5nIGJlaW5nIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MDEuNzEzMzIxODg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNjA0OTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RfcnVuLipzb2NrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTowMS44MTk1OTY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNzgxNzU1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEV4cGxvcmF0aW9uIGZvciBTcGVjaWZpYyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHNwZWNpZmljLCBwcm9iYWJseSByZWxhdGVkIHRvIHRlc3Rpbmcgb3IgbmV0d29ya2luZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIHBlcmZvcm0gYSBicm9hZCBzZWFyY2guIFRoZSBrZXJuZWwgc291cmNlIHRyZWUgaXMgdmFzdCwgYnV0IEkgY2FuIG5hcnJvdyB0aGluZ3MgZG93biBhIGJpdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBUaGUgdHdvIGtleSB0ZXJtcyBJJ2xsIHVzZSBhcmUgYHRlc3RfcnVuYCBhbmQgYHNvY2tfb3BzX3Byb2dfb3BzYC4gYHRlc3RfcnVuYCBtaWdodCBpbmRpY2F0ZSBzb21lIGtpbmQgb2YgdGVzdCBpbmZyYXN0cnVjdHVyZSwgcG9zc2libHkgdW5pdCB0ZXN0cyBvciBpbnRlZ3JhdGlvbiB0ZXN0cyB0aGF0IGFyZSBydW4gd2hlbiBkZXZlbG9waW5nIG5ldyBjb2RlLiBUaGUgdGVybSBgc29ja19vcHNfcHJvZ19vcHNgIGlzIGludGVyZXN0aW5nLCBpdCBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHJlZmVycmluZyB0byB0aGUgYHNvY2tfb3BzYCBzdHJ1Y3R1cmUgb3IgdGhlIGFzc29jaWF0ZWQgYHByb2dfb3BzYC4gVGhlIHVzZSBvZiBgcHJvZ19vcHNgIGluZGljYXRlcyBlQlBGLCBhIHByb2dyYW1tYWJsZSB3YXkgb2YgZXh0ZW5kaW5nIHRoZSBrZXJuZWwuIFRoaXMgaXMgd29ydGggaW52ZXN0aWdhdGluZyBiZWNhdXNlIGVCUEYgaXMgcGVydmFzaXZlLCBhbmQgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgd2lsbCBwb2ludCB0byBpbXBsZW1lbnRhdGlvbnMgb2Ygc3BlY2lmaWMgc29ja2V0IGZlYXR1cmVzLiBCeSBzZWFyY2hpbmcgYWNyb3NzIHRoZSBrZXJuZWwsIEknbSBob3BpbmcgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGVzZSB0ZXJtcyBhcmUgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eS4gRnJvbSB0aGVyZSwgSSBjYW4gZnVydGhlciByZWZpbmUgbXkgc2VhcmNoIG9yIGZvbGxvdyBzcGVjaWZpYyBjYWxsIGdyYXBocyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZWxlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MDguOTk3Nzc3NTE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ3Njc0MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfb3BzX3Byb2dfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTExNTg2PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNvY2tfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTkxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTkyOmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc29ja19vcHNfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTMtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MTEuNjQ1NDY0NTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTc2NzUyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgYHRjcF9jYWxsX2JwZmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGB0Y3BfY2FsbF9icGZgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBrbm93IGl0cyBuYW1lLCBidXQgSSBjYW4ndCByZWx5IG9uIHRoYXQgYWxvbmUuIEkgbmVlZCB0byB0cmFjZSBpdCBiYWNrIHRvIGl0cyBzb3VyY2UuIEl0IGNvdWxkIGJlIGluIGEgaGVhZGVyIGZpbGUsIHBhcnQgb2YgYSBzcGVjaWZpYyBtb2R1bGUsIG9yIG1heWJlIGV2ZW4gZHluYW1pY2FsbHkgbG9hZGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGNvbnRleHQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlIGFuZCBzZWUgd2hlcmUgYHRjcF9jYWxsX2JwZmAgaXMgZGVjbGFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzE4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MTMuODQzMTQ1ODM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM5NTM4MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9jYWxsX2JwZlxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI4ODE9c3RhdGljIGlubGluZSB2b2lkIGJwZl9za29wc19pbml0X3NrYihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNrb3BzLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg5My0jaWZkZWYgQ09ORklHX0JQRlxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4OTQ6c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcXG5pbmNsdWRlL25ldC90Y3AuaC0yODk1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTI5MTk9c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmXzJhcmcoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3AsIHUzMiBhcmcxLCB1MzIgYXJnMilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5MjItXFxuaW5jbHVkZS9uZXQvdGNwLmg6MjkyMzpcXHRyZXR1cm4gdGNwX2NhbGxfYnBmKHNrLCBvcCwgMiwgYXJncyk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjkyNC19XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yOTI2PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8zYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yOTMwLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI5MzE6XFx0cmV0dXJuIHRjcF9jYWxsX2JwZihzaywgb3AsIDMsIGFyZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI5MzItfVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MjkzND1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NsZWFyX3NvY2tfb3BzX2NiX2ZsYWdzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5MzktI2Vsc2VcXG5pbmNsdWRlL25ldC90Y3AuaDoyOTQwOnN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcCwgdTMyIG5hcmdzLCB1MzIgKmFyZ3MpXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjk0MS17XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yOTYyPXN0YXRpYyBpbmxpbmUgdTMyIHRjcF90aW1lb3V0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjk2NS1cXG5pbmNsdWRlL25ldC90Y3AuaDoyOTY2OlxcdHRpbWVvdXQgPSB0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19USU1FT1VUX0lOSVQsIDAsIE5VTEwpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NjctXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yOTczPXN0YXRpYyBpbmxpbmUgdTMyIHRjcF9yd25kX2luaXRfYnBmKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5NzYtXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjk3NzpcXHRyd25kID0gdGNwX2NhbGxfYnBmKHNrLCBCUEZfU09DS19PUFNfUldORF9JTklULCAwLCBOVUxMKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0yOTc4LVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9Mjk4ND1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2JwZl9jYV9uZWVkc19lY24oc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI5ODUte1xcbmluY2x1ZGUvbmV0L3RjcC5oOjI5ODY6XFx0cmV0dXJuICh0Y3BfY2FsbF9icGYoc2ssIEJQRl9TT0NLX09QU19ORUVEU19FQ04sIDAsIE5VTEwpID09IDEpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI5ODctfVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE5OD1pbnQgX19pbmV0X2xpc3Rlbl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTIyOC1cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MjI5OlxcdFxcdHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX1RDUF9MSVNURU5fQ0IsIDAsIE5VTEwpO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0yMzAtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmM9MTM3PXN0YXRpYyB2b2lkIHRjcG52X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmMtMTQ4LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9udi5jOjE0OTpcXHRiYXNlX3J0dCA9IHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX0JBU0VfUlRULCAwLCBOVUxMKTtcXG5uZXQvaXB2NC90Y3BfbnYuYy0xNTAtXFx0aWYgKGJhc2VfcnR0IFxcdTAwM2UgMCkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzAzLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzA0OlxcdHRjcF9jYWxsX2JwZihzaywgQlBGX1NPQ0tfT1BTX1RDUF9DT05ORUNUX0NCLCAwLCBOVUxMKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDMwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MTcuMTgyNjkyNTM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NjY3NTg5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEhvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdGNwX2NhbGxfYnBmYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgdWx0aW1hdGVseSBjYWxscyBlaXRoZXIgYEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFNgIG9yIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTX0tFUk5gLiBUaGF0J3MgdGhlIGNvcmUgYWN0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGB0Y3BfY2FsbF9icGZgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBhcmFtZXRlcnMgaXQncyB3b3JraW5nIHdpdGguIEknbSBnb2luZyB0byBmaW5kIHRoYXQgaW4gYGluY2x1ZGUvbmV0L3RjcC5oYCwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gaG93IHRoaXMgaXMgYWxsIG9yY2hlc3RyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NToyMS45NDk0NTYzMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3RjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4OTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4OTA6XFx0ICogcHJvZ3JhbSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaG9zZW4gb3BlcmF0aW9uIG9yIHRoZXJlIGlzIG5vIEJQRlxcbjI4OTE6XFx0ICogcHJvZ3JhbSBsb2FkZWQpLlxcbjI4OTI6XFx0ICovXFxuMjg5MzpcXHQjaWZkZWYgQ09ORklHX0JQRlxcbjI4OTQ6XFx0c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcXG4yODk1OlxcdHtcXG4yODk2OlxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2VybiBzb2NrX29wcztcXG4yODk3OlxcdFxcdGludCByZXQ7XFxuMjg5ODpcXHRcXG4yODk5OlxcdFxcdG1lbXNldChcXHUwMDI2c29ja19vcHMsIDAsIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgdGVtcCkpO1xcbjI5MDA6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSkge1xcbjI5MDE6XFx0XFx0XFx0c29ja19vcHMuaXNfZnVsbHNvY2sgPSAxO1xcbjI5MDI6XFx0XFx0XFx0c29ja19vcHMuaXNfbG9ja2VkX3RjcF9zb2NrID0gMTtcXG4yOTAzOlxcdFxcdFxcdHNvY2tfb3duZWRfYnlfbWUoc2spO1xcbjI5MDQ6XFx0XFx0fVxcbjI5MDU6XFx0XFxuMjkwNjpcXHRcXHRzb2NrX29wcy5zayA9IHNrO1xcbjI5MDc6XFx0XFx0c29ja19vcHMub3AgPSBvcDtcXG4yOTA4OlxcdFxcdGlmIChuYXJncyBcXHUwMDNlIDApXFxuMjkwOTpcXHRcXHRcXHRtZW1jcHkoc29ja19vcHMuYXJncywgYXJncywgbmFyZ3MgKiBzaXplb2YoKmFyZ3MpKTtcXG4yOTEwOlxcdFxcbjI5MTE6XFx0XFx0cmV0ID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QUyhcXHUwMDI2c29ja19vcHMpO1xcbjI5MTI6XFx0XFx0aWYgKHJldCA9PSAwKVxcbjI5MTM6XFx0XFx0XFx0cmV0ID0gc29ja19vcHMucmVwbHk7XFxuMjkxNDpcXHRcXHRlbHNlXFxuMjkxNTpcXHRcXHRcXHRyZXQgPSAtMTtcXG4yOTE2OlxcdFxcdHJldHVybiByZXQ7XFxuMjkxNzpcXHR9XFxuMjkxODpcXHRcXG4yOTE5OlxcdHN0YXRpYyBpbmxpbmUgaW50IHRjcF9jYWxsX2JwZl8yYXJnKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgYXJnMSwgdTMyIGFyZzIpXFxuMjkyMDpcXHR7XFxuMjkyMTpcXHRcXHR1MzIgYXJnc1syXSA9IHthcmcxLCBhcmcyfTtcXG4yOTIyOlxcdFxcbjI5MjM6XFx0XFx0cmV0dXJuIHRjcF9jYWxsX2JwZihzaywgb3AsIDIsIGFyZ3MpO1xcbjI5MjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NToyMS45NDk2ODAwNTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcxMzg2NTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogZUJQRiBhbmQgVENQIFNvY2tldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCdzIGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUsIHNvIHdlIG5lZWQgdG8gYmUgdmVyeSB0aG9yb3VnaC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSdzIGZvY3VzaW5nIG9uIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoKWAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgaG93IGVCUEYgcHJvZ3JhbXMgYWNjZXNzIHRoZSBgcnR0X21pbmAgZmllbGQgd2l0aGluIGEgYGJwZl9zb2NrX29wc2Agc3RydWN0dXJlLiBJbnN0ZWFkIG9mIHRoZSBvbGQgaW5saW5lIGluc3RydWN0aW9ucywgd2UncmUgbm93IHVzaW5nIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgYGZ1bGxzb2NrYCBvciBgbG9ja2VkX3RjcF9zb2NrYCBhbmQgdGhlIGxvYWRpbmcgb2YgYHJ0dF9taW4uc1swXS52YC4gVGhpcyBpbXBhY3RzIHRoZSBnZW5lcmF0ZWQgQlBGIGluc3RydWN0aW9ucywgZXNzZW50aWFsbHkgY2hhbmdpbmcgaG93IHRoZXNlIHByb2dyYW1zIGludGVyYWN0IHdpdGggVENQIHNvY2tldCBpbmZvcm1hdGlvbi5cblxuTm93LCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKj8gQWJzb2x1dGVseS4gV2UgbG9hZCBzb2NrX29wcyBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCB3aGljaCBjYWxscyBgYnBmX2NoZWNrKClgIGFuZCB0aGVuIGNhc2NhZGVzIGludG8gYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcygpYCBhbmQgZXZlbnR1YWxseSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBNb3Jlb3Zlciwgd2UgY2FuIGV4ZWN1dGUgdGhlIHByb2dyYW0gdGhyb3VnaCBzb2NrX29wcyBob29rcywgbGlrZSB3aXRoIFRDUCBzb2NrZXRzIHVuZGVyIGNncm91cHMuIFRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGltcGFjdHMgY29yZSBrZXJuZWwgQlBGIGFuZCBuZXR3b3JraW5nIGNvZGUgaXMgZW5vdWdoIHRvIHdhcnJhbnQgcmlnb3JvdXMgdGVzdGluZy5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYXJlIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIGFuZCBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gV2UncmUgZGVhbGluZyB3aXRoIEJQRiwgY2dyb3VwcywgYW5kIG5ldHdvcmtpbmcsIHNvIEknbGwgbmVlZCBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGBORVRgLCBhbmQgYElORVRgIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIGFnYWluc3QgdGhlIGBLY29uZmlnYCBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0ODksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NToyNy42NjM1NDk2ODRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDkzMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzUzPWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNjMtXFxuaW5pdC9LY29uZmlnOjEzNjQ6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM2NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjI3LjcxODY1MjM1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDc5NjQxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQnbGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjI5LjUyNjYyMzA2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2NjczOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MjkuNTg3MzA5NjA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTgzNzA0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGZpbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzLiBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgaXMgYGNvbmZpZyBCUEZfU1lTQ0FMTGAgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0/XCIgVGhpcyBwcm9iYWJseSBtZWFucyBJIG5lZWQgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpbiB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgcmVsYXRlIHRvIHRyYWNpbmcsIG5ldHdvcmtpbmcsIG9yIHNlY3VyaXR5IOKAkyB0aG9zZSBhcmUgdGhlIG1vc3QgbGlrZWx5IGFyZWFzLiBJJ2xsIGxpa2VseSB1c2UgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBjb250ZXh0dWFsIGNsdWVzIGFyb3VuZCBpdCB0b28sIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBmZWF0dXJlcyBpdCBlbmFibGVzLiBJcyB0aGlzIHBhcnQgb2YgYSBsYXJnZXIgQlBGIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIG9yIGEgc3RhbmRhbG9uZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTozMS41ODU2ODQ1OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzg1MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6MzEuNjU2NDgxMjU0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMDkyNjU2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgTkVUYCBhbmQgYElORVRgIHdpdGhpbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2NC9LY29uZmlnYC4gU3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cbk5vdywgbGV0J3MgZW5zdXJlIGFsbCB0aGUgcmVxdWlyZWQgY29uZGl0aW9ucyBhcmUgbWV0LiBJIHNlZSBgV29ydGhGdXp6aW5nOiB0cnVlYCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbGwgcHJlc2VudCDigJMgYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBgTkVUYCwgYW5kIGBJTkVUYCDigJMgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gTXkgZm9jdXMgaXMgb24gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2Vzc2AgYW5kIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLiBUaGUgZXhwbGFuYXRpb24gZm9yIHRoZSB2ZXJkaWN0IGlzIGNvbmNpc2UsIHdoaWNoIEkgYXBwcmVjaWF0ZTsgSSBjYW4gbW92ZSBmb3J3YXJkIGNvbmZpZGVudGx5LlxuXG5UaW1lIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3NgIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBDcnVjaWFsbHksIGl0IGNoYW5nZXMgaG93IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAgaXMgaGFuZGxlZCwgdHJhbnNpdGlvbmluZyBpdCB0byBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgVGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZ2VuZXJhdGVkIGJ5dGVjb2RlLCBlc3BlY2lhbGx5IHdoZW4gcmVhZGluZyBgcnR0X21pbmAgZnJvbSBgYnBmX3NvY2tfb3BzYC4gSXQgbm93IGluY2x1ZGVzIGxvY2tpbmcgY2hlY2tzIGFuZCBtb2RpZmllcyB0aGUgc3RydWN0IGZpZWxkIG9mZnNldC4gQW5kLCBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIFRDUCBzb2NrX29wcyBldmVudHMuXG5cblRoYXQgYWxsIGxvb2tzIHNvbGlkLCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzgsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQxLjc0OTE0MjQ5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODgzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZUJQRiBzb2NrX29wcyBjb250ZXh0IGFjY2Vzc2VzIHRvIHJ0dF9taW4gYXJlIHJld3JpdHRlbiBpbnRvIG5hdGl2ZSBpbnN0cnVjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi9yZXdyaXRpbmcgKHVzaW5nIFNPQ0tfT1BTX0dFVF9GSUVMRCkuIFRoaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBwYXRoIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgY2FuIGJlIGV4ZXJjaXNlZCBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBwcm9ncmFtcyB0aGF0IGFjY2VzcyB0aGUgcnR0X21pbiBmaWVsZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZUJQRiBzb2NrX29wcyBjb250ZXh0IGFjY2Vzc2VzIHRvIHJ0dF9taW4gYXJlIHJld3JpdHRlbiBpbnRvIG5hdGl2ZSBpbnN0cnVjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi9yZXdyaXRpbmcgKHVzaW5nIFNPQ0tfT1BTX0dFVF9GSUVMRCkuIFRoaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBwYXRoIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgY2FuIGJlIGV4ZXJjaXNlZCBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGX1BST0dfVFlQRV9TT0NLX09QUyBwcm9ncmFtcyB0aGF0IGFjY2VzcyB0aGUgcnR0X21pbiBmaWVsZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NDEuODQzMDQ5MDY0WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA0NjcyNTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQxLjg0NDE2Mzg5NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMDQ1NjA0NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBCUEYgYnl0ZWNvZGUgY29udmVyc2lvbiBmb3IgcmVhZGluZyB0aGUgYHJ0dF9taW5gIGZpZWxkIG9mIGBzdHJ1Y3QgYnBmX3NvY2tfb3BzYCBpbiBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKClgLiBJdCByZXBsYWNlcyBjdXN0b20gQlBGIGluc3RydWN0aW9uIGdlbmVyYXRpb24gd2l0aCB0aGUgc3RhbmRhcmRpemVkIGhlbHBlciBtYWNybyBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRzIGEgc2FmZXR5IGNoZWNrIG9uIGBpc19sb2NrZWRfdGNwX3NvY2tgIHByaW9yIHRvIGRlcmVmZXJlbmNpbmcgdGhlIHNvY2tldCBhcyBgc3RydWN0IHRjcF9zb2NrYCBhbmQgcmVhZHMgdGhlIGV4YWN0IHNhbWUgb2Zmc2V0IChgcnR0X21pbi5zWzBdLnZgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDBiYzA1YzcyNzI4Njc3YTc5ZmY2ZTVjYjIxZjQxYzFkZTZjZmI3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6NDQ6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hMDQzZDE3OWZmMWFlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTExMDUsMTggKzExMTA1LDcgQEAgc3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxuLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cbi1cdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbWlubWF4KSk7XG4tXHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG1pbm1heCkgXHUwMDNjXG4tXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcbi1cbi1cdFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXG4tXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG4tXHRcdFx0XHQgICAgICBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLVx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzaykpO1xuLVx0XHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG4tXHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX3NvY2ssIHJ0dF9taW4pICtcbi1cdFx0XHRcdCAgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdCkpO1xuK1x0XHRTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jayk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBicGZfc29ja19vcHNfY2JfZmxhZ3MpOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NDEuODQ0MTY2Mjg0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Mzk1MDc4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgdG91Y2hlZCBgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzYC4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIG9uIHRoYXQgcGFydGljdWxhciBgb2Zmc2V0b2ZgIGNhc2U6IGBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBydHRfbWluKWAuXG5cbkFoLCBJIHNlZS4gVGhleSd2ZSByZXBsYWNlZCB0aGUgbWFudWFsIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZvciBhY2Nlc3NpbmcgYHJ0dF9taW5gIHdpdGggYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtgLiBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGhlYWQgb3ZlciB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCBsaW5lIDExMTA1LiBUaGF0J3Mgd2hlcmUgYFNPQ0tfT1BTX0dFVF9GSUVMRGAgc2hvdWxkIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtYWNybyBkb2VzIGludGVybmFsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgaXQncyBpbXBsZW1lbnRlZCBpcyBjcnVjaWFsLlxuXG5GdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgcHJlY2lzZWx5IHdoYXQgYHJ0dF9taW5gIHJlcHJlc2VudHMgd2l0aGluIGBzdHJ1Y3QgdGNwX3NvY2tgLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSB0byB0aGUgVENQIHN0YWNrIGludGVybmFscyBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIGl0cyBzdHJ1Y3R1cmUgYW5kIHVzYWdlLCBzbyBJIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZpZWxkJ3MgZGF0YSB0eXBlLCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyByZXBsYWNlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQ3LjI4MzY4MjU1OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4NDMyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTT0NLX09QU19HRVRfRklFTERcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTA4MTY9c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwODI1LS8qIEhlbHBlciBtYWNybyBmb3IgYWRkaW5nIHJlYWQgYWNjZXNzIHRvIHRjcF9zb2NrIG9yIHNvY2sgZmllbGRzLiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEwODI2OiNkZWZpbmUgU09DS19PUFNfR0VUX0ZJRUxEKEJQRl9GSUVMRCwgT0JKX0ZJRUxELCBPQkopXFx0XFx0XFx0ICAgICAgXFxcXFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwODI3LVxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjQ3LjM1MjUzNDk4NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg4MTg5MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBTT0NLX09QU19HRVRfRklFTERgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYFNPQ0tfT1BTX0dFVF9GSUVMRGAuIFRoZSBjb250ZXh0IGlzIGNydWNpYWwsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgZ3JhYiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgbWFjcm8sIHBsdXMgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHNlZSBob3cgdGhpcyB0aGluZyBpcyAqdXNlZCouIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZmV0Y2hlcyBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGEgc29ja2V0IG9wZXJhdGlvbiBvciBkYXRhIHN0cnVjdHVyZS4gSXMgaXQgdXNlZCB0byBncmFiIHByb3RvY29sLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBnZW5lcmFsIHNvY2tldCBzdGF0ZT8gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyBJJ2QgZGVidWcgaXQgaWYgc29tZXRoaW5nIHdlbnQgc2lkZXdheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo0OS41NDA3MjkxNjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyICp0YXJnZXRfc2l6ZSlcXG4xMDgyMTpcXHR7XFxuMTA4MjI6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuMTA4MjM6XFx0XFx0aW50IG9mZjtcXG4xMDgyNDpcXHRcXG4xMDgyNTpcXHQvKiBIZWxwZXIgbWFjcm8gZm9yIGFkZGluZyByZWFkIGFjY2VzcyB0byB0Y3Bfc29jayBvciBzb2NrIGZpZWxkcy4gKi9cXG4xMDgyNjpcXHQjZGVmaW5lIFNPQ0tfT1BTX0dFVF9GSUVMRChCUEZfRklFTEQsIE9CSl9GSUVMRCwgT0JKKVxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgyNzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODI4OlxcdFxcdFxcdGludCBmdWxsc29ja19yZWcgPSBzaS1cXHUwMDNlZHN0X3JlZywgcmVnID0gQlBGX1JFR185LCBqbXAgPSAyOyAgICAgXFxcXFxcbjEwODI5OlxcdFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoT0JKLCBPQkpfRklFTEQpIFxcdTAwM2VcXHRcXHQgICAgICBcXFxcXFxuMTA4MzA6XFx0XFx0XFx0XFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9zb2NrX29wcywgQlBGX0ZJRUxEKSk7ICAgXFxcXFxcbjEwODMxOlxcdFxcdFxcdGlmIChzaS1cXHUwMDNlZHN0X3JlZyA9PSByZWcgfHwgc2ktXFx1MDAzZXNyY19yZWcgPT0gcmVnKVxcdFxcdCAgICAgIFxcXFxcXG4xMDgzMjpcXHRcXHRcXHRcXHRyZWctLTtcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzM6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHJlZyB8fCBzaS1cXHUwMDNlc3JjX3JlZyA9PSByZWcpXFx0XFx0ICAgICAgXFxcXFxcbjEwODM0OlxcdFxcdFxcdFxcdHJlZy0tO1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDgzNTpcXHRcXHRcXHRpZiAoc2ktXFx1MDAzZWRzdF9yZWcgPT0gc2ktXFx1MDAzZXNyY19yZWcpIHtcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4MzY6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9TVFhfTUVNKEJQRl9EVywgc2ktXFx1MDAzZXNyY19yZWcsIHJlZyxcXHQgICAgICBcXFxcXFxuMTA4Mzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICBcXFxcXFxuMTA4Mzg6XFx0XFx0XFx0XFx0XFx0XFx0ICB0ZW1wKSk7XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODM5OlxcdFxcdFxcdFxcdGZ1bGxzb2NrX3JlZyA9IHJlZztcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDA6XFx0XFx0XFx0XFx0am1wICs9IDI7XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQxOlxcdFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NDI6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2VybiwgICAgIFxcXFxcXG4xMDg0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc19sb2NrZWRfdGNwX3NvY2spLFxcdCAgICAgIFxcXFxcXG4xMDg0NTpcXHRcXHRcXHRcXHRcXHQgICAgICBmdWxsc29ja19yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg0NjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODQ3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpc19sb2NrZWRfdGNwX3NvY2spKTtcXHQgICAgICBcXFxcXFxuMTA4NDg6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIGZ1bGxzb2NrX3JlZywgMCwgam1wKTtcXHQgICAgICBcXFxcXFxuMTA4NDk6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHNpLVxcdTAwM2VzcmNfcmVnKVxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1MDpcXHRcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdCAgICAgIFxcXFxcXG4xMDg1MTpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sICAgICAgXFxcXFxcbjEwODUyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHRlbXApKTtcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NTM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoXFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcXFxcXG4xMDg1NTpcXHRcXHRcXHRcXHRcXHQgICAgICBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFx0XFx0ICAgICAgXFxcXFxcbjEwODU2OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTtcXFxcXFxuMTA4NTc6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0YoT0JKLFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgT0JKX0ZJRUxEKSxcXHQgICAgICBcXFxcXFxuMTA4NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2Vkc3RfcmVnLFxcdFxcdCAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NDkuNTQxNDQ3MzM1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NzA0MDU5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIGV4cHJlc3NlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0sIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCBsaW5lcyAxMTEwMCB0aHJvdWdoIDExMTIwIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhleSdyZSBoYW5kbGluZyBmaWx0ZXJpbmcgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmsgZnVuY3Rpb25zIHRoZXJlLiBJdCdzIGxpa2VseSB0aGF0IHdoYXRldmVyJ3MgaGFwcGVuaW5nIGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBoYXMgc29tZSBiZWFyaW5nIG9uIHRoZSBpc3N1ZSBhdCBoYW5kLiBUaG9zZSBsaW5lcyBtaWdodCBob2xkIGNsdWVzIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlciBpbXBsZW1lbnRhdGlvbiwgcG9zc2libHkgcmV2ZWFsaW5nIHdoZXJlIHRoZSBjdXJyZW50IHByb2JsZW0gc3RlbXMgZnJvbS4gQSBxdWljayBza2ltIGNvdWxkIGpvZyBteSBtZW1vcnkgYW5kIGhlbHAgYXZvaWQgYSB3aWxkIGdvb3NlIGNoYXNlIGxhdGVyIG9uLiBMZXQncyBzZWUgaWYgdGhvc2UgbGluZXMgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NTEuNTExODU3MzIyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjUzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDk1OlxcdFxcbjExMDk2OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgc3RhdGUpOlxcbjExMDk3OlxcdFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpICE9IDEpO1xcbjExMDk4OlxcdFxcbjExMDk5OlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxcbjExMTAwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spLFxcbjExMTAxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4xMTEwMjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxuMTExMDM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZWRzdF9yZWcsXFxuMTExMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNvY2tfY29tbW9uLCBza2Nfc3RhdGUpKTtcXG4xMTEwNTpcXHRcXHRcXHRicmVhaztcXG4xMTEwNjpcXHRcXG4xMTEwNzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJ0dF9taW4pOlxcbjExMTA4OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKTtcXG4xMTEwOTpcXHRcXHRcXHRicmVhaztcXG4xMTExMDpcXHRcXG4xMTExMTpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGJwZl9zb2NrX29wc19jYl9mbGFncyk6XFxuMTExMTI6XFx0XFx0XFx0U09DS19PUFNfR0VUX0ZJRUxEKGJwZl9zb2NrX29wc19jYl9mbGFncywgYnBmX3NvY2tfb3BzX2NiX2ZsYWdzLFxcbjExMTEzOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y3Bfc29jayk7XFxuMTExMTQ6XFx0XFx0XFx0YnJlYWs7XFxuMTExMTU6XFx0XFxuMTExMTY6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBza190eGhhc2gpOlxcbjExMTE3OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9PUl9TRVRfRklFTEQoc2tfdHhoYXNoLCBza190eGhhc2gsXFxuMTExMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jaywgdHlwZSk7XFxuMTExMTk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjA6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfY3duZCk6XFxuMTExMjE6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9jd25kKTtcXG4xMTEyMjpcXHRcXHRcXHRicmVhaztcXG4xMTEyMzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNydHRfdXMpOlxcbjExMTI0OlxcdFxcdFxcdFNPQ0tfT1BTX0dFVF9UQ1BfU09DS19GSUVMRChzcnR0X3VzKTtcXG4xMTEyNTpcXHRcXHRcXHRicmVhaztcXG4xMTEyNjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHNuZF9zc3RocmVzaCk6XFxuMTExMjc6XFx0XFx0XFx0U09DS19PUFNfR0VUX1RDUF9TT0NLX0ZJRUxEKHNuZF9zc3RocmVzaCk7XFxuMTExMjg6XFx0XFx0XFx0YnJlYWs7XFxuMTExMjk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCByY3Zfbnh0KTpcXG4xMTEzMDpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQocmN2X254dCk7XFxuMTExMzE6XFx0XFx0XFx0YnJlYWs7XFxuMTExMzI6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBzbmRfbnh0KTpcXG4xMTEzMzpcXHRcXHRcXHRTT0NLX09QU19HRVRfVENQX1NPQ0tfRklFTEQoc25kX254dCk7XFxuMTExMzQ6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjQ1OjUxLjUxMzg4OTk5MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTQyMjIzMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXZvbHV0aW9uIG9mIGBTT0NLX09QU19HRVRfRklFTERgIGZvciBUQ1AgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBtYWRlIHRvIGFjY2VzcyB0aGUgYHJ0dF9taW5gIGZpZWxkIHdpdGhpbiBhIFRDUCBzb2NrZXQuIEZpcnN0LCBJIHNlZSB0aGUgZXhwcmVzc2lvbiBgU09DS19PUFNfR0VUX0ZJRUxEKHJ0dF9taW4sIHJ0dF9taW4uc1swXS52LCBzdHJ1Y3QgdGNwX3NvY2spO2AuIFRoaXMgbWFjcm8gaXMgdGhlIGtleS4gUHJldmlvdXNseSwgd2hlbiBhY2Nlc3NpbmcgdGhpcyBzYW1lIGZpZWxkLCB3ZSBoYWQgdGhpcyBjb2RlIHNuaXBwZXQgdXRpbGl6aW5nIGBvZmZzZXRvZmA6XG5cbmBgYGNcblx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgIT1cblx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBtaW5tYXgpKTtcblx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBtaW5tYXgpIFx1MDAzY1xuXHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IG1pbm1heF9zYW1wbGUpKTtcblxuXHRcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxuXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCBzayksXG5cdFx0XHRcdCAgICAgIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHNfa2Vybiwgc2spKTtcblx0XHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZWRzdF9yZWcsXG5cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCB0Y3Bfc29jaywgcnR0X21pbikgK1xuXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IG1pbm1heF9zYW1wbGUsIHQpKTtcbmBgYFxuXG5UaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIEknbSBzcG90dGluZyBpcyB0aGF0IHRoZSBvbGRlciBpbXBsZW1lbnRhdGlvbiBkaWRuJ3QgaW5jbHVkZSBhIGNyaXRpY2FsIGNoZWNrOiBgaXNfbG9ja2VkX3RjcF9zb2NrYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBgc2tgIGFzIGBzdHJ1Y3QgdGNwX3NvY2tgLiBUaGUgdXBkYXRlZCBtYWNybywgYFNPQ0tfT1BTX0dFVF9GSUVMRGAsIHNlZW1zIHRvIGhhdmUgaW50ZWdyYXRlZCB0aGlzIHNhZmV0eSBjaGVjay4gSWYgdGhlIHNvY2tldCBpc24ndCBsb2NrZWQgKGltcGx5aW5nIHRoZSBUQ1Agc29ja2V0IGlzIG5vdCBzYWZlIHRvIHJlYWQpLCB0aGUgbWFjcm8gd2lsbCBlaXRoZXIganVtcCBvdmVyIHRoZSByZWFkLCByZXR1cm5pbmcgMCAob3Igd2hhdGV2ZXIgb3RoZXIgbWVjaGFuaXNtIGlzIGVtcGxveWVkIHRvIGhhbmRsZSBhbiBpbnZhbGlkIHNvY2tldCBzdGF0ZSkuIEZ1cnRoZXJtb3JlLCBpdCBsb29rcyBsaWtlIGBTT0NLX09QU19HRVRfRklFTERgIG5vdyBjb3JyZWN0bHkgdXNlcyBgcnR0X21pbi5zWzBdLnZgIHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIGZpZWxkIG9mIGBtaW5tYXhfc2FtcGxlYC4gVGhhdCBtZWFucyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHVzZXMgYG9mZnNldG9mKHJ0dF9taW4pICsgc2l6ZW9mKHQpYC5cblxuVG8gZW5zdXJlIEkndmUgZ290IHRoaXMgcmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbWlubWF4YCB0byBjb25maXJtIHRoYXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZpZWxkIGFjY2Vzc2VzIGlzIGNvcnJlY3Qgd2l0aGluIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo1Ni40NTYxMjAyNjNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTYyMjUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWlubWF4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTExLS8qIEEgc2luZ2xlIGRhdGEgcG9pbnQgZm9yIG91ciBwYXJhbWV0ZXJpemVkIG1pbi1tYXggdHJhY2tlciAqL1xcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjEyOnN0cnVjdCBtaW5tYXhfc2FtcGxlIHtcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0xMy1cXHR1MzJcXHR0O1xcdC8qIHRpbWUgbWVhc3VyZW1lbnQgd2FzIHRha2VuICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0xNy0vKiBTdGF0ZSBmb3IgdGhlIHBhcmFtZXRlcml6ZWQgbWluLW1heCB0cmFja2VyICovXFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MTg6c3RydWN0IG1pbm1heCB7XFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MTk6XFx0c3RydWN0IG1pbm1heF9zYW1wbGUgc1szXTtcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMC19O1xcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTIxLVxcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oOjIyOnN0YXRpYyBpbmxpbmUgdTMyIG1pbm1heF9nZXQoY29uc3Qgc3RydWN0IG1pbm1heCAqbSlcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yMy17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0yNi1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyNzpzdGF0aWMgaW5saW5lIHUzMiBtaW5tYXhfcmVzZXQoc3RydWN0IG1pbm1heCAqbSwgdTMyIHQsIHUzMiBtZWFzKVxcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTI4LXtcXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDoyOTpcXHRzdHJ1Y3QgbWlubWF4X3NhbXBsZSB2YWwgPSB7IC50ID0gdCwgLnYgPSBtZWFzIH07XFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4LmgtMzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaC0zNC1cXG5pbmNsdWRlL2xpbnV4L3dpbl9taW5tYXguaDozNTp1MzIgbWlubWF4X3J1bm5pbmdfbWF4KHN0cnVjdCBtaW5tYXggKm0sIHUzMiB3aW4sIHUzMiB0LCB1MzIgbWVhcyk7XFxuaW5jbHVkZS9saW51eC93aW5fbWlubWF4Lmg6MzY6dTMyIG1pbm1heF9ydW5uaW5nX21pbihzdHJ1Y3QgbWlubWF4ICptLCB1MzIgd2luLCB1MzIgdCwgdTMyIG1lYXMpO1xcbmluY2x1ZGUvbGludXgvd2luX21pbm1heC5oLTM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo1Ni42MjU3NjI0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MzE2NTA3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgTWVtb3J5IExheW91dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBtaW5tYXhgIGFuZCBpdCBjb250YWlucyBhbiBhcnJheSBvZiBgc3RydWN0IG1pbm1heF9zYW1wbGVgLCBzcGVjaWZpY2FsbHkgYHNbM11gLiBFYWNoIGBtaW5tYXhfc2FtcGxlYCBoYXMgdHdvIGB1MzJgIG1lbWJlcnMsIGB0YCBhbmQgYHZgLiAgVGhhdCBtZWFucywgaWYgSSB3YW50IHRvIGFjY2VzcyBgcnR0X21pbi5zWzBdLnZgLCB0aGUgYHZgIG1lbWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGF0IGBzYCBhcnJheSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIG1lbW9yeSBhZGRyZXNzLlxuXG5gcnR0X21pbmAgaXMgdGhlIGJhc2UsIGFuZCB0aGVuIGBvZmZzZXRvZihzdHJ1Y3QgbWlubWF4X3NhbXBsZSwgdClgIHdpbGwgcHJvdmlkZSB0aGUgb2Zmc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlICpmaXJzdCogYG1pbm1heF9zYW1wbGVgLiBUaGVuLCBzaW5jZSBgdmAgZm9sbG93cyBgdGAgd2l0aGluIHRoZSBzdHJ1Y3R1cmUsIHRoZSBvZmZzZXQgZm9yIGBydHRfbWluLnNbMF0udmAgd2lsbCBiZSB0aGUgYmFzZSBhZGRyZXNzIHBsdXMgYHNpemVvZih1MzIpYCAodGhlIHNpemUgb2YgYHRgKS4gQmFzaWNhbGx5LCBJJ20gY2FsY3VsYXRpbmcgdGhlIG1lbW9yeSBvZmZzZXQuXG5cbk5vdywgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byB0aGlzIGBTT0NLX09QU19HRVRfRklFTERgIG1hY3JvIGJlY2F1c2UgSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgdGhpcyBpcyBnZW5lcmF0aW5nLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkgYmVpbmcgcGVyZm9ybWVkLiBMZXQncyBzZWUgaG93IHRoaXMgbWFjcm8gaXMgYmVpbmcgZXhwYW5kZWQgdG8gYWNjZXNzIHRoZXNlIHZhbHVlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3NlbWJseSBvciBtYWNoaW5lIGNvZGUgaXMgdWx0aW1hdGVseSBiZWluZyBnZW5lcmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDU6NTkuNTU3NDE2Mzg4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4NTA6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXHQgICAgICBcXFxcXFxuMTA4NTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCAgICAgIFxcXFxcXG4xMDg1MjpcXHRcXHRcXHRcXHRcXHQgICAgICB0ZW1wKSk7XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODUzOlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSxcXFxcXFxuMTA4NTU6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcdFxcdCAgICAgIFxcXFxcXG4xMDg1NjpcXHRcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHNrKSk7XFxcXFxcbjEwODU3OlxcdFxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRklFTERfU0laRU9GKE9CSixcXHRcXHQgICAgICBcXFxcXFxuMTA4NTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE9CSl9GSUVMRCksXFx0ICAgICAgXFxcXFxcbjEwODU5OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlZHN0X3JlZyxcXHRcXHQgICAgICBcXFxcXFxuMTA4NjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2YoT0JKLCBPQkpfRklFTEQpKTtcXHQgICAgICBcXFxcXFxuMTA4NjE6XFx0XFx0XFx0aWYgKHNpLVxcdTAwM2Vkc3RfcmVnID09IHNpLVxcdTAwM2VzcmNfcmVnKVxcdHtcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NjI6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfQSgyKTtcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuMTA4NjM6XFx0XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXHQgICAgICBcXFxcXFxuMTA4NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuLCAgICAgIFxcXFxcXG4xMDg2NTpcXHRcXHRcXHRcXHRcXHQgICAgICB0ZW1wKSk7XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbjEwODY2OlxcdFxcdFxcdFxcdCppbnNuKysgPSBCUEZfTU9WNjRfSU1NKHNpLVxcdTAwM2Vkc3RfcmVnLCAwKTtcXHQgICAgICBcXFxcXFxuMTA4Njc6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4xMDg2ODpcXHRcXHR9IHdoaWxlICgwKVxcbjEwODY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDo0NTo1OS41NTc4NjkzNjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTMzMTg2OTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciBgU09DS19PUFNfR0VUX0ZJRUxEYCBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyBvciBjYXVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgY2hhbmdlIGlzIHRvIHByZXZlbnQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb24gc29ja2V0cyB0aGF0IGFyZW4ndCBmdWxseSBsb2NrZWQgVENQIHNvY2tldHMsIHNvIGxldCdzIHdhbGsgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGlzc3Vlcy5cblxuRmlyc3QsIGRvZXMgdGhpcyBuZXcgY29kZSAqY29weSogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8sIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBjb250ZXh0IHdpdGggaW5zdHJ1Y3Rpb24gcmV3cml0aW5nLiBTZWNvbmQsIGRvZXMgaXQgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGZpZWxkIGluIHF1ZXN0aW9uLCBgcnR0X21pbi5zWzBdLnZgLCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgb24gdGhlIGB0Y3Bfc29ja2AuIFRoaXMgaXMgY29uZmlybWVkIGJlY2F1c2UgdGhlIG9sZCBjb2RlIHdhcyBhbHJlYWR5IGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24sIHRoZSBleGFjdCBzYW1lIG9mZnNldCB3aXRoaW4gYHRjcF9zb2NrYCwgd2l0aG91dCB0aGUgY2hlY2suIEFuZCwgdGhpcmQsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcz8gTm8sIGl0J3MgYSBjb2RlIHN1YnN0aXR1dGlvbiwgYSBtYWNybyByZXBsYWNlbWVudCwgbm90IG5ldyBhbGxvY2F0aW9ucy5cblxuU28sIGluIHNob3J0LCB0aGVyZSBpcyBubyBldmlkZW5jZSBvZiBhIEtNU0FOLWRldGVjdGFibGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGZhbGwgdW5kZXIgQlBGIEpJVCBvciBpbnN0cnVjdGlvbiBlbWlzc2lvbiBhbmQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIEJQRiB2ZXJpZmllciB0ZXN0aW5nLiBLQVNBTiBpcyBhbHJlYWR5IGRvaW5nIGl0cyBqb2IsIHdlIGRvbid0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTi5cblxuTXkgcmVhc29uaW5nIGFsaWducyB3aXRoIHRoZSBLTVNBTiBndWlkZWxpbmVzOiB0aGVyZSdzIG5vIG5lZWQgdG8gcnVuIEtNU0FOIGlmIHN0YW5kYXJkIGRlYnVnZ2VycyBsaWtlIEtBU0FOIGNhbiBjYXRjaCBwb3RlbnRpYWwgaXNzdWVzLiBUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhpcyBldmFsdWF0aW9uLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODksIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6NDY6MDQuODg5NzQxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgQlBGIGJ5dGVjb2RlIGNvbnZlcnNpb24gZm9yIHJlYWRpbmcgdGhlIGBydHRfbWluYCBmaWVsZCBvZiBgc3RydWN0IGJwZl9zb2NrX29wc2AgaW4gYHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcygpYC4gSXQgcmVwbGFjZXMgY3VzdG9tIEJQRiBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIHdpdGggdGhlIHN0YW5kYXJkaXplZCBoZWxwZXIgbWFjcm8gYFNPQ0tfT1BTX0dFVF9GSUVMRChydHRfbWluLCBydHRfbWluLnNbMF0udiwgc3RydWN0IHRjcF9zb2NrKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcyBhIHNhZmV0eSBjaGVjayBvbiBgaXNfbG9ja2VkX3RjcF9zb2NrYCBwcmlvciB0byBkZXJlZmVyZW5jaW5nIHRoZSBzb2NrZXQgYXMgYHN0cnVjdCB0Y3Bfc29ja2AgYW5kIHJlYWRzIHRoZSBleGFjdCBzYW1lIG9mZnNldCAoYHJ0dF9taW4uc1swXS52YCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcywgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIEJQRiBieXRlY29kZSBjb252ZXJzaW9uIGZvciByZWFkaW5nIHRoZSBgcnR0X21pbmAgZmllbGQgb2YgYHN0cnVjdCBicGZfc29ja19vcHNgIGluIGBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoKWAuIEl0IHJlcGxhY2VzIGN1c3RvbSBCUEYgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiB3aXRoIHRoZSBzdGFuZGFyZGl6ZWQgaGVscGVyIG1hY3JvIGBTT0NLX09QU19HRVRfRklFTEQocnR0X21pbiwgcnR0X21pbi5zWzBdLnYsIHN0cnVjdCB0Y3Bfc29jaylgLlxcblxcblRoaXMgY2hhbmdlIGFkZHMgYSBzYWZldHkgY2hlY2sgb24gYGlzX2xvY2tlZF90Y3Bfc29ja2AgcHJpb3IgdG8gZGVyZWZlcmVuY2luZyB0aGUgc29ja2V0IGFzIGBzdHJ1Y3QgdGNwX3NvY2tgIGFuZCByZWFkcyB0aGUgZXhhY3Qgc2FtZSBvZmZzZXQgKGBydHRfbWluLnNbMF0udmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMsIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[1] Phase: Succeeded StartedAt: 2026-09-04 14:46:15 +0000 UTC FinishedAt: 2026-09-04 14:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 14:46:15 +0000 UTC FinishedAt: 2026-09-04 14:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2] Phase: Succeeded StartedAt: 2026-09-04 14:46:15 +0000 UTC FinishedAt: 2026-09-04 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 14:46:15 +0000 UTC FinishedAt: 2026-09-04 18:25:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 14:46:15 +0000 UTC FinishedAt: 2026-09-04 14:46:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 14:46:15 +0000 UTC FinishedAt: 2026-09-04 14:46:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrprcl/series-workflowrprcl-convert-artifact-3223147734/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 14:46:25 +0000 UTC FinishedAt: 2026-09-04 15:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 14:46:25 +0000 UTC FinishedAt: 2026-09-04 15:04:08 +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:*0294cdbb-d6ea-4184-a6b9-268c5954402e,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-workflowrprcl/series-workflowrprcl-convert-artifact-3223147734/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": "a00f52de-0e8c-4c60-85de-b6259963719e", "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-workflowrprcl/series-workflowrprcl-build-action-4181864812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:46:25 +0000 UTC FinishedAt: 2026-09-04 15:03:58 +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:*0294cdbb-d6ea-4184-a6b9-268c5954402e,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-workflowrprcl/series-workflowrprcl-convert-artifact-3223147734/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": "a00f52de-0e8c-4c60-85de-b6259963719e", "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-workflowrprcl/series-workflowrprcl-build-action-4181864812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 15:04:08 +0000 UTC FinishedAt: 2026-09-04 15:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 15:04:08 +0000 UTC FinishedAt: 2026-09-04 15:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 15:04:08 +0000 UTC FinishedAt: 2026-09-04 15:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 15:04:08 +0000 UTC FinishedAt: 2026-09-04 15:04:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrprcl/series-workflowrprcl-convert-artifact-3270143593/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 15:04:19 +0000 UTC FinishedAt: 2026-09-04 15:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 15:04:19 +0000 UTC FinishedAt: 2026-09-04 15:06:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a00f52de-0e8c-4c60-85de-b6259963719e,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-workflowrprcl/series-workflowrprcl-build-action-4181864812/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-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 15:06:14 +0000 UTC FinishedAt: 2026-09-04 15:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 15:06:14 +0000 UTC FinishedAt: 2026-09-04 15:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 15:06:14 +0000 UTC FinishedAt: 2026-09-04 15:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 15:06:14 +0000 UTC FinishedAt: 2026-09-04 15:22:07 +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:*0294cdbb-d6ea-4184-a6b9-268c5954402e,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-workflowrprcl/series-workflowrprcl-convert-artifact-3270143593/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": "00d1506f-5e66-415f-b896-79437a91abb9", "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-workflowrprcl/series-workflowrprcl-build-action-3466505797/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 15:06:14 +0000 UTC FinishedAt: 2026-09-04 15:21:57 +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:*0294cdbb-d6ea-4184-a6b9-268c5954402e,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-workflowrprcl/series-workflowrprcl-convert-artifact-3270143593/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": "00d1506f-5e66-415f-b896-79437a91abb9", "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-workflowrprcl/series-workflowrprcl-build-action-3466505797/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 15:22:07 +0000 UTC FinishedAt: 2026-09-04 15:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 15:22:07 +0000 UTC FinishedAt: 2026-09-04 15:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 15:22:07 +0000 UTC FinishedAt: 2026-09-04 15:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 15:22:07 +0000 UTC FinishedAt: 2026-09-04 15:23:53 +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:*00d1506f-5e66-415f-b896-79437a91abb9,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-workflowrprcl/series-workflowrprcl-build-action-3466505797/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-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 18:25:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"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:*a00f52de-0e8c-4c60-85de-b6259963719e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*00d1506f-5e66-415f-b896-79437a91abb9,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-workflowrprcl/series-workflowrprcl-build-action-4181864812/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-workflowrprcl/series-workflowrprcl-build-action-3466505797/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 15:24:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 15:24:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"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-workflowrprcl/series-workflowrprcl-convert-artifact-260146366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 15:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 15:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 15:24:03 +0000 UTC FinishedAt: 2026-09-04 15:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 15:24:14 +0000 UTC FinishedAt: 2026-09-04 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrprcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_ops_convert_ctx_access","bpf_convert_ctx_accesses"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET","INET"],"series_id":"dd3c7a5c-da90-4b51-8b94-8e9bdb065af8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 15:24:14 +0000 UTC FinishedAt: 2026-09-04 18:25:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a00f52de-0e8c-4c60-85de-b6259963719e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*00d1506f-5e66-415f-b896-79437a91abb9,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-workflowrprcl/series-workflowrprcl-build-action-4181864812/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-workflowrprcl/series-workflowrprcl-build-action-3466505797/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-workflowrprcl/series-workflowrprcl-convert-artifact-260146366/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,}