Name: series-workflowdd2rz Phase: Succeeded StartedAt: 2026-08-10 23:32:41 +0000 UTC FinishedAt: 2026-08-11 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[0] Phase: Succeeded StartedAt: 2026-08-10 23:32:41 +0000 UTC FinishedAt: 2026-08-10 23:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 23:32:41 +0000 UTC FinishedAt: 2026-08-10 23:36:51 +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": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "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": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "49107633-d66e-4e1e-9729-8f59096c4356" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zerocopy_fill_skb_from_iter", "__zerocopy_sg_from_iter", "zerocopy_sg_from_iter", "skb_zerocopy_iter_stream", "io_sendmsg_zc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O19femVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAgICYjMzQ7aW9fc2VuZG1zZ196YyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBjaGFuZ2VzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdoZW4gdGhlcmUgaXMgYSBtaXNtYXRjaCBpbiBmcmFnbWVudCByZWFkYWJpbGl0eS4gVGhpcyBjaGFuZ2UgaW4gZXJyb3IgY29kZSBwcm9wYWdhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcywgd2hpY2ggYXJlIG5vdCBzcGVjaWZpYyB0byBLTVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVncmVzc2lvbnMgaW4gZXJyb3IgaGFuZGxpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNDAxNDlmNzlhYTAxMWIwMzg5ZTMwMTQ0OGQyNGFmYTRmNzczYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbmluZGV4IDE3M2I1ZDk3YmQ0MDkuLjZmOGZmZDYxYmNhYjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXG5AQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZnJhZyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbiBcbiBcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbkBAIC03MTMsNyAmIzQzOzcxMyw3IEBAIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiBcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuIFxuIFx0aWYgKGkgXHUwMDI2XHUwMDI2IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHQvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGVcbiBcdCAqIGlvdl9hZGRycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIGRtYS1idWYgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0OywKICAgICYjMzQ7X196ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OywKICAgICYjMzQ7emVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weV9pdGVyX3N0cmVhbSYjMzQ7LAogICAgJiMzNDtpb19zZW5kbXNnX3pjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZWdyZXNzaW9ucyBpbiBlcnJvciBoYW5kbGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MDE0OWY3OWFhMDExYjAzODllMzAxNDQ4ZDI0YWZhNGY3NzNhYTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMzozNDozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDE3M2I1ZDk3YmQ0MDkuLjZmOGZmZDYxYmNhYjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOwogCiAJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJd2hpbGUgKGxlbmd0aCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiAJCXN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDsKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCXN0cnVjdCBuZXRfaW92ICpuaW92OwogCiAJaWYgKGkgJmFtcDsmYW1wOyBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJLyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlCiAJICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0bwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHBsYXlpbmcgdGhlIHJvbGUgb2YgYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgYSBEYXRhZ3JhbSBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBTcGVjaWZpY2FsbHksIHdoZW4gYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpc24mIzM5O3QgdHJ1ZSwgb3Igd2hlbiBgaSAmYW1wOyZhbXA7IHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpcyB0cnVlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FRkFVTFRgLCB0aGUgY29kZSB3aWxsIG5vdyByZXR1cm4gYC1FTVNHU0laRWAuCgpUaGUga2V5IGhlcmUgaXMgdW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlLiBgLUVGQVVMVGAgdXN1YWxseSBpbmRpY2F0ZXMgYSBnZW5lcmljICYjMzQ7YmFkIGFkZHJlc3MmIzM0OyBvciAmIzM0O21lbW9yeSBhY2Nlc3MgZXJyb3ImIzM0Oy4gYC1FTVNHU0laRWAsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWdnZXN0cyB0aGF0IHRoZSBtZXNzYWdlIHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGJ1ZmZlciwgb3IgYSByZWxhdGVkIHNpemUgaXNzdWUuIFRoaXMgbWVhbnMgdGhlIGV4aXN0aW5nIGxvZ2ljIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0IGhhbmRsaW5nIHdoZW4gZnJhZ21lbnRzIG9mIHRoZSBTS0IgYXJlbiYjMzk7dCByZWFkYWJsZS4KClRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzcGVjaWZpYyBjb250ZXh0cyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHdlIGNoYW5naW5nIHRoZSBlcnJvciBjb2RlPyBJcyBpdCBiZWNhdXNlIHRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQgdG8gbWVzc2FnZSBzaXplLCBvciBzb21lIG90aGVyIHNpemUgaXNzdWU/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaGFuZGxlIGAtRUZBVUxUYCB2ZXJzdXMgaG93IHRoZXkmIzM5O2QgaGFuZGxlIGAtRU1TR1NJWkVgIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb3JyZWN0IGZpeCwgb3Igd2hldGhlciBpdCBtaWdodCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgZWxzZXdoZXJlLiBUaGlzIGNoYW5nZSBsb29rcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYzPWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Njg6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1NC1cdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTQ1OD1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NzAtXHRlbHNlIGlmICh1bmxpa2VseSghc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pb191cmluZy9uZXQuYzoxNDcxOlx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbmlvX3VyaW5nL25ldC5jLTE0NzItXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz02MzM9RVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM2LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2Vcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYz03MDY9c3RhdGljIGludFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MDc6emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MDgtXHRcdFx0ICAgICAgaW50IGxlbmd0aCxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjAtXHRlbHNlIGlmIChiaW5kaW5nKVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjE6XHRcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHNrYiwgZnJvbSwgbGVuZ3RoLCBiaW5kaW5nKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOgoKKipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIGluIGVycm9yIHJlcG9ydGluZy4gVGhlIGZ1bmN0aW9ucyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBhcmUgbm93IHJldHVybmluZyBgLUVNU0dTSVpFYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRocm91Z2guIFdlIGtub3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIHRoYXQgaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYCAvIGBpb19zZ19mcm9tX2l0ZXJgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMuIFRoZSBjYWxsc3RhY2sgaXMgY3JpdGljYWwgaGVyZSwgYnV0IGl0IGxvb2tzIGxpa2UgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyBhbHNvIGNhbGxlZCBieSBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSB0b3AsIHNvIGxldCYjMzk7cyBjaGVjayBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCDigJMgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gdXNlcyB0aGUgZXJyb3IgY29kZXMgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIGRldGVybWluZSB3aGF0IHNpdHVhdGlvbiB3YXJyYW50cyB0aGlzIGNvZGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90YXAuYy02MjktXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTc3ND1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODY3LVx0XHRcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxuZHJpdmVycy9uZXQvdHVuLmM6MTg2ODpcdFx0XHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cbmRyaXZlcnMvbmV0L3R1bi5jLTE4NjktXHRcdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTg4My1cdFx0aWYgKHplcm9jb3B5KVxuZHJpdmVycy9uZXQvdHVuLmM6MTg4NDpcdFx0XHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4ODUtXHRcdGVsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXHRcdFx0XHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ4LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDk6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NTAtXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3NC19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzctLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3ODogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3OS0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4Ni0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg3OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODgte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk0LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTU6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTYtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTc6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTgtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTMzLVxubmV0L2NvcmUvc2tidWZmLmM6MTkzNDpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTM1LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgWmVyby1Db3B5IERhdGEgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIG1hcHBpbmcgb3V0IHRoZSB6ZXJvLWNvcHkgZGF0YSBmbG93IGhlcmUuIEl0IGxvb2tzIGxpa2UgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZCwgYnV0IHRoZXkmIzM5O3JlIGJlaW5nIGludm9rZWQgYnkgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhbmQgYGlvX3NnX2Zyb21faXRlcmAgLyBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYC4gIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdGhlIGNyaXRpY2FsIHVwc3RyZWFtIGZ1bmN0aW9uLCBpdCYjMzk7cyB3aGF0IHRpZXMgZXZlcnl0aGluZyB0b2dldGhlci4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCwgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLCBhbmQgZXZlbiBgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYmAuCgpOb3csIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGl0c2VsZiBpcyBiZWluZyB1c2VkIGJ5IGB0YXBfZ2V0X3VzZXJgIGFuZCBgdHVuX2dldF91c2VyYC4uLiBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGJvdGggcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZXMuIFRoZSBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyByZWFsbHkgaW50cmlndWluZyBtZS4gIEkga25vdyBpdCBtdXN0IGJlIGludm9sdmVkIGluIGRhdGFncmFtLWJhc2VkIGNvbW11bmljYXRpb24sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIGB1ZHBfc2VuZG1zZ2AgYW5kIGByYXdfc2VuZG1zZ2AsIGFsdGhvdWdoIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBsYXR0ZXIgcG9pbnQuIEJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhlcmUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX2RncmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTk0OT1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE0NDk9c3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgQ2hhbmdlKioKCk9rYXksIHNvIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgX19pcF9hcHBlbmRfZGF0YWAgYW5kIGBfX2lwNl9hcHBlbmRfZGF0YWAuIFRoYXQgbWVhbnMgdGhpcyBpcyBjb3JlIGtlcm5lbCBsb2dpYyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCBkaXJlY3RseSByZWxhdGVkIHRvIFVEUCBhbmQgUmF3IHNvY2tldHMgdXNpbmcgYE1TR19aRVJPQ09QWWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgY3JpdGljYWwgcGF0aC4KClRoZSBjaGFuZ2UgaXRzZWxmIGlzIHRoZSBlcnJvciBjb2RlIOKAkyBzd2l0Y2hpbmcgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAuIEZ1bmN0aW9uYWxseSwgdGhhdCYjMzk7cyBhIHByZXR0eSBiaWcgZGVhbC4gRGlmZmVyZW50IGVycm9yIGNvZGVzIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGF0IHRoZSB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBsZXZlbC4gSXQgbWVhbnMgdGhlIGJlaGF2aW9yIG9mIGFwcGxpY2F0aW9ucyBvciB0aGUga2VybmVsIGl0c2VsZiBjb3VsZCBjaGFuZ2UgZGVwZW5kaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHRoaXMgc3BlY2lmaWMgZXJyb3IuIEdpdmVuIGl0cyBjZW50cmFsaXR5IGFuZCB0aGUgY2hhbmdlIGluIGVycm9yIGNvZGVzLCB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gV2UgbmVlZCB0byBleHBsb3JlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgYW5kIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gdGhlIGNoYW5nZSYjMzk7cyBpbXBhY3QgYW5kIGluZm9ybSBvdXIgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2dfZnJvbV9pdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTExMj1zdHJ1Y3QgaW9fcmVjdnpjIHtcbi0tXG5pb191cmluZy9uZXQuYy0xMTgtXG5pb191cmluZy9uZXQuYzoxMTk6c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmlvX3VyaW5nL25ldC5jLTEyMC1cdFx0XHRcdCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmM6MTIxOnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG5pb191cmluZy9uZXQuYy0xMjItXHRcdFx0ICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xMzc4PWludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9uZXQuYy0xNDQzLVx0aWYgKCEoemMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpKSB7XG5pb191cmluZy9uZXQuYzoxNDQ0Olx0XHRpb21zZy1cdTAwM2Vtc2cuc2dfZnJvbV9pdGVyID0gaW9fc2dfZnJvbV9pdGVyX2lvdmVjO1xuaW9fdXJpbmcvbmV0LmMtMTQ0NS1cdFx0cmV0dXJuIGlvX25vdGlmX2FjY291bnRfbWVtKHpjLVx1MDAzZW5vdGlmLCBpb21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIuY291bnQpO1xuaW9fdXJpbmcvbmV0LmMtMTQ0Ni1cdH1cbmlvX3VyaW5nL25ldC5jOjE0NDc6XHRpb21zZy1cdTAwM2Vtc2cuc2dfZnJvbV9pdGVyID0gaW9fc2dfZnJvbV9pdGVyO1xuaW9fdXJpbmcvbmV0LmMtMTQ0OC1cdHJldHVybiAwO1xuLS1cbmlvX3VyaW5nL25ldC5jLTE0NTAtXG5pb191cmluZy9uZXQuYzoxNDUxOnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG5pb191cmluZy9uZXQuYy0xNDUyLVx0XHRcdFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcbi0tXG5pb191cmluZy9uZXQuYy0xNDU3LVxuaW9fdXJpbmcvbmV0LmM6MTQ1ODpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW9fdXJpbmcvbmV0LmMtMTQ1OS1cdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gWmVyby1Db3B5IGluIGlvX3VyaW5nIHNlbmRtc2cqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgaW9fc2dfZnJvbV9pdGVyYCBhbmQgYGlvX3NnX2Zyb21faXRlcl9pb3ZlY2AgYXJlIGtleSBmb3IgaW9fdXJpbmcmIzM5O3MgYHNlbmRtc2dgIGZ1bmN0aW9uYWxpdHkgd2hlbiB1c2VkIHdpdGggYE1TR19aRVJPQ09QWWAuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgbXVzdCBiZSB3aXRoaW4gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIExldCBtZSBtYXAgb3V0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgdG8gZGlnIGludG8uCgpBbHJpZ2h0LCB0aGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb246IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCB0aGVuIHRoZSBpbnRlcm5hbHMgYXJlIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gLCBhbmQgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZGl2aW5nIGludG8gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgYXMgdGhlc2UgYXJlIHByb2JhYmx5IHRoZSBoaWdoZXN0IGxldmVsIGNoYW5nZXMgaW4gdGhlIHplcm8tY29weSBkYXRhcGF0aCwgYW5kIEkmIzM5O2xsIGZpbmQgdGhlbSB3aXRoaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYzPWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Njg6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1NC1cdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTQ1OD1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NzAtXHRlbHNlIGlmICh1bmxpa2VseSghc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pb191cmluZy9uZXQuYzoxNDcxOlx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbmlvX3VyaW5nL25ldC5jLTE0NzItXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz02MzM9RVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM2LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2Vcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBFeHBvcnQgU3RhdHVzKioKCk9rYXksIHNvIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW50ZXJlc3RpbmcgZnVuY3Rpb24sIGFuZCB0aGUgbmFtZSBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBwb3RlbnRpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyBpdCBhY3R1YWxseSBleHBvcnRlZCwgYW5kIHRoZXJlZm9yZSBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIG9mIGl0cyBvd24gbW9kdWxlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaXRzIHZpc2liaWxpdHkuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBpdHMgZGF0YWdyYW0tcmVsYXRlZCBuYW1lLCBpcyB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIGNvcmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgb3V0IGlmIGl0IGlzIGFuIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2wgb3IgaWYgaXQmIzM5O3MgcmVzdHJpY3RlZCB0byBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoYXQgbW9kdWxlLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDYzNjpcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuIDYzNzpcdHtcbiA2Mzg6XHRcdGludCBmcmFnID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzO1xuIDYzOTpcdFxuIDY0MDpcdFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbiA2NDE6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA2NDI6XHRcbiA2NDM6XHRcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gNjQ0Olx0XHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB3aGF0ZXZlciBmaWVsZCBpcyByZWxldmFudCwgYW5kIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSAmIzM0O2Z1bHNvbWUgc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzJiMzNDs6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVGhlIEV4cG9ydCBDb250ZXh0KioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogKipJcyBpdCBleHBvcnRlZD8qKiBUaGlzIGlzIHRoZSBjcnVjaWFsLCBmb3VuZGF0aW9uYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBldmVuIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQmIzM5O3MgaW50ZW5kZWQgZm9yLCBvciBzdXNjZXB0aWJsZSB0bywgYmVpbmcgbW92ZWQgb3V0IG9mIGl0cyBvcmlnaW5hbCBlbnZpcm9ubWVudC4gVGhpcyBzZXRzIHRoZSBzdGFnZSBmb3IgZXZlcnl0aGluZyBlbHNlLiAmIzM0O0V4cG9ydCYjMzQ7IGlzIGEgbG9hZGVkIHRlcm07IGl0IGltcGxpZXMgY2VydGFpbiByZWd1bGF0aW9ucywgcHJvY2Vzc2VzLCBwb3RlbnRpYWwgY29zdHMsIGFuZCwgZnJhbmtseSwgb3Bwb3J0dW5pdGllcyBvciBpc3N1ZXMgd2l0aCBjb21wbGlhbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCB0aGUgcG90ZW50aWFsIGRlc3RpbmF0aW9uLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTU6XHRcdFx0XHRcdHBhZ2VfcmVmX3N1YihsYXN0X2hlYWQsIHJlZnMpO1xuIDY5NjpcdFx0XHRcdFx0cmVmcyA9IDA7XG4gNjk3Olx0XHRcdFx0fVxuIDY5ODpcdFx0XHRcdHNrYl9maWxsX3BhZ2VfZGVzY19ub2FjYyhza2IsIGZyYWcmIzQzOyYjNDM7LCBoZWFkLCBzdGFydCwgc2l6ZSk7XG4gNjk5Olx0XHRcdH1cbiA3MDA6XHRcdFx0aWYgKHJlZnMpXG4gNzAxOlx0XHRcdFx0cGFnZV9yZWZfc3ViKGxhc3RfaGVhZCwgcmVmcyk7XG4gNzAyOlx0XHR9XG4gNzAzOlx0XHRyZXR1cm4gMDtcbiA3MDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0ODIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiYjMzk7cyBTY29wZSoqCgpIbW0sIHNvIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQganVzdCBiZWNhdXNlIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IG1lYW4gaXQmIzM5O3Mgc3RhdGljLiBPa2F5LCBsZXQmIzM5O3MgYmFjayB1cCBhIG1vbWVudC4gSWYgaXQmIzM5O3MgKm5vdCogc3RhdGljLCB0aGVuIGl0JiMzOTtzIGFjY2Vzc2libGUgZ2xvYmFsbHksIHdoaWNoIHN1Z2dlc3RzIGl0IGlzIGEgZ2xvYmFsIHN5bWJvbC4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uOiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBXYWl0LCBJIHRob3VnaHQgSSByZW1lbWJlciByZWFkaW5nIHRoYXQgZnVuY3Rpb24gYXMgZGVjbGFyZWQgYHN0YXRpY2AuIFNvLCBnb2luZyBiYWNrLCBpdCBpcyBgc3RhdGljYCBhbmQgdGh1cyBsb2NhbCB0byB0aGUgY29tcGlsYXRpb24gdW5pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDU6XHRcbiA3MDY6XHRzdGF0aWMgaW50XG4gNzA3Olx0emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIDcwODpcdFx0XHRcdCAgICAgIGludCBsZW5ndGgsXG4gNzA5Olx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gNzEwOlx0e1xuIDcxMTpcdFx0aW50IGkgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gNzEyOlx0XHRzaXplX3QgdmlydF9hZGRyLCBzaXplLCBvZmY7XG4gNzEzOlx0XHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcbiA3MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBaZXJvLUNvcHkgRGF0YSBUcmFuc2ZlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB6ZXJvLWNvcHkgZGF0YSB0cmFuc2ZlciwgYW5kIEkgYmVsaWV2ZSB0aGF0IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gQW5kLCB5ZXMsIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgZGVmaW5pdGVseSBvbiB0aGUgcmFkYXIgYXMgYSBnb29kIGZvY3VzIHBvaW50LiBBbHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGluY2x1ZGluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB0byB0aGlzIGxpc3QgYXMgd2VsbC4gU28sIGxldCBtZSBhZGQgdGhvc2UgdG8gbXkgbWVudGFsIG5vdGVzLCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLgoKSG1tLCBhIHF1aWNrIG5vdGUsIEkgc2hvdWxkIGtlZXAgaW4gbWluZCB0aGF0IGBpb19zZ19mcm9tX2l0ZXJgIGFuZCBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYCBhcmUgKnN0YXRpYyouIEFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQW5kLCB0byBrZWVwIG15IGJlYXJpbmdzLCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCAqaXNuJiMzOTt0KiBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX3N0cmVhbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xubmV0L2NvcmUvc2tidWZmLmMtMTkxMS1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xubmV0L2NvcmUvc2tidWZmLmMtMTk1MS1cbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzMzgtXG5uZXQvaXB2NC90Y3AuYzoxMzM5Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQwLVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gVGhpcyBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSB0byBleHBsb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCioqWmVyby1Db3B5IGFuZCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBtZXRob2QsIG9yIHJlbGF0ZWQgbWV0aG9kcy4gVGhlIHN0YW5kYXJkIGBNU0dfWkVST0NPUFlgIGZlYXR1cmUgaXMgd2VsbC1lc3RhYmxpc2hlZCwgYnV0IGl0JiMzOTtzIGxpa2VseSB0aGVyZSBhcmUgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWdzIGFuZCBlbnN1cmUgdGhhdCB3aGF0ZXZlciBzdXBwb3J0IGlzIHJlcXVpcmVkIGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZS4gTGV0IG1lIHNlZSB3aGljaCBzcGVjaWZpYyBrbm9icyBhbmQgbGV2ZXJzIEkgY2FuIHR1cm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Ny1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjktXHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTE0NTE9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pb191cmluZy9uZXQuYy0xNDU0LVx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG5pb191cmluZy9uZXQuYzoxNDU1Olx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XG5pb191cmluZy9uZXQuYy0xNDU2LX1cbi0tXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ3MC1cdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcbmlvX3VyaW5nL25ldC5jOjE0NzE6XHRcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ3Mi1cbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM0LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo2MzU6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVx0ZWxzZVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjM6XHRcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmtpbmcgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmtpbmcgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN0dWZmIGlzIGFsbCBjZW50cmFsaXplZCBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIFRoYXQmIzM5O3MgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBzaW5jZSBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQgYXMgbG9uZyBhcyBuZXR3b3JraW5nIGlzIHVwLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayBpdCYjMzk7cyBhbHNvIHdvcnRoIGludmVzdGlnYXRpbmcgdGhpcyBpbiBsaWdodCBvZiBgSU9fVVJJTkdgLCBhcyBpdCB0ZW5kcyB0byBsZXZlcmFnZSBjb3JlIGRhdGFncmFtIGZ1bmN0aW9uYWxpdGllcy4gTGV0JiMzOTtzIHNlZSwgbm93IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IG5ldHdvcmtpbmcgY29yZS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcbiAgIDc6XHRcdCBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBcXFxuICAgODpcdFx0IGZsb3dfZGlzc2VjdG9yLm9cbiAgIDk6XHRcbiAgMTA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9jb3JlLm9cbiAgMTE6XHRcbiAgMTI6XHRvYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4gIDEzOlx0XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbiAgMTQ6XHRcdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4gIDE1Olx0XHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbiAgMTY6XHRcdFx0XHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIG5ldGRldl93b3JrLm8gZ3NvLm9cbiAgMTc6XHRcbiAgMTg6XHRvYmotJChDT05GSUdfTkVUREVWX0FERFJfTElTVF9URVNUKSAmIzQzOz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXG4gIDE5Olx0XG4gIDIwOlx0b2JqLXkgJiM0Mzs9IG5ldC1zeXNmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTI1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBgZGF0YWdyYW0ub2AgTW9kdWxlKioKCk9rYXksIHNvIGBkYXRhZ3JhbS5vYCBpcyBhIGNvbnNpc3RlbnRseSBjb21waWxlZCBjb21wb25lbnQg4oCTIGdvb2QgdG8ga25vdy4gVGhpcyBtZWFucyBJIGRvbiYjMzk7dCBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggc3BlY2lhbCBjb25maWd1cmF0aW9ucyAqdW5sZXNzKiBJIHNwZWNpZmljYWxseSB3YW50IHRvIGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCBgaW9fdXJpbmdgLiBFdmVuIHRoZW4sIHRoYXQmIzM5O3MgcmVhbGx5IGp1c3QgdGhlIG9uZSBwb3RlbnRpYWwgd3JpbmtsZSBmb3IgYWNjZXNzLgoKT2YgY291cnNlLCBldmVuIGlmIEkgZG9uJiMzOTt0IHVzZSBgaW9fdXJpbmdgLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhdCBpdCB1c2luZyBhIHN0YW5kYXJkIHNvY2tldCBgc2VuZG1zZ2AgY2FsbCB3aXRoIGBNU0dfWkVST0NPUFlgLiBUaGF0JiMzOTtzIGEgc29saWQgZmFsbGJhY2sgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBwYXRoLiBOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCB0byB1bmRlcnN0YW5kIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhpcyB6ZXJvLWNvcHkgbWVjaGFuaXNtIGZ1bmN0aW9ucyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzA3Onplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVx0XHRcdCAgICAgIGludCBsZW5ndGgsXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVx0ZWxzZSBpZiAoYmluZGluZylcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShza2IsIGZyb20sIGxlbmd0aCwgYmluZGluZyk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGV4cGxpY2l0bHkgdGllZCB0byBhIHNpdHVhdGlvbiB3aGVyZSBgYmluZGluZ2AgaXNuJiMzOTt0IGEgbnVsbCBwb2ludGVyLiBTbywgdGhlIGtleSBxdWVzdGlvbiBpczogV2hhdCBkb2VzIHRoaXMgYGJpbmRpbmdgIHRoaW5nICphY3R1YWxseSogcmVwcmVzZW50PyBXaGVyZSBkb2VzIHRoaXMgdmFyaWFibGUgb3JpZ2luYXRlPyBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBhbmQgcHVycG9zZSBvZiBgYmluZGluZ2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCByYXRpb25hbGUgYmVoaW5kIHVzaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb2RlIGlzIHNldHRpbmcgb3IgcGFzc2luZyBhIG5vbi1udWxsIGBiaW5kaW5nYCB0byBzZWUgd2h5IGl0IG5lY2Vzc2l0YXRlcyB0aGlzIHplcm8tY29weSBhcHByb2FjaC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDgtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0OTppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc0LX1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NzYtXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03ODc9aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTQtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NTpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5Ni19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTMzLVxubmV0L2NvcmUvc2tidWZmLmM6MTkzNDpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTM1LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk1NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqWmVyby1Db3B5IEl0ZXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB3aGVuIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBza2JzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHN0cmVhbS1vcmllbnRlZCBuZXR3b3JraW5nLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgaXRlcmF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggY29udGlndW91cyBzZWdtZW50cyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgc2ticyBoZXJlPyBJdCYjMzk7cyBjcml0aWNhbCB0byBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgY29weWluZywgYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgZWZmaWNpZW5jeSBhbmQgbWluaW1hbCBvdmVyaGVhZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGl0ZXJhdGluZyBwcm9jZXNzIGNvdWxkIGluYWR2ZXJ0ZW50bHkgY2F1c2UgY29weWluZyB0byBvY2N1ci4gSeKAmW0gd29uZGVyaW5nIGFib3V0IHBvdGVudGlhbCBwaXRmYWxscywgdGhpbmdzIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBJcyB0aGlzIHRoZSAqcmlnaHQqIHdheSB0byBnbyBhYm91dCBpdD8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBwYXJ0aWFsIHJlYWRzIGFuZCB3cml0ZXM/IEkgbmVlZCB0byBxdWlja2x5IGFuZCBjb21wcmVoZW5zaXZlbHkgY29uZmlybSBpdHMgYmVoYXZpb3VyIHVuZGVyIHZhcmlvdXMgZWRnZSBjYXNlczogYnVmZmVyIG92ZXJmbG93cywgdW5kZXJmbG93cywgYW5kIHBhcnRpYWwgd3JpdGVzL3JlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTEyOmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMzM4LVxubmV0L2lwdjQvdGNwLmM6MTMzOTpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cdFx0XHRcdFx0XHQgICAgICAgYmluZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjUyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBCaW5kaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gVGhlIGBiaW5kaW5nYCBJJiMzOTttIHNlZWluZyBpbnNpZGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgcG9pbnRpbmcgYmFjayB0byBgc29ja2MuZGV2bWVtX2JpbmRpbmdgLiBBaCwgcmlnaHQsIHRoYXQgY29ubmVjdHMgaXQgdG8gdGhlIFRDUCBkZXZtZW0gZnVuY3Rpb25hbGl0eSDigJMgZGV2aWNlIG1lbW9yeSBUQ1AuIFNvLCB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgaXM6IGlzIHRoaXMgc3BlY2lmaWMgVENQIGRldm1lbSBpbXBsZW1lbnRhdGlvbiBjb25maWd1cmFibGU/IEFyZSB0aGVyZSBhbnkga25vYnMgb3Igc2V0dGluZ3MgSSBjYW4gdHdlYWsgcmVsYXRlZCB0byBUQ1AgZGV2bWVtIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXMgYGJpbmRpbmdgIGJlaGF2aW9yPyBOZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlncyB0byBzZWUgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkIGZvciB0aGlzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bWVtX2JpbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIHJlYXNvbmluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGdyb3VuZGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBkZWVwZXIgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBhIGxvdCBoaW5nZXMgb24gaXRzIGJlaGF2aW9yLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSB3b3JrIG9mIHNlbmRpbmcgVENQIGRhdGEgaGFwcGVucywgYW5kIGFueSBzdWJ0bGUgbWlzc3RlcHMgaGVyZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGxvY2tpbmcgc3RyYXRlZ2llcywgaG93IGl0IGhhbmRsZXMgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgSeKAmW0gbWFraW5nIGFib3V0IGl0cyBkYXRhIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQuIEJlZm9yZSBJIGdvIGRvd24gYSByYWJiaXQgaG9sZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBJIHVuZGVyc3RhbmQgd2hhdCBpcyBhY3R1YWxseSBnb2luZyBvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldm1lbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jLTI5MC1cbm5ldC9pcHY0L3RjcC5jOjI5MTojaW5jbHVkZSBcJiMzNDsuLi9jb3JlL2Rldm1lbS5oXCYjMzQ7XG5uZXQvaXB2NC90Y3AuYy0yOTItXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xubmV0L2lwdjQvdGNwLmM6MTExODpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nID0gTlVMTDtcbm5ldC9pcHY0L3RjcC5jLTExMTktXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbm5ldC9pcHY0L3RjcC5jOjExNTk6XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNjAtXHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTQyMC1cdGlmIChiaW5kaW5nKVxubmV0L2lwdjQvdGNwLmM6MTQyMTpcdFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XG5uZXQvaXB2NC90Y3AuYy0xNDIyLVx0cmV0dXJuIGNvcGllZCAmIzQzOyBjb3BpZWRfc3luO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE0MzktXHRpZiAoYmluZGluZylcbm5ldC9pcHY0L3RjcC5jOjE0NDA6XHRcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xubmV0L2lwdjQvdGNwLmMtMTQ0MS1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yNDk5PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTc1LVx0XHRcdG5pb3YgPSBza2JfZnJhZ19uZXRfaW92KGZyYWcpO1xubmV0L2lwdjQvdGNwLmM6MjU3NjpcdFx0XHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XG5uZXQvaXB2NC90Y3AuYy0yNTc3LVx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTk4LVx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ190b2tlbiA9IHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdO1xubmV0L2lwdjQvdGNwLmM6MjU5OTpcdFx0XHRcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XG5uZXQvaXB2NC90Y3AuYy0yNjAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgKioKClJpZ2h0LCBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuLi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEJlc3QgdG8gc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24uIExldCYjMzk7cyBwdWxsIHVwIGBuZXQvY29yZS9kZXZtZW0uaGAgYW5kIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLCBlbnVtZXJhdGlvbnMsIGFuZCBhbnkgaW5saW5lIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHRoZSBpbnRlbnQuIEtub3dpbmcgdGhlIGJpbmRpbmcgc3RyYXRlZ3kgYW5kIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSByZWdpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3Mgcm9sZS4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIG1lbW9yeSBtYXBwaW5nIGRldGFpbHMsIGFuZCBwZXJoYXBzIHNvbWUgY29uc2lkZXJhdGlvbnMgYXJvdW5kIGRldmljZS1zcGVjaWZpYyBhbGxvY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiBEZXZpY2UgbWVtb3J5IFRDUCBzdXBwb3J0XG4gICA0Olx0ICpcbiAgIDU6XHQgKiBBdXRob3JzOlx0TWluYSBBbG1hc3J5IFx1MDAzY2FsbWFzcnltaW5hQGdvb2dsZS5jb21cdTAwM2VcbiAgIDY6XHQgKlx0XHRXaWxsZW0gZGUgQnJ1aWpuIFx1MDAzY3dpbGxlbWJAZ29vZ2xlLmNvbVx1MDAzZVxuICAgNzpcdCAqXHRcdEthaXl1YW4gWmhhbmcgXHUwMDNja2FpeXVhbnpAZ29vZ2xlLmNvbVx1MDAzZVxuICAgODpcdCAqXG4gICA5Olx0ICovXG4gIDEwOlx0I2lmbmRlZiBfTkVUX0RFVk1FTV9IXG4gIDExOlx0I2RlZmluZSBfTkVUX0RFVk1FTV9IXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldG1lbS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcdTAwM2VcbiAgMTU6XHRcbiAgMTY6XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xuICAxNzpcdFxuICAxODpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcbiAgMTk6XHRcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4gIDIwOlx0XHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBkZXZtZW1gIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYGRldm1lbWAuIElzIHRoZXJlIGEgY29uZmlndXJhdGlvbiBmaWxlIHNvbWV3aGVyZSB0aGF0IGNvbnRyb2xzIGl0cyBiZWhhdmlvciBvciBkZWZhdWx0IHNldHRpbmdzPyBJIGtub3cgaXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHV0aWxpdHkgZm9yIGFjY2Vzc2luZyBtZW1vcnkgZGlyZWN0bHksIGJ1dCBzdXJlbHkgdGhlcmUmIzM5O3MgKnNvbWV0aGluZyogSSBjYW4gdHdlYWsgdG8gdGFpbG9yIGl0cyBvcGVyYXRpb24uIE1heWJlIHNvbWV0aGluZyBhYm91dCBlcnJvciByZXBvcnRpbmcsIGFjY2VzcyBwZXJtaXNzaW9ucywgb3IgcGVyaGFwcyBldmVuIGEgZGVmYXVsdCBhZGRyZXNzIHNwYWNlIGl0IG9wZXJhdGVzIHdpdGhpbi4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTt2ZSBwcm9iYWJseSBqdXN0IG1pc3NlZCBzb21ldGhpbmcgaW4gdGhlIGRvY3VtZW50YXRpb24sIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYW5zd2VyLiBUaW1lIHRvIGRpZyBhcm91bmQgdGhlIHVzdWFsIHBsYWNlcyAtIGAvZXRjYCwgYC91c3IvbG9jYWwvZXRjYCwgdGhlIG1hbiBwYWdlIG9mIGNvdXJzZSwgYW5kIGFueSByZWxldmFudCBwYWNrYWdlIGRvY3VtZW50YXRpb24uIEkgZG91YnQgaXQgd291bGQgYmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGNvbXBsZXgsIGJ1dCBJIGRvIHRlbmQgdG8gb3Zlcmxvb2sgdGhlIG9idmlvdXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qREVWTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhci9LY29uZmlnPTI0OT1jb25maWcgTlNDX0dQSU9cbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNTgtXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNTk6Y29uZmlnIERFVk1FTVxuZHJpdmVycy9jaGFyL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDsvZGV2L21lbSB2aXJ0dWFsIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxubGliL0tjb25maWc9NjE3PWNvbmZpZyBHRU5FUklDX0xJQl9VQ01QREkyXG4tLVxubGliL0tjb25maWctNjE5LVxubGliL0tjb25maWc6NjIwOmNvbmZpZyBHRU5FUklDX0xJQl9ERVZNRU1fSVNfQUxMT1dFRFxubGliL0tjb25maWctNjIxLVx0Ym9vbFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTE5NTc9c291cmNlIFwmIzM0O3NhbXBsZXMvS2NvbmZpZ1wmIzM0O1xubGliL0tjb25maWcuZGVidWctMTk1OC1cbmxpYi9LY29uZmlnLmRlYnVnOjE5NTk6Y29uZmlnIEFSQ0hfSEFTX0RFVk1FTV9JU19BTExPV0VEXG5saWIvS2NvbmZpZy5kZWJ1Zy0xOTYwLVx0Ym9vbFxubGliL0tjb25maWcuZGVidWctMTk2MS1cbmxpYi9LY29uZmlnLmRlYnVnOjE5NjI6Y29uZmlnIFNUUklDVF9ERVZNRU1cbmxpYi9LY29uZmlnLmRlYnVnLTE5NjMtXHRib29sIFwmIzM0O0ZpbHRlciBhY2Nlc3MgdG8gL2Rldi9tZW1cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xOTgxLVxubGliL0tjb25maWcuZGVidWc6MTk4Mjpjb25maWcgSU9fU1RSSUNUX0RFVk1FTVxubGliL0tjb25maWcuZGVidWctMTk4My1cdGJvb2wgXCYjMzQ7RmlsdGVyIEkvTyBhY2Nlc3MgdG8gL2Rldi9tZW1cJiMzNDtcbi0tXG5uZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcbi0tXG5uZXQvS2NvbmZpZy02OC1cbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXG5uZXQvS2NvbmZpZy03MC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4OTQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFplcm8tQ29weSBOZXR3b3JraW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgTkVUX0RFVk1FTWAgaXMgYSBgZGVmX2Jvb2wgeWAsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFsd2F5cyBvbiBpZiBuZXR3b3JraW5nIGlzIGVuYWJsZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbiBmb3IgaXQuIExldCYjMzk7cyBtb3ZlIG9uIHRvIGlkZW50aWZ5aW5nIHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLgoKUmlnaHQsIHRoZSBpbml0aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLgoKSG9sZCBvbiwgSSByZWNhbGwgdGhhdCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2hpbGUgSSYjMzk7bSBoZXJlLiBJdCBhcHBlYXJzIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGlzIHRoZSBvbmUgdGhhdCB3YXMgcmVjZW50bHkgbW9kaWZpZWQuIFRoZSBzdGF0aWMgZnVuY3Rpb24gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBjYW4mIzM5O3QgYmUgdXNlZCBkaXJlY3RseSBidXQgaXMgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBPa2F5LCBpdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBnbG9iYWxseSB2aXNpYmxlLiBXZSBjYW4gY29uZmlybSB0aGF0IGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGFyZSBib3RoIGV4cG9ydGVkLCBhbmQgc28gaXMgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuCgpBbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHNhbWUgcGFnZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAKKiAgIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAKKiAgIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgCiogICBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYAoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCEgU2luY2UgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgaXMgdXNlZCBkaXJlY3RseSBieSBgaW9fc2dfZnJvbV9pdGVyYCwgYElPX1VSSU5HYCBpcyBhIGdvb2QgY29uZmlnIHRvIGFkZCB0byB0aGUgbGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNy1cbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTktXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzOS1cbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTQxLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyB0aG91Z2h0czoKCioqQ29uZmlndXJpbmcgdGhlIEtlcm5lbDogSW5pdGlhbCBDaGVja3MgYW5kIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQga2VybmVsIGNvbmZpZ3VyYXRpb24sIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGBJT19VUklOR2AgZmVhdHVyZS4gVGhhdCYjMzk7cyB0aGUgbWFpbiBkcml2ZXIgb2YgdGhpcyB0aG91Z2h0IHByb2Nlc3MuIEl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlOyB0aGF0JiMzOTtzIHRoZSBmb2NhbCBwb2ludC4KCkkmIzM5O20gaW1tZWRpYXRlbHkgcHJvbXB0ZWQgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGEgc3lzdGVtYXRpYyBhcHByb2FjaCwgcmlnaHQ/IFNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24gaW4gdGhlIHNhbWUgbmVpZ2hib3Job29kLiBgTkVUX0RFVk1FTWAgaXMgc2hvd2luZyBgZGVmX2Jvb2wgeWAsIGFuZCwgd2VsbCwgYE5FVGAgaXRzZWxmIGlzIGEgZ2l2ZW4uIFRoZXNlIGFyZSBwcmV0dHkgY29tbW9uOyBub3RoaW5nIGdyb3VuZGJyZWFraW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgaW9fc2dfZnJvbV9pdGVyYC4gU2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgaGVyZSB0aGF0IHdhcnJhbnRzIGEgc2Vjb25kIGxvb2suIE1heWJlIHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSwgYSBzdWJ0bGUgaW50ZXJhY3Rpb24sIG9yIHBlcmhhcHMgSSYjMzk7bSB0cnlpbmcgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgYElPX1VSSU5HYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgdXAgdG8gc3BlZWQgb24gYWxsIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZ19mcm9tX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTEyPXN0cnVjdCBpb19yZWN2emMge1xuLS1cbmlvX3VyaW5nL25ldC5jLTExOC1cbmlvX3VyaW5nL25ldC5jOjExOTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcl9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW9fdXJpbmcvbmV0LmMtMTIwLVx0XHRcdFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XG5pb191cmluZy9uZXQuYzoxMjE6c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmlvX3VyaW5nL25ldC5jLTEyMi1cdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTEzNzg9aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NDMtXHRpZiAoISh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0ZJWEVEX0JVRikpIHtcbmlvX3VyaW5nL25ldC5jOjE0NDQ6XHRcdGlvbXNnLVx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXJfaW92ZWM7XG5pb191cmluZy9uZXQuYy0xNDQ1LVx0XHRyZXR1cm4gaW9fbm90aWZfYWNjb3VudF9tZW0oemMtXHUwMDNlbm90aWYsIGlvbXNnLVx1MDAzZW1zZy5tc2dfaXRlci5jb3VudCk7XG5pb191cmluZy9uZXQuYy0xNDQ2LVx0fVxuaW9fdXJpbmcvbmV0LmM6MTQ0NzpcdGlvbXNnLVx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXI7XG5pb191cmluZy9uZXQuYy0xNDQ4LVx0cmV0dXJuIDA7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1MC1cbmlvX3VyaW5nL25ldC5jOjE0NTE6c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmlvX3VyaW5nL25ldC5jLTE0NTItXHRcdFx0XHQgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NTctXG5pb191cmluZy9uZXQuYzoxNDU4OnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG5pb191cmluZy9uZXQuYy0xNDU5LVx0XHRcdCAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIERhdGEgVHJhbnNmZXIgUHJlcGFyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBoZXJlLiBUaGUgZnVuY3Rpb24gYGlvX3NlbmRfemNfcHJlcGAgaXMgdGhlIG9uZSB0aGF0IHNldHMgdGhlIGBzZ19mcm9tX2l0ZXJgIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBjcml0aWNhbC4gTm93LCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgYGlvX3NlbmRfemNfcHJlcGAuIElzIGl0IGV4cG9ydGVkLCBvciBpcyBpdCBhIGdsb2JhbCBmdW5jdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBhY2Nlc3NpYmxlIGFuZCwgYnkgZXh0ZW5zaW9uLCBob3cgSSBjYW4gYmVzdCB1dGlsaXplIHRoaXMgZnVuY3Rpb24gaW4gbXkgdXNlIGNhc2UuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgdHJhbnNmZXIgaXMgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX3pjX3ByZXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTM2MT12b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbi0tXG5pb191cmluZy9uZXQuYy0xMzc3LVxuaW9fdXJpbmcvbmV0LmM6MTM3ODppbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0xMzc5LXtcbi0tXG5pb191cmluZy9uZXQuaD01ND1pbnQgaW9fc2VuZG1zZ196YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5oOjU1OmludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9uZXQuaC01Ni12b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTQzMy1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG5pb191cmluZy9vcGRlZi5jOjQzNDpcdFx0LnByZXBcdFx0XHQ9IGlvX3NlbmRfemNfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmMtNDM1LVx0XHQuaXNzdWVcdFx0XHQ9IGlvX3NlbmRtc2dfemMsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00NDYtXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuaW9fdXJpbmcvb3BkZWYuYzo0NDc6XHRcdC5wcmVwXHRcdFx0PSBpb19zZW5kX3pjX3ByZXAsXG5pb191cmluZy9vcGRlZi5jLTQ0OC1cdFx0Lmlzc3VlXHRcdFx0PSBpb19zZW5kbXNnX3pjLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5NwoJCQkJCQkJb3V0cHV0OiAyMjkKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFplcm9jb3B5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0d28gZ2xvYmFsIGZ1bmN0aW9ucyBqdW1wIG91dCBhdCBtZTogYGlvX3NlbmRfemNfcHJlcGAgYW5kIGBpb19zZW5kbXNnX3pjYC4gTGV0JiMzOTtzIGFkZCB0aGF0IGBpb19zZW5kbXNnX3pjYCB0byB0aGUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGhlcmUgaXMgYWJvdXQgaG93IHdlJiMzOTtyZSB0cmVhdGluZyBkYXRhZ3JhbXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLgoKUmlnaHQsIHNvIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgbWUgdG8gZm9jdXMgb24gYXJlIG5vdzoKCiogICBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYAoqICAgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYAoqICAgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAKKiAgIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gCiogICBgaW9fc2VuZG1zZ196Y2AKClRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgY2hhbmdlIGl0IG1ha2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdHdlYWtpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gTm93LCB3aGVuIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNoaWZ0aW5nIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgLiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhci4gVGhpcyBpcyBkaXJlY3RseSB0aWVkIHRvIE1TR1xfWkVST0NPUFkgYW5kIGlvXF91cmluZyB6ZXJvY29weSBzZW5kcywgd2hpY2gsIGFzIHdlIGtub3csIGFyZSBjcml0aWNhbCBhcmVhcyBvZiBoaWdoIHBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGFuZCBjYW4gYmUgZWFzaWx5IGltcGFjdGVkLgoKVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIHN1YnRsZSwgYnV0IGl0JiMzOTtzIGNoYW5naW5nIHRoZSBlcnJvciBjb2RlIHRoYXQgZ29lcyBiYWNrIHRvIHVzZXJzcGFjZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUga2VybmVsIGl0c2VsZiBoYW5kbGVzIHRoZSBlcnJvci4gVGhpcyBpcyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIHVzZWZ1bCwgYXMgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBleHBlY3RlZCByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggcmVncmVzc2lvbiBhbmQgdW5leHBlY3RlZCBiZWhhdmlvci4KClNvLCBsZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O19femVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAgICYjMzQ7aW9fc2VuZG1zZ196YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVncmVzc2lvbnMgaW4gZXJyb3IgaGFuZGxpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O19femVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAgICYjMzQ7aW9fc2VuZG1zZ196YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVncmVzc2lvbnMgaW4gZXJyb3IgaGFuZGxpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJiMzOTtzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MDE0OWY3OWFhMDExYjAzODllMzAxNDQ4ZDI0YWZhNGY3NzNhYTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMzozNDozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDE3M2I1ZDk3YmQ0MDkuLjZmOGZmZDYxYmNhYjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOwogCiAJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJd2hpbGUgKGxlbmd0aCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiAJCXN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDsKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCXN0cnVjdCBuZXRfaW92ICpuaW92OwogCiAJaWYgKGkgJmFtcDsmYW1wOyBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJLyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlCiAJICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0bwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDaGFuZ2UgaW4gRXJyb3IgQ29kZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHN1YnRseSBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2l0aGluIHRoZSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBUaGUgY29uZGl0aW9uIHRyaWdnZXJpbmcgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2hlbiBgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGlzIGZhbHNlIChmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uKSBvciB0cnVlIHdpdGggYW4gaW5kZXggJiMzOTtpJiMzOTsgKGZvciB0aGUgc2Vjb25kKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1NvIHdoYXQ/JiMzNDsuIEl0JiMzOTtzIGp1c3QgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSwgcmlnaHQ/IE5vdCBleGFjdGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLiBFcnJvciBjb2Rlcywgd2hpbGUgc2VlbWluZ2x5IHNpbXBsZSwgY2FuIGhhdmUgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgY2FsbGluZyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gdXNlciBzcGFjZSwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyB0aGlua2luZzogRG9lcyB0aGlzIGRpZmZlcmVudCBlcnJvciBjb2RlIHBvdGVudGlhbGx5IGNoYW5nZSBob3cgdGhlIGNhbGxlciBoYW5kbGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgY2FsbGVycyBzaG91bGQganVzdCBiZSBwcm9wYWdhdGluZyB0aGUgZXJyb3JzIHVwd2FyZHMsIHJpZ2h0PyAKCk9rYXksIGxldCBtZSBjaGVjayB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gVGhlIHRleHQgbWVudGlvbnMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4sIGJlY2F1c2UgSSB0aG91Z2h0IHRoZSBzZWNvbmQgZnVuY3Rpb24gd2FzIGNhbGxlZCBieSB0aGUgZmlyc3QuIEkgd2lsbCBwZXJmb3JtIGEgZ3JlcCB0byBjb25maXJtIHRoZSBkaXJlY3QgY2FsbCBzaXRlIG9mIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYzPWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Njg6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1NC1cdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTQ1OD1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NzAtXHRlbHNlIGlmICh1bmxpa2VseSghc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pb191cmluZy9uZXQuYzoxNDcxOlx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbmlvX3VyaW5nL25ldC5jLTE0NzItXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz02MzM9RVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM2LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2Vcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjgKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVycm9yIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIGJvaWxzIGRvd24gdG8gYSBzdHJhaWdodGZvcndhcmQgZXJyb3IgY29kZSBhZGp1c3RtZW50LiBTcGVjaWZpY2FsbHksIGlmIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIHJldHVybnMgYC1FTVNHU0laRWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAsIHRoZSBjYWxsIHNpdGUgcHJvcGFnYXRlcyBgLUVNU0dTSVpFYC4gVGhlIGltcG9ydGFudCB0aGluZyBJJiMzOTttIGFzc2Vzc2luZyBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IG1lbW9yeSBpc3N1ZXMuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVtYWlucyB0aGUgc2FtZTsgaXQmIzM5O3Mgc2ltcGx5IGEgY2hhbmdlIGluIGhvdyB3ZSBzaWduYWwgYSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb24gcmVsYXRlZCB0byBmcmFnbWVudCByZWFkYWJpbGl0eS4KCk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBmdW5kYW1lbnRhbCBpc3N1ZSB0aGlzIHBhdGNoIHRvdWNoZXMgaXNuJiMzOTt0IGFib3V0IG1lbW9yeSBzYWZldHkgaXRzZWxmLiBJZiB0aGVyZSBhcmUgYnVncywgdGhleSYjMzk7ZCBsaWtlbHkgYmUgbG9naWNhbCBvciBzdGF0ZS1yZWxhdGVkLCBvciBhIGZ1bmN0aW9uYWwgcHJvYmxlbSwgYW5kIHdvdWxkbiYjMzk7dCBiZSBzb21ldGhpbmcgS01TQU4gd291bGQgcmVhZGlseSBjYXRjaC4gS01TQU4gaXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBkZXRlY3RpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgc2luY2UgdGhpcyBpcyBqdXN0IGFuIGVycm9yIGNvZGUgY2hhbmdlIEkmIzM5O20gbm90IGV4cGVjdGluZyBhbnkgS01TQU4gcmVsYXRlZCBmaW5kaW5ncy4gU28sIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgS01TQU4gc2Vzc2lvbi4gSSYjMzk7bGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBjaGFuZ2VzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdoZW4gdGhlcmUgaXMgYSBtaXNtYXRjaCBpbiBmcmFnbWVudCByZWFkYWJpbGl0eS4gVGhpcyBjaGFuZ2UgaW4gZXJyb3IgY29kZSBwcm9wYWdhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcywgd2hpY2ggYXJlIG5vdCBzcGVjaWZpYyB0byBLTVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJiMzOTtzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjM1LjYzNDAxMjc4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDYyNDg1ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiLFxuICAgIFwiX196ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgICBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCIsXG4gICAgXCJpb19zZW5kbXNnX3pjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgY2hhbmdlcyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBmcm9tIGAtRUZBVUxUYCB0byBgLUVNU0dTSVpFYCB3aGVuIHRoZXJlIGlzIGEgbWlzbWF0Y2ggaW4gZnJhZ21lbnQgcmVhZGFiaWxpdHkuIFRoaXMgY2hhbmdlIGluIGVycm9yIGNvZGUgcHJvcGFnYXRpb24gZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWMgdG8gS01TQU4ncyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zIGluIGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozNS42MzQwMTc3NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDIwNzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI0MDE0OWY3OWFhMDExYjAzODllMzAxNDQ4ZDI0YWZhNGY3NzNhYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcXG5pbmRleCAxNzNiNWQ5N2JkNDA5Li42ZjhmZmQ2MWJjYWI0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcXG4rKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXFxuQEAgLTYzOCw3ICs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGludCBmcmFnID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4gXFxuIFxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXG4gXFx0d2hpbGUgKGxlbmd0aCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqaGVhZCwgKmxhc3RfaGVhZCA9IE5VTEw7XFxuQEAgLTcxMyw3ICs3MTMsNyBAQCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xcbiBcXG4gXFx0aWYgKGkgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXG4gXFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXFxuIFxcdCAqIGlvdl9hZGRycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIGRtYS1idWYgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MzYuMDY0OTk2OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTAwNjYzMTQ0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJcIixcbiAgICBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgICBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiLFxuICAgIFwiaW9fc2VuZG1zZ196Y1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zIGluIGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDAxNDlmNzlhYTAxMWIwMzg5ZTMwMTQ0OGQyNGFmYTRmNzczYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuaW5kZXggMTczYjVkOTdiZDQwOS4uNmY4ZmZkNjFiY2FiNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC02MzgsNyArNjM4LDcgQEAgaW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXG4gXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbkBAIC03MTMsNyArNzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gXG4gXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gXHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozNi4wNjQ5OTg3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzE5NTgwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwbGF5aW5nIHRoZSByb2xlIG9mIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgYSBEYXRhZ3JhbSBQYXRjaCoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBTcGVjaWZpY2FsbHksIHdoZW4gYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpc24ndCB0cnVlLCBvciB3aGVuIGBpIFx1MDAyNlx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgaXMgdHJ1ZSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUZBVUxUYCwgdGhlIGNvZGUgd2lsbCBub3cgcmV0dXJuIGAtRU1TR1NJWkVgLlxuXG5UaGUga2V5IGhlcmUgaXMgdW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlLiBgLUVGQVVMVGAgdXN1YWxseSBpbmRpY2F0ZXMgYSBnZW5lcmljIFwiYmFkIGFkZHJlc3NcIiBvciBcIm1lbW9yeSBhY2Nlc3MgZXJyb3JcIi4gYC1FTVNHU0laRWAsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWdnZXN0cyB0aGF0IHRoZSBtZXNzYWdlIHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGJ1ZmZlciwgb3IgYSByZWxhdGVkIHNpemUgaXNzdWUuIFRoaXMgbWVhbnMgdGhlIGV4aXN0aW5nIGxvZ2ljIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0IGhhbmRsaW5nIHdoZW4gZnJhZ21lbnRzIG9mIHRoZSBTS0IgYXJlbid0IHJlYWRhYmxlLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgY29udGV4dHMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZT8gSXMgaXQgYmVjYXVzZSB0aGUgcHJvYmxlbSBpcyByZWxhdGVkIHRvIG1lc3NhZ2Ugc2l6ZSwgb3Igc29tZSBvdGhlciBzaXplIGlzc3VlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGhhbmRsZSBgLUVGQVVMVGAgdmVyc3VzIGhvdyB0aGV5J2QgaGFuZGxlIGAtRU1TR1NJWkVgIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb3JyZWN0IGZpeCwgb3Igd2hldGhlciBpdCBtaWdodCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgZWxzZXdoZXJlLiBUaGlzIGNoYW5nZSBsb29rcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQwLjUzNjk1OTkwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0NDU0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDU0LVxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbmlvX3VyaW5nL25ldC5jOjE0NTU6XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDcwLVxcdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pb191cmluZy9uZXQuYzoxNDcxOlxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jLTE0NzItXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjYzNTppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXFx0ZWxzZVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQyLjI0MTQyMTc0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkxMjc4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjcwNzp6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MDgtXFx0XFx0XFx0ICAgICAgaW50IGxlbmd0aCxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVxcdGVsc2UgaWYgKGJpbmRpbmcpXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjE6XFx0XFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc2tiLCBmcm9tLCBsZW5ndGgsIGJpbmRpbmcpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NDMuOTMyNzA3OTc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzUxNjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY2hhbmdlczpcblxuKipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCBjaGFuZ2UgaW4gZXJyb3IgcmVwb3J0aW5nLiBUaGUgZnVuY3Rpb25zIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGFyZSBub3cgcmV0dXJuaW5nIGAtRU1TR1NJWkVgIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYWx0ZXJhdGlvbiB3YXMgZGVlbWVkIG5lY2Vzc2FyeS5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzIHRocm91Z2guIFdlIGtub3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIHRoYXQgaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYCAvIGBpb19zZ19mcm9tX2l0ZXJgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMuIFRoZSBjYWxsc3RhY2sgaXMgY3JpdGljYWwgaGVyZSwgYnV0IGl0IGxvb2tzIGxpa2UgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyBhbHNvIGNhbGxlZCBieSBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSB0b3AsIHNvIGxldCdzIGNoZWNrIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIOKAkyB0aGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gdXNlcyB0aGUgZXJyb3IgY29kZXMgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZGV0ZXJtaW5lIHdoYXQgc2l0dWF0aW9uIHdhcnJhbnRzIHRoaXMgY29kZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQ3Ljc0MDIyNjYyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1OTExNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtNjI3LVxcdGlmICh6ZXJvY29weSlcXG5kcml2ZXJzL25ldC90YXAuYzo2Mjg6XFx0XFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XFxuZHJpdmVycy9uZXQvdGFwLmMtNjI5LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTE3NzQ9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODY3LVxcdFxcdFxcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE4Njg6XFx0XFx0XFx0ICogb3ZlcndyaXR0ZW4gYnkgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkuXFxuZHJpdmVycy9uZXQvdHVuLmMtMTg2OS1cXHRcXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4ODMtXFx0XFx0aWYgKHplcm9jb3B5KVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE4ODQ6XFx0XFx0XFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTg4NS1cXHRcXHRlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzYyLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2MzppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3My17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc0OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cXHUwMDNlc2ssIHNrYiwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzUtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjUyPWludCBza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI1My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MjU0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm0pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI1NS12b2lkIHNrYl9mcmVlX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaD0xMzg9ZW51bSBza2JfZHJvcF9yZWFzb24ge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVxcdCAqIEBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUOiBmYWlsZWQgdG8gY29weSBkYXRhIGZyb20gdXNlciBzcGFjZSxcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDo0MTM6XFx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxNC1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzA3PXplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ4LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzQ5OmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc3LS8qKlxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc4OiAqXFx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzktICpcXHRAc2tiOiBidWZmZXIgdG8gY29weVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODYtICovXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3ODc6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODgte1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTQtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTU6XFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKE5VTEwsIE5VTEwsIHNrYiwgZnJvbSwgfjBVLCBOVUxMKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5Ni19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTc6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk4LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MzMtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkzNDpcXHRlcnIgPSBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxubmV0L2NvcmUvc2tidWZmLmMtMTkzNS1cXHRcXHRcXHRcXHQgICAgICBiaW5kaW5nKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz04MD1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cXHRpZiAoemNvcHkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjg4OlxcdFxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIE5VTEwsIHNrYixcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIxMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRpb190cmFuc3BvcnRfYWxsb2Nfc2tiKHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjM5LVxcdC8qIElmICd2c2snICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDA6XFx0ICogd2lsbCBuZXZlciBjYWxsICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyBiZWxvdyB3aXRob3V0XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0MS1cXHQgKiBzZXR0aW5nIHNrYiBvd25lciBpbiAnc2tiX3NldF9vd25lcl93KCknLiBUaGUgb25seSBjYXNlXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ2LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XFx0LyogU2V0IG93bmVyIGhlcmUsIGJlY2F1c2UgJ19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCknIHVzZXNcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVxcdCAqIG93bmVyIG9mIHNrYiB3aXRob3V0IGNoZWNrIHRvIHVwZGF0ZSAnc2tfd21lbV9hbGxvYycuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQ5LjM3NjE0MzI1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDE0MDAyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgWmVyby1Db3B5IERhdGEgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBtYXBwaW5nIG91dCB0aGUgemVyby1jb3B5IGRhdGEgZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZ2V0dGluZyBjYWxsZWQsIGJ1dCB0aGV5J3JlIGJlaW5nIGludm9rZWQgYnkgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhbmQgYGlvX3NnX2Zyb21faXRlcmAgLyBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYC4gIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdGhlIGNyaXRpY2FsIHVwc3RyZWFtIGZ1bmN0aW9uLCBpdCdzIHdoYXQgdGllcyBldmVyeXRoaW5nIHRvZ2V0aGVyLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCwgYW5kIGV2ZW4gYHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2JgLlxuXG5Ob3csIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGl0c2VsZiBpcyBiZWluZyB1c2VkIGJ5IGB0YXBfZ2V0X3VzZXJgIGFuZCBgdHVuX2dldF91c2VyYC4uLiBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGJvdGggcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZXMuIFRoZSBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCdzIHJlYWxseSBpbnRyaWd1aW5nIG1lLiAgSSBrbm93IGl0IG11c3QgYmUgaW52b2x2ZWQgaW4gZGF0YWdyYW0tYmFzZWQgY29tbXVuaWNhdGlvbiwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCdzIGludm9sdmVkIGluIGB1ZHBfc2VuZG1zZ2AgYW5kIGByYXdfc2VuZG1zZ2AsIGFsdGhvdWdoIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBsYXR0ZXIgcG9pbnQuIEJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhlcmUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjUzLjkxNzU0NzMzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NTIzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX2RncmFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzAtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NTUuNTIyMDc4MDA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjI5NzgxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIENoYW5nZSoqXG5cbk9rYXksIHNvIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgX19pcF9hcHBlbmRfZGF0YWAgYW5kIGBfX2lwNl9hcHBlbmRfZGF0YWAuIFRoYXQgbWVhbnMgdGhpcyBpcyBjb3JlIGtlcm5lbCBsb2dpYyB3ZSdyZSBkZWFsaW5nIHdpdGgsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gVURQIGFuZCBSYXcgc29ja2V0cyB1c2luZyBgTVNHX1pFUk9DT1BZYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0J3MgaW4gdGhlIGNyaXRpY2FsIHBhdGguXG5cblRoZSBjaGFuZ2UgaXRzZWxmIGlzIHRoZSBlcnJvciBjb2RlIOKAkyBzd2l0Y2hpbmcgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAuIEZ1bmN0aW9uYWxseSwgdGhhdCdzIGEgcHJldHR5IGJpZyBkZWFsLiBEaWZmZXJlbnQgZXJyb3IgY29kZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgYXQgdGhlIHVzZXJzcGFjZSBhbmQga2VybmVsIGxldmVsLiBJdCBtZWFucyB0aGUgYmVoYXZpb3Igb2YgYXBwbGljYXRpb25zIG9yIHRoZSBrZXJuZWwgaXRzZWxmIGNvdWxkIGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBlcnJvci4gR2l2ZW4gaXRzIGNlbnRyYWxpdHkgYW5kIHRoZSBjaGFuZ2UgaW4gZXJyb3IgY29kZXMsIHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBXZSBuZWVkIHRvIGV4cGxvcmUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gdGhlIGNoYW5nZSdzIGltcGFjdCBhbmQgaW5mb3JtIG91ciBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjU5LjU4NTA1ODYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2MzAxMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NnX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMTI9c3RydWN0IGlvX3JlY3Z6YyB7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTgtXFxuaW9fdXJpbmcvbmV0LmM6MTE5OnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuaW9fdXJpbmcvbmV0LmMtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jOjEyMTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTEyMi1cXHRcXHRcXHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTM3OD1pbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDQzLVxcdGlmICghKHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpKSB7XFxuaW9fdXJpbmcvbmV0LmM6MTQ0NDpcXHRcXHRpb21zZy1cXHUwMDNlbXNnLnNnX2Zyb21faXRlciA9IGlvX3NnX2Zyb21faXRlcl9pb3ZlYztcXG5pb191cmluZy9uZXQuYy0xNDQ1LVxcdFxcdHJldHVybiBpb19ub3RpZl9hY2NvdW50X21lbSh6Yy1cXHUwMDNlbm90aWYsIGlvbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIuY291bnQpO1xcbmlvX3VyaW5nL25ldC5jLTE0NDYtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjE0NDc6XFx0aW9tc2ctXFx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXI7XFxuaW9fdXJpbmcvbmV0LmMtMTQ0OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTAtXFxuaW9fdXJpbmcvbmV0LmM6MTQ1MTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcl9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTItXFx0XFx0XFx0XFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTctXFxuaW9fdXJpbmcvbmV0LmM6MTQ1ODpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTktXFx0XFx0XFx0ICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTowMS4yNDEzNjY0ODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMDA1NTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBaZXJvLUNvcHkgaW4gaW9fdXJpbmcgc2VuZG1zZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgIGFyZSBrZXkgZm9yIGlvX3VyaW5nJ3MgYHNlbmRtc2dgIGZ1bmN0aW9uYWxpdHkgd2hlbiB1c2VkIHdpdGggYE1TR19aRVJPQ09QWWAuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgbXVzdCBiZSB3aXRoaW4gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIExldCBtZSBtYXAgb3V0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgdG8gZGlnIGludG8uXG5cbkFscmlnaHQsIHRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbjogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAsIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIHRoZW4gdGhlIGludGVybmFscyBhcmUgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAsIGFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC5cblxuTGV0J3Mgc3RhcnQgYnkgZGl2aW5nIGludG8gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgYXMgdGhlc2UgYXJlIHByb2JhYmx5IHRoZSBoaWdoZXN0IGxldmVsIGNoYW5nZXMgaW4gdGhlIHplcm8tY29weSBkYXRhcGF0aCwgYW5kIEknbGwgZmluZCB0aGVtIHdpdGhpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MDUuODUxNDI1MTMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyNzY0Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDU0LVxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbmlvX3VyaW5nL25ldC5jOjE0NTU6XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDcwLVxcdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pb191cmluZy9uZXQuYzoxNDcxOlxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jLTE0NzItXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjYzNTppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXFx0ZWxzZVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjA3LjQ2NDE5NDEyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkwODg1NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBFeHBvcnQgU3RhdHVzKipcblxuT2theSwgc28gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgc2VlbXMgbGlrZSBhIHByZXR0eSBpbnRlcmVzdGluZyBmdW5jdGlvbiwgYW5kIHRoZSBuYW1lIHN1Z2dlc3RzIHNvbWUgb3B0aW1pemF0aW9uIHBvdGVudGlhbCBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGl0IGFjdHVhbGx5IGV4cG9ydGVkLCBhbmQgdGhlcmVmb3JlIGF2YWlsYWJsZSBmb3IgdXNlIG91dHNpZGUgb2YgaXRzIG93biBtb2R1bGU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgdmlzaWJpbGl0eS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBkYXRhZ3JhbS1yZWxhdGVkIG5hbWUsIGlzIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUga2VybmVsJ3MgbmV0d29yayBjb3JlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgb3V0IGlmIGl0IGlzIGFuIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2wgb3IgaWYgaXQncyByZXN0cmljdGVkIHRvIGludGVybmFsIHVzZSB3aXRoaW4gdGhhdCBtb2R1bGUuIExldCdzIGdldCB0byB0aGUgc291cmNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MTAuNjU1MDgyNjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzU6XFx0aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA2MzY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbiA2Mzc6XFx0e1xcbiA2Mzg6XFx0XFx0aW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbiA2NDE6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gNjQyOlxcdFxcbiA2NDM6XFx0XFx0d2hpbGUgKGxlbmd0aCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbiA2NDQ6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKmhlYWQsICpsYXN0X2hlYWQgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxMC42NTUxNjE0MDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwOTc5OTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB3aGF0ZXZlciBmaWVsZCBpcyByZWxldmFudCwgYW5kIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSBcImZ1bHNvbWUgc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzXCI6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUaGUgRXhwb3J0IENvbnRleHQqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogKipJcyBpdCBleHBvcnRlZD8qKiBUaGlzIGlzIHRoZSBjcnVjaWFsLCBmb3VuZGF0aW9uYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBldmVuIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQncyBpbnRlbmRlZCBmb3IsIG9yIHN1c2NlcHRpYmxlIHRvLCBiZWluZyBtb3ZlZCBvdXQgb2YgaXRzIG9yaWdpbmFsIGVudmlyb25tZW50LiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciBldmVyeXRoaW5nIGVsc2UuIFwiRXhwb3J0XCIgaXMgYSBsb2FkZWQgdGVybTsgaXQgaW1wbGllcyBjZXJ0YWluIHJlZ3VsYXRpb25zLCBwcm9jZXNzZXMsIHBvdGVudGlhbCBjb3N0cywgYW5kLCBmcmFua2x5LCBvcHBvcnR1bml0aWVzIG9yIGlzc3VlcyB3aXRoIGNvbXBsaWFuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzb3VyY2UgYW5kIHRoZSBwb3RlbnRpYWwgZGVzdGluYXRpb24uIFxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjEzLjg2NDk2MzI5M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTU6XFx0XFx0XFx0XFx0XFx0cGFnZV9yZWZfc3ViKGxhc3RfaGVhZCwgcmVmcyk7XFxuIDY5NjpcXHRcXHRcXHRcXHRcXHRyZWZzID0gMDtcXG4gNjk3OlxcdFxcdFxcdFxcdH1cXG4gNjk4OlxcdFxcdFxcdFxcdHNrYl9maWxsX3BhZ2VfZGVzY19ub2FjYyhza2IsIGZyYWcrKywgaGVhZCwgc3RhcnQsIHNpemUpO1xcbiA2OTk6XFx0XFx0XFx0fVxcbiA3MDA6XFx0XFx0XFx0aWYgKHJlZnMpXFxuIDcwMTpcXHRcXHRcXHRcXHRwYWdlX3JlZl9zdWIobGFzdF9oZWFkLCByZWZzKTtcXG4gNzAyOlxcdFxcdH1cXG4gNzAzOlxcdFxcdHJldHVybiAwO1xcbiA3MDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxMy44NjUwNzQ2NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MTgwNzc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uJ3MgU2NvcGUqKlxuXG5IbW0sIHNvIGl0J3MgKm5vdCogZXhwb3J0ZWQsIHRoYXQncyBjbGVhci4gQnV0IGp1c3QgYmVjYXVzZSBpdCdzIG5vdCBleHBvcnRlZCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCdzIHN0YXRpYy4gT2theSwgbGV0J3MgYmFjayB1cCBhIG1vbWVudC4gSWYgaXQncyAqbm90KiBzdGF0aWMsIHRoZW4gaXQncyBhY2Nlc3NpYmxlIGdsb2JhbGx5LCB3aGljaCBzdWdnZXN0cyBpdCBpcyBhIGdsb2JhbCBzeW1ib2wuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb246IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIFdhaXQsIEkgdGhvdWdodCBJIHJlbWVtYmVyIHJlYWRpbmcgdGhhdCBmdW5jdGlvbiBhcyBkZWNsYXJlZCBgc3RhdGljYC4gU28sIGdvaW5nIGJhY2ssIGl0IGlzIGBzdGF0aWNgIGFuZCB0aHVzIGxvY2FsIHRvIHRoZSBjb21waWxhdGlvbiB1bml0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDgyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxNi43MjY4ODU0MTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDU6XFx0XFxuIDcwNjpcXHRzdGF0aWMgaW50XFxuIDcwNzpcXHR6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIDcwODpcXHRcXHRcXHRcXHQgICAgICBpbnQgbGVuZ3RoLFxcbiA3MDk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIDcxMDpcXHR7XFxuIDcxMTpcXHRcXHRpbnQgaSA9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7XFxuIDcxMjpcXHRcXHRzaXplX3QgdmlydF9hZGRyLCBzaXplLCBvZmY7XFxuIDcxMzpcXHRcXHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcXG4gNzE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxNi43MjY5ODg5MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MTkxNTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBaZXJvLUNvcHkgRGF0YSBUcmFuc2ZlciBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIGFuZCBJIGJlbGlldmUgdGhhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBpcyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEFuZCwgeWVzLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyIGFzIGEgZ29vZCBmb2N1cyBwb2ludC4gQWxzbywgSSdtIHRoaW5raW5nIGFib3V0IGluY2x1ZGluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB0byB0aGlzIGxpc3QgYXMgd2VsbC4gU28sIGxldCBtZSBhZGQgdGhvc2UgdG8gbXkgbWVudGFsIG5vdGVzLCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLlxuXG5IbW0sIGEgcXVpY2sgbm90ZSwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgIGFyZSAqc3RhdGljKi4gQW5kIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHRvIGtlZXAgbXkgYmVhcmluZ3MsIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gICppc24ndCogc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MjAuNTA4OTA3MDI2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1MDk0MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxMjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk0OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOC1cXG5uZXQvaXB2NC90Y3AuYzoxMzM5OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjIyLjE1NDAwNzQ1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg3NTczMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIFRoaXMgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuXG5cbioqWmVyby1Db3B5IGFuZCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgbWV0aG9kLCBvciByZWxhdGVkIG1ldGhvZHMuIFRoZSBzdGFuZGFyZCBgTVNHX1pFUk9DT1BZYCBmZWF0dXJlIGlzIHdlbGwtZXN0YWJsaXNoZWQsIGJ1dCBpdCdzIGxpa2VseSB0aGVyZSBhcmUgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWdzIGFuZCBlbnN1cmUgdGhhdCB3aGF0ZXZlciBzdXBwb3J0IGlzIHJlcXVpcmVkIGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZS4gTGV0IG1lIHNlZSB3aGljaCBzcGVjaWZpYyBrbm9icyBhbmQgbGV2ZXJzIEkgY2FuIHR1cm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MjUuMDQxNTg0MTMzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MzQ4MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDU0LVxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbmlvX3VyaW5nL25ldC5jOjE0NTU6XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDcwLVxcdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pb191cmluZy9uZXQuYzoxNDcxOlxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jLTE0NzItXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjYzNTppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXFx0ZWxzZVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjI2LjY2NzkzODE2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM4MTI1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29ya2luZyBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmtpbmcgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN0dWZmIGlzIGFsbCBjZW50cmFsaXplZCBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIFRoYXQncyBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IHNpbmNlIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGFzIGxvbmcgYXMgbmV0d29ya2luZyBpcyB1cC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQncyBhbHNvIHdvcnRoIGludmVzdGlnYXRpbmcgdGhpcyBpbiBsaWdodCBvZiBgSU9fVVJJTkdgLCBhcyBpdCB0ZW5kcyB0byBsZXZlcmFnZSBjb3JlIGRhdGFncmFtIGZ1bmN0aW9uYWxpdGllcy4gTGV0J3Mgc2VlLCBub3cgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToyOS44MDYwNjUzMDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggbmV0d29ya2luZyBjb3JlLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSA6PSBzb2NrLm8gc2tidWZmLm8gZGF0YWdyYW0ubyBzdHJlYW0ubyBzY20ubyBcXFxcXFxuICAgNzpcXHRcXHQgZ2VuX3N0YXRzLm8gZ2VuX2VzdGltYXRvci5vIG5ldF9uYW1lc3BhY2UubyBzZWN1cmVfc2VxLm8gXFxcXFxcbiAgIDg6XFx0XFx0IGZsb3dfZGlzc2VjdG9yLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9jb3JlLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbiAgMTQ6XFx0XFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHRmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcXFxcXFxuICAxNjpcXHRcXHRcXHRcXHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIG5ldGRldl93b3JrLm8gZ3NvLm9cXG4gIDE3OlxcdFxcbiAgMTg6XFx0b2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgKz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXFxuICAxOTpcXHRcXG4gIDIwOlxcdG9iai15ICs9IG5ldC1zeXNmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjI5LjgwNjEyNTc0N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYwNjk2ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqQ29uc2lkZXJpbmcgdGhlIGBkYXRhZ3JhbS5vYCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBgZGF0YWdyYW0ub2AgaXMgYSBjb25zaXN0ZW50bHkgY29tcGlsZWQgY29tcG9uZW50IOKAkyBnb29kIHRvIGtub3cuIFRoaXMgbWVhbnMgSSBkb24ndCBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggc3BlY2lhbCBjb25maWd1cmF0aW9ucyAqdW5sZXNzKiBJIHNwZWNpZmljYWxseSB3YW50IHRvIGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCBgaW9fdXJpbmdgLiBFdmVuIHRoZW4sIHRoYXQncyByZWFsbHkganVzdCB0aGUgb25lIHBvdGVudGlhbCB3cmlua2xlIGZvciBhY2Nlc3MuXG5cbk9mIGNvdXJzZSwgZXZlbiBpZiBJIGRvbid0IHVzZSBgaW9fdXJpbmdgLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhdCBpdCB1c2luZyBhIHN0YW5kYXJkIHNvY2tldCBgc2VuZG1zZ2AgY2FsbCB3aXRoIGBNU0dfWkVST0NPUFlgLiBUaGF0J3MgYSBzb2xpZCBmYWxsYmFjayBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHBhdGguIE5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHRvIHVuZGVyc3RhbmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGlzIHplcm8tY29weSBtZWNoYW5pc20gZnVuY3Rpb25zIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjMzLjI2NjgyNjM3NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTQ4NTgwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNj1zdGF0aWMgaW50XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MDc6emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVxcdFxcdFxcdCAgICAgIGludCBsZW5ndGgsXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2MC1cXHRlbHNlIGlmIChiaW5kaW5nKVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHNrYiwgZnJvbSwgbGVuZ3RoLCBiaW5kaW5nKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjM0LjkxMjMxNzk1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4ODY2NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGUgY29kZSBzZWVtcyB0byBiZSBleHBsaWNpdGx5IHRpZWQgdG8gYSBzaXR1YXRpb24gd2hlcmUgYGJpbmRpbmdgIGlzbid0IGEgbnVsbCBwb2ludGVyLiBTbywgdGhlIGtleSBxdWVzdGlvbiBpczogV2hhdCBkb2VzIHRoaXMgYGJpbmRpbmdgIHRoaW5nICphY3R1YWxseSogcmVwcmVzZW50PyBXaGVyZSBkb2VzIHRoaXMgdmFyaWFibGUgb3JpZ2luYXRlPyBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGFuZCBwdXJwb3NlIG9mIGBiaW5kaW5nYCB0byBmdWxseSBncmFzcCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHJhdGlvbmFsZSBiZWhpbmQgdXNpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgaXMgc2V0dGluZyBvciBwYXNzaW5nIGEgbm9uLW51bGwgYGJpbmRpbmdgIHRvIHNlZSB3aHkgaXQgbmVjZXNzaXRhdGVzIHRoaXMgemVyby1jb3B5IGFwcHJvYWNoLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTozOC4yNjExODc5NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQzNDgwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX196ZXJvY29weV9zZ19mcm9tX2l0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Mi1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc1LVxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzA3PXplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ4LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzQ5OmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03ODc9aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5NC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NTpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk2LX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTI9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xOTMzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MzQ6XFx0ZXJyID0gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MzUtXFx0XFx0XFx0XFx0ICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9ODA9c3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXFx0aWYgKHpjb3B5KVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcXHRcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBOVUxMLCBza2IsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIzOS1cXHQvKiBJZiAndnNrJyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2VcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQwOlxcdCAqIHdpbGwgbmV2ZXIgY2FsbCAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgYmVsb3cgd2l0aG91dFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3OlxcdC8qIFNldCBvd25lciBoZXJlLCBiZWNhdXNlICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyB1c2VzXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cXHQgKiBvd25lciBvZiBza2Igd2l0aG91dCBjaGVjayB0byB1cGRhdGUgJ3NrX3dtZW1fYWxsb2MnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTozOS44OTU1NDA5NjhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2OTUzMjMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipaZXJvLUNvcHkgSXRlcmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB3aGVuIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBza2JzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHN0cmVhbS1vcmllbnRlZCBuZXR3b3JraW5nLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgaXRlcmF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggY29udGlndW91cyBzZWdtZW50cyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgc2ticyBoZXJlPyBJdCdzIGNyaXRpY2FsIHRvIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBjb3B5aW5nLCBiZWNhdXNlIHRoZSB3aG9sZSBwb2ludCBpcyBlZmZpY2llbmN5IGFuZCBtaW5pbWFsIG92ZXJoZWFkLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaXRlcmF0aW5nIHByb2Nlc3MgY291bGQgaW5hZHZlcnRlbnRseSBjYXVzZSBjb3B5aW5nIHRvIG9jY3VyLiBJ4oCZbSB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIHBpdGZhbGxzLCB0aGluZ3MgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIElzIHRoaXMgdGhlICpyaWdodCogd2F5IHRvIGdvIGFib3V0IGl0PyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHBhcnRpYWwgcmVhZHMgYW5kIHdyaXRlcz8gSSBuZWVkIHRvIHF1aWNrbHkgYW5kIGNvbXByZWhlbnNpdmVseSBjb25maXJtIGl0cyBiZWhhdmlvdXIgdW5kZXIgdmFyaW91cyBlZGdlIGNhc2VzOiBidWZmZXIgb3ZlcmZsb3dzLCB1bmRlcmZsb3dzLCBhbmQgcGFydGlhbCB3cml0ZXMvcmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTU0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6NDMuMjY1MDc3MjU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2MDE0MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxMjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk0OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOC1cXG5uZXQvaXB2NC90Y3AuYzoxMzM5OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjQ0Ljg2MTA5NzE5MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzNDE2MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gVGhlIGBiaW5kaW5nYCBJJ20gc2VlaW5nIGluc2lkZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBwb2ludGluZyBiYWNrIHRvIGBzb2NrYy5kZXZtZW1fYmluZGluZ2AuIEFoLCByaWdodCwgdGhhdCBjb25uZWN0cyBpdCB0byB0aGUgVENQIGRldm1lbSBmdW5jdGlvbmFsaXR5IOKAkyBkZXZpY2UgbWVtb3J5IFRDUC4gU28sIHRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBpczogaXMgdGhpcyBzcGVjaWZpYyBUQ1AgZGV2bWVtIGltcGxlbWVudGF0aW9uIGNvbmZpZ3VyYWJsZT8gQXJlIHRoZXJlIGFueSBrbm9icyBvciBzZXR0aW5ncyBJIGNhbiB0d2VhayByZWxhdGVkIHRvIFRDUCBkZXZtZW0gdGhhdCBtaWdodCBpbXBhY3QgdGhpcyBgYmluZGluZ2AgYmVoYXZpb3I/IE5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWdzIHRvIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGV4cG9zZWQgZm9yIHRoaXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjQ3Ljg4NDUxNjEwNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyODUwOTQ0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bWVtX2JpbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjQ5LjYxMzAzMjkzN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ2MjMyNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIHJlYXNvbmluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZ3JvdW5kZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGRlZXBlciBpbnRvIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBhIGxvdCBoaW5nZXMgb24gaXRzIGJlaGF2aW9yLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSB3b3JrIG9mIHNlbmRpbmcgVENQIGRhdGEgaGFwcGVucywgYW5kIGFueSBzdWJ0bGUgbWlzc3RlcHMgaGVyZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGxvY2tpbmcgc3RyYXRlZ2llcywgaG93IGl0IGhhbmRsZXMgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgSeKAmW0gbWFraW5nIGFib3V0IGl0cyBkYXRhIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQuIEJlZm9yZSBJIGdvIGRvd24gYSByYWJiaXQgaG9sZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBJIHVuZGVyc3RhbmQgd2hhdCBpcyBhY3R1YWxseSBnb2luZyBvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTo1Mi41NTkyNjg2NDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldm1lbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYy0yOTAtXFxubmV0L2lwdjQvdGNwLmM6MjkxOiNpbmNsdWRlIFxcXCIuLi9jb3JlL2Rldm1lbS5oXFxcIlxcbm5ldC9pcHY0L3RjcC5jLTI5Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxubmV0L2lwdjQvdGNwLmM6MTExODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XFxubmV0L2lwdjQvdGNwLmMtMTExOS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNTgtXFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxubmV0L2lwdjQvdGNwLmM6MTE1OTpcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTYwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0MjAtXFx0aWYgKGJpbmRpbmcpXFxubmV0L2lwdjQvdGNwLmM6MTQyMTpcXHRcXHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChiaW5kaW5nKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDIyLVxcdHJldHVybiBjb3BpZWQgKyBjb3BpZWRfc3luO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQzOS1cXHRpZiAoYmluZGluZylcXG5uZXQvaXB2NC90Y3AuYzoxNDQwOlxcdFxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NDEtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNDk5PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI1NzUtXFx0XFx0XFx0bmlvdiA9IHNrYl9mcmFnX25ldF9pb3YoZnJhZyk7XFxubmV0L2lwdjQvdGNwLmM6MjU3NjpcXHRcXHRcXHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XFxubmV0L2lwdjQvdGNwLmMtMjU3Ny1cXHRcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjU5OC1cXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XFxubmV0L2lwdjQvdGNwLmM6MjU5OTpcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xcbm5ldC9pcHY0L3RjcC5jLTI2MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjUyLjYwMzM2NTc4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0MDg5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCoqXG5cblJpZ2h0LCBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuLi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEJlc3QgdG8gc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24uIExldCdzIHB1bGwgdXAgYG5ldC9jb3JlL2Rldm1lbS5oYCBhbmQgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLCBlbnVtZXJhdGlvbnMsIGFuZCBhbnkgaW5saW5lIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHRoZSBpbnRlbnQuIEtub3dpbmcgdGhlIGJpbmRpbmcgc3RyYXRlZ3kgYW5kIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSByZWdpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyByb2xlLiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwgbWVtb3J5IG1hcHBpbmcgZGV0YWlscywgYW5kIHBlcmhhcHMgc29tZSBjb25zaWRlcmF0aW9ucyBhcm91bmQgZGV2aWNlLXNwZWNpZmljIGFsbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjU2LjA4NzQ1ODMzN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZtZW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogRGV2aWNlIG1lbW9yeSBUQ1Agc3VwcG9ydFxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIEF1dGhvcnM6XFx0TWluYSBBbG1hc3J5IFxcdTAwM2NhbG1hc3J5bWluYUBnb29nbGUuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICpcXHRcXHRXaWxsZW0gZGUgQnJ1aWpuIFxcdTAwM2N3aWxsZW1iQGdvb2dsZS5jb21cXHUwMDNlXFxuICAgNzpcXHQgKlxcdFxcdEthaXl1YW4gWmhhbmcgXFx1MDAzY2thaXl1YW56QGdvb2dsZS5jb21cXHUwMDNlXFxuICAgODpcXHQgKlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHQjaWZuZGVmIF9ORVRfREVWTUVNX0hcXG4gIDExOlxcdCNkZWZpbmUgX05FVF9ERVZNRU1fSFxcbiAgMTI6XFx0XFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldG1lbS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXFx1MDAzZVxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xcbiAgMTc6XFx0XFxuICAxODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XFxuICAxOTpcXHRcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbiAgMjA6XFx0XFx0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6NTYuMDg3NTUxNTk3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzQ5NjU5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBkZXZtZW1gIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gd29uZGVyaW5nIGFib3V0IGBkZXZtZW1gLiBJcyB0aGVyZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzb21ld2hlcmUgdGhhdCBjb250cm9scyBpdHMgYmVoYXZpb3Igb3IgZGVmYXVsdCBzZXR0aW5ncz8gSSBrbm93IGl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHV0aWxpdHkgZm9yIGFjY2Vzc2luZyBtZW1vcnkgZGlyZWN0bHksIGJ1dCBzdXJlbHkgdGhlcmUncyAqc29tZXRoaW5nKiBJIGNhbiB0d2VhayB0byB0YWlsb3IgaXRzIG9wZXJhdGlvbi4gTWF5YmUgc29tZXRoaW5nIGFib3V0IGVycm9yIHJlcG9ydGluZywgYWNjZXNzIHBlcm1pc3Npb25zLCBvciBwZXJoYXBzIGV2ZW4gYSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgaXQgb3BlcmF0ZXMgd2l0aGluLiBJJ20gdGhpbmtpbmcgSSd2ZSBwcm9iYWJseSBqdXN0IG1pc3NlZCBzb21ldGhpbmcgaW4gdGhlIGRvY3VtZW50YXRpb24sIGFzIHRoYXQncyB1c3VhbGx5IHRoZSBhbnN3ZXIuIFRpbWUgdG8gZGlnIGFyb3VuZCB0aGUgdXN1YWwgcGxhY2VzIC0gYC9ldGNgLCBgL3Vzci9sb2NhbC9ldGNgLCB0aGUgbWFuIHBhZ2Ugb2YgY291cnNlLCBhbmQgYW55IHJlbGV2YW50IHBhY2thZ2UgZG9jdW1lbnRhdGlvbi4gSSBkb3VidCBpdCB3b3VsZCBiZSBhbnl0aGluZyBwYXJ0aWN1bGFybHkgY29tcGxleCwgYnV0IEkgZG8gdGVuZCB0byBvdmVybG9vayB0aGUgb2J2aW91cyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTYyOTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjU5LjAyMjUyMDU0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MTY0MDAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKkRFVk1FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvS2NvbmZpZz0yNDk9Y29uZmlnIE5TQ19HUElPXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNTgtXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjU5OmNvbmZpZyBERVZNRU1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiL2Rldi9tZW0gdmlydHVhbCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmxpYi9LY29uZmlnPTYxNz1jb25maWcgR0VORVJJQ19MSUJfVUNNUERJMlxcbi0tXFxubGliL0tjb25maWctNjE5LVxcbmxpYi9LY29uZmlnOjYyMDpjb25maWcgR0VORVJJQ19MSUJfREVWTUVNX0lTX0FMTE9XRURcXG5saWIvS2NvbmZpZy02MjEtXFx0Ym9vbFxcbi0tXFxubGliL0tjb25maWcuZGVidWc9MTk1Nz1zb3VyY2UgXFxcInNhbXBsZXMvS2NvbmZpZ1xcXCJcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xOTU4LVxcbmxpYi9LY29uZmlnLmRlYnVnOjE5NTk6Y29uZmlnIEFSQ0hfSEFTX0RFVk1FTV9JU19BTExPV0VEXFxubGliL0tjb25maWcuZGVidWctMTk2MC1cXHRib29sXFxubGliL0tjb25maWcuZGVidWctMTk2MS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxOTYyOmNvbmZpZyBTVFJJQ1RfREVWTUVNXFxubGliL0tjb25maWcuZGVidWctMTk2My1cXHRib29sIFxcXCJGaWx0ZXIgYWNjZXNzIHRvIC9kZXYvbWVtXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTk4MS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxOTgyOmNvbmZpZyBJT19TVFJJQ1RfREVWTUVNXFxubGliL0tjb25maWcuZGVidWctMTk4My1cXHRib29sIFxcXCJGaWx0ZXIgSS9PIGFjY2VzcyB0byAvZGV2L21lbVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L0tjb25maWctNjgtXFxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cXG5uZXQvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjAxLjMxNDE2NjgzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjY4OTg2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBaZXJvLUNvcHkgTmV0d29ya2luZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgTkVUX0RFVk1FTWAgaXMgYSBgZGVmX2Jvb2wgeWAsIHdoaWNoIG1lYW5zIGl0J3MgYWx3YXlzIG9uIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgbm8gbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBpdC4gTGV0J3MgbW92ZSBvbiB0byBpZGVudGlmeWluZyB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi5cblxuUmlnaHQsIHRoZSBpbml0aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLlxuXG5Ib2xkIG9uLCBJIHJlY2FsbCB0aGF0IGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIGlzIGRlZmluZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB3aGlsZSBJJ20gaGVyZS4gSXQgYXBwZWFycyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBpcyB0aGUgb25lIHRoYXQgd2FzIHJlY2VudGx5IG1vZGlmaWVkLiBUaGUgc3RhdGljIGZ1bmN0aW9uIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgY2FuJ3QgYmUgdXNlZCBkaXJlY3RseSBidXQgaXMgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYC5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBpdCdzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBPa2F5LCBpdCdzIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3MgZ2xvYmFsbHkgdmlzaWJsZS4gV2UgY2FuIGNvbmZpcm0gdGhhdCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhcmUgYm90aCBleHBvcnRlZCwgYW5kIHNvIGlzIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLlxuXG5BbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG4qICAgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmBcbiogICBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgXG4qICAgYHplcm9jb3B5X3NnX2Zyb21faXRlcmBcbiogICBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYFxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQWghIFNpbmNlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGlzIHVzZWQgZGlyZWN0bHkgYnkgYGlvX3NnX2Zyb21faXRlcmAsIGBJT19VUklOR2AgaXMgYSBnb29kIGNvbmZpZyB0byBhZGQgdG8gdGhlIGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODk0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjA3LjU4MzE1NzI3NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODY5OTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MDkuMjIxODYxMTE3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDI3ODU4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyB0aG91Z2h0czpcblxuKipDb25maWd1cmluZyB0aGUgS2VybmVsOiBJbml0aWFsIENoZWNrcyBhbmQgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGtlcm5lbCBjb25maWd1cmF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgSU9fVVJJTkdgIGZlYXR1cmUuIFRoYXQncyB0aGUgbWFpbiBkcml2ZXIgb2YgdGhpcyB0aG91Z2h0IHByb2Nlc3MuIEl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlOyB0aGF0J3MgdGhlIGZvY2FsIHBvaW50LlxuXG5JJ20gaW1tZWRpYXRlbHkgcHJvbXB0ZWQgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0J3MgYSBzeXN0ZW1hdGljIGFwcHJvYWNoLCByaWdodD8gU2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGUgc2FtZSBuZWlnaGJvcmhvb2QuIGBORVRfREVWTUVNYCBpcyBzaG93aW5nIGBkZWZfYm9vbCB5YCwgYW5kLCB3ZWxsLCBgTkVUYCBpdHNlbGYgaXMgYSBnaXZlbi4gVGhlc2UgYXJlIHByZXR0eSBjb21tb247IG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgaW9fc2dfZnJvbV9pdGVyYC4gU2VlbXMgbGlrZSB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyBoZXJlIHRoYXQgd2FycmFudHMgYSBzZWNvbmQgbG9vay4gTWF5YmUgdGhlcmUncyBhIGRlcGVuZGVuY3ksIGEgc3VidGxlIGludGVyYWN0aW9uLCBvciBwZXJoYXBzIEknbSB0cnlpbmcgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgYElPX1VSSU5HYC4gR290dGEgbWFrZSBzdXJlIEknbSBmdWxseSB1cCB0byBzcGVlZCBvbiBhbGwgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTA0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MTMuMzI0NjUwNTk5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI1MTkzNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NnX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMTI9c3RydWN0IGlvX3JlY3Z6YyB7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTgtXFxuaW9fdXJpbmcvbmV0LmM6MTE5OnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuaW9fdXJpbmcvbmV0LmMtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jOjEyMTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTEyMi1cXHRcXHRcXHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTM3OD1pbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDQzLVxcdGlmICghKHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpKSB7XFxuaW9fdXJpbmcvbmV0LmM6MTQ0NDpcXHRcXHRpb21zZy1cXHUwMDNlbXNnLnNnX2Zyb21faXRlciA9IGlvX3NnX2Zyb21faXRlcl9pb3ZlYztcXG5pb191cmluZy9uZXQuYy0xNDQ1LVxcdFxcdHJldHVybiBpb19ub3RpZl9hY2NvdW50X21lbSh6Yy1cXHUwMDNlbm90aWYsIGlvbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIuY291bnQpO1xcbmlvX3VyaW5nL25ldC5jLTE0NDYtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjE0NDc6XFx0aW9tc2ctXFx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXI7XFxuaW9fdXJpbmcvbmV0LmMtMTQ0OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTAtXFxuaW9fdXJpbmcvbmV0LmM6MTQ1MTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcl9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTItXFx0XFx0XFx0XFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTctXFxuaW9fdXJpbmcvbmV0LmM6MTQ1ODpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTktXFx0XFx0XFx0ICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoxNC45NDk4NDg0ODNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NjA1MjUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBEYXRhIFRyYW5zZmVyIFByZXBhcmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGhlcmUuIFRoZSBmdW5jdGlvbiBgaW9fc2VuZF96Y19wcmVwYCBpcyB0aGUgb25lIHRoYXQgc2V0cyB0aGUgYHNnX2Zyb21faXRlcmAgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGNyaXRpY2FsLiBOb3csIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiBgaW9fc2VuZF96Y19wcmVwYC4gSXMgaXQgZXhwb3J0ZWQsIG9yIGlzIGl0IGEgZ2xvYmFsIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGFjY2Vzc2libGUgYW5kLCBieSBleHRlbnNpb24sIGhvdyBJIGNhbiBiZXN0IHV0aWxpemUgdGhpcyBmdW5jdGlvbiBpbiBteSB1c2UgY2FzZS4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIHRyYW5zZmVyIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NjgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoxOC4xMDU5MDM3NDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc2NjQ5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF96Y19wcmVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTEzNjE9dm9pZCBpb19zZW5kX3pjX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzc3LVxcbmlvX3VyaW5nL25ldC5jOjEzNzg6aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTEzNzkte1xcbi0tXFxuaW9fdXJpbmcvbmV0Lmg9NTQ9aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0Lmg6NTU6aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy9uZXQuaC01Ni12b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XFxuLS1cXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00MzMtXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG5pb191cmluZy9vcGRlZi5jOjQzNDpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fc2VuZF96Y19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmMtNDM1LVxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fc2VuZG1zZ196YyxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNDQ2LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuaW9fdXJpbmcvb3BkZWYuYzo0NDc6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3NlbmRfemNfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jLTQ0OC1cXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX3NlbmRtc2dfemMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjE5Ljc0MzU3Mzg4NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzA1Mzk0NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBaZXJvY29weSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHR3byBnbG9iYWwgZnVuY3Rpb25zIGp1bXAgb3V0IGF0IG1lOiBgaW9fc2VuZF96Y19wcmVwYCBhbmQgYGlvX3NlbmRtc2dfemNgLiBMZXQncyBhZGQgdGhhdCBgaW9fc2VuZG1zZ196Y2AgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gVGhlIGtleSBoZXJlIGlzIGFib3V0IGhvdyB3ZSdyZSB0cmVhdGluZyBkYXRhZ3JhbXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5SaWdodCwgc28gdGhlIGltcG9ydGFudCBzeW1ib2xzIGZvciBtZSB0byBmb2N1cyBvbiBhcmUgbm93OlxuXG4qICAgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmBcbiogICBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgXG4qICAgYHplcm9jb3B5X3NnX2Zyb21faXRlcmBcbiogICBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYFxuKiAgIGBpb19zZW5kbXNnX3pjYFxuXG5UaGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZSBpdCBtYWtlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gTm93LCB3aGVuIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNoaWZ0aW5nIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgLiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhci4gVGhpcyBpcyBkaXJlY3RseSB0aWVkIHRvIE1TR1xcX1pFUk9DT1BZIGFuZCBpb1xcX3VyaW5nIHplcm9jb3B5IHNlbmRzLCB3aGljaCwgYXMgd2Uga25vdywgYXJlIGNyaXRpY2FsIGFyZWFzIG9mIGhpZ2ggcGVyZm9ybWFuY2UgbmV0d29ya2luZywgYW5kIGNhbiBiZSBlYXNpbHkgaW1wYWN0ZWQuXG5cblRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBzdWJ0bGUsIGJ1dCBpdCdzIGNoYW5naW5nIHRoZSBlcnJvciBjb2RlIHRoYXQgZ29lcyBiYWNrIHRvIHVzZXJzcGFjZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUga2VybmVsIGl0c2VsZiBoYW5kbGVzIHRoZSBlcnJvci4gVGhpcyBpcyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIHVzZWZ1bCwgYXMgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBleHBlY3RlZCByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggcmVncmVzc2lvbiBhbmQgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU28sIGxldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk3LCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoyNi4wNDg5NzEyNzJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjMzNzY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJcIixcbiAgICBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgICBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiLFxuICAgIFwiaW9fc2VuZG1zZ196Y1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zIGluIGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwiemVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1cIixcbiAgICBcImlvX3NlbmRtc2dfemNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZWdyZXNzaW9ucyBpbiBlcnJvciBoYW5kbGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MjYuMTMxMzE1NDUzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEyNzU0NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjI2LjEzMTgzMTYwM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDEyNzAyNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJ3MgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDAxNDlmNzlhYTAxMWIwMzg5ZTMwMTQ0OGQyNGFmYTRmNzczYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuaW5kZXggMTczYjVkOTdiZDQwOS4uNmY4ZmZkNjFiY2FiNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC02MzgsNyArNjM4LDcgQEAgaW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXG4gXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbkBAIC03MTMsNyArNzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gXG4gXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gXHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoyNi4xMzE4MzI1MzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2MzI4NTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDaGFuZ2UgaW4gRXJyb3IgQ29kZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzdWJ0bHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdpdGhpbiB0aGUgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gVGhlIGNvbmRpdGlvbiB0cmlnZ2VyaW5nIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdoZW4gYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpcyBmYWxzZSAoZm9yIHRoZSBmaXJzdCBmdW5jdGlvbikgb3IgdHJ1ZSB3aXRoIGFuIGluZGV4ICdpJyAoZm9yIHRoZSBzZWNvbmQpLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU28gd2hhdD9cIi4gSXQncyBqdXN0IGEgZGlmZmVyZW50IGVycm9yIGNvZGUsIHJpZ2h0PyBOb3QgZXhhY3RseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBuZXcgYWxsb2NhdGlvbnMgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLiBFcnJvciBjb2Rlcywgd2hpbGUgc2VlbWluZ2x5IHNpbXBsZSwgY2FuIGhhdmUgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgY2FsbGluZyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gdXNlciBzcGFjZSwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBJJ20gbm93IHRoaW5raW5nOiBEb2VzIHRoaXMgZGlmZmVyZW50IGVycm9yIGNvZGUgcG90ZW50aWFsbHkgY2hhbmdlIGhvdyB0aGUgY2FsbGVyIGhhbmRsZXMgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBjYWxsZXJzIHNob3VsZCBqdXN0IGJlIHByb3BhZ2F0aW5nIHRoZSBlcnJvcnMgdXB3YXJkcywgcmlnaHQ/IFxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQuIFRoZSB0ZXh0IG1lbnRpb25zIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluLCBiZWNhdXNlIEkgdGhvdWdodCB0aGUgc2Vjb25kIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYnkgdGhlIGZpcnN0LiBJIHdpbGwgcGVyZm9ybSBhIGdyZXAgdG8gY29uZmlybSB0aGUgZGlyZWN0IGNhbGwgc2l0ZSBvZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjMzLjM5NTEyMDM0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjg2NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2Mz1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzY4OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjktXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE0NTE9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTQtXFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcXHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcXG5pb191cmluZy9uZXQuYy0xNDU2LX1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE0NTg9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NzAtXFx0ZWxzZSBpZiAodW5saWtlbHkoIXNrYl96Y29weV9tYW5hZ2VkKHNrYikpKVxcbmlvX3VyaW5nL25ldC5jOjE0NzE6XFx0XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ3Mi1cXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NjMzPUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyX2Z1bGwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM0LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNi1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cXHRlbHNlXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjM6XFx0XFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MzUuMDExOTk1NzQ3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDY4NDIwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXJyb3IgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBib2lscyBkb3duIHRvIGEgc3RyYWlnaHRmb3J3YXJkIGVycm9yIGNvZGUgYWRqdXN0bWVudC4gU3BlY2lmaWNhbGx5LCBpZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCByZXR1cm5zIGAtRU1TR1NJWkVgIGluc3RlYWQgb2YgYC1FRkFVTFRgLCB0aGUgY2FsbCBzaXRlIHByb3BhZ2F0ZXMgYC1FTVNHU0laRWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgSSdtIGFzc2Vzc2luZyBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IG1lbW9yeSBpc3N1ZXMuIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZW1haW5zIHRoZSBzYW1lOyBpdCdzIHNpbXBseSBhIGNoYW5nZSBpbiBob3cgd2Ugc2lnbmFsIGEgc3BlY2lmaWMgZXJyb3IgY29uZGl0aW9uIHJlbGF0ZWQgdG8gZnJhZ21lbnQgcmVhZGFiaWxpdHkuXG5cbk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBmdW5kYW1lbnRhbCBpc3N1ZSB0aGlzIHBhdGNoIHRvdWNoZXMgaXNuJ3QgYWJvdXQgbWVtb3J5IHNhZmV0eSBpdHNlbGYuIElmIHRoZXJlIGFyZSBidWdzLCB0aGV5J2QgbGlrZWx5IGJlIGxvZ2ljYWwgb3Igc3RhdGUtcmVsYXRlZCwgb3IgYSBmdW5jdGlvbmFsIHByb2JsZW0sIGFuZCB3b3VsZG4ndCBiZSBzb21ldGhpbmcgS01TQU4gd291bGQgcmVhZGlseSBjYXRjaC4gS01TQU4gaXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBkZXRlY3RpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgc2luY2UgdGhpcyBpcyBqdXN0IGFuIGVycm9yIGNvZGUgY2hhbmdlIEknbSBub3QgZXhwZWN0aW5nIGFueSBLTVNBTiByZWxhdGVkIGZpbmRpbmdzLiBTbywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBLTVNBTiBzZXNzaW9uLiBJJ2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjo0MC4yNTg4NDA3MjJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBjaGFuZ2VzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdoZW4gdGhlcmUgaXMgYSBtaXNtYXRjaCBpbiBmcmFnbWVudCByZWFkYWJpbGl0eS4gVGhpcyBjaGFuZ2UgaW4gZXJyb3IgY29kZSBwcm9wYWdhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcywgd2hpY2ggYXJlIG5vdCBzcGVjaWZpYyB0byBLTVNBTidzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJ3MgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdd2rz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 23:32:41 +0000 UTC FinishedAt: 2026-08-10 23:36:42 +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": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "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": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "49107633-d66e-4e1e-9729-8f59096c4356" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zerocopy_fill_skb_from_iter", "__zerocopy_sg_from_iter", "zerocopy_sg_from_iter", "skb_zerocopy_iter_stream", "io_sendmsg_zc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O19femVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAgICYjMzQ7aW9fc2VuZG1zZ196YyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBjaGFuZ2VzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdoZW4gdGhlcmUgaXMgYSBtaXNtYXRjaCBpbiBmcmFnbWVudCByZWFkYWJpbGl0eS4gVGhpcyBjaGFuZ2UgaW4gZXJyb3IgY29kZSBwcm9wYWdhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcywgd2hpY2ggYXJlIG5vdCBzcGVjaWZpYyB0byBLTVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVncmVzc2lvbnMgaW4gZXJyb3IgaGFuZGxpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNDAxNDlmNzlhYTAxMWIwMzg5ZTMwMTQ0OGQyNGFmYTRmNzczYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbmluZGV4IDE3M2I1ZDk3YmQ0MDkuLjZmOGZmZDYxYmNhYjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXG5AQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZnJhZyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbiBcbiBcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbkBAIC03MTMsNyAmIzQzOzcxMyw3IEBAIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiBcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuIFxuIFx0aWYgKGkgXHUwMDI2XHUwMDI2IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHQvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGVcbiBcdCAqIGlvdl9hZGRycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIGRtYS1idWYgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0OywKICAgICYjMzQ7X196ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OywKICAgICYjMzQ7emVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weV9pdGVyX3N0cmVhbSYjMzQ7LAogICAgJiMzNDtpb19zZW5kbXNnX3pjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZWdyZXNzaW9ucyBpbiBlcnJvciBoYW5kbGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MDE0OWY3OWFhMDExYjAzODllMzAxNDQ4ZDI0YWZhNGY3NzNhYTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMzozNDozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDE3M2I1ZDk3YmQ0MDkuLjZmOGZmZDYxYmNhYjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOwogCiAJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJd2hpbGUgKGxlbmd0aCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiAJCXN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDsKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCXN0cnVjdCBuZXRfaW92ICpuaW92OwogCiAJaWYgKGkgJmFtcDsmYW1wOyBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJLyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlCiAJICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0bwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHBsYXlpbmcgdGhlIHJvbGUgb2YgYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgYSBEYXRhZ3JhbSBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBTcGVjaWZpY2FsbHksIHdoZW4gYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpc24mIzM5O3QgdHJ1ZSwgb3Igd2hlbiBgaSAmYW1wOyZhbXA7IHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpcyB0cnVlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FRkFVTFRgLCB0aGUgY29kZSB3aWxsIG5vdyByZXR1cm4gYC1FTVNHU0laRWAuCgpUaGUga2V5IGhlcmUgaXMgdW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlLiBgLUVGQVVMVGAgdXN1YWxseSBpbmRpY2F0ZXMgYSBnZW5lcmljICYjMzQ7YmFkIGFkZHJlc3MmIzM0OyBvciAmIzM0O21lbW9yeSBhY2Nlc3MgZXJyb3ImIzM0Oy4gYC1FTVNHU0laRWAsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWdnZXN0cyB0aGF0IHRoZSBtZXNzYWdlIHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGJ1ZmZlciwgb3IgYSByZWxhdGVkIHNpemUgaXNzdWUuIFRoaXMgbWVhbnMgdGhlIGV4aXN0aW5nIGxvZ2ljIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0IGhhbmRsaW5nIHdoZW4gZnJhZ21lbnRzIG9mIHRoZSBTS0IgYXJlbiYjMzk7dCByZWFkYWJsZS4KClRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzcGVjaWZpYyBjb250ZXh0cyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHdlIGNoYW5naW5nIHRoZSBlcnJvciBjb2RlPyBJcyBpdCBiZWNhdXNlIHRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQgdG8gbWVzc2FnZSBzaXplLCBvciBzb21lIG90aGVyIHNpemUgaXNzdWU/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaGFuZGxlIGAtRUZBVUxUYCB2ZXJzdXMgaG93IHRoZXkmIzM5O2QgaGFuZGxlIGAtRU1TR1NJWkVgIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb3JyZWN0IGZpeCwgb3Igd2hldGhlciBpdCBtaWdodCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgZWxzZXdoZXJlLiBUaGlzIGNoYW5nZSBsb29rcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYzPWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Njg6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1NC1cdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTQ1OD1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NzAtXHRlbHNlIGlmICh1bmxpa2VseSghc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pb191cmluZy9uZXQuYzoxNDcxOlx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbmlvX3VyaW5nL25ldC5jLTE0NzItXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz02MzM9RVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM2LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2Vcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYz03MDY9c3RhdGljIGludFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MDc6emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MDgtXHRcdFx0ICAgICAgaW50IGxlbmd0aCxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjAtXHRlbHNlIGlmIChiaW5kaW5nKVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjE6XHRcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHNrYiwgZnJvbSwgbGVuZ3RoLCBiaW5kaW5nKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOgoKKipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIGluIGVycm9yIHJlcG9ydGluZy4gVGhlIGZ1bmN0aW9ucyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBhcmUgbm93IHJldHVybmluZyBgLUVNU0dTSVpFYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRocm91Z2guIFdlIGtub3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIHRoYXQgaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYCAvIGBpb19zZ19mcm9tX2l0ZXJgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMuIFRoZSBjYWxsc3RhY2sgaXMgY3JpdGljYWwgaGVyZSwgYnV0IGl0IGxvb2tzIGxpa2UgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyBhbHNvIGNhbGxlZCBieSBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSB0b3AsIHNvIGxldCYjMzk7cyBjaGVjayBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCDigJMgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gdXNlcyB0aGUgZXJyb3IgY29kZXMgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIGRldGVybWluZSB3aGF0IHNpdHVhdGlvbiB3YXJyYW50cyB0aGlzIGNvZGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90YXAuYy02MjktXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTc3ND1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODY3LVx0XHRcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxuZHJpdmVycy9uZXQvdHVuLmM6MTg2ODpcdFx0XHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cbmRyaXZlcnMvbmV0L3R1bi5jLTE4NjktXHRcdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTg4My1cdFx0aWYgKHplcm9jb3B5KVxuZHJpdmVycy9uZXQvdHVuLmM6MTg4NDpcdFx0XHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4ODUtXHRcdGVsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXHRcdFx0XHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ4LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDk6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NTAtXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3NC19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzctLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3ODogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3OS0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4Ni0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg3OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODgte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk0LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTU6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTYtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTc6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTgtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTMzLVxubmV0L2NvcmUvc2tidWZmLmM6MTkzNDpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTM1LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgWmVyby1Db3B5IERhdGEgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIG1hcHBpbmcgb3V0IHRoZSB6ZXJvLWNvcHkgZGF0YSBmbG93IGhlcmUuIEl0IGxvb2tzIGxpa2UgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZCwgYnV0IHRoZXkmIzM5O3JlIGJlaW5nIGludm9rZWQgYnkgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhbmQgYGlvX3NnX2Zyb21faXRlcmAgLyBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYC4gIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdGhlIGNyaXRpY2FsIHVwc3RyZWFtIGZ1bmN0aW9uLCBpdCYjMzk7cyB3aGF0IHRpZXMgZXZlcnl0aGluZyB0b2dldGhlci4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCwgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLCBhbmQgZXZlbiBgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYmAuCgpOb3csIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGl0c2VsZiBpcyBiZWluZyB1c2VkIGJ5IGB0YXBfZ2V0X3VzZXJgIGFuZCBgdHVuX2dldF91c2VyYC4uLiBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGJvdGggcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZXMuIFRoZSBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyByZWFsbHkgaW50cmlndWluZyBtZS4gIEkga25vdyBpdCBtdXN0IGJlIGludm9sdmVkIGluIGRhdGFncmFtLWJhc2VkIGNvbW11bmljYXRpb24sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIGB1ZHBfc2VuZG1zZ2AgYW5kIGByYXdfc2VuZG1zZ2AsIGFsdGhvdWdoIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBsYXR0ZXIgcG9pbnQuIEJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhlcmUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX2RncmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTk0OT1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE0NDk9c3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgQ2hhbmdlKioKCk9rYXksIHNvIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgX19pcF9hcHBlbmRfZGF0YWAgYW5kIGBfX2lwNl9hcHBlbmRfZGF0YWAuIFRoYXQgbWVhbnMgdGhpcyBpcyBjb3JlIGtlcm5lbCBsb2dpYyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCBkaXJlY3RseSByZWxhdGVkIHRvIFVEUCBhbmQgUmF3IHNvY2tldHMgdXNpbmcgYE1TR19aRVJPQ09QWWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgY3JpdGljYWwgcGF0aC4KClRoZSBjaGFuZ2UgaXRzZWxmIGlzIHRoZSBlcnJvciBjb2RlIOKAkyBzd2l0Y2hpbmcgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAuIEZ1bmN0aW9uYWxseSwgdGhhdCYjMzk7cyBhIHByZXR0eSBiaWcgZGVhbC4gRGlmZmVyZW50IGVycm9yIGNvZGVzIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGF0IHRoZSB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBsZXZlbC4gSXQgbWVhbnMgdGhlIGJlaGF2aW9yIG9mIGFwcGxpY2F0aW9ucyBvciB0aGUga2VybmVsIGl0c2VsZiBjb3VsZCBjaGFuZ2UgZGVwZW5kaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHRoaXMgc3BlY2lmaWMgZXJyb3IuIEdpdmVuIGl0cyBjZW50cmFsaXR5IGFuZCB0aGUgY2hhbmdlIGluIGVycm9yIGNvZGVzLCB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gV2UgbmVlZCB0byBleHBsb3JlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgYW5kIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gdGhlIGNoYW5nZSYjMzk7cyBpbXBhY3QgYW5kIGluZm9ybSBvdXIgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2dfZnJvbV9pdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTExMj1zdHJ1Y3QgaW9fcmVjdnpjIHtcbi0tXG5pb191cmluZy9uZXQuYy0xMTgtXG5pb191cmluZy9uZXQuYzoxMTk6c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmlvX3VyaW5nL25ldC5jLTEyMC1cdFx0XHRcdCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmM6MTIxOnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG5pb191cmluZy9uZXQuYy0xMjItXHRcdFx0ICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xMzc4PWludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9uZXQuYy0xNDQzLVx0aWYgKCEoemMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpKSB7XG5pb191cmluZy9uZXQuYzoxNDQ0Olx0XHRpb21zZy1cdTAwM2Vtc2cuc2dfZnJvbV9pdGVyID0gaW9fc2dfZnJvbV9pdGVyX2lvdmVjO1xuaW9fdXJpbmcvbmV0LmMtMTQ0NS1cdFx0cmV0dXJuIGlvX25vdGlmX2FjY291bnRfbWVtKHpjLVx1MDAzZW5vdGlmLCBpb21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIuY291bnQpO1xuaW9fdXJpbmcvbmV0LmMtMTQ0Ni1cdH1cbmlvX3VyaW5nL25ldC5jOjE0NDc6XHRpb21zZy1cdTAwM2Vtc2cuc2dfZnJvbV9pdGVyID0gaW9fc2dfZnJvbV9pdGVyO1xuaW9fdXJpbmcvbmV0LmMtMTQ0OC1cdHJldHVybiAwO1xuLS1cbmlvX3VyaW5nL25ldC5jLTE0NTAtXG5pb191cmluZy9uZXQuYzoxNDUxOnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG5pb191cmluZy9uZXQuYy0xNDUyLVx0XHRcdFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcbi0tXG5pb191cmluZy9uZXQuYy0xNDU3LVxuaW9fdXJpbmcvbmV0LmM6MTQ1ODpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW9fdXJpbmcvbmV0LmMtMTQ1OS1cdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gWmVyby1Db3B5IGluIGlvX3VyaW5nIHNlbmRtc2cqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgaW9fc2dfZnJvbV9pdGVyYCBhbmQgYGlvX3NnX2Zyb21faXRlcl9pb3ZlY2AgYXJlIGtleSBmb3IgaW9fdXJpbmcmIzM5O3MgYHNlbmRtc2dgIGZ1bmN0aW9uYWxpdHkgd2hlbiB1c2VkIHdpdGggYE1TR19aRVJPQ09QWWAuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgbXVzdCBiZSB3aXRoaW4gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIExldCBtZSBtYXAgb3V0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgdG8gZGlnIGludG8uCgpBbHJpZ2h0LCB0aGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb246IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCB0aGVuIHRoZSBpbnRlcm5hbHMgYXJlIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gLCBhbmQgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZGl2aW5nIGludG8gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgYXMgdGhlc2UgYXJlIHByb2JhYmx5IHRoZSBoaWdoZXN0IGxldmVsIGNoYW5nZXMgaW4gdGhlIHplcm8tY29weSBkYXRhcGF0aCwgYW5kIEkmIzM5O2xsIGZpbmQgdGhlbSB3aXRoaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYzPWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Njg6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1NC1cdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTQ1OD1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NzAtXHRlbHNlIGlmICh1bmxpa2VseSghc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pb191cmluZy9uZXQuYzoxNDcxOlx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbmlvX3VyaW5nL25ldC5jLTE0NzItXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz02MzM9RVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM2LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2Vcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBFeHBvcnQgU3RhdHVzKioKCk9rYXksIHNvIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW50ZXJlc3RpbmcgZnVuY3Rpb24sIGFuZCB0aGUgbmFtZSBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBwb3RlbnRpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyBpdCBhY3R1YWxseSBleHBvcnRlZCwgYW5kIHRoZXJlZm9yZSBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIG9mIGl0cyBvd24gbW9kdWxlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaXRzIHZpc2liaWxpdHkuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBpdHMgZGF0YWdyYW0tcmVsYXRlZCBuYW1lLCBpcyB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIGNvcmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgb3V0IGlmIGl0IGlzIGFuIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2wgb3IgaWYgaXQmIzM5O3MgcmVzdHJpY3RlZCB0byBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoYXQgbW9kdWxlLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDYzNjpcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuIDYzNzpcdHtcbiA2Mzg6XHRcdGludCBmcmFnID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzO1xuIDYzOTpcdFxuIDY0MDpcdFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbiA2NDE6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA2NDI6XHRcbiA2NDM6XHRcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gNjQ0Olx0XHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB3aGF0ZXZlciBmaWVsZCBpcyByZWxldmFudCwgYW5kIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSAmIzM0O2Z1bHNvbWUgc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzJiMzNDs6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVGhlIEV4cG9ydCBDb250ZXh0KioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogKipJcyBpdCBleHBvcnRlZD8qKiBUaGlzIGlzIHRoZSBjcnVjaWFsLCBmb3VuZGF0aW9uYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBldmVuIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQmIzM5O3MgaW50ZW5kZWQgZm9yLCBvciBzdXNjZXB0aWJsZSB0bywgYmVpbmcgbW92ZWQgb3V0IG9mIGl0cyBvcmlnaW5hbCBlbnZpcm9ubWVudC4gVGhpcyBzZXRzIHRoZSBzdGFnZSBmb3IgZXZlcnl0aGluZyBlbHNlLiAmIzM0O0V4cG9ydCYjMzQ7IGlzIGEgbG9hZGVkIHRlcm07IGl0IGltcGxpZXMgY2VydGFpbiByZWd1bGF0aW9ucywgcHJvY2Vzc2VzLCBwb3RlbnRpYWwgY29zdHMsIGFuZCwgZnJhbmtseSwgb3Bwb3J0dW5pdGllcyBvciBpc3N1ZXMgd2l0aCBjb21wbGlhbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCB0aGUgcG90ZW50aWFsIGRlc3RpbmF0aW9uLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTU6XHRcdFx0XHRcdHBhZ2VfcmVmX3N1YihsYXN0X2hlYWQsIHJlZnMpO1xuIDY5NjpcdFx0XHRcdFx0cmVmcyA9IDA7XG4gNjk3Olx0XHRcdFx0fVxuIDY5ODpcdFx0XHRcdHNrYl9maWxsX3BhZ2VfZGVzY19ub2FjYyhza2IsIGZyYWcmIzQzOyYjNDM7LCBoZWFkLCBzdGFydCwgc2l6ZSk7XG4gNjk5Olx0XHRcdH1cbiA3MDA6XHRcdFx0aWYgKHJlZnMpXG4gNzAxOlx0XHRcdFx0cGFnZV9yZWZfc3ViKGxhc3RfaGVhZCwgcmVmcyk7XG4gNzAyOlx0XHR9XG4gNzAzOlx0XHRyZXR1cm4gMDtcbiA3MDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0ODIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiYjMzk7cyBTY29wZSoqCgpIbW0sIHNvIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQganVzdCBiZWNhdXNlIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IG1lYW4gaXQmIzM5O3Mgc3RhdGljLiBPa2F5LCBsZXQmIzM5O3MgYmFjayB1cCBhIG1vbWVudC4gSWYgaXQmIzM5O3MgKm5vdCogc3RhdGljLCB0aGVuIGl0JiMzOTtzIGFjY2Vzc2libGUgZ2xvYmFsbHksIHdoaWNoIHN1Z2dlc3RzIGl0IGlzIGEgZ2xvYmFsIHN5bWJvbC4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uOiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBXYWl0LCBJIHRob3VnaHQgSSByZW1lbWJlciByZWFkaW5nIHRoYXQgZnVuY3Rpb24gYXMgZGVjbGFyZWQgYHN0YXRpY2AuIFNvLCBnb2luZyBiYWNrLCBpdCBpcyBgc3RhdGljYCBhbmQgdGh1cyBsb2NhbCB0byB0aGUgY29tcGlsYXRpb24gdW5pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDU6XHRcbiA3MDY6XHRzdGF0aWMgaW50XG4gNzA3Olx0emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIDcwODpcdFx0XHRcdCAgICAgIGludCBsZW5ndGgsXG4gNzA5Olx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gNzEwOlx0e1xuIDcxMTpcdFx0aW50IGkgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gNzEyOlx0XHRzaXplX3QgdmlydF9hZGRyLCBzaXplLCBvZmY7XG4gNzEzOlx0XHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcbiA3MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBaZXJvLUNvcHkgRGF0YSBUcmFuc2ZlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB6ZXJvLWNvcHkgZGF0YSB0cmFuc2ZlciwgYW5kIEkgYmVsaWV2ZSB0aGF0IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gQW5kLCB5ZXMsIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgZGVmaW5pdGVseSBvbiB0aGUgcmFkYXIgYXMgYSBnb29kIGZvY3VzIHBvaW50LiBBbHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGluY2x1ZGluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB0byB0aGlzIGxpc3QgYXMgd2VsbC4gU28sIGxldCBtZSBhZGQgdGhvc2UgdG8gbXkgbWVudGFsIG5vdGVzLCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLgoKSG1tLCBhIHF1aWNrIG5vdGUsIEkgc2hvdWxkIGtlZXAgaW4gbWluZCB0aGF0IGBpb19zZ19mcm9tX2l0ZXJgIGFuZCBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYCBhcmUgKnN0YXRpYyouIEFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQW5kLCB0byBrZWVwIG15IGJlYXJpbmdzLCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCAqaXNuJiMzOTt0KiBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX3N0cmVhbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xubmV0L2NvcmUvc2tidWZmLmMtMTkxMS1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xubmV0L2NvcmUvc2tidWZmLmMtMTk1MS1cbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzMzgtXG5uZXQvaXB2NC90Y3AuYzoxMzM5Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQwLVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gVGhpcyBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSB0byBleHBsb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCioqWmVyby1Db3B5IGFuZCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBtZXRob2QsIG9yIHJlbGF0ZWQgbWV0aG9kcy4gVGhlIHN0YW5kYXJkIGBNU0dfWkVST0NPUFlgIGZlYXR1cmUgaXMgd2VsbC1lc3RhYmxpc2hlZCwgYnV0IGl0JiMzOTtzIGxpa2VseSB0aGVyZSBhcmUgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWdzIGFuZCBlbnN1cmUgdGhhdCB3aGF0ZXZlciBzdXBwb3J0IGlzIHJlcXVpcmVkIGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZS4gTGV0IG1lIHNlZSB3aGljaCBzcGVjaWZpYyBrbm9icyBhbmQgbGV2ZXJzIEkgY2FuIHR1cm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Ny1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjktXHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTE0NTE9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pb191cmluZy9uZXQuYy0xNDU0LVx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG5pb191cmluZy9uZXQuYzoxNDU1Olx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XG5pb191cmluZy9uZXQuYy0xNDU2LX1cbi0tXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ3MC1cdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcbmlvX3VyaW5nL25ldC5jOjE0NzE6XHRcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ3Mi1cbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM0LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo2MzU6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVx0ZWxzZVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjM6XHRcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmtpbmcgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmtpbmcgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN0dWZmIGlzIGFsbCBjZW50cmFsaXplZCBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIFRoYXQmIzM5O3MgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBzaW5jZSBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQgYXMgbG9uZyBhcyBuZXR3b3JraW5nIGlzIHVwLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayBpdCYjMzk7cyBhbHNvIHdvcnRoIGludmVzdGlnYXRpbmcgdGhpcyBpbiBsaWdodCBvZiBgSU9fVVJJTkdgLCBhcyBpdCB0ZW5kcyB0byBsZXZlcmFnZSBjb3JlIGRhdGFncmFtIGZ1bmN0aW9uYWxpdGllcy4gTGV0JiMzOTtzIHNlZSwgbm93IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IG5ldHdvcmtpbmcgY29yZS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcbiAgIDc6XHRcdCBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBcXFxuICAgODpcdFx0IGZsb3dfZGlzc2VjdG9yLm9cbiAgIDk6XHRcbiAgMTA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9jb3JlLm9cbiAgMTE6XHRcbiAgMTI6XHRvYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4gIDEzOlx0XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbiAgMTQ6XHRcdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4gIDE1Olx0XHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbiAgMTY6XHRcdFx0XHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIG5ldGRldl93b3JrLm8gZ3NvLm9cbiAgMTc6XHRcbiAgMTg6XHRvYmotJChDT05GSUdfTkVUREVWX0FERFJfTElTVF9URVNUKSAmIzQzOz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXG4gIDE5Olx0XG4gIDIwOlx0b2JqLXkgJiM0Mzs9IG5ldC1zeXNmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTI1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBgZGF0YWdyYW0ub2AgTW9kdWxlKioKCk9rYXksIHNvIGBkYXRhZ3JhbS5vYCBpcyBhIGNvbnNpc3RlbnRseSBjb21waWxlZCBjb21wb25lbnQg4oCTIGdvb2QgdG8ga25vdy4gVGhpcyBtZWFucyBJIGRvbiYjMzk7dCBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggc3BlY2lhbCBjb25maWd1cmF0aW9ucyAqdW5sZXNzKiBJIHNwZWNpZmljYWxseSB3YW50IHRvIGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCBgaW9fdXJpbmdgLiBFdmVuIHRoZW4sIHRoYXQmIzM5O3MgcmVhbGx5IGp1c3QgdGhlIG9uZSBwb3RlbnRpYWwgd3JpbmtsZSBmb3IgYWNjZXNzLgoKT2YgY291cnNlLCBldmVuIGlmIEkgZG9uJiMzOTt0IHVzZSBgaW9fdXJpbmdgLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhdCBpdCB1c2luZyBhIHN0YW5kYXJkIHNvY2tldCBgc2VuZG1zZ2AgY2FsbCB3aXRoIGBNU0dfWkVST0NPUFlgLiBUaGF0JiMzOTtzIGEgc29saWQgZmFsbGJhY2sgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBwYXRoLiBOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCB0byB1bmRlcnN0YW5kIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhpcyB6ZXJvLWNvcHkgbWVjaGFuaXNtIGZ1bmN0aW9ucyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzA3Onplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVx0XHRcdCAgICAgIGludCBsZW5ndGgsXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVx0ZWxzZSBpZiAoYmluZGluZylcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShza2IsIGZyb20sIGxlbmd0aCwgYmluZGluZyk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGV4cGxpY2l0bHkgdGllZCB0byBhIHNpdHVhdGlvbiB3aGVyZSBgYmluZGluZ2AgaXNuJiMzOTt0IGEgbnVsbCBwb2ludGVyLiBTbywgdGhlIGtleSBxdWVzdGlvbiBpczogV2hhdCBkb2VzIHRoaXMgYGJpbmRpbmdgIHRoaW5nICphY3R1YWxseSogcmVwcmVzZW50PyBXaGVyZSBkb2VzIHRoaXMgdmFyaWFibGUgb3JpZ2luYXRlPyBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBhbmQgcHVycG9zZSBvZiBgYmluZGluZ2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCByYXRpb25hbGUgYmVoaW5kIHVzaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb2RlIGlzIHNldHRpbmcgb3IgcGFzc2luZyBhIG5vbi1udWxsIGBiaW5kaW5nYCB0byBzZWUgd2h5IGl0IG5lY2Vzc2l0YXRlcyB0aGlzIHplcm8tY29weSBhcHByb2FjaC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDgtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0OTppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc0LX1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NzYtXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03ODc9aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTQtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NTpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5Ni19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTMzLVxubmV0L2NvcmUvc2tidWZmLmM6MTkzNDpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTM1LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk1NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqWmVyby1Db3B5IEl0ZXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB3aGVuIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBza2JzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHN0cmVhbS1vcmllbnRlZCBuZXR3b3JraW5nLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgaXRlcmF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggY29udGlndW91cyBzZWdtZW50cyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgc2ticyBoZXJlPyBJdCYjMzk7cyBjcml0aWNhbCB0byBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgY29weWluZywgYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgZWZmaWNpZW5jeSBhbmQgbWluaW1hbCBvdmVyaGVhZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGl0ZXJhdGluZyBwcm9jZXNzIGNvdWxkIGluYWR2ZXJ0ZW50bHkgY2F1c2UgY29weWluZyB0byBvY2N1ci4gSeKAmW0gd29uZGVyaW5nIGFib3V0IHBvdGVudGlhbCBwaXRmYWxscywgdGhpbmdzIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBJcyB0aGlzIHRoZSAqcmlnaHQqIHdheSB0byBnbyBhYm91dCBpdD8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBwYXJ0aWFsIHJlYWRzIGFuZCB3cml0ZXM/IEkgbmVlZCB0byBxdWlja2x5IGFuZCBjb21wcmVoZW5zaXZlbHkgY29uZmlybSBpdHMgYmVoYXZpb3VyIHVuZGVyIHZhcmlvdXMgZWRnZSBjYXNlczogYnVmZmVyIG92ZXJmbG93cywgdW5kZXJmbG93cywgYW5kIHBhcnRpYWwgd3JpdGVzL3JlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTEyOmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMzM4LVxubmV0L2lwdjQvdGNwLmM6MTMzOTpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cdFx0XHRcdFx0XHQgICAgICAgYmluZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjUyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBCaW5kaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gVGhlIGBiaW5kaW5nYCBJJiMzOTttIHNlZWluZyBpbnNpZGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgcG9pbnRpbmcgYmFjayB0byBgc29ja2MuZGV2bWVtX2JpbmRpbmdgLiBBaCwgcmlnaHQsIHRoYXQgY29ubmVjdHMgaXQgdG8gdGhlIFRDUCBkZXZtZW0gZnVuY3Rpb25hbGl0eSDigJMgZGV2aWNlIG1lbW9yeSBUQ1AuIFNvLCB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgaXM6IGlzIHRoaXMgc3BlY2lmaWMgVENQIGRldm1lbSBpbXBsZW1lbnRhdGlvbiBjb25maWd1cmFibGU/IEFyZSB0aGVyZSBhbnkga25vYnMgb3Igc2V0dGluZ3MgSSBjYW4gdHdlYWsgcmVsYXRlZCB0byBUQ1AgZGV2bWVtIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXMgYGJpbmRpbmdgIGJlaGF2aW9yPyBOZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlncyB0byBzZWUgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkIGZvciB0aGlzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bWVtX2JpbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIHJlYXNvbmluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGdyb3VuZGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBkZWVwZXIgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBhIGxvdCBoaW5nZXMgb24gaXRzIGJlaGF2aW9yLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSB3b3JrIG9mIHNlbmRpbmcgVENQIGRhdGEgaGFwcGVucywgYW5kIGFueSBzdWJ0bGUgbWlzc3RlcHMgaGVyZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGxvY2tpbmcgc3RyYXRlZ2llcywgaG93IGl0IGhhbmRsZXMgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgSeKAmW0gbWFraW5nIGFib3V0IGl0cyBkYXRhIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQuIEJlZm9yZSBJIGdvIGRvd24gYSByYWJiaXQgaG9sZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBJIHVuZGVyc3RhbmQgd2hhdCBpcyBhY3R1YWxseSBnb2luZyBvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldm1lbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jLTI5MC1cbm5ldC9pcHY0L3RjcC5jOjI5MTojaW5jbHVkZSBcJiMzNDsuLi9jb3JlL2Rldm1lbS5oXCYjMzQ7XG5uZXQvaXB2NC90Y3AuYy0yOTItXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xubmV0L2lwdjQvdGNwLmM6MTExODpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nID0gTlVMTDtcbm5ldC9pcHY0L3RjcC5jLTExMTktXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbm5ldC9pcHY0L3RjcC5jOjExNTk6XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNjAtXHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTQyMC1cdGlmIChiaW5kaW5nKVxubmV0L2lwdjQvdGNwLmM6MTQyMTpcdFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XG5uZXQvaXB2NC90Y3AuYy0xNDIyLVx0cmV0dXJuIGNvcGllZCAmIzQzOyBjb3BpZWRfc3luO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE0MzktXHRpZiAoYmluZGluZylcbm5ldC9pcHY0L3RjcC5jOjE0NDA6XHRcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xubmV0L2lwdjQvdGNwLmMtMTQ0MS1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yNDk5PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTc1LVx0XHRcdG5pb3YgPSBza2JfZnJhZ19uZXRfaW92KGZyYWcpO1xubmV0L2lwdjQvdGNwLmM6MjU3NjpcdFx0XHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XG5uZXQvaXB2NC90Y3AuYy0yNTc3LVx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTk4LVx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ190b2tlbiA9IHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdO1xubmV0L2lwdjQvdGNwLmM6MjU5OTpcdFx0XHRcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XG5uZXQvaXB2NC90Y3AuYy0yNjAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgKioKClJpZ2h0LCBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuLi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEJlc3QgdG8gc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24uIExldCYjMzk7cyBwdWxsIHVwIGBuZXQvY29yZS9kZXZtZW0uaGAgYW5kIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLCBlbnVtZXJhdGlvbnMsIGFuZCBhbnkgaW5saW5lIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHRoZSBpbnRlbnQuIEtub3dpbmcgdGhlIGJpbmRpbmcgc3RyYXRlZ3kgYW5kIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSByZWdpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3Mgcm9sZS4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIG1lbW9yeSBtYXBwaW5nIGRldGFpbHMsIGFuZCBwZXJoYXBzIHNvbWUgY29uc2lkZXJhdGlvbnMgYXJvdW5kIGRldmljZS1zcGVjaWZpYyBhbGxvY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiBEZXZpY2UgbWVtb3J5IFRDUCBzdXBwb3J0XG4gICA0Olx0ICpcbiAgIDU6XHQgKiBBdXRob3JzOlx0TWluYSBBbG1hc3J5IFx1MDAzY2FsbWFzcnltaW5hQGdvb2dsZS5jb21cdTAwM2VcbiAgIDY6XHQgKlx0XHRXaWxsZW0gZGUgQnJ1aWpuIFx1MDAzY3dpbGxlbWJAZ29vZ2xlLmNvbVx1MDAzZVxuICAgNzpcdCAqXHRcdEthaXl1YW4gWmhhbmcgXHUwMDNja2FpeXVhbnpAZ29vZ2xlLmNvbVx1MDAzZVxuICAgODpcdCAqXG4gICA5Olx0ICovXG4gIDEwOlx0I2lmbmRlZiBfTkVUX0RFVk1FTV9IXG4gIDExOlx0I2RlZmluZSBfTkVUX0RFVk1FTV9IXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldG1lbS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcdTAwM2VcbiAgMTU6XHRcbiAgMTY6XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xuICAxNzpcdFxuICAxODpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcbiAgMTk6XHRcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4gIDIwOlx0XHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBkZXZtZW1gIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYGRldm1lbWAuIElzIHRoZXJlIGEgY29uZmlndXJhdGlvbiBmaWxlIHNvbWV3aGVyZSB0aGF0IGNvbnRyb2xzIGl0cyBiZWhhdmlvciBvciBkZWZhdWx0IHNldHRpbmdzPyBJIGtub3cgaXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHV0aWxpdHkgZm9yIGFjY2Vzc2luZyBtZW1vcnkgZGlyZWN0bHksIGJ1dCBzdXJlbHkgdGhlcmUmIzM5O3MgKnNvbWV0aGluZyogSSBjYW4gdHdlYWsgdG8gdGFpbG9yIGl0cyBvcGVyYXRpb24uIE1heWJlIHNvbWV0aGluZyBhYm91dCBlcnJvciByZXBvcnRpbmcsIGFjY2VzcyBwZXJtaXNzaW9ucywgb3IgcGVyaGFwcyBldmVuIGEgZGVmYXVsdCBhZGRyZXNzIHNwYWNlIGl0IG9wZXJhdGVzIHdpdGhpbi4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTt2ZSBwcm9iYWJseSBqdXN0IG1pc3NlZCBzb21ldGhpbmcgaW4gdGhlIGRvY3VtZW50YXRpb24sIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYW5zd2VyLiBUaW1lIHRvIGRpZyBhcm91bmQgdGhlIHVzdWFsIHBsYWNlcyAtIGAvZXRjYCwgYC91c3IvbG9jYWwvZXRjYCwgdGhlIG1hbiBwYWdlIG9mIGNvdXJzZSwgYW5kIGFueSByZWxldmFudCBwYWNrYWdlIGRvY3VtZW50YXRpb24uIEkgZG91YnQgaXQgd291bGQgYmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGNvbXBsZXgsIGJ1dCBJIGRvIHRlbmQgdG8gb3Zlcmxvb2sgdGhlIG9idmlvdXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qREVWTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhci9LY29uZmlnPTI0OT1jb25maWcgTlNDX0dQSU9cbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNTgtXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNTk6Y29uZmlnIERFVk1FTVxuZHJpdmVycy9jaGFyL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDsvZGV2L21lbSB2aXJ0dWFsIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxubGliL0tjb25maWc9NjE3PWNvbmZpZyBHRU5FUklDX0xJQl9VQ01QREkyXG4tLVxubGliL0tjb25maWctNjE5LVxubGliL0tjb25maWc6NjIwOmNvbmZpZyBHRU5FUklDX0xJQl9ERVZNRU1fSVNfQUxMT1dFRFxubGliL0tjb25maWctNjIxLVx0Ym9vbFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTE5NTc9c291cmNlIFwmIzM0O3NhbXBsZXMvS2NvbmZpZ1wmIzM0O1xubGliL0tjb25maWcuZGVidWctMTk1OC1cbmxpYi9LY29uZmlnLmRlYnVnOjE5NTk6Y29uZmlnIEFSQ0hfSEFTX0RFVk1FTV9JU19BTExPV0VEXG5saWIvS2NvbmZpZy5kZWJ1Zy0xOTYwLVx0Ym9vbFxubGliL0tjb25maWcuZGVidWctMTk2MS1cbmxpYi9LY29uZmlnLmRlYnVnOjE5NjI6Y29uZmlnIFNUUklDVF9ERVZNRU1cbmxpYi9LY29uZmlnLmRlYnVnLTE5NjMtXHRib29sIFwmIzM0O0ZpbHRlciBhY2Nlc3MgdG8gL2Rldi9tZW1cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xOTgxLVxubGliL0tjb25maWcuZGVidWc6MTk4Mjpjb25maWcgSU9fU1RSSUNUX0RFVk1FTVxubGliL0tjb25maWcuZGVidWctMTk4My1cdGJvb2wgXCYjMzQ7RmlsdGVyIEkvTyBhY2Nlc3MgdG8gL2Rldi9tZW1cJiMzNDtcbi0tXG5uZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcbi0tXG5uZXQvS2NvbmZpZy02OC1cbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXG5uZXQvS2NvbmZpZy03MC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4OTQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFplcm8tQ29weSBOZXR3b3JraW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgTkVUX0RFVk1FTWAgaXMgYSBgZGVmX2Jvb2wgeWAsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFsd2F5cyBvbiBpZiBuZXR3b3JraW5nIGlzIGVuYWJsZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbiBmb3IgaXQuIExldCYjMzk7cyBtb3ZlIG9uIHRvIGlkZW50aWZ5aW5nIHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLgoKUmlnaHQsIHRoZSBpbml0aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLgoKSG9sZCBvbiwgSSByZWNhbGwgdGhhdCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2hpbGUgSSYjMzk7bSBoZXJlLiBJdCBhcHBlYXJzIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGlzIHRoZSBvbmUgdGhhdCB3YXMgcmVjZW50bHkgbW9kaWZpZWQuIFRoZSBzdGF0aWMgZnVuY3Rpb24gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBjYW4mIzM5O3QgYmUgdXNlZCBkaXJlY3RseSBidXQgaXMgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBPa2F5LCBpdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBnbG9iYWxseSB2aXNpYmxlLiBXZSBjYW4gY29uZmlybSB0aGF0IGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGFyZSBib3RoIGV4cG9ydGVkLCBhbmQgc28gaXMgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuCgpBbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHNhbWUgcGFnZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAKKiAgIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAKKiAgIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgCiogICBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYAoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCEgU2luY2UgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgaXMgdXNlZCBkaXJlY3RseSBieSBgaW9fc2dfZnJvbV9pdGVyYCwgYElPX1VSSU5HYCBpcyBhIGdvb2QgY29uZmlnIHRvIGFkZCB0byB0aGUgbGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNy1cbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTktXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzOS1cbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTQxLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyB0aG91Z2h0czoKCioqQ29uZmlndXJpbmcgdGhlIEtlcm5lbDogSW5pdGlhbCBDaGVja3MgYW5kIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQga2VybmVsIGNvbmZpZ3VyYXRpb24sIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGBJT19VUklOR2AgZmVhdHVyZS4gVGhhdCYjMzk7cyB0aGUgbWFpbiBkcml2ZXIgb2YgdGhpcyB0aG91Z2h0IHByb2Nlc3MuIEl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlOyB0aGF0JiMzOTtzIHRoZSBmb2NhbCBwb2ludC4KCkkmIzM5O20gaW1tZWRpYXRlbHkgcHJvbXB0ZWQgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGEgc3lzdGVtYXRpYyBhcHByb2FjaCwgcmlnaHQ/IFNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24gaW4gdGhlIHNhbWUgbmVpZ2hib3Job29kLiBgTkVUX0RFVk1FTWAgaXMgc2hvd2luZyBgZGVmX2Jvb2wgeWAsIGFuZCwgd2VsbCwgYE5FVGAgaXRzZWxmIGlzIGEgZ2l2ZW4uIFRoZXNlIGFyZSBwcmV0dHkgY29tbW9uOyBub3RoaW5nIGdyb3VuZGJyZWFraW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgaW9fc2dfZnJvbV9pdGVyYC4gU2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgaGVyZSB0aGF0IHdhcnJhbnRzIGEgc2Vjb25kIGxvb2suIE1heWJlIHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSwgYSBzdWJ0bGUgaW50ZXJhY3Rpb24sIG9yIHBlcmhhcHMgSSYjMzk7bSB0cnlpbmcgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgYElPX1VSSU5HYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgdXAgdG8gc3BlZWQgb24gYWxsIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZ19mcm9tX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTEyPXN0cnVjdCBpb19yZWN2emMge1xuLS1cbmlvX3VyaW5nL25ldC5jLTExOC1cbmlvX3VyaW5nL25ldC5jOjExOTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcl9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW9fdXJpbmcvbmV0LmMtMTIwLVx0XHRcdFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XG5pb191cmluZy9uZXQuYzoxMjE6c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmlvX3VyaW5nL25ldC5jLTEyMi1cdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTEzNzg9aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NDMtXHRpZiAoISh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0ZJWEVEX0JVRikpIHtcbmlvX3VyaW5nL25ldC5jOjE0NDQ6XHRcdGlvbXNnLVx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXJfaW92ZWM7XG5pb191cmluZy9uZXQuYy0xNDQ1LVx0XHRyZXR1cm4gaW9fbm90aWZfYWNjb3VudF9tZW0oemMtXHUwMDNlbm90aWYsIGlvbXNnLVx1MDAzZW1zZy5tc2dfaXRlci5jb3VudCk7XG5pb191cmluZy9uZXQuYy0xNDQ2LVx0fVxuaW9fdXJpbmcvbmV0LmM6MTQ0NzpcdGlvbXNnLVx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXI7XG5pb191cmluZy9uZXQuYy0xNDQ4LVx0cmV0dXJuIDA7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1MC1cbmlvX3VyaW5nL25ldC5jOjE0NTE6c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmlvX3VyaW5nL25ldC5jLTE0NTItXHRcdFx0XHQgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NTctXG5pb191cmluZy9uZXQuYzoxNDU4OnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG5pb191cmluZy9uZXQuYy0xNDU5LVx0XHRcdCAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIERhdGEgVHJhbnNmZXIgUHJlcGFyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBoZXJlLiBUaGUgZnVuY3Rpb24gYGlvX3NlbmRfemNfcHJlcGAgaXMgdGhlIG9uZSB0aGF0IHNldHMgdGhlIGBzZ19mcm9tX2l0ZXJgIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBjcml0aWNhbC4gTm93LCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgYGlvX3NlbmRfemNfcHJlcGAuIElzIGl0IGV4cG9ydGVkLCBvciBpcyBpdCBhIGdsb2JhbCBmdW5jdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBhY2Nlc3NpYmxlIGFuZCwgYnkgZXh0ZW5zaW9uLCBob3cgSSBjYW4gYmVzdCB1dGlsaXplIHRoaXMgZnVuY3Rpb24gaW4gbXkgdXNlIGNhc2UuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgdHJhbnNmZXIgaXMgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX3pjX3ByZXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTM2MT12b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbi0tXG5pb191cmluZy9uZXQuYy0xMzc3LVxuaW9fdXJpbmcvbmV0LmM6MTM3ODppbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0xMzc5LXtcbi0tXG5pb191cmluZy9uZXQuaD01ND1pbnQgaW9fc2VuZG1zZ196YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5oOjU1OmludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9uZXQuaC01Ni12b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTQzMy1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG5pb191cmluZy9vcGRlZi5jOjQzNDpcdFx0LnByZXBcdFx0XHQ9IGlvX3NlbmRfemNfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmMtNDM1LVx0XHQuaXNzdWVcdFx0XHQ9IGlvX3NlbmRtc2dfemMsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00NDYtXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuaW9fdXJpbmcvb3BkZWYuYzo0NDc6XHRcdC5wcmVwXHRcdFx0PSBpb19zZW5kX3pjX3ByZXAsXG5pb191cmluZy9vcGRlZi5jLTQ0OC1cdFx0Lmlzc3VlXHRcdFx0PSBpb19zZW5kbXNnX3pjLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5NwoJCQkJCQkJb3V0cHV0OiAyMjkKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFplcm9jb3B5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0d28gZ2xvYmFsIGZ1bmN0aW9ucyBqdW1wIG91dCBhdCBtZTogYGlvX3NlbmRfemNfcHJlcGAgYW5kIGBpb19zZW5kbXNnX3pjYC4gTGV0JiMzOTtzIGFkZCB0aGF0IGBpb19zZW5kbXNnX3pjYCB0byB0aGUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGhlcmUgaXMgYWJvdXQgaG93IHdlJiMzOTtyZSB0cmVhdGluZyBkYXRhZ3JhbXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLgoKUmlnaHQsIHNvIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgbWUgdG8gZm9jdXMgb24gYXJlIG5vdzoKCiogICBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYAoqICAgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYAoqICAgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAKKiAgIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gCiogICBgaW9fc2VuZG1zZ196Y2AKClRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgY2hhbmdlIGl0IG1ha2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdHdlYWtpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gTm93LCB3aGVuIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNoaWZ0aW5nIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgLiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhci4gVGhpcyBpcyBkaXJlY3RseSB0aWVkIHRvIE1TR1xfWkVST0NPUFkgYW5kIGlvXF91cmluZyB6ZXJvY29weSBzZW5kcywgd2hpY2gsIGFzIHdlIGtub3csIGFyZSBjcml0aWNhbCBhcmVhcyBvZiBoaWdoIHBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGFuZCBjYW4gYmUgZWFzaWx5IGltcGFjdGVkLgoKVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIHN1YnRsZSwgYnV0IGl0JiMzOTtzIGNoYW5naW5nIHRoZSBlcnJvciBjb2RlIHRoYXQgZ29lcyBiYWNrIHRvIHVzZXJzcGFjZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUga2VybmVsIGl0c2VsZiBoYW5kbGVzIHRoZSBlcnJvci4gVGhpcyBpcyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIHVzZWZ1bCwgYXMgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBleHBlY3RlZCByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggcmVncmVzc2lvbiBhbmQgdW5leHBlY3RlZCBiZWhhdmlvci4KClNvLCBsZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O19femVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAgICYjMzQ7aW9fc2VuZG1zZ196YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVncmVzc2lvbnMgaW4gZXJyb3IgaGFuZGxpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O19femVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDssCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAgICYjMzQ7aW9fc2VuZG1zZ196YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVncmVzc2lvbnMgaW4gZXJyb3IgaGFuZGxpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJiMzOTtzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MDE0OWY3OWFhMDExYjAzODllMzAxNDQ4ZDI0YWZhNGY3NzNhYTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMzozNDozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDE3M2I1ZDk3YmQ0MDkuLjZmOGZmZDYxYmNhYjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOwogCiAJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJd2hpbGUgKGxlbmd0aCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiAJCXN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDsKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCXN0cnVjdCBuZXRfaW92ICpuaW92OwogCiAJaWYgKGkgJmFtcDsmYW1wOyBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJLyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlCiAJICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0bwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDaGFuZ2UgaW4gRXJyb3IgQ29kZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHN1YnRseSBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2l0aGluIHRoZSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBUaGUgY29uZGl0aW9uIHRyaWdnZXJpbmcgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2hlbiBgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGlzIGZhbHNlIChmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uKSBvciB0cnVlIHdpdGggYW4gaW5kZXggJiMzOTtpJiMzOTsgKGZvciB0aGUgc2Vjb25kKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1NvIHdoYXQ/JiMzNDsuIEl0JiMzOTtzIGp1c3QgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSwgcmlnaHQ/IE5vdCBleGFjdGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLiBFcnJvciBjb2Rlcywgd2hpbGUgc2VlbWluZ2x5IHNpbXBsZSwgY2FuIGhhdmUgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgY2FsbGluZyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gdXNlciBzcGFjZSwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyB0aGlua2luZzogRG9lcyB0aGlzIGRpZmZlcmVudCBlcnJvciBjb2RlIHBvdGVudGlhbGx5IGNoYW5nZSBob3cgdGhlIGNhbGxlciBoYW5kbGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgY2FsbGVycyBzaG91bGQganVzdCBiZSBwcm9wYWdhdGluZyB0aGUgZXJyb3JzIHVwd2FyZHMsIHJpZ2h0PyAKCk9rYXksIGxldCBtZSBjaGVjayB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gVGhlIHRleHQgbWVudGlvbnMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4sIGJlY2F1c2UgSSB0aG91Z2h0IHRoZSBzZWNvbmQgZnVuY3Rpb24gd2FzIGNhbGxlZCBieSB0aGUgZmlyc3QuIEkgd2lsbCBwZXJmb3JtIGEgZ3JlcCB0byBjb25maXJtIHRoZSBkaXJlY3QgY2FsbCBzaXRlIG9mIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYzPWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Njg6aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcbi0tXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTQ1NC1cdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTQ1OD1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmlvX3VyaW5nL25ldC5jLTE0NzAtXHRlbHNlIGlmICh1bmxpa2VseSghc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pb191cmluZy9uZXQuYzoxNDcxOlx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbmlvX3VyaW5nL25ldC5jLTE0NzItXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz02MzM9RVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM2LVx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2Vcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjgKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVycm9yIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIGJvaWxzIGRvd24gdG8gYSBzdHJhaWdodGZvcndhcmQgZXJyb3IgY29kZSBhZGp1c3RtZW50LiBTcGVjaWZpY2FsbHksIGlmIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIHJldHVybnMgYC1FTVNHU0laRWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAsIHRoZSBjYWxsIHNpdGUgcHJvcGFnYXRlcyBgLUVNU0dTSVpFYC4gVGhlIGltcG9ydGFudCB0aGluZyBJJiMzOTttIGFzc2Vzc2luZyBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IG1lbW9yeSBpc3N1ZXMuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVtYWlucyB0aGUgc2FtZTsgaXQmIzM5O3Mgc2ltcGx5IGEgY2hhbmdlIGluIGhvdyB3ZSBzaWduYWwgYSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb24gcmVsYXRlZCB0byBmcmFnbWVudCByZWFkYWJpbGl0eS4KCk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBmdW5kYW1lbnRhbCBpc3N1ZSB0aGlzIHBhdGNoIHRvdWNoZXMgaXNuJiMzOTt0IGFib3V0IG1lbW9yeSBzYWZldHkgaXRzZWxmLiBJZiB0aGVyZSBhcmUgYnVncywgdGhleSYjMzk7ZCBsaWtlbHkgYmUgbG9naWNhbCBvciBzdGF0ZS1yZWxhdGVkLCBvciBhIGZ1bmN0aW9uYWwgcHJvYmxlbSwgYW5kIHdvdWxkbiYjMzk7dCBiZSBzb21ldGhpbmcgS01TQU4gd291bGQgcmVhZGlseSBjYXRjaC4gS01TQU4gaXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBkZXRlY3RpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgc2luY2UgdGhpcyBpcyBqdXN0IGFuIGVycm9yIGNvZGUgY2hhbmdlIEkmIzM5O20gbm90IGV4cGVjdGluZyBhbnkgS01TQU4gcmVsYXRlZCBmaW5kaW5ncy4gU28sIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgS01TQU4gc2Vzc2lvbi4gSSYjMzk7bGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBjaGFuZ2VzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdoZW4gdGhlcmUgaXMgYSBtaXNtYXRjaCBpbiBmcmFnbWVudCByZWFkYWJpbGl0eS4gVGhpcyBjaGFuZ2UgaW4gZXJyb3IgY29kZSBwcm9wYWdhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcywgd2hpY2ggYXJlIG5vdCBzcGVjaWZpYyB0byBLTVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJiMzOTtzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjM1LjYzNDAxMjc4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDYyNDg1ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiLFxuICAgIFwiX196ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgICBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCIsXG4gICAgXCJpb19zZW5kbXNnX3pjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgY2hhbmdlcyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBmcm9tIGAtRUZBVUxUYCB0byBgLUVNU0dTSVpFYCB3aGVuIHRoZXJlIGlzIGEgbWlzbWF0Y2ggaW4gZnJhZ21lbnQgcmVhZGFiaWxpdHkuIFRoaXMgY2hhbmdlIGluIGVycm9yIGNvZGUgcHJvcGFnYXRpb24gZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWMgdG8gS01TQU4ncyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zIGluIGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozNS42MzQwMTc3NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDIwNzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI0MDE0OWY3OWFhMDExYjAzODllMzAxNDQ4ZDI0YWZhNGY3NzNhYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcXG5pbmRleCAxNzNiNWQ5N2JkNDA5Li42ZjhmZmQ2MWJjYWI0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcXG4rKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXFxuQEAgLTYzOCw3ICs2MzgsNyBAQCBpbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGludCBmcmFnID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4gXFxuIFxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXG4gXFx0d2hpbGUgKGxlbmd0aCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqaGVhZCwgKmxhc3RfaGVhZCA9IE5VTEw7XFxuQEAgLTcxMyw3ICs3MTMsNyBAQCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xcbiBcXG4gXFx0aWYgKGkgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXG4gXFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXFxuIFxcdCAqIGlvdl9hZGRycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIGRtYS1idWYgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MzYuMDY0OTk2OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTAwNjYzMTQ0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJcIixcbiAgICBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgICBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiLFxuICAgIFwiaW9fc2VuZG1zZ196Y1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zIGluIGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDAxNDlmNzlhYTAxMWIwMzg5ZTMwMTQ0OGQyNGFmYTRmNzczYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuaW5kZXggMTczYjVkOTdiZDQwOS4uNmY4ZmZkNjFiY2FiNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC02MzgsNyArNjM4LDcgQEAgaW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXG4gXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbkBAIC03MTMsNyArNzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gXG4gXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gXHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozNi4wNjQ5OTg3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzE5NTgwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwbGF5aW5nIHRoZSByb2xlIG9mIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgYSBEYXRhZ3JhbSBQYXRjaCoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBTcGVjaWZpY2FsbHksIHdoZW4gYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpc24ndCB0cnVlLCBvciB3aGVuIGBpIFx1MDAyNlx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgaXMgdHJ1ZSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUZBVUxUYCwgdGhlIGNvZGUgd2lsbCBub3cgcmV0dXJuIGAtRU1TR1NJWkVgLlxuXG5UaGUga2V5IGhlcmUgaXMgdW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlLiBgLUVGQVVMVGAgdXN1YWxseSBpbmRpY2F0ZXMgYSBnZW5lcmljIFwiYmFkIGFkZHJlc3NcIiBvciBcIm1lbW9yeSBhY2Nlc3MgZXJyb3JcIi4gYC1FTVNHU0laRWAsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWdnZXN0cyB0aGF0IHRoZSBtZXNzYWdlIHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGJ1ZmZlciwgb3IgYSByZWxhdGVkIHNpemUgaXNzdWUuIFRoaXMgbWVhbnMgdGhlIGV4aXN0aW5nIGxvZ2ljIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0IGhhbmRsaW5nIHdoZW4gZnJhZ21lbnRzIG9mIHRoZSBTS0IgYXJlbid0IHJlYWRhYmxlLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgY29udGV4dHMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZT8gSXMgaXQgYmVjYXVzZSB0aGUgcHJvYmxlbSBpcyByZWxhdGVkIHRvIG1lc3NhZ2Ugc2l6ZSwgb3Igc29tZSBvdGhlciBzaXplIGlzc3VlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGhhbmRsZSBgLUVGQVVMVGAgdmVyc3VzIGhvdyB0aGV5J2QgaGFuZGxlIGAtRU1TR1NJWkVgIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb3JyZWN0IGZpeCwgb3Igd2hldGhlciBpdCBtaWdodCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgZWxzZXdoZXJlLiBUaGlzIGNoYW5nZSBsb29rcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQwLjUzNjk1OTkwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0NDU0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDU0LVxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbmlvX3VyaW5nL25ldC5jOjE0NTU6XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDcwLVxcdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pb191cmluZy9uZXQuYzoxNDcxOlxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jLTE0NzItXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjYzNTppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXFx0ZWxzZVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQyLjI0MTQyMTc0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkxMjc4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjcwNzp6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MDgtXFx0XFx0XFx0ICAgICAgaW50IGxlbmd0aCxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVxcdGVsc2UgaWYgKGJpbmRpbmcpXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjE6XFx0XFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc2tiLCBmcm9tLCBsZW5ndGgsIGJpbmRpbmcpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NDMuOTMyNzA3OTc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzUxNjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY2hhbmdlczpcblxuKipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCBjaGFuZ2UgaW4gZXJyb3IgcmVwb3J0aW5nLiBUaGUgZnVuY3Rpb25zIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGFyZSBub3cgcmV0dXJuaW5nIGAtRU1TR1NJWkVgIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYWx0ZXJhdGlvbiB3YXMgZGVlbWVkIG5lY2Vzc2FyeS5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzIHRocm91Z2guIFdlIGtub3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIHRoYXQgaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYCAvIGBpb19zZ19mcm9tX2l0ZXJgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMuIFRoZSBjYWxsc3RhY2sgaXMgY3JpdGljYWwgaGVyZSwgYnV0IGl0IGxvb2tzIGxpa2UgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyBhbHNvIGNhbGxlZCBieSBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSB0b3AsIHNvIGxldCdzIGNoZWNrIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIOKAkyB0aGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gdXNlcyB0aGUgZXJyb3IgY29kZXMgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZGV0ZXJtaW5lIHdoYXQgc2l0dWF0aW9uIHdhcnJhbnRzIHRoaXMgY29kZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQ3Ljc0MDIyNjYyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1OTExNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtNjI3LVxcdGlmICh6ZXJvY29weSlcXG5kcml2ZXJzL25ldC90YXAuYzo2Mjg6XFx0XFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XFxuZHJpdmVycy9uZXQvdGFwLmMtNjI5LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTE3NzQ9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODY3LVxcdFxcdFxcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE4Njg6XFx0XFx0XFx0ICogb3ZlcndyaXR0ZW4gYnkgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkuXFxuZHJpdmVycy9uZXQvdHVuLmMtMTg2OS1cXHRcXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4ODMtXFx0XFx0aWYgKHplcm9jb3B5KVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE4ODQ6XFx0XFx0XFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTg4NS1cXHRcXHRlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzYyLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2MzppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3My17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc0OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cXHUwMDNlc2ssIHNrYiwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzUtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjUyPWludCBza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI1My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MjU0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm0pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI1NS12b2lkIHNrYl9mcmVlX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaD0xMzg9ZW51bSBza2JfZHJvcF9yZWFzb24ge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVxcdCAqIEBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUOiBmYWlsZWQgdG8gY29weSBkYXRhIGZyb20gdXNlciBzcGFjZSxcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDo0MTM6XFx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxNC1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzA3PXplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ4LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzQ5OmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc3LS8qKlxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc4OiAqXFx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzktICpcXHRAc2tiOiBidWZmZXIgdG8gY29weVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODYtICovXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3ODc6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODgte1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTQtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTU6XFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKE5VTEwsIE5VTEwsIHNrYiwgZnJvbSwgfjBVLCBOVUxMKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5Ni19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTc6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk4LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MzMtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkzNDpcXHRlcnIgPSBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxubmV0L2NvcmUvc2tidWZmLmMtMTkzNS1cXHRcXHRcXHRcXHQgICAgICBiaW5kaW5nKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz04MD1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cXHRpZiAoemNvcHkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjg4OlxcdFxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIE5VTEwsIHNrYixcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIxMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRpb190cmFuc3BvcnRfYWxsb2Nfc2tiKHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjM5LVxcdC8qIElmICd2c2snICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDA6XFx0ICogd2lsbCBuZXZlciBjYWxsICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyBiZWxvdyB3aXRob3V0XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0MS1cXHQgKiBzZXR0aW5nIHNrYiBvd25lciBpbiAnc2tiX3NldF9vd25lcl93KCknLiBUaGUgb25seSBjYXNlXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ2LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XFx0LyogU2V0IG93bmVyIGhlcmUsIGJlY2F1c2UgJ19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCknIHVzZXNcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVxcdCAqIG93bmVyIG9mIHNrYiB3aXRob3V0IGNoZWNrIHRvIHVwZGF0ZSAnc2tfd21lbV9hbGxvYycuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjQ5LjM3NjE0MzI1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDE0MDAyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgWmVyby1Db3B5IERhdGEgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBtYXBwaW5nIG91dCB0aGUgemVyby1jb3B5IGRhdGEgZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZ2V0dGluZyBjYWxsZWQsIGJ1dCB0aGV5J3JlIGJlaW5nIGludm9rZWQgYnkgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhbmQgYGlvX3NnX2Zyb21faXRlcmAgLyBgaW9fc2dfZnJvbV9pdGVyX2lvdmVjYC4gIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdGhlIGNyaXRpY2FsIHVwc3RyZWFtIGZ1bmN0aW9uLCBpdCdzIHdoYXQgdGllcyBldmVyeXRoaW5nIHRvZ2V0aGVyLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCwgYW5kIGV2ZW4gYHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2JgLlxuXG5Ob3csIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGl0c2VsZiBpcyBiZWluZyB1c2VkIGJ5IGB0YXBfZ2V0X3VzZXJgIGFuZCBgdHVuX2dldF91c2VyYC4uLiBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGJvdGggcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZXMuIFRoZSBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCdzIHJlYWxseSBpbnRyaWd1aW5nIG1lLiAgSSBrbm93IGl0IG11c3QgYmUgaW52b2x2ZWQgaW4gZGF0YWdyYW0tYmFzZWQgY29tbXVuaWNhdGlvbiwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCdzIGludm9sdmVkIGluIGB1ZHBfc2VuZG1zZ2AgYW5kIGByYXdfc2VuZG1zZ2AsIGFsdGhvdWdoIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBsYXR0ZXIgcG9pbnQuIEJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdGhlcmUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjUzLjkxNzU0NzMzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NTIzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX2RncmFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzAtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NTUuNTIyMDc4MDA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjI5NzgxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIENoYW5nZSoqXG5cbk9rYXksIHNvIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgX19pcF9hcHBlbmRfZGF0YWAgYW5kIGBfX2lwNl9hcHBlbmRfZGF0YWAuIFRoYXQgbWVhbnMgdGhpcyBpcyBjb3JlIGtlcm5lbCBsb2dpYyB3ZSdyZSBkZWFsaW5nIHdpdGgsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gVURQIGFuZCBSYXcgc29ja2V0cyB1c2luZyBgTVNHX1pFUk9DT1BZYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0J3MgaW4gdGhlIGNyaXRpY2FsIHBhdGguXG5cblRoZSBjaGFuZ2UgaXRzZWxmIGlzIHRoZSBlcnJvciBjb2RlIOKAkyBzd2l0Y2hpbmcgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAuIEZ1bmN0aW9uYWxseSwgdGhhdCdzIGEgcHJldHR5IGJpZyBkZWFsLiBEaWZmZXJlbnQgZXJyb3IgY29kZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgYXQgdGhlIHVzZXJzcGFjZSBhbmQga2VybmVsIGxldmVsLiBJdCBtZWFucyB0aGUgYmVoYXZpb3Igb2YgYXBwbGljYXRpb25zIG9yIHRoZSBrZXJuZWwgaXRzZWxmIGNvdWxkIGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBlcnJvci4gR2l2ZW4gaXRzIGNlbnRyYWxpdHkgYW5kIHRoZSBjaGFuZ2UgaW4gZXJyb3IgY29kZXMsIHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBXZSBuZWVkIHRvIGV4cGxvcmUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gdGhlIGNoYW5nZSdzIGltcGFjdCBhbmQgaW5mb3JtIG91ciBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjU5LjU4NTA1ODYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2MzAxMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NnX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMTI9c3RydWN0IGlvX3JlY3Z6YyB7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTgtXFxuaW9fdXJpbmcvbmV0LmM6MTE5OnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuaW9fdXJpbmcvbmV0LmMtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jOjEyMTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTEyMi1cXHRcXHRcXHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTM3OD1pbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDQzLVxcdGlmICghKHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpKSB7XFxuaW9fdXJpbmcvbmV0LmM6MTQ0NDpcXHRcXHRpb21zZy1cXHUwMDNlbXNnLnNnX2Zyb21faXRlciA9IGlvX3NnX2Zyb21faXRlcl9pb3ZlYztcXG5pb191cmluZy9uZXQuYy0xNDQ1LVxcdFxcdHJldHVybiBpb19ub3RpZl9hY2NvdW50X21lbSh6Yy1cXHUwMDNlbm90aWYsIGlvbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIuY291bnQpO1xcbmlvX3VyaW5nL25ldC5jLTE0NDYtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjE0NDc6XFx0aW9tc2ctXFx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXI7XFxuaW9fdXJpbmcvbmV0LmMtMTQ0OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTAtXFxuaW9fdXJpbmcvbmV0LmM6MTQ1MTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcl9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTItXFx0XFx0XFx0XFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTctXFxuaW9fdXJpbmcvbmV0LmM6MTQ1ODpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTktXFx0XFx0XFx0ICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTowMS4yNDEzNjY0ODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMDA1NTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBaZXJvLUNvcHkgaW4gaW9fdXJpbmcgc2VuZG1zZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgIGFyZSBrZXkgZm9yIGlvX3VyaW5nJ3MgYHNlbmRtc2dgIGZ1bmN0aW9uYWxpdHkgd2hlbiB1c2VkIHdpdGggYE1TR19aRVJPQ09QWWAuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgbXVzdCBiZSB3aXRoaW4gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIExldCBtZSBtYXAgb3V0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgdG8gZGlnIGludG8uXG5cbkFscmlnaHQsIHRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbjogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAsIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIHRoZW4gdGhlIGludGVybmFscyBhcmUgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAsIGFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC5cblxuTGV0J3Mgc3RhcnQgYnkgZGl2aW5nIGludG8gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgYXMgdGhlc2UgYXJlIHByb2JhYmx5IHRoZSBoaWdoZXN0IGxldmVsIGNoYW5nZXMgaW4gdGhlIHplcm8tY29weSBkYXRhcGF0aCwgYW5kIEknbGwgZmluZCB0aGVtIHdpdGhpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MDUuODUxNDI1MTMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyNzY0Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDU0LVxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbmlvX3VyaW5nL25ldC5jOjE0NTU6XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDcwLVxcdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pb191cmluZy9uZXQuYzoxNDcxOlxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jLTE0NzItXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjYzNTppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXFx0ZWxzZVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjA3LjQ2NDE5NDEyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkwODg1NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBFeHBvcnQgU3RhdHVzKipcblxuT2theSwgc28gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgc2VlbXMgbGlrZSBhIHByZXR0eSBpbnRlcmVzdGluZyBmdW5jdGlvbiwgYW5kIHRoZSBuYW1lIHN1Z2dlc3RzIHNvbWUgb3B0aW1pemF0aW9uIHBvdGVudGlhbCBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGl0IGFjdHVhbGx5IGV4cG9ydGVkLCBhbmQgdGhlcmVmb3JlIGF2YWlsYWJsZSBmb3IgdXNlIG91dHNpZGUgb2YgaXRzIG93biBtb2R1bGU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgdmlzaWJpbGl0eS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBkYXRhZ3JhbS1yZWxhdGVkIG5hbWUsIGlzIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUga2VybmVsJ3MgbmV0d29yayBjb3JlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgb3V0IGlmIGl0IGlzIGFuIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2wgb3IgaWYgaXQncyByZXN0cmljdGVkIHRvIGludGVybmFsIHVzZSB3aXRoaW4gdGhhdCBtb2R1bGUuIExldCdzIGdldCB0byB0aGUgc291cmNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MTAuNjU1MDgyNjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzU6XFx0aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA2MzY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbiA2Mzc6XFx0e1xcbiA2Mzg6XFx0XFx0aW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbiA2NDE6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gNjQyOlxcdFxcbiA2NDM6XFx0XFx0d2hpbGUgKGxlbmd0aCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbiA2NDQ6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKmhlYWQsICpsYXN0X2hlYWQgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxMC42NTUxNjE0MDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwOTc5OTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB3aGF0ZXZlciBmaWVsZCBpcyByZWxldmFudCwgYW5kIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSBcImZ1bHNvbWUgc3VtbWFyeSBvZiB0aGUgdGhvdWdodCBwcm9jZXNzXCI6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUaGUgRXhwb3J0IENvbnRleHQqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogKipJcyBpdCBleHBvcnRlZD8qKiBUaGlzIGlzIHRoZSBjcnVjaWFsLCBmb3VuZGF0aW9uYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBldmVuIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQncyBpbnRlbmRlZCBmb3IsIG9yIHN1c2NlcHRpYmxlIHRvLCBiZWluZyBtb3ZlZCBvdXQgb2YgaXRzIG9yaWdpbmFsIGVudmlyb25tZW50LiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciBldmVyeXRoaW5nIGVsc2UuIFwiRXhwb3J0XCIgaXMgYSBsb2FkZWQgdGVybTsgaXQgaW1wbGllcyBjZXJ0YWluIHJlZ3VsYXRpb25zLCBwcm9jZXNzZXMsIHBvdGVudGlhbCBjb3N0cywgYW5kLCBmcmFua2x5LCBvcHBvcnR1bml0aWVzIG9yIGlzc3VlcyB3aXRoIGNvbXBsaWFuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzb3VyY2UgYW5kIHRoZSBwb3RlbnRpYWwgZGVzdGluYXRpb24uIFxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjEzLjg2NDk2MzI5M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTU6XFx0XFx0XFx0XFx0XFx0cGFnZV9yZWZfc3ViKGxhc3RfaGVhZCwgcmVmcyk7XFxuIDY5NjpcXHRcXHRcXHRcXHRcXHRyZWZzID0gMDtcXG4gNjk3OlxcdFxcdFxcdFxcdH1cXG4gNjk4OlxcdFxcdFxcdFxcdHNrYl9maWxsX3BhZ2VfZGVzY19ub2FjYyhza2IsIGZyYWcrKywgaGVhZCwgc3RhcnQsIHNpemUpO1xcbiA2OTk6XFx0XFx0XFx0fVxcbiA3MDA6XFx0XFx0XFx0aWYgKHJlZnMpXFxuIDcwMTpcXHRcXHRcXHRcXHRwYWdlX3JlZl9zdWIobGFzdF9oZWFkLCByZWZzKTtcXG4gNzAyOlxcdFxcdH1cXG4gNzAzOlxcdFxcdHJldHVybiAwO1xcbiA3MDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxMy44NjUwNzQ2NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MTgwNzc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uJ3MgU2NvcGUqKlxuXG5IbW0sIHNvIGl0J3MgKm5vdCogZXhwb3J0ZWQsIHRoYXQncyBjbGVhci4gQnV0IGp1c3QgYmVjYXVzZSBpdCdzIG5vdCBleHBvcnRlZCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCdzIHN0YXRpYy4gT2theSwgbGV0J3MgYmFjayB1cCBhIG1vbWVudC4gSWYgaXQncyAqbm90KiBzdGF0aWMsIHRoZW4gaXQncyBhY2Nlc3NpYmxlIGdsb2JhbGx5LCB3aGljaCBzdWdnZXN0cyBpdCBpcyBhIGdsb2JhbCBzeW1ib2wuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb246IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIFdhaXQsIEkgdGhvdWdodCBJIHJlbWVtYmVyIHJlYWRpbmcgdGhhdCBmdW5jdGlvbiBhcyBkZWNsYXJlZCBgc3RhdGljYC4gU28sIGdvaW5nIGJhY2ssIGl0IGlzIGBzdGF0aWNgIGFuZCB0aHVzIGxvY2FsIHRvIHRoZSBjb21waWxhdGlvbiB1bml0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDgyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxNi43MjY4ODU0MTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDU6XFx0XFxuIDcwNjpcXHRzdGF0aWMgaW50XFxuIDcwNzpcXHR6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIDcwODpcXHRcXHRcXHRcXHQgICAgICBpbnQgbGVuZ3RoLFxcbiA3MDk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIDcxMDpcXHR7XFxuIDcxMTpcXHRcXHRpbnQgaSA9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7XFxuIDcxMjpcXHRcXHRzaXplX3QgdmlydF9hZGRyLCBzaXplLCBvZmY7XFxuIDcxMzpcXHRcXHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcXG4gNzE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToxNi43MjY5ODg5MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MTkxNTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBaZXJvLUNvcHkgRGF0YSBUcmFuc2ZlciBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIGFuZCBJIGJlbGlldmUgdGhhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBpcyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEFuZCwgeWVzLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyIGFzIGEgZ29vZCBmb2N1cyBwb2ludC4gQWxzbywgSSdtIHRoaW5raW5nIGFib3V0IGluY2x1ZGluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB0byB0aGlzIGxpc3QgYXMgd2VsbC4gU28sIGxldCBtZSBhZGQgdGhvc2UgdG8gbXkgbWVudGFsIG5vdGVzLCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLlxuXG5IbW0sIGEgcXVpY2sgbm90ZSwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgYGlvX3NnX2Zyb21faXRlcmAgYW5kIGBpb19zZ19mcm9tX2l0ZXJfaW92ZWNgIGFyZSAqc3RhdGljKi4gQW5kIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBBbmQsIHRvIGtlZXAgbXkgYmVhcmluZ3MsIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gICppc24ndCogc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MjAuNTA4OTA3MDI2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1MDk0MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxMjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk0OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOC1cXG5uZXQvaXB2NC90Y3AuYzoxMzM5OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjIyLjE1NDAwNzQ1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg3NTczMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIFRoaXMgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuXG5cbioqWmVyby1Db3B5IGFuZCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgbWV0aG9kLCBvciByZWxhdGVkIG1ldGhvZHMuIFRoZSBzdGFuZGFyZCBgTVNHX1pFUk9DT1BZYCBmZWF0dXJlIGlzIHdlbGwtZXN0YWJsaXNoZWQsIGJ1dCBpdCdzIGxpa2VseSB0aGVyZSBhcmUgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWdzIGFuZCBlbnN1cmUgdGhhdCB3aGF0ZXZlciBzdXBwb3J0IGlzIHJlcXVpcmVkIGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZS4gTGV0IG1lIHNlZSB3aGljaCBzcGVjaWZpYyBrbm9icyBhbmQgbGV2ZXJzIEkgY2FuIHR1cm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6MjUuMDQxNTg0MTMzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MzQ4MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjM9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2ODppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY5LVxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDUxPXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDU0LVxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbmlvX3VyaW5nL25ldC5jOjE0NTU6XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ1Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYz0xNDU4PXN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDcwLVxcdGVsc2UgaWYgKHVubGlrZWx5KCFza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pb191cmluZy9uZXQuYzoxNDcxOlxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jLTE0NzItXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzMz1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjYzNTppbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXFx0ZWxzZVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYzOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjI2LjY2NzkzODE2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM4MTI1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29ya2luZyBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmtpbmcgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN0dWZmIGlzIGFsbCBjZW50cmFsaXplZCBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIFRoYXQncyBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IHNpbmNlIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGFzIGxvbmcgYXMgbmV0d29ya2luZyBpcyB1cC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQncyBhbHNvIHdvcnRoIGludmVzdGlnYXRpbmcgdGhpcyBpbiBsaWdodCBvZiBgSU9fVVJJTkdgLCBhcyBpdCB0ZW5kcyB0byBsZXZlcmFnZSBjb3JlIGRhdGFncmFtIGZ1bmN0aW9uYWxpdGllcy4gTGV0J3Mgc2VlLCBub3cgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNToyOS44MDYwNjUzMDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggbmV0d29ya2luZyBjb3JlLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSA6PSBzb2NrLm8gc2tidWZmLm8gZGF0YWdyYW0ubyBzdHJlYW0ubyBzY20ubyBcXFxcXFxuICAgNzpcXHRcXHQgZ2VuX3N0YXRzLm8gZ2VuX2VzdGltYXRvci5vIG5ldF9uYW1lc3BhY2UubyBzZWN1cmVfc2VxLm8gXFxcXFxcbiAgIDg6XFx0XFx0IGZsb3dfZGlzc2VjdG9yLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9jb3JlLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbiAgMTQ6XFx0XFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHRmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcXFxcXFxuICAxNjpcXHRcXHRcXHRcXHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIG5ldGRldl93b3JrLm8gZ3NvLm9cXG4gIDE3OlxcdFxcbiAgMTg6XFx0b2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgKz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXFxuICAxOTpcXHRcXG4gIDIwOlxcdG9iai15ICs9IG5ldC1zeXNmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjI5LjgwNjEyNTc0N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYwNjk2ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqQ29uc2lkZXJpbmcgdGhlIGBkYXRhZ3JhbS5vYCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBgZGF0YWdyYW0ub2AgaXMgYSBjb25zaXN0ZW50bHkgY29tcGlsZWQgY29tcG9uZW50IOKAkyBnb29kIHRvIGtub3cuIFRoaXMgbWVhbnMgSSBkb24ndCBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggc3BlY2lhbCBjb25maWd1cmF0aW9ucyAqdW5sZXNzKiBJIHNwZWNpZmljYWxseSB3YW50IHRvIGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCBgaW9fdXJpbmdgLiBFdmVuIHRoZW4sIHRoYXQncyByZWFsbHkganVzdCB0aGUgb25lIHBvdGVudGlhbCB3cmlua2xlIGZvciBhY2Nlc3MuXG5cbk9mIGNvdXJzZSwgZXZlbiBpZiBJIGRvbid0IHVzZSBgaW9fdXJpbmdgLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhdCBpdCB1c2luZyBhIHN0YW5kYXJkIHNvY2tldCBgc2VuZG1zZ2AgY2FsbCB3aXRoIGBNU0dfWkVST0NPUFlgLiBUaGF0J3MgYSBzb2xpZCBmYWxsYmFjayBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHBhdGguIE5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHRvIHVuZGVyc3RhbmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGlzIHplcm8tY29weSBtZWNoYW5pc20gZnVuY3Rpb25zIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjMzLjI2NjgyNjM3NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTQ4NTgwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNj1zdGF0aWMgaW50XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MDc6emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVxcdFxcdFxcdCAgICAgIGludCBsZW5ndGgsXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2MC1cXHRlbHNlIGlmIChiaW5kaW5nKVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHNrYiwgZnJvbSwgbGVuZ3RoLCBiaW5kaW5nKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjM0LjkxMjMxNzk1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4ODY2NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGUgY29kZSBzZWVtcyB0byBiZSBleHBsaWNpdGx5IHRpZWQgdG8gYSBzaXR1YXRpb24gd2hlcmUgYGJpbmRpbmdgIGlzbid0IGEgbnVsbCBwb2ludGVyLiBTbywgdGhlIGtleSBxdWVzdGlvbiBpczogV2hhdCBkb2VzIHRoaXMgYGJpbmRpbmdgIHRoaW5nICphY3R1YWxseSogcmVwcmVzZW50PyBXaGVyZSBkb2VzIHRoaXMgdmFyaWFibGUgb3JpZ2luYXRlPyBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGFuZCBwdXJwb3NlIG9mIGBiaW5kaW5nYCB0byBmdWxseSBncmFzcCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHJhdGlvbmFsZSBiZWhpbmQgdXNpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgaXMgc2V0dGluZyBvciBwYXNzaW5nIGEgbm9uLW51bGwgYGJpbmRpbmdgIHRvIHNlZSB3aHkgaXQgbmVjZXNzaXRhdGVzIHRoaXMgemVyby1jb3B5IGFwcHJvYWNoLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTozOC4yNjExODc5NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQzNDgwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX196ZXJvY29weV9zZ19mcm9tX2l0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Mi1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc1LVxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzA3PXplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ4LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzQ5OmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LVxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03ODc9aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5NC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NTpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk2LX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTI9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xOTMzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MzQ6XFx0ZXJyID0gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MzUtXFx0XFx0XFx0XFx0ICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9ODA9c3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXFx0aWYgKHpjb3B5KVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcXHRcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBOVUxMLCBza2IsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIzOS1cXHQvKiBJZiAndnNrJyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2VcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQwOlxcdCAqIHdpbGwgbmV2ZXIgY2FsbCAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgYmVsb3cgd2l0aG91dFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3OlxcdC8qIFNldCBvd25lciBoZXJlLCBiZWNhdXNlICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyB1c2VzXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cXHQgKiBvd25lciBvZiBza2Igd2l0aG91dCBjaGVjayB0byB1cGRhdGUgJ3NrX3dtZW1fYWxsb2MnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTozOS44OTU1NDA5NjhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2OTUzMjMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipaZXJvLUNvcHkgSXRlcmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB3aGVuIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBza2JzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHN0cmVhbS1vcmllbnRlZCBuZXR3b3JraW5nLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgaXRlcmF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggY29udGlndW91cyBzZWdtZW50cyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgc2ticyBoZXJlPyBJdCdzIGNyaXRpY2FsIHRvIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBjb3B5aW5nLCBiZWNhdXNlIHRoZSB3aG9sZSBwb2ludCBpcyBlZmZpY2llbmN5IGFuZCBtaW5pbWFsIG92ZXJoZWFkLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaXRlcmF0aW5nIHByb2Nlc3MgY291bGQgaW5hZHZlcnRlbnRseSBjYXVzZSBjb3B5aW5nIHRvIG9jY3VyLiBJ4oCZbSB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIHBpdGZhbGxzLCB0aGluZ3MgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIElzIHRoaXMgdGhlICpyaWdodCogd2F5IHRvIGdvIGFib3V0IGl0PyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHBhcnRpYWwgcmVhZHMgYW5kIHdyaXRlcz8gSSBuZWVkIHRvIHF1aWNrbHkgYW5kIGNvbXByZWhlbnNpdmVseSBjb25maXJtIGl0cyBiZWhhdmlvdXIgdW5kZXIgdmFyaW91cyBlZGdlIGNhc2VzOiBidWZmZXIgb3ZlcmZsb3dzLCB1bmRlcmZsb3dzLCBhbmQgcGFydGlhbCB3cml0ZXMvcmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTU0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6NDMuMjY1MDc3MjU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2MDE0MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxMjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk0OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOC1cXG5uZXQvaXB2NC90Y3AuYzoxMzM5OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjQ0Ljg2MTA5NzE5MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzNDE2MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gVGhlIGBiaW5kaW5nYCBJJ20gc2VlaW5nIGluc2lkZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBwb2ludGluZyBiYWNrIHRvIGBzb2NrYy5kZXZtZW1fYmluZGluZ2AuIEFoLCByaWdodCwgdGhhdCBjb25uZWN0cyBpdCB0byB0aGUgVENQIGRldm1lbSBmdW5jdGlvbmFsaXR5IOKAkyBkZXZpY2UgbWVtb3J5IFRDUC4gU28sIHRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBpczogaXMgdGhpcyBzcGVjaWZpYyBUQ1AgZGV2bWVtIGltcGxlbWVudGF0aW9uIGNvbmZpZ3VyYWJsZT8gQXJlIHRoZXJlIGFueSBrbm9icyBvciBzZXR0aW5ncyBJIGNhbiB0d2VhayByZWxhdGVkIHRvIFRDUCBkZXZtZW0gdGhhdCBtaWdodCBpbXBhY3QgdGhpcyBgYmluZGluZ2AgYmVoYXZpb3I/IE5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWdzIHRvIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGV4cG9zZWQgZm9yIHRoaXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjQ3Ljg4NDUxNjEwNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyODUwOTQ0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bWVtX2JpbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjQ5LjYxMzAzMjkzN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ2MjMyNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIHJlYXNvbmluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZ3JvdW5kZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGRlZXBlciBpbnRvIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBhIGxvdCBoaW5nZXMgb24gaXRzIGJlaGF2aW9yLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSB3b3JrIG9mIHNlbmRpbmcgVENQIGRhdGEgaGFwcGVucywgYW5kIGFueSBzdWJ0bGUgbWlzc3RlcHMgaGVyZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGxvY2tpbmcgc3RyYXRlZ2llcywgaG93IGl0IGhhbmRsZXMgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgSeKAmW0gbWFraW5nIGFib3V0IGl0cyBkYXRhIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQuIEJlZm9yZSBJIGdvIGRvd24gYSByYWJiaXQgaG9sZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBJIHVuZGVyc3RhbmQgd2hhdCBpcyBhY3R1YWxseSBnb2luZyBvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNTo1Mi41NTkyNjg2NDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldm1lbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYy0yOTAtXFxubmV0L2lwdjQvdGNwLmM6MjkxOiNpbmNsdWRlIFxcXCIuLi9jb3JlL2Rldm1lbS5oXFxcIlxcbm5ldC9pcHY0L3RjcC5jLTI5Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxubmV0L2lwdjQvdGNwLmM6MTExODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XFxubmV0L2lwdjQvdGNwLmMtMTExOS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNTgtXFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxubmV0L2lwdjQvdGNwLmM6MTE1OTpcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTYwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0MjAtXFx0aWYgKGJpbmRpbmcpXFxubmV0L2lwdjQvdGNwLmM6MTQyMTpcXHRcXHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChiaW5kaW5nKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDIyLVxcdHJldHVybiBjb3BpZWQgKyBjb3BpZWRfc3luO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQzOS1cXHRpZiAoYmluZGluZylcXG5uZXQvaXB2NC90Y3AuYzoxNDQwOlxcdFxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NDEtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNDk5PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI1NzUtXFx0XFx0XFx0bmlvdiA9IHNrYl9mcmFnX25ldF9pb3YoZnJhZyk7XFxubmV0L2lwdjQvdGNwLmM6MjU3NjpcXHRcXHRcXHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XFxubmV0L2lwdjQvdGNwLmMtMjU3Ny1cXHRcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjU5OC1cXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XFxubmV0L2lwdjQvdGNwLmM6MjU5OTpcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xcbm5ldC9pcHY0L3RjcC5jLTI2MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjUyLjYwMzM2NTc4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0MDg5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCoqXG5cblJpZ2h0LCBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuLi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEJlc3QgdG8gc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24uIExldCdzIHB1bGwgdXAgYG5ldC9jb3JlL2Rldm1lbS5oYCBhbmQgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLCBlbnVtZXJhdGlvbnMsIGFuZCBhbnkgaW5saW5lIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHRoZSBpbnRlbnQuIEtub3dpbmcgdGhlIGJpbmRpbmcgc3RyYXRlZ3kgYW5kIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSByZWdpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyByb2xlLiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwgbWVtb3J5IG1hcHBpbmcgZGV0YWlscywgYW5kIHBlcmhhcHMgc29tZSBjb25zaWRlcmF0aW9ucyBhcm91bmQgZGV2aWNlLXNwZWNpZmljIGFsbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjU2LjA4NzQ1ODMzN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZtZW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogRGV2aWNlIG1lbW9yeSBUQ1Agc3VwcG9ydFxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIEF1dGhvcnM6XFx0TWluYSBBbG1hc3J5IFxcdTAwM2NhbG1hc3J5bWluYUBnb29nbGUuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICpcXHRcXHRXaWxsZW0gZGUgQnJ1aWpuIFxcdTAwM2N3aWxsZW1iQGdvb2dsZS5jb21cXHUwMDNlXFxuICAgNzpcXHQgKlxcdFxcdEthaXl1YW4gWmhhbmcgXFx1MDAzY2thaXl1YW56QGdvb2dsZS5jb21cXHUwMDNlXFxuICAgODpcXHQgKlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHQjaWZuZGVmIF9ORVRfREVWTUVNX0hcXG4gIDExOlxcdCNkZWZpbmUgX05FVF9ERVZNRU1fSFxcbiAgMTI6XFx0XFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldG1lbS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXFx1MDAzZVxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xcbiAgMTc6XFx0XFxuICAxODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XFxuICAxOTpcXHRcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbiAgMjA6XFx0XFx0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzU6NTYuMDg3NTUxNTk3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzQ5NjU5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBkZXZtZW1gIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gd29uZGVyaW5nIGFib3V0IGBkZXZtZW1gLiBJcyB0aGVyZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzb21ld2hlcmUgdGhhdCBjb250cm9scyBpdHMgYmVoYXZpb3Igb3IgZGVmYXVsdCBzZXR0aW5ncz8gSSBrbm93IGl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHV0aWxpdHkgZm9yIGFjY2Vzc2luZyBtZW1vcnkgZGlyZWN0bHksIGJ1dCBzdXJlbHkgdGhlcmUncyAqc29tZXRoaW5nKiBJIGNhbiB0d2VhayB0byB0YWlsb3IgaXRzIG9wZXJhdGlvbi4gTWF5YmUgc29tZXRoaW5nIGFib3V0IGVycm9yIHJlcG9ydGluZywgYWNjZXNzIHBlcm1pc3Npb25zLCBvciBwZXJoYXBzIGV2ZW4gYSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgaXQgb3BlcmF0ZXMgd2l0aGluLiBJJ20gdGhpbmtpbmcgSSd2ZSBwcm9iYWJseSBqdXN0IG1pc3NlZCBzb21ldGhpbmcgaW4gdGhlIGRvY3VtZW50YXRpb24sIGFzIHRoYXQncyB1c3VhbGx5IHRoZSBhbnN3ZXIuIFRpbWUgdG8gZGlnIGFyb3VuZCB0aGUgdXN1YWwgcGxhY2VzIC0gYC9ldGNgLCBgL3Vzci9sb2NhbC9ldGNgLCB0aGUgbWFuIHBhZ2Ugb2YgY291cnNlLCBhbmQgYW55IHJlbGV2YW50IHBhY2thZ2UgZG9jdW1lbnRhdGlvbi4gSSBkb3VidCBpdCB3b3VsZCBiZSBhbnl0aGluZyBwYXJ0aWN1bGFybHkgY29tcGxleCwgYnV0IEkgZG8gdGVuZCB0byBvdmVybG9vayB0aGUgb2J2aW91cyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTYyOTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM1OjU5LjAyMjUyMDU0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MTY0MDAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKkRFVk1FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvS2NvbmZpZz0yNDk9Y29uZmlnIE5TQ19HUElPXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNTgtXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjU5OmNvbmZpZyBERVZNRU1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiL2Rldi9tZW0gdmlydHVhbCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmxpYi9LY29uZmlnPTYxNz1jb25maWcgR0VORVJJQ19MSUJfVUNNUERJMlxcbi0tXFxubGliL0tjb25maWctNjE5LVxcbmxpYi9LY29uZmlnOjYyMDpjb25maWcgR0VORVJJQ19MSUJfREVWTUVNX0lTX0FMTE9XRURcXG5saWIvS2NvbmZpZy02MjEtXFx0Ym9vbFxcbi0tXFxubGliL0tjb25maWcuZGVidWc9MTk1Nz1zb3VyY2UgXFxcInNhbXBsZXMvS2NvbmZpZ1xcXCJcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xOTU4LVxcbmxpYi9LY29uZmlnLmRlYnVnOjE5NTk6Y29uZmlnIEFSQ0hfSEFTX0RFVk1FTV9JU19BTExPV0VEXFxubGliL0tjb25maWcuZGVidWctMTk2MC1cXHRib29sXFxubGliL0tjb25maWcuZGVidWctMTk2MS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxOTYyOmNvbmZpZyBTVFJJQ1RfREVWTUVNXFxubGliL0tjb25maWcuZGVidWctMTk2My1cXHRib29sIFxcXCJGaWx0ZXIgYWNjZXNzIHRvIC9kZXYvbWVtXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTk4MS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxOTgyOmNvbmZpZyBJT19TVFJJQ1RfREVWTUVNXFxubGliL0tjb25maWcuZGVidWctMTk4My1cXHRib29sIFxcXCJGaWx0ZXIgSS9PIGFjY2VzcyB0byAvZGV2L21lbVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L0tjb25maWctNjgtXFxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cXG5uZXQvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjAxLjMxNDE2NjgzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjY4OTg2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBaZXJvLUNvcHkgTmV0d29ya2luZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgTkVUX0RFVk1FTWAgaXMgYSBgZGVmX2Jvb2wgeWAsIHdoaWNoIG1lYW5zIGl0J3MgYWx3YXlzIG9uIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgbm8gbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBpdC4gTGV0J3MgbW92ZSBvbiB0byBpZGVudGlmeWluZyB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi5cblxuUmlnaHQsIHRoZSBpbml0aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLlxuXG5Ib2xkIG9uLCBJIHJlY2FsbCB0aGF0IGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIGlzIGRlZmluZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB3aGlsZSBJJ20gaGVyZS4gSXQgYXBwZWFycyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBpcyB0aGUgb25lIHRoYXQgd2FzIHJlY2VudGx5IG1vZGlmaWVkLiBUaGUgc3RhdGljIGZ1bmN0aW9uIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgY2FuJ3QgYmUgdXNlZCBkaXJlY3RseSBidXQgaXMgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYC5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgLCBpdCdzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBPa2F5LCBpdCdzIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3MgZ2xvYmFsbHkgdmlzaWJsZS4gV2UgY2FuIGNvbmZpcm0gdGhhdCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhcmUgYm90aCBleHBvcnRlZCwgYW5kIHNvIGlzIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLlxuXG5BbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG4qICAgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmBcbiogICBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgXG4qICAgYHplcm9jb3B5X3NnX2Zyb21faXRlcmBcbiogICBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYFxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQWghIFNpbmNlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGlzIHVzZWQgZGlyZWN0bHkgYnkgYGlvX3NnX2Zyb21faXRlcmAsIGBJT19VUklOR2AgaXMgYSBnb29kIGNvbmZpZyB0byBhZGQgdG8gdGhlIGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODk0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjA3LjU4MzE1NzI3NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODY5OTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MDkuMjIxODYxMTE3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDI3ODU4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyB0aG91Z2h0czpcblxuKipDb25maWd1cmluZyB0aGUgS2VybmVsOiBJbml0aWFsIENoZWNrcyBhbmQgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGtlcm5lbCBjb25maWd1cmF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgSU9fVVJJTkdgIGZlYXR1cmUuIFRoYXQncyB0aGUgbWFpbiBkcml2ZXIgb2YgdGhpcyB0aG91Z2h0IHByb2Nlc3MuIEl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlOyB0aGF0J3MgdGhlIGZvY2FsIHBvaW50LlxuXG5JJ20gaW1tZWRpYXRlbHkgcHJvbXB0ZWQgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0J3MgYSBzeXN0ZW1hdGljIGFwcHJvYWNoLCByaWdodD8gU2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGUgc2FtZSBuZWlnaGJvcmhvb2QuIGBORVRfREVWTUVNYCBpcyBzaG93aW5nIGBkZWZfYm9vbCB5YCwgYW5kLCB3ZWxsLCBgTkVUYCBpdHNlbGYgaXMgYSBnaXZlbi4gVGhlc2UgYXJlIHByZXR0eSBjb21tb247IG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgaW9fc2dfZnJvbV9pdGVyYC4gU2VlbXMgbGlrZSB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyBoZXJlIHRoYXQgd2FycmFudHMgYSBzZWNvbmQgbG9vay4gTWF5YmUgdGhlcmUncyBhIGRlcGVuZGVuY3ksIGEgc3VidGxlIGludGVyYWN0aW9uLCBvciBwZXJoYXBzIEknbSB0cnlpbmcgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgYElPX1VSSU5HYC4gR290dGEgbWFrZSBzdXJlIEknbSBmdWxseSB1cCB0byBzcGVlZCBvbiBhbGwgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTA0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MTMuMzI0NjUwNTk5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI1MTkzNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NnX2Zyb21faXRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMTI9c3RydWN0IGlvX3JlY3Z6YyB7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTgtXFxuaW9fdXJpbmcvbmV0LmM6MTE5OnN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsXFxuaW9fdXJpbmcvbmV0LmMtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbmlvX3VyaW5nL25ldC5jOjEyMTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTEyMi1cXHRcXHRcXHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTM3OD1pbnQgaW9fc2VuZF96Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNDQzLVxcdGlmICghKHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpKSB7XFxuaW9fdXJpbmcvbmV0LmM6MTQ0NDpcXHRcXHRpb21zZy1cXHUwMDNlbXNnLnNnX2Zyb21faXRlciA9IGlvX3NnX2Zyb21faXRlcl9pb3ZlYztcXG5pb191cmluZy9uZXQuYy0xNDQ1LVxcdFxcdHJldHVybiBpb19ub3RpZl9hY2NvdW50X21lbSh6Yy1cXHUwMDNlbm90aWYsIGlvbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIuY291bnQpO1xcbmlvX3VyaW5nL25ldC5jLTE0NDYtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjE0NDc6XFx0aW9tc2ctXFx1MDAzZW1zZy5zZ19mcm9tX2l0ZXIgPSBpb19zZ19mcm9tX2l0ZXI7XFxuaW9fdXJpbmcvbmV0LmMtMTQ0OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTAtXFxuaW9fdXJpbmcvbmV0LmM6MTQ1MTpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcl9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTItXFx0XFx0XFx0XFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgc2l6ZV90IGxlbmd0aClcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTctXFxuaW9fdXJpbmcvbmV0LmM6MTQ1ODpzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmlvX3VyaW5nL25ldC5jLTE0NTktXFx0XFx0XFx0ICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoxNC45NDk4NDg0ODNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NjA1MjUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBEYXRhIFRyYW5zZmVyIFByZXBhcmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGhlcmUuIFRoZSBmdW5jdGlvbiBgaW9fc2VuZF96Y19wcmVwYCBpcyB0aGUgb25lIHRoYXQgc2V0cyB0aGUgYHNnX2Zyb21faXRlcmAgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGNyaXRpY2FsLiBOb3csIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiBgaW9fc2VuZF96Y19wcmVwYC4gSXMgaXQgZXhwb3J0ZWQsIG9yIGlzIGl0IGEgZ2xvYmFsIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGFjY2Vzc2libGUgYW5kLCBieSBleHRlbnNpb24sIGhvdyBJIGNhbiBiZXN0IHV0aWxpemUgdGhpcyBmdW5jdGlvbiBpbiBteSB1c2UgY2FzZS4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIHRyYW5zZmVyIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NjgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoxOC4xMDU5MDM3NDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc2NjQ5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF96Y19wcmVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTEzNjE9dm9pZCBpb19zZW5kX3pjX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzc3LVxcbmlvX3VyaW5nL25ldC5jOjEzNzg6aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTEzNzkte1xcbi0tXFxuaW9fdXJpbmcvbmV0Lmg9NTQ9aW50IGlvX3NlbmRtc2dfemMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0Lmg6NTU6aW50IGlvX3NlbmRfemNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy9uZXQuaC01Ni12b2lkIGlvX3NlbmRfemNfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XFxuLS1cXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00MzMtXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG5pb191cmluZy9vcGRlZi5jOjQzNDpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fc2VuZF96Y19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmMtNDM1LVxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fc2VuZG1zZ196YyxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNDQ2LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuaW9fdXJpbmcvb3BkZWYuYzo0NDc6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3NlbmRfemNfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jLTQ0OC1cXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX3NlbmRtc2dfemMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjE5Ljc0MzU3Mzg4NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzA1Mzk0NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBaZXJvY29weSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHR3byBnbG9iYWwgZnVuY3Rpb25zIGp1bXAgb3V0IGF0IG1lOiBgaW9fc2VuZF96Y19wcmVwYCBhbmQgYGlvX3NlbmRtc2dfemNgLiBMZXQncyBhZGQgdGhhdCBgaW9fc2VuZG1zZ196Y2AgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gVGhlIGtleSBoZXJlIGlzIGFib3V0IGhvdyB3ZSdyZSB0cmVhdGluZyBkYXRhZ3JhbXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5SaWdodCwgc28gdGhlIGltcG9ydGFudCBzeW1ib2xzIGZvciBtZSB0byBmb2N1cyBvbiBhcmUgbm93OlxuXG4qICAgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmBcbiogICBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgXG4qICAgYHplcm9jb3B5X3NnX2Zyb21faXRlcmBcbiogICBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYFxuKiAgIGBpb19zZW5kbXNnX3pjYFxuXG5UaGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZSBpdCBtYWtlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCBhbmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gTm93LCB3aGVuIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNoaWZ0aW5nIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgLiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhci4gVGhpcyBpcyBkaXJlY3RseSB0aWVkIHRvIE1TR1xcX1pFUk9DT1BZIGFuZCBpb1xcX3VyaW5nIHplcm9jb3B5IHNlbmRzLCB3aGljaCwgYXMgd2Uga25vdywgYXJlIGNyaXRpY2FsIGFyZWFzIG9mIGhpZ2ggcGVyZm9ybWFuY2UgbmV0d29ya2luZywgYW5kIGNhbiBiZSBlYXNpbHkgaW1wYWN0ZWQuXG5cblRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBzdWJ0bGUsIGJ1dCBpdCdzIGNoYW5naW5nIHRoZSBlcnJvciBjb2RlIHRoYXQgZ29lcyBiYWNrIHRvIHVzZXJzcGFjZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUga2VybmVsIGl0c2VsZiBoYW5kbGVzIHRoZSBlcnJvci4gVGhpcyBpcyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIHVzZWZ1bCwgYXMgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBleHBlY3RlZCByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggcmVncmVzc2lvbiBhbmQgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU28sIGxldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk3LCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoyNi4wNDg5NzEyNzJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjMzNzY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJcIixcbiAgICBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgICBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiLFxuICAgIFwiaW9fc2VuZG1zZ196Y1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIgYW5kIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtIGZyb20gLUVGQVVMVCB0byAtRU1TR1NJWkUgd2hlbiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSBpcyBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgZGF0YWdyYW0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgemVyb2NvcHkgb3BlcmF0aW9ucyAoZS5nLiwgTVNHX1pFUk9DT1BZKSBhbmQgaW9fdXJpbmcgemVyb2NvcHkgc2VuZHMuIFRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIHRvIHVzZXJzcGFjZSBhbmQgaGFuZGxlZCBieSB0aGUga2VybmVsLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zIGluIGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwiemVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1cIixcbiAgICBcImlvX3NlbmRtc2dfemNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdmFsdWUgb2YgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyIGFuZCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSBmcm9tIC1FRkFVTFQgdG8gLUVNU0dTSVpFIHdoZW4gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgaXMgZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGRhdGFncmFtIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHplcm9jb3B5IG9wZXJhdGlvbnMgKGUuZy4sIE1TR19aRVJPQ09QWSkgYW5kIGlvX3VyaW5nIHplcm9jb3B5IHNlbmRzLiBUaGUgY2hhbmdlIGFsdGVycyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCB0byB1c2Vyc3BhY2UgYW5kIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZWdyZXNzaW9ucyBpbiBlcnJvciBoYW5kbGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MjYuMTMxMzE1NDUzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEyNzU0NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjI2LjEzMTgzMTYwM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDEyNzAyNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJ3MgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDAxNDlmNzlhYTAxMWIwMzg5ZTMwMTQ0OGQyNGFmYTRmNzczYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzQ6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuaW5kZXggMTczYjVkOTdiZDQwOS4uNmY4ZmZkNjFiY2FiNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC02MzgsNyArNjM4LDcgQEAgaW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW50IGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXG4gXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdHdoaWxlIChsZW5ndGggXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkLCAqbGFzdF9oZWFkID0gTlVMTDtcbkBAIC03MTMsNyArNzEzLDcgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gXG4gXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gXHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjoyNi4xMzE4MzI1MzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2MzI4NTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDaGFuZ2UgaW4gRXJyb3IgQ29kZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzdWJ0bHkgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdpdGhpbiB0aGUgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gVGhlIGNvbmRpdGlvbiB0cmlnZ2VyaW5nIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdoZW4gYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBpcyBmYWxzZSAoZm9yIHRoZSBmaXJzdCBmdW5jdGlvbikgb3IgdHJ1ZSB3aXRoIGFuIGluZGV4ICdpJyAoZm9yIHRoZSBzZWNvbmQpLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU28gd2hhdD9cIi4gSXQncyBqdXN0IGEgZGlmZmVyZW50IGVycm9yIGNvZGUsIHJpZ2h0PyBOb3QgZXhhY3RseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBuZXcgYWxsb2NhdGlvbnMgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLiBFcnJvciBjb2Rlcywgd2hpbGUgc2VlbWluZ2x5IHNpbXBsZSwgY2FuIGhhdmUgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgY2FsbGluZyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gdXNlciBzcGFjZSwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBJJ20gbm93IHRoaW5raW5nOiBEb2VzIHRoaXMgZGlmZmVyZW50IGVycm9yIGNvZGUgcG90ZW50aWFsbHkgY2hhbmdlIGhvdyB0aGUgY2FsbGVyIGhhbmRsZXMgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBjYWxsZXJzIHNob3VsZCBqdXN0IGJlIHByb3BhZ2F0aW5nIHRoZSBlcnJvcnMgdXB3YXJkcywgcmlnaHQ/IFxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQuIFRoZSB0ZXh0IG1lbnRpb25zIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluLCBiZWNhdXNlIEkgdGhvdWdodCB0aGUgc2Vjb25kIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYnkgdGhlIGZpcnN0LiBJIHdpbGwgcGVyZm9ybSBhIGdyZXAgdG8gY29uZmlybSB0aGUgZGlyZWN0IGNhbGwgc2l0ZSBvZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM2OjMzLjM5NTEyMDM0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjg2NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2Mz1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzY4OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjktXFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tLCBzaXplX3QgbGVuZ3RoKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE0NTE9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXJfaW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NTQtXFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuaW9fdXJpbmcvbmV0LmM6MTQ1NTpcXHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcXG5pb191cmluZy9uZXQuYy0xNDU2LX1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTE0NTg9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTE0NzAtXFx0ZWxzZSBpZiAodW5saWtlbHkoIXNrYl96Y29weV9tYW5hZ2VkKHNrYikpKVxcbmlvX3VyaW5nL25ldC5jOjE0NzE6XFx0XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuaW9fdXJpbmcvbmV0LmMtMTQ3Mi1cXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NjMzPUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyX2Z1bGwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjM0LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NjM1OmludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzNi1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIHNpemVfdCBsZW5ndGgpXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cXHRlbHNlXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjM6XFx0XFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzY6MzUuMDExOTk1NzQ3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDY4NDIwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXJyb3IgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBib2lscyBkb3duIHRvIGEgc3RyYWlnaHRmb3J3YXJkIGVycm9yIGNvZGUgYWRqdXN0bWVudC4gU3BlY2lmaWNhbGx5LCBpZiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyYCByZXR1cm5zIGAtRU1TR1NJWkVgIGluc3RlYWQgb2YgYC1FRkFVTFRgLCB0aGUgY2FsbCBzaXRlIHByb3BhZ2F0ZXMgYC1FTVNHU0laRWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgSSdtIGFzc2Vzc2luZyBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IG1lbW9yeSBpc3N1ZXMuIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZW1haW5zIHRoZSBzYW1lOyBpdCdzIHNpbXBseSBhIGNoYW5nZSBpbiBob3cgd2Ugc2lnbmFsIGEgc3BlY2lmaWMgZXJyb3IgY29uZGl0aW9uIHJlbGF0ZWQgdG8gZnJhZ21lbnQgcmVhZGFiaWxpdHkuXG5cbk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBmdW5kYW1lbnRhbCBpc3N1ZSB0aGlzIHBhdGNoIHRvdWNoZXMgaXNuJ3QgYWJvdXQgbWVtb3J5IHNhZmV0eSBpdHNlbGYuIElmIHRoZXJlIGFyZSBidWdzLCB0aGV5J2QgbGlrZWx5IGJlIGxvZ2ljYWwgb3Igc3RhdGUtcmVsYXRlZCwgb3IgYSBmdW5jdGlvbmFsIHByb2JsZW0sIGFuZCB3b3VsZG4ndCBiZSBzb21ldGhpbmcgS01TQU4gd291bGQgcmVhZGlseSBjYXRjaC4gS01TQU4gaXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBkZXRlY3RpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgc2luY2UgdGhpcyBpcyBqdXN0IGFuIGVycm9yIGNvZGUgY2hhbmdlIEknbSBub3QgZXhwZWN0aW5nIGFueSBLTVNBTiByZWxhdGVkIGZpbmRpbmdzLiBTbywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBLTVNBTiBzZXNzaW9uLiBJJ2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNjo0MC4yNTg4NDA3MjJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBjaGFuZ2VzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXJgIGFuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZyb20gYC1FRkFVTFRgIHRvIGAtRU1TR1NJWkVgIHdoZW4gdGhlcmUgaXMgYSBtaXNtYXRjaCBpbiBmcmFnbWVudCByZWFkYWJpbGl0eS4gVGhpcyBjaGFuZ2UgaW4gZXJyb3IgY29kZSBwcm9wYWdhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcywgd2hpY2ggYXJlIG5vdCBzcGVjaWZpYyB0byBLTVNBTidzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcmAgYW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnJvbSBgLUVGQVVMVGAgdG8gYC1FTVNHU0laRWAgd2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoIGluIGZyYWdtZW50IHJlYWRhYmlsaXR5LiBUaGlzIGNoYW5nZSBpbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCB3aGljaCBhcmUgbm90IHNwZWNpZmljIHRvIEtNU0FOJ3MgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdd2rz[1] Phase: Succeeded StartedAt: 2026-08-10 23:36:51 +0000 UTC FinishedAt: 2026-08-10 23:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 23:36:51 +0000 UTC FinishedAt: 2026-08-10 23:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2] Phase: Succeeded StartedAt: 2026-08-10 23:36:51 +0000 UTC FinishedAt: 2026-08-11 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:36:51 +0000 UTC FinishedAt: 2026-08-11 03:17:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:36:51 +0000 UTC FinishedAt: 2026-08-10 23:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:36:51 +0000 UTC FinishedAt: 2026-08-10 23:36:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-workflowdd2rz/series-workflowdd2rz-convert-artifact-545843281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:37:01 +0000 UTC FinishedAt: 2026-08-10 23:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:37:01 +0000 UTC FinishedAt: 2026-08-10 23:53:23 +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:*bc5635be-3cc8-4ea7-83df-3ed061ca4772,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-workflowdd2rz/series-workflowdd2rz-convert-artifact-545843281/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": "616b455c-1171-4479-a726-a1f2d46e7948", "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-workflowdd2rz/series-workflowdd2rz-build-action-3414786559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:37:01 +0000 UTC FinishedAt: 2026-08-10 23:53:13 +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:*bc5635be-3cc8-4ea7-83df-3ed061ca4772,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-workflowdd2rz/series-workflowdd2rz-convert-artifact-545843281/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": "616b455c-1171-4479-a726-a1f2d46e7948", "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-workflowdd2rz/series-workflowdd2rz-build-action-3414786559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:53:23 +0000 UTC FinishedAt: 2026-08-10 23:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:53:23 +0000 UTC FinishedAt: 2026-08-10 23:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:53:23 +0000 UTC FinishedAt: 2026-08-10 23:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:53:23 +0000 UTC FinishedAt: 2026-08-10 23:53:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-workflowdd2rz/series-workflowdd2rz-convert-artifact-1701696548/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:53:33 +0000 UTC FinishedAt: 2026-08-10 23:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:53:33 +0000 UTC FinishedAt: 2026-08-10 23:55:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*616b455c-1171-4479-a726-a1f2d46e7948,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-workflowdd2rz/series-workflowdd2rz-build-action-3414786559/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-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:55:15 +0000 UTC FinishedAt: 2026-08-10 23:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:55:15 +0000 UTC FinishedAt: 2026-08-10 23:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:55:15 +0000 UTC FinishedAt: 2026-08-11 00:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:55:15 +0000 UTC FinishedAt: 2026-08-11 00:14:47 +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:*bc5635be-3cc8-4ea7-83df-3ed061ca4772,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-workflowdd2rz/series-workflowdd2rz-convert-artifact-1701696548/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": "6730d534-eefe-48c8-979c-c48ba6efb77e", "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-workflowdd2rz/series-workflowdd2rz-build-action-3148630704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-10 23:55:15 +0000 UTC FinishedAt: 2026-08-11 00:14:37 +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:*bc5635be-3cc8-4ea7-83df-3ed061ca4772,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-workflowdd2rz/series-workflowdd2rz-convert-artifact-1701696548/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": "6730d534-eefe-48c8-979c-c48ba6efb77e", "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-workflowdd2rz/series-workflowdd2rz-build-action-3148630704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:14:47 +0000 UTC FinishedAt: 2026-08-11 00:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:14:47 +0000 UTC FinishedAt: 2026-08-11 00:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:14:47 +0000 UTC FinishedAt: 2026-08-11 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:14:47 +0000 UTC FinishedAt: 2026-08-11 00:16:21 +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:*6730d534-eefe-48c8-979c-c48ba6efb77e,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-workflowdd2rz/series-workflowdd2rz-build-action-3148630704/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-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 03:17:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"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:*616b455c-1171-4479-a726-a1f2d46e7948,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6730d534-eefe-48c8-979c-c48ba6efb77e,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-workflowdd2rz/series-workflowdd2rz-build-action-3414786559/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-workflowdd2rz/series-workflowdd2rz-build-action-3148630704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 00:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 00:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"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-workflowdd2rz/series-workflowdd2rz-convert-artifact-3562566573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:31 +0000 UTC FinishedAt: 2026-08-11 00:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:41 +0000 UTC FinishedAt: 2026-08-11 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdd2rz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_fill_skb_from_iter","__zerocopy_sg_from_iter","zerocopy_sg_from_iter","skb_zerocopy_iter_stream","io_sendmsg_zc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"49107633-d66e-4e1e-9729-8f59096c4356","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-08-11 00:16:41 +0000 UTC FinishedAt: 2026-08-11 03:17:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*616b455c-1171-4479-a726-a1f2d46e7948,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6730d534-eefe-48c8-979c-c48ba6efb77e,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-workflowdd2rz/series-workflowdd2rz-build-action-3414786559/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-workflowdd2rz/series-workflowdd2rz-build-action-3148630704/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-workflowdd2rz/series-workflowdd2rz-convert-artifact-3562566573/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,}