Name: series-workflowkw5h8 Phase: Succeeded StartedAt: 2026-08-21 10:23:28 +0000 UTC FinishedAt: 2026-08-21 14:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[0] Phase: Succeeded StartedAt: 2026-08-21 10:23:28 +0000 UTC FinishedAt: 2026-08-21 11:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 10:23:28 +0000 UTC FinishedAt: 2026-08-21 11:05:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "50c44fea13ec339d0d457079b254e8c8420d6511", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "50c44fea13ec339d0d457079b254e8c8420d6511", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "4e586f3b-2bcb-4dbd-8400-b459ead9aa03" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_fc_replay", "ext4_ext_replay_update_ex", "ext4_ext_replay_shrink_inode", "ext4_ext_replay_set_iblocks", "ext4_ext_clear_bb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JlcGxheSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4JiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X2NsZWFyX2JiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE1YTFkZGVmMDZlYWE4YjAxZTA4YmZlODc3NDIwMDZkNjYzNzMzZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTowNDowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCAxNTk3MjQxMGQ0NjA1Li5iOTVlYWZiMGQ1Y2FkIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtOTA1LDYgJiM0Mzs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcbiBcdFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoKEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHtcbiYjNDM7XHRcdHJldCA9IGV4dDRfZXh0X2NoZWNrKGlub2RlLCBlaCwgZGVwdGgsIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHBhdGgpIHtcbiBcdFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXkmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leCYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9jbGVhcl9iYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGV4dDRfZmluZF9leHRlbnRgIGJ5IGFkZGluZyBhbiBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZXhlY3V0ZWQgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSAod2hlbiBgRVhUNF9GQ19SRVBMQVlgIGlzIHNldCBpbiB0aGUgbW91bnQgc3RhdGUpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgd2hlbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBmYXN0IGNvbW1pdCBibG9ja3MsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTVhMWRkZWYwNmVhYThiMDFlMDhiZmU4Nzc0MjAwNmQ2NjM3MzNkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDExOjA0OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCAxNTk3MjQxMGQ0NjA1Li5iOTVlYWZiMGQ1Y2FkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtOTA1LDYgJiM0Mzs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jaywKIAkJcmV0ID0gLUVGU0NPUlJVUFRFRDsKIAkJZ290byBlcnI7CiAJfQomIzQzOwkvKiBleHQ0X2lnZXQoKSBza2lwcyBleHRlbnQgdmFsaWRhdGlvbiBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiAqLwomIzQzOwlpZiAodW5saWtlbHkoKEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX21vdW50X3N0YXRlICZhbXA7IEVYVDRfRkNfUkVQTEFZKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiAKIAlpZiAocGF0aCkgewogCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0X2ZpbmRfZXh0ZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgZXh0NF9maW5kX2V4dGVudGAgZnVuY3Rpb24uIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgaXQmIzM5O3MgcXVpdGUgc3BlY2lmaWMuIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZWRnZSBjYXNlIHJlbGF0ZWQgdG8gZmFzdCBjb21taXQgcmVwbGF5IHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLgoKVGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBtb3VudCBzdGF0ZSBpbmNsdWRlcyBgRVhUNF9GQ19SRVBMQVlgIGFuZCBpZiB0aGUgaW5vZGUgdXRpbGl6ZXMgZXh0ZW50cyAoYEVYVDRfSU5PREVfRVhURU5UU2ApLiBJZiBib3RoIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgdHJpZ2dlcnMgYSBjYWxsIHRvIGBleHQ0X2V4dF9jaGVja2Agd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHNvbWUgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIHRoaXMgZmFzdCBjb21taXQgcmVwbGF5LiBUaGUgYGV4dDRfaWdldCgpYCBmdW5jdGlvbiBhbHJlYWR5IHNraXBzIGV4dGVudCB2YWxpZGF0aW9uIGZvciBmYXN0IGNvbW1pdCwgc28gdGhpcyBpcyB0YXJnZXRlZCBhdCBzb21lIGRlZXBlciBpbnRlZ3JpdHkgY2hlY2ssIGl0IHdvdWxkIHNlZW0uIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgb3IgZXJyb3IgY29uZGl0aW9uIHRoYXQgbmVlZHMgdG8gYmUgY2F1Z2h0IGR1cmluZyB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGtlcm5lbCBwYXJhbWV0ZXJzIGFyZSBuZWNlc3NhcnkgdG8gZW5hYmxlIG9yIGFmZmVjdCB0aGlzIGBFWFQ0X0ZDX1JFUExBWWAgZnVuY3Rpb25hbGl0eSB3aXRoaW4gZXh0NC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZnVydGhlciB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgbW9kZSB3aXRoaW4gZXh0NCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcyBhZGRlZCBleHRlbnQgY2hlY2suIEEgcXVpY2sgZ3JlcCBvZiB0aGUga2VybmVsIHNvdXJjZSBmb3IgYEVYVDRfRkNfUkVQTEFZYCBzaG91bGQgYmUgbXkgbmV4dCBtb3ZlLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBhbmQgaG93IHRoaXMgZmxhZyBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBUaGF0IHdpbGwgaGVscCBtZSBjb25uZWN0IHRoZSBkb3RzIGJldHRlciBhbmQgZGV0ZXJtaW5lIHdoYXQgcG90ZW50aWFsIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgb3ZlcmFsbCBmaWxlc3lzdGVtIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGR1cmluZyByZWNvdmVyeSBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhUNF9GQ19SRVBMQVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2JhbGxvYy5jPTM5OT1zdGF0aWMgaW50IGV4dDRfdmFsaWRhdGVfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9iYWxsb2MuYy00MDYtXG5mcy9leHQ0L2JhbGxvYy5jOjQwNzpcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvYmFsbG9jLmMtNDA4LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEyMzctI2RlZmluZVx0RVhUNF9PUlBIQU5fRlNcdFx0XHQweDAwMDRcdC8qIE9ycGhhbnMgYmVpbmcgcmVjb3ZlcmVkICovXG5mcy9leHQ0L2V4dDQuaDoxMjM4OiNkZWZpbmUgRVhUNF9GQ19SRVBMQVlcdFx0XHQweDAwMjBcdC8qIEZhc3QgY29tbWl0IHJlcGxheSBvbmdvaW5nICovXG5mcy9leHQ0L2V4dDQuaC0xMjM5LVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmM9OTI9aGFuZGxlX3QgKl9fZXh0NF9qb3VybmFsX3N0YXJ0X3NiKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYy0xMTEtXHRqb3VybmFsID0gRVhUNF9TQihzYiktXHUwMDNlc19qb3VybmFsO1xuZnMvZXh0NC9leHQ0X2piZDIuYzoxMTI6XHRpZiAoIWpvdXJuYWwgfHwgKEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSlcbmZzL2V4dDQvZXh0NF9qYmQyLmMtMTEzLVx0XHRyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9ODg2PWV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtOTA4LVx0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjkwOTpcdGlmICh1bmxpa2VseSgoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2V4dGVudHMuYy05MTAtXHRcdCAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTM2Mz12b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMzY5LVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjM3MDpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTM3MS1cdFx0cmV0dXJuO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz00MTc9Ym9vbCBleHQ0X2VzX3NjYW5fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNDIyLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjQyMzpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTQyNC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz00NjM9Ym9vbCBleHQ0X2VzX3NjYW5fY2x1KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTQ2OC1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo0Njk6XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy00NzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9OTA1PXZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkxOC1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo5MTk6XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MjAtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MTAyND12b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMzMtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAzNDpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMzUtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MTA5Mj1pbnQgZXh0NF9lc19sb29rdXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTExMDEtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTEwMjpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTExMDMtXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0xNjIzPXZvaWQgZXh0NF9lc19yZW1vdmVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTE2MzAtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTYzMTpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTE2MzItXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MjIwMT12b2lkIGV4dDRfZXNfaW5zZXJ0X2RlbGF5ZWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTIyMTMtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MjIxNDpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTIyMTUtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ2LVx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NzpcdFx0KEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ4LX1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkxNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8pXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjgtXHRcdFx0XHRzaXplb2YoaW50KSAqIChzdGF0ZS1cdTAwM2VmY19tb2RpZmllZF9pbm9kZXNfc2l6ZSAmIzQzO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5Mjk6XHRcdFx0XHRFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVCksXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzMC1cdFx0XHRcdEdGUF9LRVJORUwpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTM0LVx0XHRzdGF0ZS1cdTAwM2VmY19tb2RpZmllZF9pbm9kZXNfc2l6ZSAmIzQzOz1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTM1Olx0XHRcdEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MzYtXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxMDg9aW50IGV4dDRfZmNfcmVjb3JkX3JlZ2lvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEyNi1cdFx0XHRcdCAgICAgIChzdGF0ZS1cdTAwM2VmY19yZWdpb25zX3NpemUgJiM0MztcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTI3Olx0XHRcdFx0ICAgICAgIEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UKSxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTI4LVx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzEtXHRcdHN0YXRlLVx1MDAzZWZjX3JlZ2lvbnNfc2l6ZSAmIzQzOz1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTMyOlx0XHRcdEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMtXHRcdHN0YXRlLVx1MDAzZWZjX3JlZ2lvbnMgPSBmY19yZWdpb25zO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDA1PXZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA4LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0MDk6XHRzYmktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjY9IH5FWFQ0X0ZDX1JFUExBWTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDEwLVx0a2ZyZWUoc2JpLVx1MDAzZXNfZmNfcmVwbGF5X3N0YXRlLmZjX3JlZ2lvbnMpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNTgxPXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk4LVx0XHRzdGF0ZS1cdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBwYXNzO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1OTk6XHRcdHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIHw9IEVYVDRfRkNfUkVQTEFZO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MDAtXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oPTEyMD1zdHJ1Y3QgZXh0NF9mY19zdGF0cyB7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTEyOS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxMzA6I2RlZmluZSBFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVFx0NFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTEzMS1cbi0tXG5mcy9leHQ0L2lhbGxvYy5jPTgxPXN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9pbm9kZV9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTg4LVxuZnMvZXh0NC9pYWxsb2MuYzo4OTpcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvaWFsbG9jLmMtOTAtXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmM9MjM3PXZvaWQgZXh0NF9mcmVlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0yOTUtXHR9XG5mcy9leHQ0L2lhbGxvYy5jOjI5NjpcdGlmICghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMjk3LVx0XHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBibG9ja19ncm91cCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYz05MzM9c3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTA1My1cbmZzL2V4dDQvaWFsbG9jLmM6MTA1NDpcdFx0aWYgKCEoc2JpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSkge1xuZnMvZXh0NC9pYWxsb2MuYy0xMDU1LVx0XHRcdGdycCA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGdyb3VwKTtcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTEwNzAtXHRcdH1cbmZzL2V4dDQvaWFsbG9jLmM6MTA3MTpcdFx0aWYgKCEoc2JpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaWFsbG9jLmMtMTA3Mi1cdFx0ICAgIEVYVDRfTUJfR1JQX0lCSVRNQVBfQ09SUlVQVChncnApKVxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTA4Ni1cbmZzL2V4dDQvaWFsbG9jLmM6MTA4NzpcdFx0aWYgKCghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIFx1MDAyNlx1MDAyNiAhaGFuZGxlKSB7XG5mcy9leHQ0L2lhbGxvYy5jLTEwODgtXHRcdFx0QlVHX09OKG5ibG9ja3MgXHUwMDNjPSAwKTtcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTExOTItXG5mcy9leHQ0L2lhbGxvYy5jOjExOTM6XHRcdGlmICghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMTE5NC1cdFx0XHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBncm91cCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMjE4LVx0XHRcdFx0XHQoRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKSAtIGlubykpO1xuZnMvZXh0NC9pYWxsb2MuYzoxMjE5Olx0XHRpZiAoIShzYmktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKVxuZnMvZXh0NC9pYWxsb2MuYy0xMjIwLVx0XHRcdHVwX3JlYWQoXHUwMDI2Z3JwLVx1MDAzZWFsbG9jX3NlbSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQ0MD12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lub2RlLmMtNDQxLXtcbmZzL2V4dDQvaW5vZGUuYzo0NDI6XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvaW5vZGUuYy00NDMtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2lub2RlLmM9OTc5PXN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9nZXRibGsoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtOTg3LVxuZnMvZXh0NC9pbm9kZS5jOjk4ODpcdEFTU0VSVCgoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvaW5vZGUuYy05ODktXHRcdCAgICB8fCBoYW5kbGUgIT0gTlVMTCB8fCBjcmVhdGUgPT0gMCk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTEwMTUtXHRcdEFTU0VSVChjcmVhdGUgIT0gMCk7XG5mcy9leHQ0L2lub2RlLmM6MTAxNjpcdFx0QVNTRVJUKChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9pbm9kZS5jLTEwMTctXHRcdFx0ICAgIHx8IChoYW5kbGUgIT0gTlVMTCkpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjQ1PXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUzMjctXHQgICAgZXh0NF9zaW11bGF0ZV9mYWlsKHNiLCBFWFQ0X1NJTV9JTk9ERV9DUkMpKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaW5vZGUuYzo1MzI4Olx0ICAgICAoIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpKSB7XG5mcy9leHQ0L2lub2RlLmMtNTMyOS1cdFx0ZXh0NF9lcnJvcl9pbm9kZV9lcnIoaW5vZGUsIGZ1bmN0aW9uLCBsaW5lLCAwLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NDk3LVx0XHQvKiB2YWxpZGF0ZSB0aGUgYmxvY2sgcmVmZXJlbmNlcyBpbiB0aGUgaW5vZGUgKi9cbmZzL2V4dDQvaW5vZGUuYzo1NDk4Olx0XHRpZiAoIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2lub2RlLmMtNTQ5OS1cdFx0XHQoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTIwMDA9c3RhdGljIHZvaWQgbWJfZnJlZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfYnVkZHkgKmU0Yixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0yMDM2LVx0XHQgKi9cbmZzL2V4dDQvbWJhbGxvYy5jOjIwMzc6XHRcdGlmIChzYmktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIHtcbmZzL2V4dDQvbWJhbGxvYy5jLTIwMzgtXHRcdFx0bWJfcmVnZW5lcmF0ZV9idWRkeShlNGIpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU2MDc9dm9pZCBleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NjIxLVxuZnMvZXh0NC9tYmFsbG9jLmM6NTYyMjpcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvbWJhbGxvYy5jLTU2MjMtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MjI5PWV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MjQ1LVx0dHJhY2VfZXh0NF9yZXF1ZXN0X2Jsb2Nrcyhhcik7XG5mcy9leHQ0L21iYWxsb2MuYzo2MjQ2Olx0aWYgKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvbWJhbGxvYy5jLTYyNDctXHRcdHJldHVybiBleHQ0X21iX25ld19ibG9ja3Nfc2ltcGxlKGFyLCBlcnJwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02NjkxPXZvaWQgZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTY3MDctXG5mcy9leHQ0L21iYWxsb2MuYzo2NzA4Olx0aWYgKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkge1xuZnMvZXh0NC9tYmFsbG9jLmMtNjcwOS1cdFx0ZXh0NF9mcmVlX2Jsb2Nrc19zaW1wbGUoaW5vZGUsIGJsb2NrLCBFWFQ0X05VTV9CMkMoc2JpLCBjb3VudCkpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zMjI2PWludCBfX2V4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZF9uYW1lLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zMjUyLVx0XHQgKi9cbmZzL2V4dDQvbmFtZWkuYzozMjUzOlx0XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvbmFtZWkuYy0zMjU0LVx0XHRcdHNraXBfcmVtb3ZlX2RlbnRyeSA9IDE7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTM3OTc9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy00MDA4LVx0XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYzo0MDA5Olx0XHQgICAgIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmMtNDAxMC1cdFx0ICAgICEoZXh0NF90ZXN0X21vdW50X2ZsYWcoc2IsIEVYVDRfTUZfRkNfSU5FTElHSUJMRSkpKSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUyODU9c3RhdGljIGludCBleHQ0X2Jsb2NrX2dyb3VwX21ldGFfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2lsZW50KVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MzI2LVx0c2JpLVx1MDAzZXNfZGVzY19wZXJfYmxvY2sgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAvIEVYVDRfREVTQ19TSVpFKHNiKTtcbmZzL2V4dDQvc3VwZXIuYzo1MzI3Olx0c2JpLVx1MDAzZXNfbW91bnRfc3RhdGUgPSBsZTE2X3RvX2NwdShlcy1cdTAwM2VzX3N0YXRlKSBcdTAwMjYgfkVYVDRfRkNfUkVQTEFZO1xuZnMvZXh0NC9zdXBlci5jLTUzMjgtXHRzYmktXHUwMDNlc19hZGRyX3Blcl9ibG9ja19iaXRzID0gaWxvZzIoRVhUNF9BRERSX1BFUl9CTE9DSyhzYikpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz02NTY2PXN0YXRpYyBpbnQgX19leHQ0X3JlbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy02Nzc3LVx0XHRcdHNiaS1cdTAwM2VzX21vdW50X3N0YXRlID0gKGxlMTZfdG9fY3B1KGVzLVx1MDAzZXNfc3RhdGUpIFx1MDAyNlxuZnMvZXh0NC9zdXBlci5jOjY3Nzg6XHRcdFx0XHRcdCAgICAgIH5FWFQ0X0ZDX1JFUExBWSk7XG5mcy9leHQ0L3N1cGVyLmMtNjc3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IEZhc3QgQ29tbWl0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcGxheWluZyBpbiB0aGUgYGV4dDRfZmluZF9leHRlbnRgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIGZvciBgRVhUNF9GQ19SRVBMQVlgIGFuZCB0aGVuIGNhbGxpbmcgYGV4dDRfZXh0X2NoZWNrYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRoYXQgbGlrZWx5IGFmZmVjdHMgdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGNoZWNrLgoKUmlnaHQsIHNvIGZhc3QgY29tbWl0IGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgYENPTkZJR19FWFQ0X0ZTYCBvcHRpb24sIHdoaWNoIGlzIHN0YW5kYXJkLiBCdXQgSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSBpdHNlbGYuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gYWNyb3NzIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0pPVVJOQUxfRkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEzMDgtXG5mcy9leHQ0L2V4dDQuaDoxMzA5OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFx0MHgwMDAwMDAxMCAvKiBKb3VybmFsIGZhc3QgY29tbWl0ICovXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXHRcdDB4MDAwMDAwMjAgLyogRG8gbm90IGFsbG93IERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDUte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NjpcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDctXHRcdChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xNTg2PWludCBleHQ0X2ZjX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IGNvbW1pdF90aWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTU5NjpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVx0XHRyZXR1cm4gamJkMl9jb21wbGV0ZV90cmFuc2FjdGlvbihqb3VybmFsLCBjb21taXRfdGlkKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXHRqb3VybmFsLVx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgyLVx0XHRyZXR1cm47XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTM0Mjk9c3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDM3LVx0XHRcdHJldHVybiBmYWxzZTtcbmZzL2V4dDQvaW5vZGUuYzozNDM4Olx0XHRpZiAodGVzdF9vcHQyKGlub2RlLVx1MDAzZWlfc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9pbm9kZS5jLTM0MzktXHRcdFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9mY19saXN0KTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTQwMDctXHRcdFx0ZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlLCBuZXcuZGVudHJ5KTtcbmZzL2V4dDQvbmFtZWkuYzo0MDA4Olx0XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy00MDA5LVx0XHQgICAgIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk1NC0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYzoxOTU1Olx0e09wdF9mY19kZWJ1Z19mb3JjZSwgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVCxcbmZzL2V4dDQvc3VwZXIuYy0xOTU2LVx0IE1PUFRfU0VUIHwgTU9QVF8yIHwgTU9QVF9FWFQ0X09OTFl9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYz00Mzk2PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MTUtXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXG5mcy9leHQ0L3N1cGVyLmM6NDQxNjpcdFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTQ0MTctXHQvKiBkb24mIzM5O3QgZm9yZ2V0IHRvIGVuYWJsZSBqb3VybmFsX2NzdW0gd2hlbiBtZXRhZGF0YV9jc3VtIGlzIGVuYWJsZWQuICovXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ5NjQ9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00OTg3LVxuZnMvZXh0NC9zdXBlci5jOjQ5ODg6XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvc3VwZXIuYy00OTg5LVx0XHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cdTAwM2VzX2pvdXJuYWwsIDAsIDAsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNDg9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNTUtXHRcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xuZnMvZXh0NC9zdXBlci5jOjUwNTY6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTUwNTctXHRcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzQ2PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NTQ0LVx0XHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xuZnMvZXh0NC9zdXBlci5jOjU1NDU6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTU1NDYtXHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZhc3QgQ29tbWl0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSByZWxhdGVkIHRvIHRoZSBmYXN0IGNvbW1pdCBmZWF0dXJlIHdpdGhpbiBleHQ0LiBUaGUgY29udGV4dCBoZXJlIGlzIG1vZGlmeWluZyBgZXh0NF9maW5kX2V4dGVudGAsIHdoaWNoIGlzIGEgKmNvcmUqIGZ1bmN0aW9uLCBubyBxdWVzdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBmb3IgYEVYVDRfRkNfUkVQTEFZYCBhbmQgc3Vic2VxdWVudGx5IGNhbGxzIGBleHQ0X2V4dF9jaGVja2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW5zdGluY3Qgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0ISYjMzQ7LiBEZWZpbml0ZWx5IHdvcnRoIGEgZGVlcCBkaXZlIHRoZXJlLgoKSW5pdGlhbGx5LCBJIHplcm9lZCBpbiBvbiBgZXh0NF9maW5kX2V4dGVudGAgYW5kIGBleHQ0X2V4dF9jaGVja2AgYXMgcHJpbWUgZnV6emluZyB0YXJnZXRzLiBCdXQsIGhvbGQgb24uLi4gYGV4dDRfZmluZF9leHRlbnRgIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBJIHJlY2FsbCB0aGUgZ3VpZGVsaW5lczogd2Ugd2FudCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RzIGZyb20gYmVpbmcgc2tld2VkLiBUaGV5IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFdlIHdhbnQgZ29vZCBjb3ZlcmFnZS4KCk9rYXksIHNvIGBleHQ0X2ZpbmRfZXh0ZW50YCAqaXMqIGNhbGxlZCBmcmVxdWVudGx5LiBCdXQgY3J1Y2lhbGx5LCBgZXh0NF9leHRfY2hlY2tgIGlzIG9ubHkgY2FsbGVkICpoZXJlKiwgd2l0aGluIHRoZSBjb250ZXh0IG9mIGZhc3QgY29tbWl0IHJlcGxheS4gVGhlIHNwZWNpZmljIGNvbmRpdGlvbiBpcyBkZXBlbmRlbnQgb24gYEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX21vdW50X3N0YXRlICZhbXA7IEVYVDRfRkNfUkVQTEFZYCwgd2hpY2ggaXMgb25seSB0cnVlICpkdXJpbmcqIGZhc3QgY29tbWl0IHJlcGxheSwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBlZGdlIGNhc2VzLgoKQWgsIEkgdGhpbmsgSSBzZWUgdGhlIGtleS4gRmFzdCBjb21taXQgcmVwbGF5IGl0c2VsZiBpcyBsaWtlbHkgaGFuZGxlZCBpbiBgZXh0NF9mY19yZXBsYXlgLiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGludmVzdGlnYXRpbmcgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGdpdmUgdXMgbW9yZSBvZiB0aGUgY29tcGxldGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2ZjX3JlcGxheSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTg2MS0jZW5kaWZcbmZzL2V4dDQvZXh0NC5oOjE4NjI6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgc19mY19yZXBsYXlfc3RhdGU7XG5mcy9leHQ0L2V4dDQuaC0xODYzLX07XG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzA3OT12b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0Lmg6MzA4MDpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibG9jayk7XG5mcy9leHQ0L2V4dDQuaDozMDgxOnZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvZXh0NC5oLTMwODItaW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE4MDQ9c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfZ2V0X3RsKHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MTMtLyogVW5saW5rIHJlcGxheSBmdW5jdGlvbiAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MTQ6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODE1LVx0XHRcdFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjMtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgyNDpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19VTkxJTkssIGRhcmcuaW5vLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjUtXHRcdFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4NTItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg1MzpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODU0LVx0XHRcdFx0c3RydWN0IGRlbnRyeV9pbmZvX2FyZ3MgKmRhcmcsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4ODgtLyogTGluayByZXBsYXkgZnVuY3Rpb24gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODg5OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfbGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTAtXHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTYtXHR0bF90b19kYXJnKFx1MDAyNmRhcmcsIHRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4OTc6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfTElOSywgZGFyZy5pbm8sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5OC1cdFx0XHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkwNS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTA2Olx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzYiwgXHUwMDI2ZGFyZywgaW5vZGUpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MDctXHRpcHV0KGlub2RlKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkxNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8pXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkxNi17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkxNzpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkxOC1cdGludCBpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTQzLSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NDQ6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDUtXHRcdFx0XHRzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTU4LVx0aW5vID0gbGUzMl90b19jcHUoZmNfaW5vZGUuZmNfaW5vKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTU5Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRhZywgaW5vLCAwLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTYwLVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDQ5LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNTA6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDUxLVx0XHRcdFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNTktXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA2MDpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19DUkVBVCwgZGFyZy5pbm8sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA2MS1cdFx0XHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA5Mi1cdH1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDkzOlx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzYiwgXHUwMDI2ZGFyZywgaW5vZGUpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTQtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTA4PWludCBleHQ0X2ZjX3JlY29yZF9yZWdpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8sXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTAte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMTE6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTItXHRzdHJ1Y3QgZXh0NF9mY19hbGxvY19yZWdpb24gKnJlZ2lvbjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0Ny0vKiBSZXBsYXkgYWRkIHJhbmdlIHRhZyAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTQ5LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2Mi1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTYzOlx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0FERF9SQU5HRSxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTY0LVx0XHRsZTMyX3RvX2NwdShmY19hZGRfZXguZmNfaW5vKSwgbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjY3PXN0YXRpYyBpbnRcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjY4OmV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNjkte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjc5LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyODA6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfREVMX1JBTkdFLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyODEtXHRcdGxlMzJfdG9fY3B1KGxyYW5nZS5mY19pbm8pLCBjdXIsIHJlbWFpbmluZyk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIzMjg9c3RhdGljIHZvaWQgZXh0NF9mY19zZXRfYml0bWFwc19hbmRfY291bnRlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzI5LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzMwOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzMxLVx0c3RydWN0IGlub2RlICppbm9kZTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4Ni0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzg3OmJvb2wgZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsaylcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg4LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg5LVx0aW50IGk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM5MDpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5MS1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNC0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDA1OnZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0MDYte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDE0PXN0YXRpYyBib29sIGV4dDRfZmNfdmFsdWVfbGVuX2lzdmFsaWQoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU3LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NTg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWxfdCAqam91cm5hbCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU5LVx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZixcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ2My1cdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NjQ6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjUtXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzItb3V0X2VycjpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTczOlx0dHJhY2VfZXh0NF9mY19yZXBsYXlfc2NhbihzYiwgcmV0LCBvZmYpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzQtXHRyZXR1cm4gcmV0O1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTgwLSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODE6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Mi1cdFx0XHRcdGVudW0gcGFzc3R5cGUgcGFzcywgaW50IG9mZiwgdGlkX3QgZXhwZWN0ZWRfdGlkKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTg4LVx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODk6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlID0gXHUwMDI2c2JpLVx1MDAzZXNfZmNfcmVwbGF5X3N0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTAtXHRzdHJ1Y3QgZXh0NF9mY190YWlsIHRhaWw7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTMtXHRcdHN0YXRlLVx1MDAzZWZjX2N1cnJlbnRfcGFzcyA9IFBBU1NfU0NBTjtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk0Olx0XHRyZXR1cm4gZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsLCBiaCwgb2ZmLCBleHBlY3RlZF90aWQpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTUtXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzEtXHRcdGNhc2UgRVhUNF9GQ19UQUdfTElOSzpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjMyOlx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmsoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzMtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNC1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19VTkxJTks6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNTpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzYtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNy1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19BRERfUkFOR0U6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzODpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc2IsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzOS1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQwLVx0XHRjYXNlIEVYVDRfRkNfVEFHX0NSRUFUOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NDE6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfY3JlYXRlKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQyLVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDMtXHRcdGNhc2UgRVhUNF9GQ19UQUdfREVMX1JBTkdFOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NDQ6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlKHNiLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDUtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Ni1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19JTk9ERTpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ3Olx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2lub2RlKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ4LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDktXHRcdGNhc2UgRVhUNF9GQ19UQUdfUEFEOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTA6XHRcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1BBRCwgMCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUxLVx0XHRcdFx0XHQgICAgIHRsLmZjX2xlbiwgMCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTMtXHRcdGNhc2UgRVhUNF9GQ19UQUdfVEFJTDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjU0Olx0XHRcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19UQUlMLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTUtXHRcdFx0XHRcdCAgICAgMCwgdGwuZmNfbGVuLCAwKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY2MS1cdFx0ZGVmYXVsdDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjYyOlx0XHRcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0bC5mY190YWcsIDAsIHRsLmZjX2xlbiwgMCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY2My1cdFx0XHRyZXQgPSAtRUNBTkNFTEVEO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNjczPXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3OS1cdCAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2ODA6XHRqb3VybmFsLVx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY4MS1cdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTM5PXN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiB7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTE0Ny0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxNDg6c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHtcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDktXHRpbnQgZmNfcmVwbGF5X251bV90YWdzO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTYxNjI9ZXh0NF9tYl9uZXdfYmxvY2tzX3NpbXBsZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgKmFyLCBpbnQgKmVycnApXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5My1cdFx0XHRcdGJyZWFrO1xuZnMvZXh0NC9tYmFsbG9jLmM6NjE5NDpcdFx0XHRpZiAoZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc2IsXG5mcy9leHQ0L21iYWxsb2MuYy02MTk1LVx0XHRcdFx0ZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZ3JvdXApICYjNDM7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU2NDUtXHR9XG5mcy9leHQ0L3N1cGVyLmM6NTY0NjpcdGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU2NDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgRmFzdCBDb21taXQgUmVwbGF5IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBgZXh0NF9mY19yZXBsYXlgLCBgZXh0NF9mY19yZXBsYXlfc2NhbmAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAuIERlZmluaXRlbHkgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhhdCB3aG9sZSBsb2dpYy4gTXkgbWFpbiBmb2N1cyBub3cgaXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLgoKSXQgc2VlbXMgdGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2ZpbmRfZXh0ZW50YCB0byB2YWxpZGF0ZSBleHRlbnRzIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXksIHdoaWNoIG1lYW5zIHRoYXQgZnVuY3Rpb25zIGxpa2UgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCBhcmUgZ29pbmcgdG8gYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgYW5kIHNlZSBob3cgdGhlIGV4dGVudCB2YWxpZGF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXBsYXkuCgpBbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQsIGBleHQ0X2V4dF9jaGVja2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgcGF0Y2gsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYy4gSWYgc28sIGl0IG1pZ2h0IGFmZmVjdCBob3cgSSBjYW4gbGV2ZXJhZ2UgaXQgaW4gbXkgZnV6emluZyBzZXR1cC4gTmVlZCB0byBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MTY9ZXh0ZXJuIHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICopO1xuZnMvZXh0NC9leHQ0Lmg6MzkxNzpleHRlcm4gaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzkxOC1leHRlcm4gZXh0NF9sYmxrX3QgZXh0NF9leHRfbmV4dF9hbGxvY2F0ZWRfYmxvY2soc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTM4OD1zdGF0aWMgaW50IGV4dDRfdmFsaWRfZXh0ZW50X2VudHJpZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NTQtXG5mcy9leHQ0L2V4dGVudHMuYzo0NTU6c3RhdGljIGludCBfX2V4dDRfZXh0X2NoZWNrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1Ni1cdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWgsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTE1LVxuZnMvZXh0NC9leHRlbnRzLmM6NTE2OiNkZWZpbmUgZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgcGJsaylcdFx0XHRcXFxuZnMvZXh0NC9leHRlbnRzLmM6NTE3Olx0X19leHQ0X2V4dF9jaGVjayhfX2Z1bmNfXywgX19MSU5FX18sIChpbm9kZSksIChlaCksIChkZXB0aCksIChwYmxrKSwgMClcbmZzL2V4dDQvZXh0ZW50cy5jLTUxOC1cbmZzL2V4dDQvZXh0ZW50cy5jOjUxOTppbnQgZXh0NF9leHRfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMC17XG5mcy9leHQ0L2V4dGVudHMuYzo1MjE6XHRyZXR1cm4gZXh0NF9leHRfY2hlY2soaW5vZGUsIGV4dF9pbm9kZV9oZHIoaW5vZGUpLCBleHRfZGVwdGgoaW5vZGUpLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMi19XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTUxPV9fcmVhZF9leHRlbnRfdHJlZV9ibG9jayhjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTc1LVx0XHRyZXR1cm4gYmg7XG5mcy9leHQ0L2V4dGVudHMuYzo1NzY6XHRlcnIgPSBfX2V4dDRfZXh0X2NoZWNrKGZ1bmN0aW9uLCBsaW5lLCBpbm9kZSwgZXh0X2Jsb2NrX2hkcihiaCksXG5mcy9leHQ0L2V4dGVudHMuYy01NzctXHRcdFx0ICAgICAgIGRlcHRoLCBwYmxrLCBsZTMyX3RvX2NwdShpZHgtXHUwMDNlZWlfYmxvY2spKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MDM9aW50IGV4dDRfZXh0X3ByZWNhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjMwLVx0cGF0aFswXS5wX2hkciA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpO1xuZnMvZXh0NC9leHRlbnRzLmM6NjMxOlx0cmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIHBhdGhbMF0ucF9oZHIsIGRlcHRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYzMi1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9ODg2PWV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtOTEwLVx0XHQgICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkge1xuZnMvZXh0NC9leHRlbnRzLmM6OTExOlx0XHRyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTkxMi1cdFx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0xOTE5PXN0YXRpYyB2b2lkIGV4dDRfZXh0X3RyeV90b19tZXJnZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTE5NDgtICovXG5mcy9leHQ0L2V4dGVudHMuYzoxOTQ5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG5mcy9leHQ0L2V4dGVudHMuYy0xOTUwLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTI4NDQ9aW50IGV4dDRfZXh0X3JlbW92ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yOTc1LVxuZnMvZXh0NC9leHRlbnRzLmM6Mjk3NjpcdFx0aWYgKGV4dDRfZXh0X2NoZWNrKGlub2RlLCBwYXRoWzBdLnBfaGRyLCBkZXB0aCwgMCkpIHtcbmZzL2V4dDQvZXh0ZW50cy5jLTI5NzctXHRcdFx0ZXJyID0gLUVGU0NPUlJVUFRFRDtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00Mjc2PWludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDQzNC1cdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KG1hcC1cdTAwM2VtX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzo0NDM1Olx0ZXJyID0gZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzYmksIGlub2RlLCBcdTAwMjZuZXdleCwgcGF0aCk7XG5mcy9leHQ0L2V4dGVudHMuYy00NDM2LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NTAyLVx0XHRcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSlcbmZzL2V4dDQvaW5vZGUuYzo1NTAzOlx0XHRcdFx0cmV0ID0gZXh0NF9leHRfY2hlY2tfaW5vZGUoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTU1MDQtXHRcdFx0ZWxzZVxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jPTYwMz1pbnQgZXh0NF9pbmRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTY0Ni1cdGRvd25fd3JpdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbmZzL2V4dDQvbWlncmF0ZS5jOjY0NzpcdHJldCA9IGV4dDRfZXh0X2NoZWNrX2lub2RlKGlub2RlKTtcbmZzL2V4dDQvbWlncmF0ZS5jLTY0OC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTEzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZpbGUgU3lzdGVtIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBleHQ0X2V4dF9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEgbWFjcm8gdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGBfX2V4dDRfZXh0X2NoZWNrYC4gVGhlIHBhdGNoIG1lbnRpb25zIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgZXh0NF9maW5kX2V4dGVudGAsIHNvIGl0IHNlZW1zIGxpa2UgYW4gZXh0ZW50LXJlbGF0ZWQgaXNzdWUuIFRoZSBmYWN0IHRoYXQgdGhlIGZhc3QgY29tbWl0IHJlcGxheSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGlzIGludGVyZXN0aW5nLgoKUmlnaHQsIHNvIHRoZSB0cmFjZSBwb2ludHMgdG8gYSBwcm9ibGVtIHNwZWNpZmljIHRvIGZhc3QgY29tbWl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBpbiB0aGUgZGVidWdnaW5nIHRvb2xzLiBMZXQmIzM5O3MgYWRkIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzaG91bGQgaGVscCBwaW5wb2ludCB0aGUgcHJvYmxlbS4KCk5vdywgdGhpcyBjb25maWcuLi4gaXQgbG9va3MgbGlrZSBpdCBpcyBjb250cm9sbGVkIGJ5IGBFWFQ0X0ZTYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgd29uZGVyLCB0aG91Z2gsIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9uIHJlbGF0ZWQganVzdCB0byB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSBpdHNlbGYuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8ga25vdyBpZiB0aGUgZmFzdCBjb21taXQgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGF0IGFsbC4gTGV0JiMzOTtzIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZBU1RfQ09NTUlUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xMzA4LVxuZnMvZXh0NC9leHQ0Lmg6MTMwOTojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcdDB4MDAwMDAwMTAgLyogSm91cm5hbCBmYXN0IGNvbW1pdCAqL1xuZnMvZXh0NC9leHQ0LmgtMTMxMC0jZGVmaW5lIEVYVDRfTU9VTlQyX0RBWF9ORVZFUlx0XHQweDAwMDAwMDIwIC8qIERvIG5vdCBhbGxvdyBEaXJlY3QgQWNjZXNzICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjEyOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2Jocyhcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMTc0LS8qXG5mcy9leHQ0L2V4dDQuaDoyMTc1OiAqIFRoZSByZWFzb24gd2h5IFwmIzM0O0ZBU1RfQ09NTUlUXCYjMzQ7IGlzIGEgY29tcGF0IGZlYXR1cmUgaXMgdGhhdCwgRlMgYmVjb21lc1xuZnMvZXh0NC9leHQ0LmgtMjE3Ni0gKiBpbmNvbXBhdGlibGUgb25seSBpZiBmYXN0IGNvbW1pdCBibG9ja3MgYXJlIHByZXNlbnQgaW4gdGhlIEZTLiBTaW5jZSB3ZVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIxODAtICovXG5mcy9leHQ0L2V4dDQuaDoyMTgxOiNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVFx0XHQweDA0MDBcbmZzL2V4dDQvZXh0NC5oLTIxODItI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NUQUJMRV9JTk9ERVNcdDB4MDgwMFxuLS1cbmZzL2V4dDQvZXh0NC5oPTIyODY9RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzcGFyc2Vfc3VwZXIyLFx0U1BBUlNFX1NVUEVSMilcbmZzL2V4dDQvZXh0NC5oOjIyODc6RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhmYXN0X2NvbW1pdCxcdFx0RkFTVF9DT01NSVQpXG5mcy9leHQ0L2V4dDQuaC0yMjg4LUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3RhYmxlX2lub2RlcyxcdFNUQUJMRV9JTk9ERVMpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0ND1zdGF0aWMgYm9vbCBleHQ0X2ZjX2Rpc2FibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY6XHRyZXR1cm4gKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ3LVx0XHQoRVhUNF9TQihzYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDA5PXN0YXRpYyBpbnQgZXh0NF9mY190cmFja190ZW1wbGF0ZShcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDM5LVx0XHRcdFx0KHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDQwOlx0XHRcdFx0IHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKSA/XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDQxLVx0XHRcdFx0XHUwMDI2c2JpLVx1MDAzZXNfZmNfcVtGQ19RX1NUQUdJTkddIDpcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDU0PXN0YXRpYyBpbnQgX190cmFja19kZW50cnlfdXBkYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ5MC1cdGlmIChzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRlVMTF9DT01NSVRfT05HT0lORyB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ5MTpcdFx0c2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDkyLVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm5vZGUtXHUwMDNlZmNkX2xpc3QsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE1ODY9aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU5NS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxNTk2Olx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTctXHRcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNjczPXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY4MC1cdGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjgxOlx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODItXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMi1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDozOiNpZm5kZWYgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaC01LVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTg4LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cbi0tXG5mcy9leHQ0L2lub2RlLmM9MzQyOT1zdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXHRcdFx0cmV0dXJuIGZhbHNlO1xuZnMvZXh0NC9pbm9kZS5jOjM0Mzg6XHRcdGlmICh0ZXN0X29wdDIoaW5vZGUtXHUwMDNlaV9zYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2lub2RlLmMtMzQzOS1cdFx0XHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX2xpc3QpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cdFx0XHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xuZnMvZXh0NC9uYW1laS5jOjQwMDg6XHRcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTQwMDktXHRcdCAgICAhKEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTg4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTU0LSNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jOjE5NTU6XHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxuZnMvZXh0NC9zdXBlci5jLTE5NTYtXHQgTU9QVF9TRVQgfCBNT1BUXzIgfCBNT1BUX0VYVDRfT05MWX0sXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQzOTY9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDQxNS1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcbmZzL2V4dDQvc3VwZXIuYzo0NDE2Olx0XHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNDQxNy1cdC8qIGRvbiYjMzk7dCBmb3JnZXQgdG8gZW5hYmxlIGpvdXJuYWxfY3N1bSB3aGVuIG1ldGFkYXRhX2NzdW0gaXMgZW5hYmxlZC4gKi9cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDk2ND1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5ODctXG5mcy9leHQ0L3N1cGVyLmM6NDk4ODpcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9zdXBlci5jLTQ5ODktXHRcdCFqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKEVYVDRfU0Ioc2IpLVx1MDAzZXNfam91cm5hbCwgMCwgMCxcbmZzL2V4dDQvc3VwZXIuYzo0OTkwOlx0XHRcdFx0XHQgIEpCRDJfRkVBVFVSRV9JTkNPTVBBVF9GQVNUX0NPTU1JVCkpIHtcbmZzL2V4dDQvc3VwZXIuYy00OTkxLVx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNDg9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNTUtXHRcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xuZnMvZXh0NC9zdXBlci5jOjUwNTY6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTUwNTctXHRcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzQ2PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NTQ0LVx0XHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xuZnMvZXh0NC9zdXBlci5jOjU1NDU6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTU1NDYtXHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0cyBvbiBGYXN0IENvbW1pdCBpbiBleHQ0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZmFzdCBjb21taXQgaW4gZXh0NC4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBlbmFibGVkIHRocm91Z2ggdGhlIGZpbGUgc3lzdGVtIGFuZCBqb3VybmFsIGZlYXR1cmVzOiBgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVGAgYW5kIGBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfRkFTVF9DT01NSVRgLiBJdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZSBhIGRpcmVjdCBgQ09ORklHX0VYVDRfRkFTVF9DT01NSVRgLiBJdCYjMzk7cyBqdXN0IGJ1bmRsZWQgaW50byBgQ09ORklHX0VYVDRfRlNgLiBCdXQgaGFuZyBvbiBhIHNlY29uZCwgaXMgdGhlcmUgYSBzcGVjaWZpYyBgSkJEMl9GQVNUX0NPTU1JVGAgY29uZmlnIG9wdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGVpdGhlciBgZnMvamJkMi9LY29uZmlnYCBvciwgcGVyaGFwcywgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYWx3YXlzIHRoZSBkZXRhaWxzIGluIHRob3NlIGNvbmZpZyBmaWxlcyB0aGF0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSkJEMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXG5mcy9qYmQyL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZnMvamJkMi9LY29uZmlnLTE5LVxuZnMvamJkMi9LY29uZmlnOjIwOmNvbmZpZyBKQkQyX0RFQlVHXG5mcy9qYmQyL0tjb25maWctMjEtXHRib29sIFwmIzM0O0pCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ2hlY2tpbmcgdGhlIEV4dDQgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKgoKQWxyaWdodCwgc28gYENPTkZJR19FWFQ0X0ZTYCBzZWVtcyB0byBiZSB0aGUgb25lIGFic29sdXRlLCBub24tbmVnb3RpYWJsZSBjb25maWcgc2V0dGluZyB3ZSAqbXVzdCogaGF2ZSBpbiBwbGFjZS4gSXQmIzM5O3MgdGhlIGx5bmNocGluLCBubyBkb3VidC4gQnV0IEkmIzM5O20gYWx3YXlzIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBxdWljayBzd2VlcC4gSXQmIzM5O3MgYSBnb29kIGhhYml0IC0gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRseSByZXF1aXJlZCBjb25maWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGJpdGUgdXMgbGF0ZXIuIE5vIGhhcm0gaW4gYSBzZWNvbmQgbG9vay4gSnVzdCBtYWtpbmcgc3VyZSB3ZSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nIGNydWNpYWwgZHVyaW5nIG91ciBpbml0aWFsIHBhc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy0zNC1cbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbmZzL2V4dDQvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTY3LVxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXG5mcy9leHQ0L0tjb25maWctNjktXHRib29sIFwmIzM0O0V4dDQgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNzYtXG5mcy9leHQ0L0tjb25maWc6Nzc6Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcbmZzL2V4dDQvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBleHQ0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVYVDQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBFWFQ0IHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSBsaW5lIG9mIHRoaW5raW5nLiBJdCBsb29rcyBsaWtlIGBFWFQ0X0ZTYCBpcyB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtIHRvIGZvY3VzIG9uLCB3aGljaCBpcyBhIGdpdmVuLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBhZGRlZCB3aXRoaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIGNoZWNrIHNwZWNpZmljYWxseSBhY3RpdmF0ZXMgb25seSB3aGVuIGBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19tb3VudF9zdGF0ZSAmYW1wOyBFWFQ0X0ZDX1JFUExBWWAgaXMgdHJ1ZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MgaGVyZS4KCkZhc3QgY29tbWl0IHJlcGxheSBpdHNlbGYgaXMgdHJpZ2dlcmVkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50LCBidXQgb25seSBpZiB0aGVyZSBhcmUgZmFzdCBjb21taXQgYmxvY2tzIHRoYXQgbmVlZCB0byBiZSByZXBsYXllZC4gU28gdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgcmVwbGF5IHByb2Nlc3MgaXMgZGVmaW5pdGVseSBgZXh0NF9mY19yZXBsYXlgLiBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBgZXh0NF9leHRfY2hlY2tfaW5vZGVgIG9yIGl0cyBtYWNybyBleHBhbnNpb24gYF9fZXh0NF9leHRfY2hlY2tgIGFzIHBvdGVudGlhbCBrZXkgc3ltYm9scy4gQnV0IEkgbmVlZCB0byBuYXJyb3cgdGhlIGZvY3VzIHRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nICpkdXJpbmcqIGZhc3QgY29tbWl0IHJlcGxheSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgpJIHN0YXJ0ZWQgYnkgbGlzdGluZyBgZXh0NF9mY19yZXBsYXlgLCBgX19leHQ0X2V4dF9jaGVja2AsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAgZm9yIHRoZSBmb2N1cyBzeW1ib2xzLiBIb3dldmVyLCBJIHJlYWxpemVkIGBfX2V4dDRfZXh0X2NoZWNrYCBpcyB0b28gZ2VuZXJpYy4gVGhlIHBhdGNoIGlzbiYjMzk7dCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoYXQgZnVuY3Rpb24gaW4gaXNvbGF0aW9uLCBidXQgaG93IGl0JiMzOTtzIHVzZWQgKndpdGhpbiogdGhlIGZhc3QgY29tbWl0IHJlcGxheSBjb250ZXh0LiBGb2N1c2luZyBvbiByZXBsYXkgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgaXMgZ29pbmcgdG8gYmUgbW9yZSBkaXJlY3QuCgpTbywgSSByZWZpbmVkIHRoYXQgbGlzdCB0byBpbmNsdWRlIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYC4gTm93LCBldmVuIHRob3VnaCBgZXh0NF9maW5kX2V4dGVudGAgaXMgY2FsbGVkIGZyb20gdmFyaW91cyBwbGFjZXMsIGl0IGlzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiBmYXN0IGNvbW1pdCByZXBsYXkgYnkgYGV4dDRfZXh0X21hcF9ibG9ja3NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBleHQ0X2ZpbmRfZXh0ZW50YCBpcyBjYWxsZWQgKnNwZWNpZmljYWxseSogZHVyaW5nIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgc2VxdWVuY2UuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2ZpbmRfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Njg0PWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTc0MS0gKiBUaGUgYml0IHBvc2l0aW9uIG9mIHRoZXNlIGZsYWdzIG11c3Qgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlXG5mcy9leHQ0L2V4dDQuaDo3NDI6ICogRVhUNF9HRVRfQkxPQ0tTXyouICBUaGV5IGFyZSB1c2VkIGJ5IGV4dDRfZmluZF9leHRlbnQoKSxcbmZzL2V4dDQvZXh0NC5oLTc0My0gKiByZWFkX2V4dGVudF90cmVlX2Jsb2NrKCksIGV4dDRfc3BsaXRfZXh0ZW50X2F0KCksXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzkwOT1leHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZXh0X2luc2VydF9leHRlbnQoXG4tLVxuZnMvZXh0NC9leHQ0LmgtMzkxMi1cdFx0XHRcdHN0cnVjdCBleHQ0X2V4dGVudCAqbmV3ZXh0LCBpbnQgZ2JfZmxhZ3MpO1xuZnMvZXh0NC9leHQ0Lmg6MzkxMzpleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxuZnMvZXh0NC9leHQ0LmgtMzkxNC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKixcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTM5MT1zdGF0aWMgdm9pZCB0ZXN0X3NwbGl0X2NvbnZlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDA3LVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzo0MDg6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX0RBVEFfTEJMSywgTlVMTCwgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDA5LVx0ZXggPSBwYXRoLVx1MDAzZXBfZXh0O1xuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDMzLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzo0MzQ6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX0RBVEFfTEJMSywgTlVMTCwgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDM1LVx0ZXggPSBwYXRoLVx1MDAzZXBfZXh0O1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTg4NT1zdHJ1Y3QgZXh0NF9leHRfcGF0aCAqXG5mcy9leHQ0L2V4dGVudHMuYzo4ODY6ZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcbmZzL2V4dDQvZXh0ZW50cy5jLTg4Ny1cdFx0IHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtODk0LVxuZnMvZXh0NC9leHRlbnRzLmM6ODk1Olx0S1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoZXh0NF9maW5kX2V4dGVudCwgaW5vZGUsIGJsb2NrLCBwYXRoLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy04OTYtXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MTQwNz1leHQ0X2V4dF9jcmVhdGVfbmV3X2xlYWYoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0xNDM1LVx0XHQvKiByZWZpbGwgcGF0aCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6MTQzNjpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBwYXRoLCBnYl9mbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy0xNDM3LVx0XHRyZXR1cm4gcGF0aDtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0xNDQ1LVx0LyogcmVmaWxsIHBhdGggKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjE0NDY6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIHBhdGgsIGdiX2ZsYWdzKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTE0NDctXHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTE5OTk9ZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIwMzQtXHRcdCAqIHJpZ2h0IGZyb20gZXgsIG9yIGZyb20gdGhlIGxlZnQgb2YgZXguIFRoaXMgaXMgYmVjYXVzZVxuZnMvZXh0NC9leHRlbnRzLmM6MjAzNTpcdFx0ICogZXh0NF9maW5kX2V4dGVudCgpIGNhbiByZXR1cm4gZWl0aGVyIGV4dGVudCBvbiB0aGVcbmZzL2V4dDQvZXh0ZW50cy5jLTIwMzYtXHRcdCAqIGxlZnQsIG9yIG9uIHRoZSByaWdodCBmcm9tIHRoZSBzZWFyY2hlZCBwb3NpdGlvbi4gVGhpc1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIxMTYtXHRcdGV4dF9kZWJ1Zyhpbm9kZSwgXCYjMzQ7bmV4dCBsZWFmIGJsb2NrIC0gJXVcXG5cJiMzNDssIG5leHQpO1xuZnMvZXh0NC9leHRlbnRzLmM6MjExNzpcdFx0bnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBuZXh0LCBOVUxMLCBnYl9mbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy0yMTE4LVx0XHRpZiAoSVNfRVJSKG5wYXRoKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTI4NDQ9aW50IGV4dDRfZXh0X3JlbW92ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yODgzLVx0XHQvKiBmaW5kIGV4dGVudCBmb3Igb3IgY2xvc2VzdCBleHRlbnQgdG8gdGhpcyBibG9jayAqL1xuZnMvZXh0NC9leHRlbnRzLmM6Mjg4NDpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVuZCwgTlVMTCwgZmxhZ3MpO1xuZnMvZXh0NC9leHRlbnRzLmMtMjg4NS1cdFx0aWYgKElTX0VSUihwYXRoKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTMxOTg9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudF9hdChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTMyNjktXHQgKiBHZXQgYSBuZXcgcGF0aCB0byB0cnkgdG8gemVyb291dCBvciBmaXggdGhlIGV4dGVudCBsZW5ndGguXG5mcy9leHQ0L2V4dGVudHMuYzozMjcwOlx0ICogVXNpbmcgRVhUNF9FWF9OT0ZBSUwgZ3VhcmFudGVlcyB0aGF0IGV4dDRfZmluZF9leHRlbnQoKVxuZnMvZXh0NC9leHRlbnRzLmMtMzI3MS1cdCAqIHdpbGwgbm90IHJldHVybiAtRU5PTUVNLCBvdGhlcndpc2UgLUVOT01FTSB3aWxsIGNhdXNlIGFcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zMjc1LVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzozMjc2Olx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBOVUxMLCBmbGFncyB8IEVYVDRfRVhfTk9GQUlMKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTMyNzctXHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzQxNj1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzQ1MS1cdFx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzozNDUyOlx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgcGF0aCwgZmxhZ3MpO1xuZnMvZXh0NC9leHRlbnRzLmMtMzQ1My1cdFx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zNTAzLVxuZnMvZXh0NC9leHRlbnRzLmM6MzUwNDpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXHUwMDNlbV9sYmxrLCBOVUxMLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy0zNTA1LVx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zODIzPXN0YXRpYyBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9zcGxpdF9jb252ZXJ0X2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zODY4LWNvbnZlcnQ6XG5mcy9leHQ0L2V4dGVudHMuYzozODY5Olx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIHBhdGgsIGZsYWdzKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM4NzAtXHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTM5NDM9Y29udmVydF9pbml0aWFsaXplZF9leHRlbnQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zOTgwLVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzozOTgxOlx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIHBhdGgsIGZsYWdzKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM5ODItXHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQyNzY9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MjkyLVx0LyogZmluZCBleHRlbnQgZm9yIHRoaXMgYmxvY2sgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjQyOTM6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgTlVMTCwgZmxhZ3MpO1xuZnMvZXh0NC9leHRlbnRzLmMtNDI5NC1cdGlmIChJU19FUlIocGF0aCkpIHtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MzAzLVx0ICogdGhpcyBzaXR1YXRpb24gaXMgcG9zc2libGUsIHRob3VnaCwgX2R1cmluZ18gdHJlZSBtb2RpZmljYXRpb247XG5mcy9leHQ0L2V4dGVudHMuYzo0MzA0Olx0ICogdGhpcyBpcyB3aHkgYXNzZXJ0IGNhbiYjMzk7dCBiZSBwdXQgaW4gZXh0NF9maW5kX2V4dGVudCgpXG5mcy9leHQ0L2V4dGVudHMuYy00MzA1LVx0ICovXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDM4OS1cdCAqIElmIHdlIGFyZSBkb2luZyBiaWdhbGxvYywgY2hlY2sgdG8gc2VlIGlmIHRoZSBleHRlbnQgcmV0dXJuZWRcbmZzL2V4dDQvZXh0ZW50cy5jOjQzOTA6XHQgKiBieSBleHQ0X2ZpbmRfZXh0ZW50KCkgaW1wbGllcyBhIGNsdXN0ZXIgd2UgY2FuIHVzZS5cbmZzL2V4dDQvZXh0ZW50cy5jLTQzOTEtXHQgKi9cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MzkxPWV4dDRfZXh0X3NoaWZ0X2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01NDAxLVx0LyogTGV0IHBhdGggcG9pbnQgdG8gdGhlIGxhc3QgZXh0ZW50ICovXG5mcy9leHQ0L2V4dGVudHMuYzo1NDAyOlx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9NQVhfQkxPQ0tTIC0gMSwgTlVMTCxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0MDMtXHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTU0MTktXHRpZiAoU0hJRlQgPT0gU0hJRlRfTEVGVCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NTQyMDpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0IC0gMSwgcGF0aCxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0MjEtXHRcdFx0XHRcdEVYVDRfRVhfTk9DQUNIRSk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTQ2OC1cdHdoaWxlIChpdGVyYXRvciBcdTAwMjZcdTAwMjYgc3RhcnQgXHUwMDNjPSBzdG9wKSB7XG5mcy9leHQ0L2V4dGVudHMuYzo1NDY5Olx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgKml0ZXJhdG9yLCBwYXRoLFxuZnMvZXh0NC9leHRlbnRzLmMtNTQ3MC1cdFx0XHRcdFx0RVhUNF9FWF9OT0NBQ0hFKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01NjM1PXN0YXRpYyBpbnQgZXh0NF9pbnNlcnRfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTY5Ni1cbmZzL2V4dDQvZXh0ZW50cy5jOjU2OTc6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgc3RhcnRfbGJsaywgTlVMTCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy01Njk4LVx0aWYgKElTX0VSUihwYXRoKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU3NzI9ZXh0NF9zd2FwX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTc5My1cbmZzL2V4dDQvZXh0ZW50cy5jOjU3OTQ6XHRcdHBhdGgxID0gZXh0NF9maW5kX2V4dGVudChpbm9kZTEsIGxibGsxLCBwYXRoMSwgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTU3OTUtXHRcdGlmIChJU19FUlIocGF0aDEpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTc5OC1cdFx0fVxuZnMvZXh0NC9leHRlbnRzLmM6NTc5OTpcdFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlMiwgbGJsazIsIHBhdGgyLCBFWFQ0X0VYX05PQ0FDSEUpO1xuZnMvZXh0NC9leHRlbnRzLmMtNTgwMC1cdFx0aWYgKElTX0VSUihwYXRoMikpIHtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01OTU3PWludCBleHQ0X2NsdV9tYXBwZWQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGNsdSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01OTc0LVx0Lyogc2VhcmNoIGZvciB0aGUgZXh0ZW50IGNsb3Nlc3QgdG8gdGhlIGZpcnN0IGJsb2NrIGluIHRoZSBjbHVzdGVyICovXG5mcy9leHQ0L2V4dGVudHMuYzo1OTc1Olx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVDRfQzJCKHNiaSwgbGNsdSksIE5VTEwsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtNTk3Ni1cdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTk4My1cdCAqIHRob3VnaCwgX2R1cmluZ18gdHJlZSBtb2RpZmljYXRpb24sIGFuZCBpdCYjMzk7cyB3aHkgYW4gYXNzZXJ0IGNhbiYjMzk7dFxuZnMvZXh0NC9leHRlbnRzLmM6NTk4NDpcdCAqIGJlIHB1dCBpbiBleHQ0X2ZpbmRfZXh0ZW50KCkuXG5mcy9leHQ0L2V4dGVudHMuYy01OTg1LVx0ICovXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjAzNj1pbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MDQyLVxuZnMvZXh0NC9leHRlbnRzLmM6NjA0MzpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgTlVMTCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy02MDQ0LVx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MDYyLVxuZnMvZXh0NC9leHRlbnRzLmM6NjA2MzpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0LCBwYXRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYwNjQtXHRcdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjA3OS1cbmZzL2V4dDQvZXh0ZW50cy5jOjYwODA6XHRcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0LCBwYXRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYwODEtXHRcdFx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MTAxPXZvaWQgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBlbmQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjEwNy1cdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NjEwODpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgTlVMTCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy02MTA5LVx0XHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTYxNDk9aW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYxNTgtXHQvKiBEZXRlcm1pbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBmaXJzdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NjE1OTpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXG5mcy9leHQ0L2V4dGVudHMuYy02MTYwLVx0XHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYxOTEtXHRcdGdvdG8gb3V0O1xuZnMvZXh0NC9leHRlbnRzLmM6NjE5MjpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtNjE5My1cdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjE5Ni1cdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NjE5NzpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy02MTk4LVx0XHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYyMDktXG5mcy9leHQ0L2V4dGVudHMuYzo2MjEwOlx0XHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtNjIxMS1cdFx0aWYgKElTX0VSUihwYXRoMikpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjIzNj1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjQ3LVx0LyogRGV0ZXJtaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgZmlyc3QgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjYyNDg6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxuZnMvZXh0NC9leHRlbnRzLmMtNjI0OS1cdFx0XHRcdFx0RVhUNF9FWF9OT0NBQ0hFKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjY0LVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG5mcy9leHQ0L2V4dGVudHMuYzo2MjY1Olx0XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNjYtXHRcdFx0aWYgKCFJU19FUlIocGF0aCkpIHtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MzEzPUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KTtcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMTQ6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZmluZF9leHRlbnQpO1xuZnMvZXh0NC9leHRlbnRzLmMtNjMxNS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9pc3N1ZV96ZXJvb3V0KTtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9NjczPXN0YXRpYyB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudF9leHRfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNjgyLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjY4MzpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBlcy1cdTAwM2Vlc19sYmxrLCBOVUxMLCBFWFQ0X0VYX05PQ0FDSEUpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTY4NC1cdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE5Ny1cdFx0XHQvKiBSYW5nZSBpcyBub3QgbWFwcGVkICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjE5ODpcdFx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTk5LVx0XHRcdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIzMjg9c3RhdGljIHZvaWQgZXh0NF9mY19zZXRfYml0bWFwc19hbmRfY291bnRlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM2MC1cdFx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM2MTpcdFx0XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzYyLVx0XHRcdFx0aWYgKCFJU19FUlIocGF0aCkpIHtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYz0yMT1zdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTM2LVx0ZG93bl93cml0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pO1xuZnMvZXh0NC9taWdyYXRlLmM6Mzc6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbGItXHUwMDNlZmlyc3RfYmxvY2ssIE5VTEwsIDApO1xuZnMvZXh0NC9taWdyYXRlLmMtMzgtXHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4tLVxuZnMvZXh0NC92ZXJpdHkuYz0yNzE9c3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcl9sb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMjkzLVxuZnMvZXh0NC92ZXJpdHkuYzoyOTQ6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLCAwKTtcbmZzL2V4dDQvdmVyaXR5LmMtMjk1LVx0aWYgKElTX0VSUihwYXRoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBleHQ0X2ZpbmRfZXh0ZW50YCBpcyBhIGtleSBmdW5jdGlvbiwgaGVhdmlseSBpbnZvbHZlZCBpbiB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgaXRzIGRpcmVjdCBjYWxscyBmcm9tIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgIGFuZCBgZXh0NF9mY19zZXRfYml0bWFwc19hbmRfY291bnRlcnNgLiBCdXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgc3VjaCBhcyBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgLiBUaGF0IG1ha2VzIGl0IGNsZWFyIHRoYXQgY29uY2VudHJhdGluZyBvbiB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGlzIHRoZSBvcHRpbWFsIHN0cmF0ZWd5IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KClNvLCBJJiMzOTttIGdvaW5nIHRvIGxpc3Qgb3V0IHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246IGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2VgLCBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZmFzdCBjb21taXQgcmVwbGF5IHRoYXQgSSBuZWVkIHRvIGFuYWx5emUuCgpIbW0sIGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCBsb29rcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkzND1leHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oOjM5MzU6ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxuZnMvZXh0NC9leHQ0LmgtMzkzNi1cdFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU5NTc9aW50IGV4dDRfY2x1X21hcHBlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsY2x1KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYwMzUtICovXG5mcy9leHQ0L2V4dGVudHMuYzo2MDM2OmludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxuZnMvZXh0NC9leHRlbnRzLmMtNjAzNy1cdFx0XHQgICAgICBpbnQgbGVuLCBpbnQgdW53cml0dGVuLCBleHQ0X2ZzYmxrX3QgcGJsaylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjIyLVx0XHRcdCAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyMjM6XHRcdFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChpbm9kZSwgY3VyLCBtYXAubV9sZW4sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIyNC1cdFx0XHRcdFx0ZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI0NC1cdFx0XHRleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpLCBtYXAubV9wYmxrKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjQ1Olx0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KGlub2RlLCBjdXIsIG1hcC5tX2xlbixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjQ2LVx0XHRcdFx0XHRleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpLCBtYXAubV9wYmxrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1ODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEV4dDQgUmVwbGF5IEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAgaXNuJiMzOTt0IHN0YXRpYywgd2hpY2ggaXMgYXMgSSBleHBlY3RlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhhdCBzYW1lIGNvbnRleHQuICBMZXQmIzM5O3Mgc2VlLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYCBhcmUgKmFsc28qIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIEdvb2QsIGdvb2QuIE5vdywgSSBzaG91bGQgZm9jdXMgb24gYGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGVgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2h5IHRoYXQmIzM5O3MgdGhlIGNhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW4gdGhlIHJlY292ZXJ5IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zOTMwPWV4dGVybiBpbnQgZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHQ0LmgtMzkzMi1cdFx0XHRcdCAgICAgICBpbnQgcmV2b2tlX2NyZWQpO1xuZnMvZXh0NC9leHQ0Lmg6MzkzMzpleHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XG5mcy9leHQ0L2V4dDQuaC0zOTM0LWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTYwMzY9aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjEwMC0vKiBUcnkgdG8gc2hyaW5rIHRoZSBleHRlbnQgdHJlZSAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NjEwMTp2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKVxuZnMvZXh0NC9leHRlbnRzLmMtNjEwMi17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI1Mi1cdFx0ICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI1MzpcdFx0ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZShpbm9kZSwgc3RhcnQgJiM0MzsgbGVuKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjU0LW5leHQ6XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNTctXHR9XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI1ODpcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2VcdTAwM2VcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjU5LVx0XHRcdFx0XHRzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI2OD1leHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMxOS1cdFx0Z290byBvdXQ7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMyMDpcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMyMS1cdFx0aV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgRXh0ZW50IFZhbGlkYXRpb24qKgoKT2theSwgdGhlc2Ugc3ltYm9scyBhcmUgYWxsIHZlcnkgcmVsZXZhbnQgdG8gdGhlIGNvcmUgb2YgZXh0NCYjMzk7cyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gaW50ZWdyYXRlIGEgZmV3IG1vcmUgaW50byBteSBhbmFseXNpczogYGV4dDRfZmNfcmVwbGF5YCwgYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYC4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRVhUNF9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgbW9kaWZpY2F0aW9uIGxpZXMgd2l0aGluIHRoZSBgZXh0NF9maW5kX2V4dGVudGAgZnVuY3Rpb24uIFRoaXMgdmFsaWRhdGlvbiBjaGVjayBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXksIGFzIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBFWFQ0X0ZDX1JFUExBWWAgZmxhZy4gRmFzdCBjb21taXQgcmVwbGF5LCBiZWluZyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBvZiBleHQ0LCBpcyB0cmlnZ2VyZWQgdXBvbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gY29uZmlndXJlZCB3aXRoIGZhc3QgY29tbWl0IGJsb2Nrcy4gRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgYW4gYWRkaXRpb25hbCBsYXllciBvZiBleHRlbnQgdmFsaWRhdGlvbiBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSByZXBsYXkgcHJvY2Vzcy4gSSBzaG91bGQgYWxzbyB2ZXJpZnkgdGhlIHVzZSBvZiBgZXh0NF9leHRfY2xlYXJfYmJgLCBhcyB0aGlzIG1pZ2h0IGJlIGtleSB0byB2YWxpZGF0aW5nIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9jbGVhcl9iYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MzU9ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxuZnMvZXh0NC9leHQ0LmgtMzkzNi1cdFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xuZnMvZXh0NC9leHQ0Lmg6MzkzNzpleHRlcm4gaW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzkzOC1cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MTQ5PWludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjM1LVxuZnMvZXh0NC9leHRlbnRzLmM6NjIzNjppbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0ZW50cy5jLTYyMzcte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xOTQ0PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2Mi1cdGlmICghSVNfRVJSKGlub2RlKSkge1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NjM6XHRcdGV4dDRfZXh0X2NsZWFyX2JiKGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTY0LVx0XHRpcHV0KGlub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTIKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBoZWFkLiBXZSYjMzk7dmUgZ290IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVpbmcgaW50cm9kdWNlZCB0byBgZXh0NF9maW5kX2V4dGVudGAuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYW4gYGV4dDRfZXh0X2NoZWNrYCB2YWxpZGF0aW9uLCBhbmQgdGhpcyBpc24mIzM5O3QganVzdCBhbnkgY2hlY2s7IGl0JiMzOTtzICpzcGVjaWZpY2FsbHkqIGludGVuZGVkIHRvIGJlIHJ1biBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGF0IG5hcnJvd3Mgb3VyIGZvY3VzIHNpZ25pZmljYW50bHkuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIG5ldyBjaGVjayB3aWxsIGV4ZWN1dGUgb25seSB3aGVuIGBFWFQ0X0ZDX1JFUExBWWAgaXMgc2V0IGluIHRoZSBtb3VudCBzdGF0ZS4gVGhhdCYjMzk7cyBvdXIga2V5IHRyaWdnZXIuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGFuIGV4dDQgZmlsZXN5c3RlbSB3aXRoIGZhc3QgY29tbWl0IGJsb2NrcywgYmVpbmcgbW91bnRlZCBhbmQgcmVwbGF5ZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhvc2Ugc3ltYm9scyB3ZSBuZWVkIHRvIHJlYWxseSBob25lIGluIG9uLiBXZSYjMzk7dmUgZ290IHRvIGNvbnNpZGVyIGBleHQ0X2ZjX3JlcGxheWAsIHRoYXQmIzM5O3Mgb2J2aW91cy4gQnV0IHdlIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhlIGV4dGVudCByZXBsYXlpbmcgcHJvY2VzcyB3aWxsIGltcGFjdCB0aGluZ3M6IGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCwgYGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGVgLCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYW5kIGZpbmFsbHksIGRvbiYjMzk7dCBmb3JnZXQgYGV4dDRfZXh0X2NsZWFyX2JiYCB3aGljaCBpc24mIzM5O3Qgc3RhdGljLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB0aGF0IGZhc3QgY29tbWl0IHJlcGxheS4KClNvLCBgRVhUNF9GU2AgaXMgb2J2aW91c2x5IHRoZSBiYXNlIGNvbmZpZyBoZXJlLCBidXQgaXQmIzM5O3MgdGhlIGBFWFQ0X0ZDX1JFUExBWWAgdGhhdCB3ZSByZWFsbHkgbmVlZCB0byBjYXJlIGFib3V0LgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfY2xlYXJfYmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfY2xlYXJfYmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNWExZGRlZjA2ZWFhOGIwMWUwOGJmZTg3NzQyMDA2ZDY2MzczM2QxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTE6MDQ6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDE1OTcyNDEwZDQ2MDUuLmI5NWVhZmIwZDVjYWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC05MDUsNiAmIzQzOzkwNSwxMyBAQCBleHQ0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGJsb2NrLAogCQlyZXQgPSAtRUZTQ09SUlVQVEVEOwogCQlnb3RvIGVycjsKIAl9CiYjNDM7CS8qIGV4dDRfaWdldCgpIHNraXBzIGV4dGVudCB2YWxpZGF0aW9uIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkuICovCiYjNDM7CWlmICh1bmxpa2VseSgoRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbW91bnRfc3RhdGUgJmFtcDsgRVhUNF9GQ19SRVBMQVkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7CiYjNDM7CQlyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCAwKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KIAogCWlmIChwYXRoKSB7CiAJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjAKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEV4dDQgRXh0ZW50IFZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGZzL2V4dDQvZXh0ZW50cy5jYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIHdpdGhpbiBgZXh0NF9maW5kX2V4dGVudGAgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYGV4dDRfZXh0X2NoZWNrYC4gVGhlIGNvZGUgc25pcHBldCBtYWtlcyBpdCBjbGVhcjsgd2UmIzM5O3JlIHZhbGlkYXRpbmcgZXh0ZW50IGhlYWRlcnMuCgpUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYXR0ZW1wdGluZyB0byBwcm9jZXNzIGNvcnJ1cHRlZCBleHRlbnRzIGR1cmluZyByZXBsYXksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gQ29ycnVwdGVkIGV4dGVudHMgYXJlIGEga25vd24gdmVjdG9yIGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBpc3N1ZXMg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyB2YWxpZGF0aW9uIGlzIGEgcG9zaXRpdmUgY2hhbmdlLCBsaWtlbHkgdG8gaW1wcm92ZSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LgoKVGhlIGNvcmUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYSBuZXcgcmlzayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIEkmIzM5O3ZlIGdvdCB0byBiZSB0aG9yb3VnaCBoZXJlLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCYjMzk7cyBsb2dpYyBpcyB0aGF0IGl0ICp2YWxpZGF0ZXMqIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBleHRlbnQgaGVhZGVyLCBiZWZvcmUgdGhleSYjMzk7cmUgYWN0ZWQgdXBvbi4gSXQmIzM5O3MgKm5vdCogY3JlYXRpbmcgbmV3IHN0cnVjdHVyZXMgb3IgY2hhbmdpbmcgZXhpc3RpbmcgbG9naWMgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIHBvdGVudGlhbCByZWFkIG9yIHdyaXRlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBraW5kIG9mIGJ1ZyBpcyBhIGRpc3RpbmN0IHdvcnJ5LCBidXQgaGVyZSBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgY29uY2Vybi4KClNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGFkZHMgYSAqY2hlY2sqIG9uIGV4aXN0aW5nIGRhdGEsIG5vdCBhICpzb3VyY2UqIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgdG9vbCBmb3IgZGV0ZWN0aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB3aGljaCBpcyB0aGUgcHJpbWFyeSBpc3N1ZSBoZXJlLCBhbmQgaXQmIzM5O2xsIGNhdGNoIGFueSBwcm9ibGVtcy4gV2UgZG9uJiMzOTt0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgb25lLiBUaGlzIHBhdGNoIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MDIuMDIxMDkxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDE5NDIyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leFwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzXCIsXG4gICAgXCJleHQ0X2V4dF9jbGVhcl9iYlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGV4dDRfZmluZF9leHRlbnRgIGJ5IGFkZGluZyBhbiBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZXhlY3V0ZWQgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSAod2hlbiBgRVhUNF9GQ19SRVBMQVlgIGlzIHNldCBpbiB0aGUgbW91bnQgc3RhdGUpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgd2hlbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBmYXN0IGNvbW1pdCBibG9ja3MsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDowMi4wMjEwOTY4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0MDUwNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTVhMWRkZWYwNmVhYThiMDFlMDhiZmU4Nzc0MjAwNmQ2NjM3MzNkMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTowNDowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuaW5kZXggMTU5NzI0MTBkNDYwNS4uYjk1ZWFmYjBkNWNhZCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuQEAgLTkwNSw2ICs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcXG4gXFx0XFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4rXFx0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkge1xcbitcXHRcXHRyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCAwKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChwYXRoKSB7XFxuIFxcdFxcdGV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MDIuNDQ2MDAyMzk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjI1MjM4NDE0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmNfcmVwbGF5XCIsXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4XCIsXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlXCIsXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgICBcImV4dDRfZXh0X2NsZWFyX2JiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTVhMWRkZWYwNmVhYThiMDFlMDhiZmU4Nzc0MjAwNmQ2NjM3MzNkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDExOjA0OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xuaW5kZXggMTU5NzI0MTBkNDYwNS4uYjk1ZWFmYjBkNWNhZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXG4rKysgYi9mcy9leHQ0L2V4dGVudHMuY1xuQEAgLTkwNSw2ICs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcbiBcdFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4rXHQvKiBleHQ0X2lnZXQoKSBza2lwcyBleHRlbnQgdmFsaWRhdGlvbiBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiAqL1xuK1x0aWYgKHVubGlrZWx5KChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHtcbitcdFx0cmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgMCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRpZiAocGF0aCkge1xuIFx0XHRleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDowMi40NDYwMDQxMjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTYxNjYyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NF9maW5kX2V4dGVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgZXh0NF9maW5kX2V4dGVudGAgZnVuY3Rpb24uIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgaXQncyBxdWl0ZSBzcGVjaWZpYy4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGFuIGVkZ2UgY2FzZSByZWxhdGVkIHRvIGZhc3QgY29tbWl0IHJlcGxheSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS5cblxuVGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBtb3VudCBzdGF0ZSBpbmNsdWRlcyBgRVhUNF9GQ19SRVBMQVlgIGFuZCBpZiB0aGUgaW5vZGUgdXRpbGl6ZXMgZXh0ZW50cyAoYEVYVDRfSU5PREVfRVhURU5UU2ApLiBJZiBib3RoIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgdHJpZ2dlcnMgYSBjYWxsIHRvIGBleHQ0X2V4dF9jaGVja2Agd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHNvbWUgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIHRoaXMgZmFzdCBjb21taXQgcmVwbGF5LiBUaGUgYGV4dDRfaWdldCgpYCBmdW5jdGlvbiBhbHJlYWR5IHNraXBzIGV4dGVudCB2YWxpZGF0aW9uIGZvciBmYXN0IGNvbW1pdCwgc28gdGhpcyBpcyB0YXJnZXRlZCBhdCBzb21lIGRlZXBlciBpbnRlZ3JpdHkgY2hlY2ssIGl0IHdvdWxkIHNlZW0uIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgb3IgZXJyb3IgY29uZGl0aW9uIHRoYXQgbmVlZHMgdG8gYmUgY2F1Z2h0IGR1cmluZyB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3Iga2VybmVsIHBhcmFtZXRlcnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgb3IgYWZmZWN0IHRoaXMgYEVYVDRfRkNfUkVQTEFZYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBleHQ0LiBJJ2xsIG5lZWQgdG8gZGlnIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgZmFzdCBjb21taXQgcmVwbGF5IG1vZGUgd2l0aGluIGV4dDQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgYWRkZWQgZXh0ZW50IGNoZWNrLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGBFWFQ0X0ZDX1JFUExBWWAgc2hvdWxkIGJlIG15IG5leHQgbW92ZSwganVzdCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgYW5kIGhvdyB0aGlzIGZsYWcgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCB3aWxsIGhlbHAgbWUgY29ubmVjdCB0aGUgZG90cyBiZXR0ZXIgYW5kIGRldGVybWluZSB3aGF0IHBvdGVudGlhbCBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIG92ZXJhbGwgZmlsZXN5c3RlbSBiZWhhdmlvciwgZXNwZWNpYWxseSBkdXJpbmcgcmVjb3Zlcnkgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MDcuNDA3NjcwNDM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTIzMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYVDRfRkNfUkVQTEFZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvYmFsbG9jLmM9Mzk5PXN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9ibG9ja19iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvYmFsbG9jLmMtNDA2LVxcbmZzL2V4dDQvYmFsbG9jLmM6NDA3OlxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvYmFsbG9jLmMtNDA4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEyMzctI2RlZmluZVxcdEVYVDRfT1JQSEFOX0ZTXFx0XFx0XFx0MHgwMDA0XFx0LyogT3JwaGFucyBiZWluZyByZWNvdmVyZWQgKi9cXG5mcy9leHQ0L2V4dDQuaDoxMjM4OiNkZWZpbmUgRVhUNF9GQ19SRVBMQVlcXHRcXHRcXHQweDAwMjBcXHQvKiBGYXN0IGNvbW1pdCByZXBsYXkgb25nb2luZyAqL1xcbmZzL2V4dDQvZXh0NC5oLTEyMzktXFxuLS1cXG5mcy9leHQ0L2V4dDRfamJkMi5jPTkyPWhhbmRsZV90ICpfX2V4dDRfam91cm5hbF9zdGFydF9zYihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYy0xMTEtXFx0am91cm5hbCA9IEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2pvdXJuYWw7XFxuZnMvZXh0NC9leHQ0X2piZDIuYzoxMTI6XFx0aWYgKCFqb3VybmFsIHx8IChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSlcXG5mcy9leHQ0L2V4dDRfamJkMi5jLTExMy1cXHRcXHRyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz04ODY9ZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTkwOC1cXHQvKiBleHQ0X2lnZXQoKSBza2lwcyBleHRlbnQgdmFsaWRhdGlvbiBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjkwOTpcXHRpZiAodW5saWtlbHkoKEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9leHRlbnRzLmMtOTEwLVxcdFxcdCAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MzYzPXZvaWQgZXh0NF9lc19maW5kX2V4dGVudF9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTM2OS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MzcwOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0zNzEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTQxNz1ib29sIGV4dDRfZXNfc2Nhbl9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTQyMi1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6NDIzOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy00MjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTQ2Mz1ib29sIGV4dDRfZXNfc2Nhbl9jbHUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy00NjgtXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjQ2OTpcXHRpZiAoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNDcwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz05MDU9dm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MTgtXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjkxOTpcXHRpZiAoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtOTIwLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0xMDI0PXZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDMzLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDM0OlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDM1LVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0xMDkyPWludCBleHQ0X2VzX2xvb2t1cF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMTAxLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMTAyOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMTAzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTE2MjM9dm9pZCBleHQ0X2VzX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xNjMwLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxNjMxOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xNjMyLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0yMjAxPXZvaWQgZXh0NF9lc19pbnNlcnRfZGVsYXllZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0yMjEzLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoyMjE0OlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0yMjE1LVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDQ9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0Ni1cXHRyZXR1cm4gKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIHx8XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NzpcXHRcXHQoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDgtfVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MTU9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjgtXFx0XFx0XFx0XFx0c2l6ZW9mKGludCkgKiAoc3RhdGUtXFx1MDAzZWZjX21vZGlmaWVkX2lub2Rlc19zaXplICtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkyOTpcXHRcXHRcXHRcXHRFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVCksXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MzAtXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzNC1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfbW9kaWZpZWRfaW5vZGVzX3NpemUgKz1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkzNTpcXHRcXHRcXHRFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVDtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzNi1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjEwOD1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMjYtXFx0XFx0XFx0XFx0ICAgICAgKHN0YXRlLVxcdTAwM2VmY19yZWdpb25zX3NpemUgK1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTI3OlxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVCksXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMjgtXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEzMS1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfcmVnaW9uc19zaXplICs9XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMzI6XFx0XFx0XFx0RVhUNF9GQ19SRVBMQVlfUkVBTExPQ19JTkNSRU1FTlQ7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMtXFx0XFx0c3RhdGUtXFx1MDAzZWZjX3JlZ2lvbnMgPSBmY19yZWdpb25zO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0MDU9dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwOC1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwOTpcXHRzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNj0gfkVYVDRfRkNfUkVQTEFZO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDEwLVxcdGtmcmVlKHNiaS1cXHUwMDNlc19mY19yZXBsYXlfc3RhdGUuZmNfcmVnaW9ucyk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU4MT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk4LVxcdFxcdHN0YXRlLVxcdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBwYXNzO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk5OlxcdFxcdHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSB8PSBFWFQ0X0ZDX1JFUExBWTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYwMC1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTIwPXN0cnVjdCBleHQ0X2ZjX3N0YXRzIHtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xMjktXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjEzMDojZGVmaW5lIEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UXFx0NFxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xMzEtXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jPTgxPXN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9pbm9kZV9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtODgtXFxuZnMvZXh0NC9pYWxsb2MuYzo4OTpcXHRpZiAoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lhbGxvYy5jLTkwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz0yMzc9dm9pZCBleHQ0X2ZyZWVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMjk1LVxcdH1cXG5mcy9leHQ0L2lhbGxvYy5jOjI5NjpcXHRpZiAoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcXG5mcy9leHQ0L2lhbGxvYy5jLTI5Ny1cXHRcXHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBibG9ja19ncm91cCk7XFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jPTkzMz1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9uZXdfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTEwNTMtXFxuZnMvZXh0NC9pYWxsb2MuYzoxMDU0OlxcdFxcdGlmICghKHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtMTA1NS1cXHRcXHRcXHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBncm91cCk7XFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTEwNzAtXFx0XFx0fVxcbmZzL2V4dDQvaWFsbG9jLmM6MTA3MTpcXHRcXHRpZiAoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lhbGxvYy5jLTEwNzItXFx0XFx0ICAgIEVYVDRfTUJfR1JQX0lCSVRNQVBfQ09SUlVQVChncnApKVxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMDg2LVxcbmZzL2V4dDQvaWFsbG9jLmM6MTA4NzpcXHRcXHRpZiAoKCEoc2JpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKSBcXHUwMDI2XFx1MDAyNiAhaGFuZGxlKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy0xMDg4LVxcdFxcdFxcdEJVR19PTihuYmxvY2tzIFxcdTAwM2M9IDApO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMTkyLVxcbmZzL2V4dDQvaWFsbG9jLmM6MTE5MzpcXHRcXHRpZiAoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcXG5mcy9leHQ0L2lhbGxvYy5jLTExOTQtXFx0XFx0XFx0Z3JwID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhzYiwgZ3JvdXApO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMjE4LVxcdFxcdFxcdFxcdFxcdChFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpIC0gaW5vKSk7XFxuZnMvZXh0NC9pYWxsb2MuYzoxMjE5OlxcdFxcdGlmICghKHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSlcXG5mcy9leHQ0L2lhbGxvYy5jLTEyMjAtXFx0XFx0XFx0dXBfcmVhZChcXHUwMDI2Z3JwLVxcdTAwM2VhbGxvY19zZW0pO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQ0MD12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbm9kZS5jLTQ0MS17XFxuZnMvZXh0NC9pbm9kZS5jOjQ0MjpcXHRpZiAoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lub2RlLmMtNDQzLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz05Nzk9c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2dldGJsayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTk4Ny1cXG5mcy9leHQ0L2lub2RlLmM6OTg4OlxcdEFTU0VSVCgoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lub2RlLmMtOTg5LVxcdFxcdCAgICB8fCBoYW5kbGUgIT0gTlVMTCB8fCBjcmVhdGUgPT0gMCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTAxNS1cXHRcXHRBU1NFUlQoY3JlYXRlICE9IDApO1xcbmZzL2V4dDQvaW5vZGUuYzoxMDE2OlxcdFxcdEFTU0VSVCgoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lub2RlLmMtMTAxNy1cXHRcXHRcXHQgICAgfHwgKGhhbmRsZSAhPSBOVUxMKSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUzMjctXFx0ICAgIGV4dDRfc2ltdWxhdGVfZmFpbChzYiwgRVhUNF9TSU1fSU5PREVfQ1JDKSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmM6NTMyODpcXHQgICAgICghKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKSkge1xcbmZzL2V4dDQvaW5vZGUuYy01MzI5LVxcdFxcdGV4dDRfZXJyb3JfaW5vZGVfZXJyKGlub2RlLCBmdW5jdGlvbiwgbGluZSwgMCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01NDk3LVxcdFxcdC8qIHZhbGlkYXRlIHRoZSBibG9jayByZWZlcmVuY2VzIGluIHRoZSBpbm9kZSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo1NDk4OlxcdFxcdGlmICghKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9pbm9kZS5jLTU0OTktXFx0XFx0XFx0KFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9MjAwMD1zdGF0aWMgdm9pZCBtYl9mcmVlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjAzNi1cXHRcXHQgKi9cXG5mcy9leHQ0L21iYWxsb2MuYzoyMDM3OlxcdFxcdGlmIChzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkge1xcbmZzL2V4dDQvbWJhbGxvYy5jLTIwMzgtXFx0XFx0XFx0bWJfcmVnZW5lcmF0ZV9idWRkeShlNGIpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTYyMS1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NjIyOlxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU2MjMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NjIyOT1leHQ0X2ZzYmxrX3QgZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MjQ1LVxcdHRyYWNlX2V4dDRfcmVxdWVzdF9ibG9ja3MoYXIpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYyNDY6XFx0aWYgKHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTYyNDctXFx0XFx0cmV0dXJuIGV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoYXIsIGVycnApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NjY5MT12b2lkIGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTY3MDctXFxuZnMvZXh0NC9tYmFsbG9jLmM6NjcwODpcXHRpZiAoc2JpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIHtcXG5mcy9leHQ0L21iYWxsb2MuYy02NzA5LVxcdFxcdGV4dDRfZnJlZV9ibG9ja3Nfc2ltcGxlKGlub2RlLCBibG9jaywgRVhUNF9OVU1fQjJDKHNiaSwgY291bnQpKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zMjI2PWludCBfX2V4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZF9uYW1lLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTMyNTItXFx0XFx0ICovXFxuZnMvZXh0NC9uYW1laS5jOjMyNTM6XFx0XFx0aWYgKEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpXFxuZnMvZXh0NC9uYW1laS5jLTMyNTQtXFx0XFx0XFx0c2tpcF9yZW1vdmVfZGVudHJ5ID0gMTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy00MDA4LVxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jOjQwMDk6XFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtNDAxMC1cXHRcXHQgICAgIShleHQ0X3Rlc3RfbW91bnRfZmxhZyhzYiwgRVhUNF9NRl9GQ19JTkVMSUdJQkxFKSkpIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01Mjg1PXN0YXRpYyBpbnQgZXh0NF9ibG9ja19ncm91cF9tZXRhX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpbGVudClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MzI2LVxcdHNiaS1cXHUwMDNlc19kZXNjX3Blcl9ibG9jayA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAvIEVYVDRfREVTQ19TSVpFKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTMyNzpcXHRzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgPSBsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19zdGF0ZSkgXFx1MDAyNiB+RVhUNF9GQ19SRVBMQVk7XFxuZnMvZXh0NC9zdXBlci5jLTUzMjgtXFx0c2JpLVxcdTAwM2VzX2FkZHJfcGVyX2Jsb2NrX2JpdHMgPSBpbG9nMihFWFQ0X0FERFJfUEVSX0JMT0NLKHNiKSk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjU2Nj1zdGF0aWMgaW50IF9fZXh0NF9yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02Nzc3LVxcdFxcdFxcdHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSA9IChsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19zdGF0ZSkgXFx1MDAyNlxcbmZzL2V4dDQvc3VwZXIuYzo2Nzc4OlxcdFxcdFxcdFxcdFxcdCAgICAgIH5FWFQ0X0ZDX1JFUExBWSk7XFxuZnMvZXh0NC9zdXBlci5jLTY3NzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjA3LjQ1MzE5ODg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMjI1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGV4dDQgRmFzdCBDb21taXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHBsYXlpbmcgaW4gdGhlIGBleHQ0X2ZpbmRfZXh0ZW50YCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYSBjaGVjayBmb3IgYEVYVDRfRkNfUkVQTEFZYCBhbmQgdGhlbiBjYWxsaW5nIGBleHQ0X2V4dF9jaGVja2AuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGxpa2VseSBhZmZlY3RzIHRoZSBmaWxlIHN5c3RlbSdzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGNoZWNrLlxuXG5SaWdodCwgc28gZmFzdCBjb21taXQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZSBgQ09ORklHX0VYVDRfRlNgIG9wdGlvbiwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dCBJIHdvbmRlciBpZiB0aGVyZSdzIGEgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaXRzZWxmLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIEknbSBhY3Jvc3MgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDoxMS4wNjU0NTkwMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NDQzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSk9VUk5BTF9GQVNUX0NPTU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTMwOC1cXG5mcy9leHQ0L2V4dDQuaDoxMzA5OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFxcdDB4MDAwMDAwMTAgLyogSm91cm5hbCBmYXN0IGNvbW1pdCAqL1xcbmZzL2V4dDQvZXh0NC5oLTEzMTAtI2RlZmluZSBFWFQ0X01PVU5UMl9EQVhfTkVWRVJcXHRcXHQweDAwMDAwMDIwIC8qIERvIG5vdCBhbGxvdyBEaXJlY3QgQWNjZXNzICovXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ2OlxcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ3LVxcdFxcdChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU4Nj1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1OTY6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NzM9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODItXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM0Mjk9c3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmZzL2V4dDQvaW5vZGUuYzozNDM4OlxcdFxcdGlmICh0ZXN0X29wdDIoaW5vZGUtXFx1MDAzZWlfc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvaW5vZGUuYy0zNDM5LVxcdFxcdFxcdHJldHVybiAhbGlzdF9lbXB0eShcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mY19saXN0KTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy00MDA3LVxcdFxcdFxcdGV4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZSwgbmV3LmRlbnRyeSk7XFxuZnMvZXh0NC9uYW1laS5jOjQwMDg6XFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtNDAwOS1cXHRcXHQgICAgIShFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTU0LSNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYzoxOTU1OlxcdHtPcHRfZmNfZGVidWdfZm9yY2UsIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVQsXFxuZnMvZXh0NC9zdXBlci5jLTE5NTYtXFx0IE1PUFRfU0VUIHwgTU9QVF8yIHwgTU9QVF9FWFQ0X09OTFl9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQzOTY9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NDE1LVxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcXG5mcy9leHQ0L3N1cGVyLmM6NDQxNjpcXHRcXHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTQ0MTctXFx0LyogZG9uJ3QgZm9yZ2V0IHRvIGVuYWJsZSBqb3VybmFsX2NzdW0gd2hlbiBtZXRhZGF0YV9jc3VtIGlzIGVuYWJsZWQuICovXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDk2ND1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDk4Ny1cXG5mcy9leHQ0L3N1cGVyLmM6NDk4ODpcXHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvc3VwZXIuYy00OTg5LVxcdFxcdCFqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2pvdXJuYWwsIDAsIDAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTA0OD1zdGF0aWMgaW50IGV4dDRfY2hlY2tfam91cm5hbF9kYXRhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDU1LVxcdFxcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xcbmZzL2V4dDQvc3VwZXIuYzo1MDU2OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01MDU3LVxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTU0NC1cXHRcXHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xcbmZzL2V4dDQvc3VwZXIuYzo1NTQ1OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01NTQ2LVxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MTEuMTE1MjA5MTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MzE5ODI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRmFzdCBDb21taXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSB3aXRoaW4gZXh0NC4gVGhlIGNvbnRleHQgaGVyZSBpcyBtb2RpZnlpbmcgYGV4dDRfZmluZF9leHRlbnRgLCB3aGljaCBpcyBhICpjb3JlKiBmdW5jdGlvbiwgbm8gcXVlc3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBFWFQ0X0ZDX1JFUExBWWAgYW5kIHN1YnNlcXVlbnRseSBjYWxscyBgZXh0NF9leHRfY2hlY2tgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGluc3RpbmN0IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldCFcIi4gRGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZGl2ZSB0aGVyZS5cblxuSW5pdGlhbGx5LCBJIHplcm9lZCBpbiBvbiBgZXh0NF9maW5kX2V4dGVudGAgYW5kIGBleHQ0X2V4dF9jaGVja2AgYXMgcHJpbWUgZnV6emluZyB0YXJnZXRzLiBCdXQsIGhvbGQgb24uLi4gYGV4dDRfZmluZF9leHRlbnRgIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBJIHJlY2FsbCB0aGUgZ3VpZGVsaW5lczogd2Ugd2FudCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RzIGZyb20gYmVpbmcgc2tld2VkLiBUaGV5IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFdlIHdhbnQgZ29vZCBjb3ZlcmFnZS5cblxuT2theSwgc28gYGV4dDRfZmluZF9leHRlbnRgICppcyogY2FsbGVkIGZyZXF1ZW50bHkuIEJ1dCBjcnVjaWFsbHksIGBleHQ0X2V4dF9jaGVja2AgaXMgb25seSBjYWxsZWQgKmhlcmUqLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZmFzdCBjb21taXQgcmVwbGF5LiBUaGUgc3BlY2lmaWMgY29uZGl0aW9uIGlzIGRlcGVuZGVudCBvbiBgRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWWAsIHdoaWNoIGlzIG9ubHkgdHJ1ZSAqZHVyaW5nKiBmYXN0IGNvbW1pdCByZXBsYXksIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBlZGdlIGNhc2VzLlxuXG5BaCwgSSB0aGluayBJIHNlZSB0aGUga2V5LiBGYXN0IGNvbW1pdCByZXBsYXkgaXRzZWxmIGlzIGxpa2VseSBoYW5kbGVkIGluIGBleHQ0X2ZjX3JlcGxheWAuIExldCdzIHNoaWZ0IG91ciBmb2N1cyB0byBpbnZlc3RpZ2F0aW5nIHRoYXQgZnVuY3Rpb24gYXMgd2VsbC4gVGhpcyBtaWdodCBnaXZlIHVzIG1vcmUgb2YgdGhlIGNvbXBsZXRlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MTYuNzk4NDEwNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNjkyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9mY19yZXBsYXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTU4Nj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE4NjEtI2VuZGlmXFxuZnMvZXh0NC9leHQ0Lmg6MTg2MjpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgc19mY19yZXBsYXlfc3RhdGU7XFxuZnMvZXh0NC9leHQ0LmgtMTg2My19O1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzA3OT12b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjMwODA6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2spO1xcbmZzL2V4dDQvZXh0NC5oOjMwODE6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvZXh0NC5oLTMwODItaW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTgwND1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19nZXRfdGwoc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODEzLS8qIFVubGluayByZXBsYXkgZnVuY3Rpb24gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgxNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3VubGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODE1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjMtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MjQ6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1VOTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjUtXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg1Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg1MzpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg1NC1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5X2luZm9fYXJncyAqZGFyZyxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg4LS8qIExpbmsgcmVwbGF5IGZ1bmN0aW9uICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4ODk6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5Ni1cXHR0bF90b19kYXJnKFxcdTAwMjZkYXJnLCB0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg5NzpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTgtXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkwNS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkwNjpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTA3LVxcdGlwdXQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MTU9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTE2LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkxNzpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTE4LVxcdGludCBpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDMtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NDQ6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTQ1LVxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk1OC1cXHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTU5OlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0YWcsIGlubywgMCwgMCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NjAtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0OS0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA1MDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDUxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNTktXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNjA6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0NSRUFULCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA2MS1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDkyLVxcdH1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA5MzpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDk0LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjEwOD1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTAte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTExOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTItXFx0c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uICpyZWdpb247XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0Ny0vKiBSZXBsYXkgYWRkIHJhbmdlIHRhZyAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTQ4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDkte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNjItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNjM6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0FERF9SQU5HRSxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2NC1cXHRcXHRsZTMyX3RvX2NwdShmY19hZGRfZXguZmNfaW5vKSwgbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjY3PXN0YXRpYyBpbnRcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI2ODpleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI2OS17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3OS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI4MDpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfREVMX1JBTkdFLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgxLVxcdFxcdGxlMzJfdG9fY3B1KGxyYW5nZS5mY19pbm8pLCBjdXIsIHJlbWFpbmluZyk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjMyOD1zdGF0aWMgdm9pZCBleHQ0X2ZjX3NldF9iaXRtYXBzX2FuZF9jb3VudGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzI5LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMzMDpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzMxLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4Ni0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM4Nzpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODgte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg5LVxcdGludCBpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzkwOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzOTEtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNC0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwNTp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNi17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQxND1zdGF0aWMgYm9vbCBleHQ0X2ZjX3ZhbHVlX2xlbl9pc3ZhbGlkKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDU4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsX3QgKmpvdXJuYWwsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTktXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZixcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDYzLVxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY0OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjUtXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzItb3V0X2VycjpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU3MzpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheV9zY2FuKHNiLCByZXQsIG9mZik7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzQtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTgwLSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTgxOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTgyLVxcdFxcdFxcdFxcdGVudW0gcGFzc3R5cGUgcGFzcywgaW50IG9mZiwgdGlkX3QgZXhwZWN0ZWRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODgtXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTg5OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGUgPSBcXHUwMDI2c2JpLVxcdTAwM2VzX2ZjX3JlcGxheV9zdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5MC1cXHRzdHJ1Y3QgZXh0NF9mY190YWlsIHRhaWw7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5My1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfY3VycmVudF9wYXNzID0gUEFTU19TQ0FOO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk0OlxcdFxcdHJldHVybiBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWwsIGJoLCBvZmYsIGV4cGVjdGVkX3RpZCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTUtXFx0fVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzEtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19MSU5LOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjMyOlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzMy1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNC1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX1VOTElOSzpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNTpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNi1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNy1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0FERF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzODpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzktXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDAtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19DUkVBVDpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0MTpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Mi1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0My1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0RFTF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0NDpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDUtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDYtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19JTk9ERTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0NzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9pbm9kZShzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ4LVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ5LVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfUEFEOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjUwOlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19QQUQsIDAsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTEtXFx0XFx0XFx0XFx0XFx0ICAgICB0bC5mY19sZW4sIDApO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTMtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19UQUlMOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjU0OlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19UQUlMLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjU1LVxcdFxcdFxcdFxcdFxcdCAgICAgMCwgdGwuZmNfbGVuLCAwKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjYxLVxcdFxcdGRlZmF1bHQ6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NjI6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRsLmZjX3RhZywgMCwgdGwuZmNfbGVuLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY2My1cXHRcXHRcXHRyZXQgPSAtRUNBTkNFTEVEO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NzM9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzktXFx0ICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2ODA6XFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY4MS1cXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTM5PXN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiB7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxNDg6c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ5LVxcdGludCBmY19yZXBsYXlfbnVtX3RhZ3M7XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz02MTYyPWV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5My1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L21iYWxsb2MuYzo2MTk0OlxcdFxcdFxcdGlmIChleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzYixcXG5mcy9leHQ0L21iYWxsb2MuYy02MTk1LVxcdFxcdFxcdFxcdGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSArXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM0Nj1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NjQ1LVxcdH1cXG5mcy9leHQ0L3N1cGVyLmM6NTY0NjpcXHRleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTY0Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MTYuODQ1NjgyNjQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3ODkwNTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBGYXN0IENvbW1pdCBSZXBsYXkgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBgZXh0NF9mY19yZXBsYXlgLCBgZXh0NF9mY19yZXBsYXlfc2NhbmAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAuIERlZmluaXRlbHkgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhhdCB3aG9sZSBsb2dpYy4gTXkgbWFpbiBmb2N1cyBub3cgaXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLlxuXG5JdCBzZWVtcyB0aGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfZmluZF9leHRlbnRgIHRvIHZhbGlkYXRlIGV4dGVudHMgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSwgd2hpY2ggbWVhbnMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlYCwgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGFyZSBnb2luZyB0byBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGUgZXh0ZW50IHZhbGlkYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlcGxheS5cblxuQW5kIGxldCdzIG5vdCBmb3JnZXQsIGBleHQ0X2V4dF9jaGVja2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgcGF0Y2gsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYy4gSWYgc28sIGl0IG1pZ2h0IGFmZmVjdCBob3cgSSBjYW4gbGV2ZXJhZ2UgaXQgaW4gbXkgZnV6emluZyBzZXR1cC4gTmVlZCB0byBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDoyMS42MjQ1OTE0MTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjAzMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZXh0X2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MTY9ZXh0ZXJuIHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICopO1xcbmZzL2V4dDQvZXh0NC5oOjM5MTc6ZXh0ZXJuIGludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTE4LWV4dGVybiBleHQ0X2xibGtfdCBleHQ0X2V4dF9uZXh0X2FsbG9jYXRlZF9ibG9jayhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zODg9c3RhdGljIGludCBleHQ0X3ZhbGlkX2V4dGVudF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NTQtXFxuZnMvZXh0NC9leHRlbnRzLmM6NDU1OnN0YXRpYyBpbnQgX19leHQ0X2V4dF9jaGVjayhjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDU2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTUxNS1cXG5mcy9leHQ0L2V4dGVudHMuYzo1MTY6I2RlZmluZSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCBwYmxrKVxcdFxcdFxcdFxcXFxcXG5mcy9leHQ0L2V4dGVudHMuYzo1MTc6XFx0X19leHQ0X2V4dF9jaGVjayhfX2Z1bmNfXywgX19MSU5FX18sIChpbm9kZSksIChlaCksIChkZXB0aCksIChwYmxrKSwgMClcXG5mcy9leHQ0L2V4dGVudHMuYy01MTgtXFxuZnMvZXh0NC9leHRlbnRzLmM6NTE5OmludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMC17XFxuZnMvZXh0NC9leHRlbnRzLmM6NTIxOlxcdHJldHVybiBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZXh0X2lub2RlX2hkcihpbm9kZSksIGV4dF9kZXB0aChpbm9kZSksIDApO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMi19XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01NTE9X19yZWFkX2V4dGVudF90cmVlX2Jsb2NrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU3NS1cXHRcXHRyZXR1cm4gYmg7XFxuZnMvZXh0NC9leHRlbnRzLmM6NTc2OlxcdGVyciA9IF9fZXh0NF9leHRfY2hlY2soZnVuY3Rpb24sIGxpbmUsIGlub2RlLCBleHRfYmxvY2tfaGRyKGJoKSxcXG5mcy9leHQ0L2V4dGVudHMuYy01NzctXFx0XFx0XFx0ICAgICAgIGRlcHRoLCBwYmxrLCBsZTMyX3RvX2NwdShpZHgtXFx1MDAzZWVpX2Jsb2NrKSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDM9aW50IGV4dDRfZXh0X3ByZWNhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MzAtXFx0cGF0aFswXS5wX2hkciA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMTpcXHRyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgcGF0aFswXS5wX2hkciwgZGVwdGgsIDApO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTYzMi1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9ODg2PWV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy05MTAtXFx0XFx0ICAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo5MTE6XFx0XFx0cmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtOTEyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0xOTE5PXN0YXRpYyB2b2lkIGV4dDRfZXh0X3RyeV90b19tZXJnZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMTk0OC0gKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoxOTQ5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXFxuZnMvZXh0NC9leHRlbnRzLmMtMTk1MC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mjg0ND1pbnQgZXh0NF9leHRfcmVtb3ZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjk3NS1cXG5mcy9leHQ0L2V4dGVudHMuYzoyOTc2OlxcdFxcdGlmIChleHQ0X2V4dF9jaGVjayhpbm9kZSwgcGF0aFswXS5wX2hkciwgZGVwdGgsIDApKSB7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjk3Ny1cXHRcXHRcXHRlcnIgPSAtRUZTQ09SUlVQVEVEO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDI3Nj1pbnQgZXh0NF9leHRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDQzNC1cXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihtYXAtXFx1MDAzZW1fbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0NDM1OlxcdGVyciA9IGV4dDRfZXh0X2NoZWNrX292ZXJsYXAoc2JpLCBpbm9kZSwgXFx1MDAyNm5ld2V4LCBwYXRoKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00NDM2LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU1MDItXFx0XFx0XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKVxcbmZzL2V4dDQvaW5vZGUuYzo1NTAzOlxcdFxcdFxcdFxcdHJldCA9IGV4dDRfZXh0X2NoZWNrX2lub2RlKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNTUwNC1cXHRcXHRcXHRlbHNlXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYz02MDM9aW50IGV4dDRfaW5kX21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTY0Ni1cXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG5mcy9leHQ0L21pZ3JhdGUuYzo2NDc6XFx0cmV0ID0gZXh0NF9leHRfY2hlY2tfaW5vZGUoaW5vZGUpO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTY0OC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDoyMS42NzY4MDA5MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjExOTE0OTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGaWxlIFN5c3RlbSBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGV4dDRfZXh0X2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBtYWNybyB0aGF0IHVsdGltYXRlbHkgY2FsbHMgYF9fZXh0NF9leHRfY2hlY2tgLiBUaGUgcGF0Y2ggbWVudGlvbnMgYWRkaW5nIGEgY2hlY2sgd2l0aGluIGBleHQ0X2ZpbmRfZXh0ZW50YCwgc28gaXQgc2VlbXMgbGlrZSBhbiBleHRlbnQtcmVsYXRlZCBpc3N1ZS4gVGhlIGZhY3QgdGhhdCB0aGUgZmFzdCBjb21taXQgcmVwbGF5IGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaXMgaW50ZXJlc3RpbmcuXG5cblJpZ2h0LCBzbyB0aGUgdHJhY2UgcG9pbnRzIHRvIGEgcHJvYmxlbSBzcGVjaWZpYyB0byBmYXN0IGNvbW1pdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIHZpc2libGUgaW4gdGhlIGRlYnVnZ2luZyB0b29scy4gTGV0J3MgYWRkIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzaG91bGQgaGVscCBwaW5wb2ludCB0aGUgcHJvYmxlbS5cblxuTm93LCB0aGlzIGNvbmZpZy4uLiBpdCBsb29rcyBsaWtlIGl0IGlzIGNvbnRyb2xsZWQgYnkgYEVYVDRfRlNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b25kZXIsIHRob3VnaCwgaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbiByZWxhdGVkIGp1c3QgdG8gdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaXRzZWxmLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIGtub3cgaWYgdGhlIGZhc3QgY29tbWl0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBhdCBhbGwuIExldCdzIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjI3Ljc5NTk1MzQ5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NjA3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFTVF9DT01NSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEzMDgtXFxuZnMvZXh0NC9leHQ0Lmg6MTMwOTojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXFx0XFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjEyOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocyhcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIxNzQtLypcXG5mcy9leHQ0L2V4dDQuaDoyMTc1OiAqIFRoZSByZWFzb24gd2h5IFxcXCJGQVNUX0NPTU1JVFxcXCIgaXMgYSBjb21wYXQgZmVhdHVyZSBpcyB0aGF0LCBGUyBiZWNvbWVzXFxuZnMvZXh0NC9leHQ0LmgtMjE3Ni0gKiBpbmNvbXBhdGlibGUgb25seSBpZiBmYXN0IGNvbW1pdCBibG9ja3MgYXJlIHByZXNlbnQgaW4gdGhlIEZTLiBTaW5jZSB3ZVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE4MC0gKi9cXG5mcy9leHQ0L2V4dDQuaDoyMTgxOiNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVFxcdFxcdDB4MDQwMFxcbmZzL2V4dDQvZXh0NC5oLTIxODItI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NUQUJMRV9JTk9ERVNcXHQweDA4MDBcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIyODY9RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzcGFyc2Vfc3VwZXIyLFxcdFNQQVJTRV9TVVBFUjIpXFxuZnMvZXh0NC9leHQ0Lmg6MjI4NzpFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKGZhc3RfY29tbWl0LFxcdFxcdEZBU1RfQ09NTUlUKVxcbmZzL2V4dDQvZXh0NC5oLTIyODgtRVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzdGFibGVfaW5vZGVzLFxcdFNUQUJMRV9JTk9ERVMpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ2OlxcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ3LVxcdFxcdChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDA5PXN0YXRpYyBpbnQgZXh0NF9mY190cmFja190ZW1wbGF0ZShcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MzktXFx0XFx0XFx0XFx0KHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ0MDpcXHRcXHRcXHRcXHQgc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpID9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDQxLVxcdFxcdFxcdFxcdFxcdTAwMjZzYmktXFx1MDAzZXNfZmNfcVtGQ19RX1NUQUdJTkddIDpcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00NTQ9c3RhdGljIGludCBfX3RyYWNrX2RlbnRyeV91cGRhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00OTAtXFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ5MTpcXHRcXHRzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORylcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDkyLVxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZWZjZF9saXN0LFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE1ODY9aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk1LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxNTk2OlxcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU5Ny1cXHRcXHRyZXR1cm4gamJkMl9jb21wbGV0ZV90cmFuc2FjdGlvbihqb3VybmFsLCBjb21taXRfdGlkKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNjczPXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgwLVxcdGpvdXJuYWwtXFx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2ODE6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgyLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0yLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaDozOiNpZm5kZWYgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6NDojZGVmaW5lIF9fRkFTVF9DT01NSVRfSF9fXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTUtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTYzPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFnMnN0cihfX3UxNiB0YWcpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTg4LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxODk6I2VuZGlmIC8qIF9fRkFTVF9DT01NSVRfSF9fICovXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MzQyOT1zdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQzNy1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuZnMvZXh0NC9pbm9kZS5jOjM0Mzg6XFx0XFx0aWYgKHRlc3Rfb3B0Mihpbm9kZS1cXHUwMDNlaV9zYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9pbm9kZS5jLTM0MzktXFx0XFx0XFx0cmV0dXJuICFsaXN0X2VtcHR5KFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZjX2xpc3QpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTM3OTc9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTQwMDctXFx0XFx0XFx0ZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlLCBuZXcuZGVudHJ5KTtcXG5mcy9leHQ0L25hbWVpLmM6NDAwODpcXHRcXHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYy00MDA5LVxcdFxcdCAgICAhKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTg4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NTQtI2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jOjE5NTU6XFx0e09wdF9mY19kZWJ1Z19mb3JjZSwgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVCxcXG5mcy9leHQ0L3N1cGVyLmMtMTk1Ni1cXHQgTU9QVF9TRVQgfCBNT1BUXzIgfCBNT1BUX0VYVDRfT05MWX0sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDM5Nj1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ0MTUtXFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmFzdF9jb21taXQoc2IpKVxcbmZzL2V4dDQvc3VwZXIuYzo0NDE2OlxcdFxcdHNldF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcXG5mcy9leHQ0L3N1cGVyLmMtNDQxNy1cXHQvKiBkb24ndCBmb3JnZXQgdG8gZW5hYmxlIGpvdXJuYWxfY3N1bSB3aGVuIG1ldGFkYXRhX2NzdW0gaXMgZW5hYmxlZC4gKi9cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00OTY0PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00OTg3LVxcbmZzL2V4dDQvc3VwZXIuYzo0OTg4OlxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9zdXBlci5jLTQ5ODktXFx0XFx0IWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoRVhUNF9TQihzYiktXFx1MDAzZXNfam91cm5hbCwgMCwgMCxcXG5mcy9leHQ0L3N1cGVyLmM6NDk5MDpcXHRcXHRcXHRcXHRcXHQgIEpCRDJfRkVBVFVSRV9JTkNPTVBBVF9GQVNUX0NPTU1JVCkpIHtcXG5mcy9leHQ0L3N1cGVyLmMtNDk5MS1cXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTA0OD1zdGF0aWMgaW50IGV4dDRfY2hlY2tfam91cm5hbF9kYXRhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDU1LVxcdFxcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xcbmZzL2V4dDQvc3VwZXIuYzo1MDU2OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01MDU3LVxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTU0NC1cXHRcXHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xcbmZzL2V4dDQvc3VwZXIuYzo1NTQ1OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01NTQ2LVxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MjcuODQ0ODIyNDkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjQwOTUxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodHMgb24gRmFzdCBDb21taXQgaW4gZXh0NCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBmYXN0IGNvbW1pdCBpbiBleHQ0LiBJdCdzIGNsZWFyIHRoYXQgaXQncyBlbmFibGVkIHRocm91Z2ggdGhlIGZpbGUgc3lzdGVtIGFuZCBqb3VybmFsIGZlYXR1cmVzOiBgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVGAgYW5kIGBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfRkFTVF9DT01NSVRgLiBJdCdzIG5vdCBhIHN0YW5kYWxvbmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlIGEgZGlyZWN0IGBDT05GSUdfRVhUNF9GQVNUX0NPTU1JVGAuIEl0J3MganVzdCBidW5kbGVkIGludG8gYENPTkZJR19FWFQ0X0ZTYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQsIGlzIHRoZXJlIGEgc3BlY2lmaWMgYEpCRDJfRkFTVF9DT01NSVRgIGNvbmZpZyBvcHRpb24gdGhhdCBJJ20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGVpdGhlciBgZnMvamJkMi9LY29uZmlnYCBvciwgcGVyaGFwcywgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQncyBhbHdheXMgdGhlIGRldGFpbHMgaW4gdGhvc2UgY29uZmlnIGZpbGVzIHRoYXQgSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjI0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjMxLjcwODkyMTA3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1ODA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEpCRDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXFxuZnMvamJkMi9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmZzL2piZDIvS2NvbmZpZy0xOS1cXG5mcy9qYmQyL0tjb25maWc6MjA6Y29uZmlnIEpCRDJfREVCVUdcXG5mcy9qYmQyL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjMxLjc5NjUwNjk0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM0NjczODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDaGVja2luZyB0aGUgRXh0NCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfRVhUNF9GU2Agc2VlbXMgdG8gYmUgdGhlIG9uZSBhYnNvbHV0ZSwgbm9uLW5lZ290aWFibGUgY29uZmlnIHNldHRpbmcgd2UgKm11c3QqIGhhdmUgaW4gcGxhY2UuIEl0J3MgdGhlIGx5bmNocGluLCBubyBkb3VidC4gQnV0IEknbSBhbHdheXMgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSdtIGdvaW5nIHRvIGRvIGEgcXVpY2sgc3dlZXAuIEl0J3MgYSBnb29kIGhhYml0IC0gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc3VidGx5IHJlcXVpcmVkIGNvbmZpZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYml0ZSB1cyBsYXRlci4gTm8gaGFybSBpbiBhIHNlY29uZCBsb29rLiBKdXN0IG1ha2luZyBzdXJlIHdlIGRpZG4ndCBtaXNzIHNvbWV0aGluZyBjcnVjaWFsIGR1cmluZyBvdXIgaW5pdGlhbCBwYXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA4NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjM1LjIzMTE4MjY1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MzY0ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctMzQtXFxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbmZzL2V4dDQvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy02Ny1cXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcXG5mcy9leHQ0L0tjb25maWctNjktXFx0Ym9vbCBcXFwiRXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy03Ni1cXG5mcy9leHQ0L0tjb25maWc6Nzc6Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcXG5mcy9leHQ0L0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBleHQ0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjM1LjI3NzAyMzU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTgzNjkxNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFWFQ0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEVYVDQgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgbGluZSBvZiB0aGlua2luZy4gSXQgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSB0byBmb2N1cyBvbiwgd2hpY2ggaXMgYSBnaXZlbi4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYWRkZWQgd2l0aGluIGBleHQ0X2ZpbmRfZXh0ZW50YC4gVGhpcyBjaGVjayBzcGVjaWZpY2FsbHkgYWN0aXZhdGVzIG9ubHkgd2hlbiBgRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWWAgaXMgdHJ1ZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MgaGVyZS5cblxuRmFzdCBjb21taXQgcmVwbGF5IGl0c2VsZiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQsIGJ1dCBvbmx5IGlmIHRoZXJlIGFyZSBmYXN0IGNvbW1pdCBibG9ja3MgdGhhdCBuZWVkIHRvIGJlIHJlcGxheWVkLiBTbyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyByZXBsYXkgcHJvY2VzcyBpcyBkZWZpbml0ZWx5IGBleHQ0X2ZjX3JlcGxheWAuIEluaXRpYWxseSwgSSBjb25zaWRlcmVkIGBleHQ0X2V4dF9jaGVja19pbm9kZWAgb3IgaXRzIG1hY3JvIGV4cGFuc2lvbiBgX19leHQ0X2V4dF9jaGVja2AgYXMgcG90ZW50aWFsIGtleSBzeW1ib2xzLiBCdXQgSSBuZWVkIHRvIG5hcnJvdyB0aGUgZm9jdXMgdG8gd2hhdCdzIGhhcHBlbmluZyAqZHVyaW5nKiBmYXN0IGNvbW1pdCByZXBsYXkgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5JIHN0YXJ0ZWQgYnkgbGlzdGluZyBgZXh0NF9mY19yZXBsYXlgLCBgX19leHQ0X2V4dF9jaGVja2AsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAgZm9yIHRoZSBmb2N1cyBzeW1ib2xzLiBIb3dldmVyLCBJIHJlYWxpemVkIGBfX2V4dDRfZXh0X2NoZWNrYCBpcyB0b28gZ2VuZXJpYy4gVGhlIHBhdGNoIGlzbid0IHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBmdW5jdGlvbiBpbiBpc29sYXRpb24sIGJ1dCBob3cgaXQncyB1c2VkICp3aXRoaW4qIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgY29udGV4dC4gRm9jdXNpbmcgb24gcmVwbGF5IGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGlzIGdvaW5nIHRvIGJlIG1vcmUgZGlyZWN0LlxuXG5TbywgSSByZWZpbmVkIHRoYXQgbGlzdCB0byBpbmNsdWRlIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYC4gTm93LCBldmVuIHRob3VnaCBgZXh0NF9maW5kX2V4dGVudGAgaXMgY2FsbGVkIGZyb20gdmFyaW91cyBwbGFjZXMsIGl0IGlzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiBmYXN0IGNvbW1pdCByZXBsYXkgYnkgYGV4dDRfZXh0X21hcF9ibG9ja3NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBleHQ0X2ZpbmRfZXh0ZW50YCBpcyBjYWxsZWQgKnNwZWNpZmljYWxseSogZHVyaW5nIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgc2VxdWVuY2UuIFRoYXQncyB0aGUga2V5IHRvIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjY3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ0LjI2MDcxNzI5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1OTcxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maW5kX2V4dGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD02ODQ9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC03NDEtICogVGhlIGJpdCBwb3NpdGlvbiBvZiB0aGVzZSBmbGFncyBtdXN0IG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZVxcbmZzL2V4dDQvZXh0NC5oOjc0MjogKiBFWFQ0X0dFVF9CTE9DS1NfKi4gIFRoZXkgYXJlIHVzZWQgYnkgZXh0NF9maW5kX2V4dGVudCgpLFxcbmZzL2V4dDQvZXh0NC5oLTc0My0gKiByZWFkX2V4dGVudF90cmVlX2Jsb2NrKCksIGV4dDRfc3BsaXRfZXh0ZW50X2F0KCksXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0zOTA5PWV4dGVybiBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9leHRfaW5zZXJ0X2V4dGVudChcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTM5MTItXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQsIGludCBnYl9mbGFncyk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkxMzpleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxcbmZzL2V4dDQvZXh0NC5oLTM5MTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKixcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MzkxPXN0YXRpYyB2b2lkIHRlc3Rfc3BsaXRfY29udmVydChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTQwNy1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjQwODpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX0RBVEFfTEJMSywgTlVMTCwgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTQwOS1cXHRleCA9IHBhdGgtXFx1MDAzZXBfZXh0O1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy00MzMtXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzo0MzQ6XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9EQVRBX0xCTEssIE5VTEwsIEVYVDRfRVhfTk9DQUNIRSk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy00MzUtXFx0ZXggPSBwYXRoLVxcdTAwM2VwX2V4dDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTg4NT1zdHJ1Y3QgZXh0NF9leHRfcGF0aCAqXFxuZnMvZXh0NC9leHRlbnRzLmM6ODg2OmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXFxuZnMvZXh0NC9leHRlbnRzLmMtODg3LVxcdFxcdCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtODk0LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjg5NTpcXHRLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChleHQ0X2ZpbmRfZXh0ZW50LCBpbm9kZSwgYmxvY2ssIHBhdGgsIGZsYWdzKTtcXG5mcy9leHQ0L2V4dGVudHMuYy04OTYtXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0xNDA3PWV4dDRfZXh0X2NyZWF0ZV9uZXdfbGVhZihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMTQzNS1cXHRcXHQvKiByZWZpbGwgcGF0aCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjE0MzY6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBwYXRoLCBnYl9mbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMTQzNy1cXHRcXHRyZXR1cm4gcGF0aDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTE0NDUtXFx0LyogcmVmaWxsIHBhdGggKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoxNDQ2OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBlZV9ibG9jaywgcGF0aCwgZ2JfZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTE0NDctXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTE5OTk9ZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjAzNC1cXHRcXHQgKiByaWdodCBmcm9tIGV4LCBvciBmcm9tIHRoZSBsZWZ0IG9mIGV4LiBUaGlzIGlzIGJlY2F1c2VcXG5mcy9leHQ0L2V4dGVudHMuYzoyMDM1OlxcdFxcdCAqIGV4dDRfZmluZF9leHRlbnQoKSBjYW4gcmV0dXJuIGVpdGhlciBleHRlbnQgb24gdGhlXFxuZnMvZXh0NC9leHRlbnRzLmMtMjAzNi1cXHRcXHQgKiBsZWZ0LCBvciBvbiB0aGUgcmlnaHQgZnJvbSB0aGUgc2VhcmNoZWQgcG9zaXRpb24uIFRoaXNcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTIxMTYtXFx0XFx0ZXh0X2RlYnVnKGlub2RlLCBcXFwibmV4dCBsZWFmIGJsb2NrIC0gJXVcXFxcblxcXCIsIG5leHQpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjIxMTc6XFx0XFx0bnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBuZXh0LCBOVUxMLCBnYl9mbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjExOC1cXHRcXHRpZiAoSVNfRVJSKG5wYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mjg0ND1pbnQgZXh0NF9leHRfcmVtb3ZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjg4My1cXHRcXHQvKiBmaW5kIGV4dGVudCBmb3Igb3IgY2xvc2VzdCBleHRlbnQgdG8gdGhpcyBibG9jayAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjI4ODQ6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVuZCwgTlVMTCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTI4ODUtXFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MzE5OD1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50X2F0KGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zMjY5LVxcdCAqIEdldCBhIG5ldyBwYXRoIHRvIHRyeSB0byB6ZXJvb3V0IG9yIGZpeCB0aGUgZXh0ZW50IGxlbmd0aC5cXG5mcy9leHQ0L2V4dGVudHMuYzozMjcwOlxcdCAqIFVzaW5nIEVYVDRfRVhfTk9GQUlMIGd1YXJhbnRlZXMgdGhhdCBleHQ0X2ZpbmRfZXh0ZW50KClcXG5mcy9leHQ0L2V4dGVudHMuYy0zMjcxLVxcdCAqIHdpbGwgbm90IHJldHVybiAtRU5PTUVNLCBvdGhlcndpc2UgLUVOT01FTSB3aWxsIGNhdXNlIGFcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTMyNzUtXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6MzI3NjpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIE5VTEwsIGZsYWdzIHwgRVhUNF9FWF9OT0ZBSUwpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTMyNzctXFx0aWYgKElTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MzQxNj1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zNDUxLVxcdFxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjM0NTI6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBwYXRoLCBmbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMzQ1My1cXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzUwMy1cXG5mcy9leHQ0L2V4dGVudHMuYzozNTA0OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgTlVMTCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM1MDUtXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM4MjM9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2NvbnZlcnRfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzg2OC1jb252ZXJ0OlxcbmZzL2V4dDQvZXh0ZW50cy5jOjM4Njk6XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBwYXRoLCBmbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMzg3MC1cXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mzk0Mz1jb252ZXJ0X2luaXRpYWxpemVkX2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzk4MC1cXHQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzozOTgxOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgcGF0aCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM5ODItXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNzY9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQyOTItXFx0LyogZmluZCBleHRlbnQgZm9yIHRoaXMgYmxvY2sgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo0MjkzOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgTlVMTCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQyOTQtXFx0aWYgKElTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDMwMy1cXHQgKiB0aGlzIHNpdHVhdGlvbiBpcyBwb3NzaWJsZSwgdGhvdWdoLCBfZHVyaW5nXyB0cmVlIG1vZGlmaWNhdGlvbjtcXG5mcy9leHQ0L2V4dGVudHMuYzo0MzA0OlxcdCAqIHRoaXMgaXMgd2h5IGFzc2VydCBjYW4ndCBiZSBwdXQgaW4gZXh0NF9maW5kX2V4dGVudCgpXFxuZnMvZXh0NC9leHRlbnRzLmMtNDMwNS1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQzODktXFx0ICogSWYgd2UgYXJlIGRvaW5nIGJpZ2FsbG9jLCBjaGVjayB0byBzZWUgaWYgdGhlIGV4dGVudCByZXR1cm5lZFxcbmZzL2V4dDQvZXh0ZW50cy5jOjQzOTA6XFx0ICogYnkgZXh0NF9maW5kX2V4dGVudCgpIGltcGxpZXMgYSBjbHVzdGVyIHdlIGNhbiB1c2UuXFxuZnMvZXh0NC9leHRlbnRzLmMtNDM5MS1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTUzOTE9ZXh0NF9leHRfc2hpZnRfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQwMS1cXHQvKiBMZXQgcGF0aCBwb2ludCB0byB0aGUgbGFzdCBleHRlbnQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo1NDAyOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQwMy1cXHRcXHRcXHRcXHRFWFQ0X0VYX05PQ0FDSEUpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQxOS1cXHRpZiAoU0hJRlQgPT0gU0hJRlRfTEVGVCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjU0MjA6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0IC0gMSwgcGF0aCxcXG5mcy9leHQ0L2V4dGVudHMuYy01NDIxLVxcdFxcdFxcdFxcdFxcdEVYVDRfRVhfTk9DQUNIRSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01NDY4LVxcdHdoaWxlIChpdGVyYXRvciBcXHUwMDI2XFx1MDAyNiBzdGFydCBcXHUwMDNjPSBzdG9wKSB7XFxuZnMvZXh0NC9leHRlbnRzLmM6NTQ2OTpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgKml0ZXJhdG9yLCBwYXRoLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0NzAtXFx0XFx0XFx0XFx0XFx0RVhUNF9FWF9OT0NBQ0hFKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTU2MzU9c3RhdGljIGludCBleHQ0X2luc2VydF9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU2OTYtXFxuZnMvZXh0NC9leHRlbnRzLmM6NTY5NzpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgc3RhcnRfbGJsaywgTlVMTCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTY5OC1cXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01NzcyPWV4dDRfc3dhcF9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTc5My1cXG5mcy9leHQ0L2V4dGVudHMuYzo1Nzk0OlxcdFxcdHBhdGgxID0gZXh0NF9maW5kX2V4dGVudChpbm9kZTEsIGxibGsxLCBwYXRoMSwgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYy01Nzk1LVxcdFxcdGlmIChJU19FUlIocGF0aDEpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01Nzk4LVxcdFxcdH1cXG5mcy9leHQ0L2V4dGVudHMuYzo1Nzk5OlxcdFxcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZTIsIGxibGsyLCBwYXRoMiwgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYy01ODAwLVxcdFxcdGlmIChJU19FUlIocGF0aDIpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01OTU3PWludCBleHQ0X2NsdV9tYXBwZWQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGNsdSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU5NzQtXFx0Lyogc2VhcmNoIGZvciB0aGUgZXh0ZW50IGNsb3Nlc3QgdG8gdGhlIGZpcnN0IGJsb2NrIGluIHRoZSBjbHVzdGVyICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NTk3NTpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUNF9DMkIoc2JpLCBsY2x1KSwgTlVMTCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTk3Ni1cXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTk4My1cXHQgKiB0aG91Z2gsIF9kdXJpbmdfIHRyZWUgbW9kaWZpY2F0aW9uLCBhbmQgaXQncyB3aHkgYW4gYXNzZXJ0IGNhbid0XFxuZnMvZXh0NC9leHRlbnRzLmM6NTk4NDpcXHQgKiBiZSBwdXQgaW4gZXh0NF9maW5kX2V4dGVudCgpLlxcbmZzL2V4dDQvZXh0ZW50cy5jLTU5ODUtXFx0ICovXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDM2PWludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA0Mi1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MDQzOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgTlVMTCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA0NC1cXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA2Mi1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MDYzOlxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgcGF0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA2NC1cXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA3OS1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MDgwOlxcdFxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgcGF0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4MS1cXHRcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjEwMT12b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjEwNy1cXHR3aGlsZSAoY3VyIFxcdTAwM2MgZW5kKSB7XFxuZnMvZXh0NC9leHRlbnRzLmM6NjEwODpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBOVUxMLCAwKTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MTA5LVxcdFxcdGlmIChJU19FUlIocGF0aCkpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MTQ5PWludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYxNTgtXFx0LyogRGV0ZXJtaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgZmlyc3QgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo2MTU5OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXFxuZnMvZXh0NC9leHRlbnRzLmMtNjE2MC1cXHRcXHRcXHRcXHRcXHRFWFQ0X0VYX05PQ0FDSEUpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjE5MS1cXHRcXHRnb3RvIG91dDtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MTkyOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTYxOTMtXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYxOTYtXFx0d2hpbGUgKGN1ciBcXHUwMDNjIGVuZCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYxOTc6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjE5OC1cXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjIwOS1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MjEwOlxcdFxcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoMiwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjIxMS1cXHRcXHRpZiAoSVNfRVJSKHBhdGgyKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyMzY9aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MjQ3LVxcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NjI0ODpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNDktXFx0XFx0XFx0XFx0XFx0RVhUNF9FWF9OT0NBQ0hFKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNjQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MjY1OlxcdFxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MjY2LVxcdFxcdFxcdGlmICghSVNfRVJSKHBhdGgpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MzEzPUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KTtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MzE0OkVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2ZpbmRfZXh0ZW50KTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MzE1LUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2lzc3VlX3plcm9vdXQpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTY3Mz1zdGF0aWMgdm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnRfZXh0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNjgyLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo2ODM6XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVzLVxcdTAwM2Vlc19sYmxrLCBOVUxMLCBFWFQ0X0VYX05PQ0FDSEUpO1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy02ODQtXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTQ4PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE5Ny1cXHRcXHRcXHQvKiBSYW5nZSBpcyBub3QgbWFwcGVkICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxOTg6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxOTktXFx0XFx0XFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM2MC1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzYxOlxcdFxcdFxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM2Mi1cXHRcXHRcXHRcXHRpZiAoIUlTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9MjE9c3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTM2LVxcdGRvd25fd3JpdGUoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbmZzL2V4dDQvbWlncmF0ZS5jOjM3OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBsYi1cXHUwMDNlZmlyc3RfYmxvY2ssIE5VTEwsIDApO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTM4LVxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmM9MjcxPXN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmMtMjkzLVxcbmZzL2V4dDQvdmVyaXR5LmM6Mjk0OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsIDApO1xcbmZzL2V4dDQvdmVyaXR5LmMtMjk1LVxcdGlmIChJU19FUlIocGF0aCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ0LjMwOTMxODY4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjMwMjg5NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYGV4dDRfZmluZF9leHRlbnRgIGlzIGEga2V5IGZ1bmN0aW9uLCBoZWF2aWx5IGludm9sdmVkIGluIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIGl0cyBkaXJlY3QgY2FsbHMgZnJvbSBgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlYCBhbmQgYGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzYC4gQnV0IGl0J3MgYWxzbyBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgc3VjaCBhcyBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgLiBUaGF0IG1ha2VzIGl0IGNsZWFyIHRoYXQgY29uY2VudHJhdGluZyBvbiB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGlzIHRoZSBvcHRpbWFsIHN0cmF0ZWd5IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuU28sIEknbSBnb2luZyB0byBsaXN0IG91dCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgZXh0NF9mY19yZXBsYXlgLCBgZXh0NF9mY19yZXBsYXlfc2NhbmAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYCwgYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGZhc3QgY29tbWl0IHJlcGxheSB0aGF0IEkgbmVlZCB0byBhbmFseXplLlxuXG5IbW0sIGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCBsb29rcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0J3MgdGltZSB0byBjaGVjayBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ5LjkzOTYxMjAyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MzI2MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTM0PWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjM5MzU6ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbmZzL2V4dDQvZXh0NC5oLTM5MzYtXFx0XFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTk1Nz1pbnQgZXh0NF9jbHVfbWFwcGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxjbHUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MDM1LSAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYwMzY6aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXFxuZnMvZXh0NC9leHRlbnRzLmMtNjAzNy1cXHRcXHRcXHQgICAgICBpbnQgbGVuLCBpbnQgdW53cml0dGVuLCBleHQ0X2ZzYmxrX3QgcGJsaylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTQ4PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIyMi1cXHRcXHRcXHQgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjIyMzpcXHRcXHRcXHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KGlub2RlLCBjdXIsIG1hcC5tX2xlbixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIyNC1cXHRcXHRcXHRcXHRcXHRleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNDQtXFx0XFx0XFx0ZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSwgbWFwLm1fcGJsayk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyNDU6XFx0XFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChpbm9kZSwgY3VyLCBtYXAubV9sZW4sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNDYtXFx0XFx0XFx0XFx0XFx0ZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSwgbWFwLm1fcGJsayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ5Ljk5MDA1MjIyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MjEwMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEV4dDQgUmVwbGF5IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCBpc24ndCBzdGF0aWMsIHdoaWNoIGlzIGFzIEkgZXhwZWN0ZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhhdCBzYW1lIGNvbnRleHQuICBMZXQncyBzZWUsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgIGFyZSAqYWxzbyogbm90IGRlY2xhcmVkIGFzIHN0YXRpYy4gR29vZCwgZ29vZC4gTm93LCBJIHNob3VsZCBmb2N1cyBvbiBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoeSB0aGF0J3MgdGhlIGNhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW4gdGhlIHJlY292ZXJ5IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6NTQuMTM0MjY0Mjk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MzA9ZXh0ZXJuIGludCBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTM5MzItXFx0XFx0XFx0XFx0ICAgICAgIGludCByZXZva2VfY3JlZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkzMzpleHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XFxuZnMvZXh0NC9leHQ0LmgtMzkzNC1leHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYwMzY9aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MTAwLS8qIFRyeSB0byBzaHJpbmsgdGhlIGV4dGVudCB0cmVlICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NjEwMTp2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYxMDIte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjUyLVxcdFxcdCAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjUzOlxcdFxcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsIHN0YXJ0ICsgbGVuKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI1NC1uZXh0Olxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNTctXFx0fVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjU4OlxcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNlXFx1MDAzZVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjU5LVxcdFxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjY4PWV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMTktXFx0XFx0Z290byBvdXQ7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzMjA6XFx0ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZShpbm9kZSxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMyMS1cXHRcXHRpX3NpemVfcmVhZChpbm9kZSkgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDo1NC4xODIwMzI5MjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDAwNzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb2N1cyBTeW1ib2xzIGFuZCBFeHRlbnQgVmFsaWRhdGlvbioqXG5cbk9rYXksIHRoZXNlIHN5bWJvbHMgYXJlIGFsbCB2ZXJ5IHJlbGV2YW50IHRvIHRoZSBjb3JlIG9mIGV4dDQncyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gaW50ZWdyYXRlIGEgZmV3IG1vcmUgaW50byBteSBhbmFseXNpczogYGV4dDRfZmNfcmVwbGF5YCwgYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYC4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRVhUNF9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5UaGUgcGF0Y2gncyBjb3JlIG1vZGlmaWNhdGlvbiBsaWVzIHdpdGhpbiB0aGUgYGV4dDRfZmluZF9leHRlbnRgIGZ1bmN0aW9uLiBUaGlzIHZhbGlkYXRpb24gY2hlY2sgaXMgc3BlY2lmaWNhbGx5IHRyaWdnZXJlZCBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHRoZSBgRVhUNF9GQ19SRVBMQVlgIGZsYWcuIEZhc3QgY29tbWl0IHJlcGxheSwgYmVpbmcgYSBmdW5kYW1lbnRhbCBjb21wb25lbnQgb2YgZXh0NCwgaXMgdHJpZ2dlcmVkIHVwb24gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyZWQgd2l0aCBmYXN0IGNvbW1pdCBibG9ja3MuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIGFuIGFkZGl0aW9uYWwgbGF5ZXIgb2YgZXh0ZW50IHZhbGlkYXRpb24gc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgcmVwbGF5IHByb2Nlc3MuIEkgc2hvdWxkIGFsc28gdmVyaWZ5IHRoZSB1c2Ugb2YgYGV4dDRfZXh0X2NsZWFyX2JiYCwgYXMgdGhpcyBtaWdodCBiZSBrZXkgdG8gdmFsaWRhdGluZyB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0ODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6NTguNzQ2MDQyMzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTkwMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZXh0X2NsZWFyX2JiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MzU9ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbmZzL2V4dDQvZXh0NC5oLTM5MzYtXFx0XFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xcbmZzL2V4dDQvZXh0NC5oOjM5Mzc6ZXh0ZXJuIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTM4LVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjE0OT1pbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MjM1LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjYyMzY6aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjIzNy17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTk0ND1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2Mi1cXHRpZiAoIUlTX0VSUihpbm9kZSkpIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk2MzpcXHRcXHRleHQ0X2V4dF9jbGVhcl9iYihpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NjQtXFx0XFx0aXB1dChpbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjU4Ljc5MzYzNjE2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDkxMDc3MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBQYXRoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IGhlYWQuIFdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlaW5nIGludHJvZHVjZWQgdG8gYGV4dDRfZmluZF9leHRlbnRgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYW4gYGV4dDRfZXh0X2NoZWNrYCB2YWxpZGF0aW9uLCBhbmQgdGhpcyBpc24ndCBqdXN0IGFueSBjaGVjazsgaXQncyAqc3BlY2lmaWNhbGx5KiBpbnRlbmRlZCB0byBiZSBydW4gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gVGhhdCBuYXJyb3dzIG91ciBmb2N1cyBzaWduaWZpY2FudGx5LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgbmV3IGNoZWNrIHdpbGwgZXhlY3V0ZSBvbmx5IHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlLiBUaGF0J3Mgb3VyIGtleSB0cmlnZ2VyLiBXZSdyZSB0YWxraW5nIGFib3V0IGFuIGV4dDQgZmlsZXN5c3RlbSB3aXRoIGZhc3QgY29tbWl0IGJsb2NrcywgYmVpbmcgbW91bnRlZCBhbmQgcmVwbGF5ZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRob3NlIHN5bWJvbHMgd2UgbmVlZCB0byByZWFsbHkgaG9uZSBpbiBvbi4gV2UndmUgZ290IHRvIGNvbnNpZGVyIGBleHQ0X2ZjX3JlcGxheWAsIHRoYXQncyBvYnZpb3VzLiBCdXQgd2UgYWxzbyBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyB0aGUgZXh0ZW50IHJlcGxheWluZyBwcm9jZXNzIHdpbGwgaW1wYWN0IHRoaW5nczogYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgZmluYWxseSwgZG9uJ3QgZm9yZ2V0IGBleHQ0X2V4dF9jbGVhcl9iYmAgd2hpY2ggaXNuJ3Qgc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgZHVyaW5nIHRoYXQgZmFzdCBjb21taXQgcmVwbGF5LlxuXG5TbywgYEVYVDRfRlNgIGlzIG9idmlvdXNseSB0aGUgYmFzZSBjb25maWcgaGVyZSwgYnV0IGl0J3MgdGhlIGBFWFQ0X0ZDX1JFUExBWWAgdGhhdCB3ZSByZWFsbHkgbmVlZCB0byBjYXJlIGFib3V0LlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyOTIsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA1OjA0Ljg4NDcxNjY5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MTIzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yZXBsYXlcIixcbiAgICBcImV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhcIixcbiAgICBcImV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGVcIixcbiAgICBcImV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc1wiLFxuICAgIFwiZXh0NF9leHRfY2xlYXJfYmJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGV4dDRfZmluZF9leHRlbnRgIGJ5IGFkZGluZyBhbiBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZXhlY3V0ZWQgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSAod2hlbiBgRVhUNF9GQ19SRVBMQVlgIGlzIHNldCBpbiB0aGUgbW91bnQgc3RhdGUpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgd2hlbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBmYXN0IGNvbW1pdCBibG9ja3MsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leFwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzXCIsXG4gICAgXCJleHQ0X2V4dF9jbGVhcl9iYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgZXh0NF9maW5kX2V4dGVudGAgYnkgYWRkaW5nIGFuIGV4dGVudCB2YWxpZGF0aW9uIGNoZWNrIChgZXh0NF9leHRfY2hlY2tgKSB0aGF0IGlzIHNwZWNpZmljYWxseSBleGVjdXRlZCBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5ICh3aGVuIGBFWFQ0X0ZDX1JFUExBWWAgaXMgc2V0IGluIHRoZSBtb3VudCBzdGF0ZSkuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB3aGVuIG1vdW50aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSB0aGF0IGNvbnRhaW5zIGZhc3QgY29tbWl0IGJsb2NrcywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA1OjA0Ljk2OTg0OTA0N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3MDY1MjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA1OjA0Ljk3MDQ0MDQwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDcwMDI0MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE1YTFkZGVmMDZlYWE4YjAxZTA4YmZlODc3NDIwMDZkNjYzNzMzZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTowNDowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IDE1OTcyNDEwZDQ2MDUuLmI5NWVhZmIwZDVjYWQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC05MDUsNiArOTA1LDEzIEBAIGV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXG4gXHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuK1x0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cbitcdGlmICh1bmxpa2VseSgoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7XG4rXHRcdHJldCA9IGV4dDRfZXh0X2NoZWNrKGlub2RlLCBlaCwgZGVwdGgsIDApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuIFxuIFx0aWYgKHBhdGgpIHtcbiBcdFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDU6MDQuOTcwNDQzMTE3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0Njk5OTQ4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXh0NCBFeHRlbnQgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGZzL2V4dDQvZXh0ZW50cy5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgY2hlY2sgd2l0aGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgZXh0NF9leHRfY2hlY2tgLiBUaGUgY29kZSBzbmlwcGV0IG1ha2VzIGl0IGNsZWFyOyB3ZSdyZSB2YWxpZGF0aW5nIGV4dGVudCBoZWFkZXJzLlxuXG5UaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYXR0ZW1wdGluZyB0byBwcm9jZXNzIGNvcnJ1cHRlZCBleHRlbnRzIGR1cmluZyByZXBsYXksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gQ29ycnVwdGVkIGV4dGVudHMgYXJlIGEga25vd24gdmVjdG9yIGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBpc3N1ZXMg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyB2YWxpZGF0aW9uIGlzIGEgcG9zaXRpdmUgY2hhbmdlLCBsaWtlbHkgdG8gaW1wcm92ZSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LlxuXG5UaGUgY29yZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIG5ldyByaXNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSSd2ZSBnb3QgdG8gYmUgdGhvcm91Z2ggaGVyZS4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gncyBsb2dpYyBpcyB0aGF0IGl0ICp2YWxpZGF0ZXMqIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBleHRlbnQgaGVhZGVyLCBiZWZvcmUgdGhleSdyZSBhY3RlZCB1cG9uLiBJdCdzICpub3QqIGNyZWF0aW5nIG5ldyBzdHJ1Y3R1cmVzIG9yIGNoYW5naW5nIGV4aXN0aW5nIGxvZ2ljIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcmVhZCBvciB3cml0ZSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQga2luZCBvZiBidWcgaXMgYSBkaXN0aW5jdCB3b3JyeSwgYnV0IGhlcmUgaXQncyBub3QgdGhlIHByaW1hcnkgY29uY2Vybi5cblxuU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggYWRkcyBhICpjaGVjayogb24gZXhpc3RpbmcgZGF0YSwgbm90IGEgKnNvdXJjZSogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSB0b29sIGZvciBkZXRlY3Rpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IGlzc3VlIGhlcmUsIGFuZCBpdCdsbCBjYXRjaCBhbnkgcHJvYmxlbXMuIFdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBvbmUuIFRoaXMgcGF0Y2ggaXMgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjAsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDU6MTMuNDQwNDQyM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 10:23:28 +0000 UTC FinishedAt: 2026-08-21 11:05:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "50c44fea13ec339d0d457079b254e8c8420d6511", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "50c44fea13ec339d0d457079b254e8c8420d6511", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "4e586f3b-2bcb-4dbd-8400-b459ead9aa03" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_fc_replay", "ext4_ext_replay_update_ex", "ext4_ext_replay_shrink_inode", "ext4_ext_replay_set_iblocks", "ext4_ext_clear_bb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JlcGxheSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4JiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X2NsZWFyX2JiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE1YTFkZGVmMDZlYWE4YjAxZTA4YmZlODc3NDIwMDZkNjYzNzMzZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTowNDowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCAxNTk3MjQxMGQ0NjA1Li5iOTVlYWZiMGQ1Y2FkIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtOTA1LDYgJiM0Mzs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcbiBcdFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoKEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHtcbiYjNDM7XHRcdHJldCA9IGV4dDRfZXh0X2NoZWNrKGlub2RlLCBlaCwgZGVwdGgsIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHBhdGgpIHtcbiBcdFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXkmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leCYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9jbGVhcl9iYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGV4dDRfZmluZF9leHRlbnRgIGJ5IGFkZGluZyBhbiBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZXhlY3V0ZWQgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSAod2hlbiBgRVhUNF9GQ19SRVBMQVlgIGlzIHNldCBpbiB0aGUgbW91bnQgc3RhdGUpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgd2hlbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBmYXN0IGNvbW1pdCBibG9ja3MsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTVhMWRkZWYwNmVhYThiMDFlMDhiZmU4Nzc0MjAwNmQ2NjM3MzNkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDExOjA0OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCAxNTk3MjQxMGQ0NjA1Li5iOTVlYWZiMGQ1Y2FkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtOTA1LDYgJiM0Mzs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jaywKIAkJcmV0ID0gLUVGU0NPUlJVUFRFRDsKIAkJZ290byBlcnI7CiAJfQomIzQzOwkvKiBleHQ0X2lnZXQoKSBza2lwcyBleHRlbnQgdmFsaWRhdGlvbiBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiAqLwomIzQzOwlpZiAodW5saWtlbHkoKEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX21vdW50X3N0YXRlICZhbXA7IEVYVDRfRkNfUkVQTEFZKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiAKIAlpZiAocGF0aCkgewogCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0X2ZpbmRfZXh0ZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgZXh0NF9maW5kX2V4dGVudGAgZnVuY3Rpb24uIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgaXQmIzM5O3MgcXVpdGUgc3BlY2lmaWMuIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZWRnZSBjYXNlIHJlbGF0ZWQgdG8gZmFzdCBjb21taXQgcmVwbGF5IHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLgoKVGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBtb3VudCBzdGF0ZSBpbmNsdWRlcyBgRVhUNF9GQ19SRVBMQVlgIGFuZCBpZiB0aGUgaW5vZGUgdXRpbGl6ZXMgZXh0ZW50cyAoYEVYVDRfSU5PREVfRVhURU5UU2ApLiBJZiBib3RoIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgdHJpZ2dlcnMgYSBjYWxsIHRvIGBleHQ0X2V4dF9jaGVja2Agd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHNvbWUgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIHRoaXMgZmFzdCBjb21taXQgcmVwbGF5LiBUaGUgYGV4dDRfaWdldCgpYCBmdW5jdGlvbiBhbHJlYWR5IHNraXBzIGV4dGVudCB2YWxpZGF0aW9uIGZvciBmYXN0IGNvbW1pdCwgc28gdGhpcyBpcyB0YXJnZXRlZCBhdCBzb21lIGRlZXBlciBpbnRlZ3JpdHkgY2hlY2ssIGl0IHdvdWxkIHNlZW0uIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgb3IgZXJyb3IgY29uZGl0aW9uIHRoYXQgbmVlZHMgdG8gYmUgY2F1Z2h0IGR1cmluZyB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGtlcm5lbCBwYXJhbWV0ZXJzIGFyZSBuZWNlc3NhcnkgdG8gZW5hYmxlIG9yIGFmZmVjdCB0aGlzIGBFWFQ0X0ZDX1JFUExBWWAgZnVuY3Rpb25hbGl0eSB3aXRoaW4gZXh0NC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZnVydGhlciB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgbW9kZSB3aXRoaW4gZXh0NCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcyBhZGRlZCBleHRlbnQgY2hlY2suIEEgcXVpY2sgZ3JlcCBvZiB0aGUga2VybmVsIHNvdXJjZSBmb3IgYEVYVDRfRkNfUkVQTEFZYCBzaG91bGQgYmUgbXkgbmV4dCBtb3ZlLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBhbmQgaG93IHRoaXMgZmxhZyBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBUaGF0IHdpbGwgaGVscCBtZSBjb25uZWN0IHRoZSBkb3RzIGJldHRlciBhbmQgZGV0ZXJtaW5lIHdoYXQgcG90ZW50aWFsIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgb3ZlcmFsbCBmaWxlc3lzdGVtIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGR1cmluZyByZWNvdmVyeSBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhUNF9GQ19SRVBMQVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2JhbGxvYy5jPTM5OT1zdGF0aWMgaW50IGV4dDRfdmFsaWRhdGVfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9iYWxsb2MuYy00MDYtXG5mcy9leHQ0L2JhbGxvYy5jOjQwNzpcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvYmFsbG9jLmMtNDA4LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEyMzctI2RlZmluZVx0RVhUNF9PUlBIQU5fRlNcdFx0XHQweDAwMDRcdC8qIE9ycGhhbnMgYmVpbmcgcmVjb3ZlcmVkICovXG5mcy9leHQ0L2V4dDQuaDoxMjM4OiNkZWZpbmUgRVhUNF9GQ19SRVBMQVlcdFx0XHQweDAwMjBcdC8qIEZhc3QgY29tbWl0IHJlcGxheSBvbmdvaW5nICovXG5mcy9leHQ0L2V4dDQuaC0xMjM5LVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmM9OTI9aGFuZGxlX3QgKl9fZXh0NF9qb3VybmFsX3N0YXJ0X3NiKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYy0xMTEtXHRqb3VybmFsID0gRVhUNF9TQihzYiktXHUwMDNlc19qb3VybmFsO1xuZnMvZXh0NC9leHQ0X2piZDIuYzoxMTI6XHRpZiAoIWpvdXJuYWwgfHwgKEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSlcbmZzL2V4dDQvZXh0NF9qYmQyLmMtMTEzLVx0XHRyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9ODg2PWV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtOTA4LVx0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjkwOTpcdGlmICh1bmxpa2VseSgoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2V4dGVudHMuYy05MTAtXHRcdCAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTM2Mz12b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMzY5LVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjM3MDpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTM3MS1cdFx0cmV0dXJuO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz00MTc9Ym9vbCBleHQ0X2VzX3NjYW5fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNDIyLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjQyMzpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTQyNC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz00NjM9Ym9vbCBleHQ0X2VzX3NjYW5fY2x1KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTQ2OC1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo0Njk6XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy00NzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9OTA1PXZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkxOC1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo5MTk6XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MjAtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MTAyND12b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMzMtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAzNDpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMzUtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MTA5Mj1pbnQgZXh0NF9lc19sb29rdXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTExMDEtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTEwMjpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTExMDMtXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0xNjIzPXZvaWQgZXh0NF9lc19yZW1vdmVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTE2MzAtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTYzMTpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTE2MzItXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MjIwMT12b2lkIGV4dDRfZXNfaW5zZXJ0X2RlbGF5ZWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTIyMTMtXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MjIxNDpcdGlmIChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTIyMTUtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ2LVx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NzpcdFx0KEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ4LX1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkxNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8pXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjgtXHRcdFx0XHRzaXplb2YoaW50KSAqIChzdGF0ZS1cdTAwM2VmY19tb2RpZmllZF9pbm9kZXNfc2l6ZSAmIzQzO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5Mjk6XHRcdFx0XHRFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVCksXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzMC1cdFx0XHRcdEdGUF9LRVJORUwpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTM0LVx0XHRzdGF0ZS1cdTAwM2VmY19tb2RpZmllZF9pbm9kZXNfc2l6ZSAmIzQzOz1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTM1Olx0XHRcdEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MzYtXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxMDg9aW50IGV4dDRfZmNfcmVjb3JkX3JlZ2lvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEyNi1cdFx0XHRcdCAgICAgIChzdGF0ZS1cdTAwM2VmY19yZWdpb25zX3NpemUgJiM0MztcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTI3Olx0XHRcdFx0ICAgICAgIEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UKSxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTI4LVx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzEtXHRcdHN0YXRlLVx1MDAzZWZjX3JlZ2lvbnNfc2l6ZSAmIzQzOz1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTMyOlx0XHRcdEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMtXHRcdHN0YXRlLVx1MDAzZWZjX3JlZ2lvbnMgPSBmY19yZWdpb25zO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDA1PXZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA4LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0MDk6XHRzYmktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjY9IH5FWFQ0X0ZDX1JFUExBWTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDEwLVx0a2ZyZWUoc2JpLVx1MDAzZXNfZmNfcmVwbGF5X3N0YXRlLmZjX3JlZ2lvbnMpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNTgxPXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk4LVx0XHRzdGF0ZS1cdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBwYXNzO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1OTk6XHRcdHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIHw9IEVYVDRfRkNfUkVQTEFZO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MDAtXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oPTEyMD1zdHJ1Y3QgZXh0NF9mY19zdGF0cyB7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTEyOS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxMzA6I2RlZmluZSBFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVFx0NFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTEzMS1cbi0tXG5mcy9leHQ0L2lhbGxvYy5jPTgxPXN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9pbm9kZV9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTg4LVxuZnMvZXh0NC9pYWxsb2MuYzo4OTpcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvaWFsbG9jLmMtOTAtXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmM9MjM3PXZvaWQgZXh0NF9mcmVlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0yOTUtXHR9XG5mcy9leHQ0L2lhbGxvYy5jOjI5NjpcdGlmICghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMjk3LVx0XHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBibG9ja19ncm91cCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYz05MzM9c3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTA1My1cbmZzL2V4dDQvaWFsbG9jLmM6MTA1NDpcdFx0aWYgKCEoc2JpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSkge1xuZnMvZXh0NC9pYWxsb2MuYy0xMDU1LVx0XHRcdGdycCA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGdyb3VwKTtcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTEwNzAtXHRcdH1cbmZzL2V4dDQvaWFsbG9jLmM6MTA3MTpcdFx0aWYgKCEoc2JpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaWFsbG9jLmMtMTA3Mi1cdFx0ICAgIEVYVDRfTUJfR1JQX0lCSVRNQVBfQ09SUlVQVChncnApKVxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTA4Ni1cbmZzL2V4dDQvaWFsbG9jLmM6MTA4NzpcdFx0aWYgKCghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIFx1MDAyNlx1MDAyNiAhaGFuZGxlKSB7XG5mcy9leHQ0L2lhbGxvYy5jLTEwODgtXHRcdFx0QlVHX09OKG5ibG9ja3MgXHUwMDNjPSAwKTtcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTExOTItXG5mcy9leHQ0L2lhbGxvYy5jOjExOTM6XHRcdGlmICghKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMTE5NC1cdFx0XHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBncm91cCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMjE4LVx0XHRcdFx0XHQoRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKSAtIGlubykpO1xuZnMvZXh0NC9pYWxsb2MuYzoxMjE5Olx0XHRpZiAoIShzYmktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKVxuZnMvZXh0NC9pYWxsb2MuYy0xMjIwLVx0XHRcdHVwX3JlYWQoXHUwMDI2Z3JwLVx1MDAzZWFsbG9jX3NlbSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQ0MD12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lub2RlLmMtNDQxLXtcbmZzL2V4dDQvaW5vZGUuYzo0NDI6XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvaW5vZGUuYy00NDMtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2lub2RlLmM9OTc5PXN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9nZXRibGsoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtOTg3LVxuZnMvZXh0NC9pbm9kZS5jOjk4ODpcdEFTU0VSVCgoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvaW5vZGUuYy05ODktXHRcdCAgICB8fCBoYW5kbGUgIT0gTlVMTCB8fCBjcmVhdGUgPT0gMCk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTEwMTUtXHRcdEFTU0VSVChjcmVhdGUgIT0gMCk7XG5mcy9leHQ0L2lub2RlLmM6MTAxNjpcdFx0QVNTRVJUKChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxuZnMvZXh0NC9pbm9kZS5jLTEwMTctXHRcdFx0ICAgIHx8IChoYW5kbGUgIT0gTlVMTCkpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjQ1PXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUzMjctXHQgICAgZXh0NF9zaW11bGF0ZV9mYWlsKHNiLCBFWFQ0X1NJTV9JTk9ERV9DUkMpKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaW5vZGUuYzo1MzI4Olx0ICAgICAoIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpKSB7XG5mcy9leHQ0L2lub2RlLmMtNTMyOS1cdFx0ZXh0NF9lcnJvcl9pbm9kZV9lcnIoaW5vZGUsIGZ1bmN0aW9uLCBsaW5lLCAwLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NDk3LVx0XHQvKiB2YWxpZGF0ZSB0aGUgYmxvY2sgcmVmZXJlbmNlcyBpbiB0aGUgaW5vZGUgKi9cbmZzL2V4dDQvaW5vZGUuYzo1NDk4Olx0XHRpZiAoIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2lub2RlLmMtNTQ5OS1cdFx0XHQoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTIwMDA9c3RhdGljIHZvaWQgbWJfZnJlZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfYnVkZHkgKmU0Yixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0yMDM2LVx0XHQgKi9cbmZzL2V4dDQvbWJhbGxvYy5jOjIwMzc6XHRcdGlmIChzYmktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIHtcbmZzL2V4dDQvbWJhbGxvYy5jLTIwMzgtXHRcdFx0bWJfcmVnZW5lcmF0ZV9idWRkeShlNGIpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU2MDc9dm9pZCBleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NjIxLVxuZnMvZXh0NC9tYmFsbG9jLmM6NTYyMjpcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvbWJhbGxvYy5jLTU2MjMtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MjI5PWV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MjQ1LVx0dHJhY2VfZXh0NF9yZXF1ZXN0X2Jsb2Nrcyhhcik7XG5mcy9leHQ0L21iYWxsb2MuYzo2MjQ2Olx0aWYgKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvbWJhbGxvYy5jLTYyNDctXHRcdHJldHVybiBleHQ0X21iX25ld19ibG9ja3Nfc2ltcGxlKGFyLCBlcnJwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02NjkxPXZvaWQgZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTY3MDctXG5mcy9leHQ0L21iYWxsb2MuYzo2NzA4Olx0aWYgKHNiaS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkge1xuZnMvZXh0NC9tYmFsbG9jLmMtNjcwOS1cdFx0ZXh0NF9mcmVlX2Jsb2Nrc19zaW1wbGUoaW5vZGUsIGJsb2NrLCBFWFQ0X05VTV9CMkMoc2JpLCBjb3VudCkpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zMjI2PWludCBfX2V4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZF9uYW1lLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zMjUyLVx0XHQgKi9cbmZzL2V4dDQvbmFtZWkuYzozMjUzOlx0XHRpZiAoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcbmZzL2V4dDQvbmFtZWkuYy0zMjU0LVx0XHRcdHNraXBfcmVtb3ZlX2RlbnRyeSA9IDE7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTM3OTc9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy00MDA4LVx0XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYzo0MDA5Olx0XHQgICAgIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmMtNDAxMC1cdFx0ICAgICEoZXh0NF90ZXN0X21vdW50X2ZsYWcoc2IsIEVYVDRfTUZfRkNfSU5FTElHSUJMRSkpKSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUyODU9c3RhdGljIGludCBleHQ0X2Jsb2NrX2dyb3VwX21ldGFfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2lsZW50KVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MzI2LVx0c2JpLVx1MDAzZXNfZGVzY19wZXJfYmxvY2sgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAvIEVYVDRfREVTQ19TSVpFKHNiKTtcbmZzL2V4dDQvc3VwZXIuYzo1MzI3Olx0c2JpLVx1MDAzZXNfbW91bnRfc3RhdGUgPSBsZTE2X3RvX2NwdShlcy1cdTAwM2VzX3N0YXRlKSBcdTAwMjYgfkVYVDRfRkNfUkVQTEFZO1xuZnMvZXh0NC9zdXBlci5jLTUzMjgtXHRzYmktXHUwMDNlc19hZGRyX3Blcl9ibG9ja19iaXRzID0gaWxvZzIoRVhUNF9BRERSX1BFUl9CTE9DSyhzYikpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz02NTY2PXN0YXRpYyBpbnQgX19leHQ0X3JlbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy02Nzc3LVx0XHRcdHNiaS1cdTAwM2VzX21vdW50X3N0YXRlID0gKGxlMTZfdG9fY3B1KGVzLVx1MDAzZXNfc3RhdGUpIFx1MDAyNlxuZnMvZXh0NC9zdXBlci5jOjY3Nzg6XHRcdFx0XHRcdCAgICAgIH5FWFQ0X0ZDX1JFUExBWSk7XG5mcy9leHQ0L3N1cGVyLmMtNjc3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IEZhc3QgQ29tbWl0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcGxheWluZyBpbiB0aGUgYGV4dDRfZmluZF9leHRlbnRgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIGZvciBgRVhUNF9GQ19SRVBMQVlgIGFuZCB0aGVuIGNhbGxpbmcgYGV4dDRfZXh0X2NoZWNrYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRoYXQgbGlrZWx5IGFmZmVjdHMgdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGNoZWNrLgoKUmlnaHQsIHNvIGZhc3QgY29tbWl0IGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgYENPTkZJR19FWFQ0X0ZTYCBvcHRpb24sIHdoaWNoIGlzIHN0YW5kYXJkLiBCdXQgSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSBpdHNlbGYuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gYWNyb3NzIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0pPVVJOQUxfRkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEzMDgtXG5mcy9leHQ0L2V4dDQuaDoxMzA5OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFx0MHgwMDAwMDAxMCAvKiBKb3VybmFsIGZhc3QgY29tbWl0ICovXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXHRcdDB4MDAwMDAwMjAgLyogRG8gbm90IGFsbG93IERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDUte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NjpcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDctXHRcdChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xNTg2PWludCBleHQ0X2ZjX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IGNvbW1pdF90aWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTU5NjpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVx0XHRyZXR1cm4gamJkMl9jb21wbGV0ZV90cmFuc2FjdGlvbihqb3VybmFsLCBjb21taXRfdGlkKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXHRqb3VybmFsLVx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgyLVx0XHRyZXR1cm47XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTM0Mjk9c3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDM3LVx0XHRcdHJldHVybiBmYWxzZTtcbmZzL2V4dDQvaW5vZGUuYzozNDM4Olx0XHRpZiAodGVzdF9vcHQyKGlub2RlLVx1MDAzZWlfc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9pbm9kZS5jLTM0MzktXHRcdFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9mY19saXN0KTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTQwMDctXHRcdFx0ZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlLCBuZXcuZGVudHJ5KTtcbmZzL2V4dDQvbmFtZWkuYzo0MDA4Olx0XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy00MDA5LVx0XHQgICAgIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk1NC0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYzoxOTU1Olx0e09wdF9mY19kZWJ1Z19mb3JjZSwgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVCxcbmZzL2V4dDQvc3VwZXIuYy0xOTU2LVx0IE1PUFRfU0VUIHwgTU9QVF8yIHwgTU9QVF9FWFQ0X09OTFl9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYz00Mzk2PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MTUtXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXG5mcy9leHQ0L3N1cGVyLmM6NDQxNjpcdFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTQ0MTctXHQvKiBkb24mIzM5O3QgZm9yZ2V0IHRvIGVuYWJsZSBqb3VybmFsX2NzdW0gd2hlbiBtZXRhZGF0YV9jc3VtIGlzIGVuYWJsZWQuICovXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ5NjQ9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00OTg3LVxuZnMvZXh0NC9zdXBlci5jOjQ5ODg6XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvc3VwZXIuYy00OTg5LVx0XHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cdTAwM2VzX2pvdXJuYWwsIDAsIDAsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNDg9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNTUtXHRcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xuZnMvZXh0NC9zdXBlci5jOjUwNTY6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTUwNTctXHRcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzQ2PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NTQ0LVx0XHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xuZnMvZXh0NC9zdXBlci5jOjU1NDU6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTU1NDYtXHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZhc3QgQ29tbWl0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSByZWxhdGVkIHRvIHRoZSBmYXN0IGNvbW1pdCBmZWF0dXJlIHdpdGhpbiBleHQ0LiBUaGUgY29udGV4dCBoZXJlIGlzIG1vZGlmeWluZyBgZXh0NF9maW5kX2V4dGVudGAsIHdoaWNoIGlzIGEgKmNvcmUqIGZ1bmN0aW9uLCBubyBxdWVzdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBmb3IgYEVYVDRfRkNfUkVQTEFZYCBhbmQgc3Vic2VxdWVudGx5IGNhbGxzIGBleHQ0X2V4dF9jaGVja2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW5zdGluY3Qgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0ISYjMzQ7LiBEZWZpbml0ZWx5IHdvcnRoIGEgZGVlcCBkaXZlIHRoZXJlLgoKSW5pdGlhbGx5LCBJIHplcm9lZCBpbiBvbiBgZXh0NF9maW5kX2V4dGVudGAgYW5kIGBleHQ0X2V4dF9jaGVja2AgYXMgcHJpbWUgZnV6emluZyB0YXJnZXRzLiBCdXQsIGhvbGQgb24uLi4gYGV4dDRfZmluZF9leHRlbnRgIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBJIHJlY2FsbCB0aGUgZ3VpZGVsaW5lczogd2Ugd2FudCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RzIGZyb20gYmVpbmcgc2tld2VkLiBUaGV5IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFdlIHdhbnQgZ29vZCBjb3ZlcmFnZS4KCk9rYXksIHNvIGBleHQ0X2ZpbmRfZXh0ZW50YCAqaXMqIGNhbGxlZCBmcmVxdWVudGx5LiBCdXQgY3J1Y2lhbGx5LCBgZXh0NF9leHRfY2hlY2tgIGlzIG9ubHkgY2FsbGVkICpoZXJlKiwgd2l0aGluIHRoZSBjb250ZXh0IG9mIGZhc3QgY29tbWl0IHJlcGxheS4gVGhlIHNwZWNpZmljIGNvbmRpdGlvbiBpcyBkZXBlbmRlbnQgb24gYEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX21vdW50X3N0YXRlICZhbXA7IEVYVDRfRkNfUkVQTEFZYCwgd2hpY2ggaXMgb25seSB0cnVlICpkdXJpbmcqIGZhc3QgY29tbWl0IHJlcGxheSwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBlZGdlIGNhc2VzLgoKQWgsIEkgdGhpbmsgSSBzZWUgdGhlIGtleS4gRmFzdCBjb21taXQgcmVwbGF5IGl0c2VsZiBpcyBsaWtlbHkgaGFuZGxlZCBpbiBgZXh0NF9mY19yZXBsYXlgLiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGludmVzdGlnYXRpbmcgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGdpdmUgdXMgbW9yZSBvZiB0aGUgY29tcGxldGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2ZjX3JlcGxheSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTg2MS0jZW5kaWZcbmZzL2V4dDQvZXh0NC5oOjE4NjI6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgc19mY19yZXBsYXlfc3RhdGU7XG5mcy9leHQ0L2V4dDQuaC0xODYzLX07XG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzA3OT12b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0Lmg6MzA4MDpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibG9jayk7XG5mcy9leHQ0L2V4dDQuaDozMDgxOnZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvZXh0NC5oLTMwODItaW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE4MDQ9c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfZ2V0X3RsKHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MTMtLyogVW5saW5rIHJlcGxheSBmdW5jdGlvbiAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MTQ6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODE1LVx0XHRcdFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjMtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgyNDpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19VTkxJTkssIGRhcmcuaW5vLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjUtXHRcdFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4NTItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg1MzpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODU0LVx0XHRcdFx0c3RydWN0IGRlbnRyeV9pbmZvX2FyZ3MgKmRhcmcsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4ODgtLyogTGluayByZXBsYXkgZnVuY3Rpb24gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODg5OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfbGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTAtXHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTYtXHR0bF90b19kYXJnKFx1MDAyNmRhcmcsIHRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4OTc6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfTElOSywgZGFyZy5pbm8sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5OC1cdFx0XHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkwNS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTA2Olx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzYiwgXHUwMDI2ZGFyZywgaW5vZGUpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MDctXHRpcHV0KGlub2RlKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkxNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8pXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkxNi17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkxNzpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkxOC1cdGludCBpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTQzLSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NDQ6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDUtXHRcdFx0XHRzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTU4LVx0aW5vID0gbGUzMl90b19jcHUoZmNfaW5vZGUuZmNfaW5vKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTU5Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRhZywgaW5vLCAwLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTYwLVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDQ5LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNTA6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDUxLVx0XHRcdFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNTktXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA2MDpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19DUkVBVCwgZGFyZy5pbm8sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA2MS1cdFx0XHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA5Mi1cdH1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDkzOlx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzYiwgXHUwMDI2ZGFyZywgaW5vZGUpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTQtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTA4PWludCBleHQ0X2ZjX3JlY29yZF9yZWdpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8sXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTAte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMTE6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTItXHRzdHJ1Y3QgZXh0NF9mY19hbGxvY19yZWdpb24gKnJlZ2lvbjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0Ny0vKiBSZXBsYXkgYWRkIHJhbmdlIHRhZyAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTQ5LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2Mi1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTYzOlx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0FERF9SQU5HRSxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTY0LVx0XHRsZTMyX3RvX2NwdShmY19hZGRfZXguZmNfaW5vKSwgbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjY3PXN0YXRpYyBpbnRcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjY4OmV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNjkte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjc5LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyODA6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfREVMX1JBTkdFLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyODEtXHRcdGxlMzJfdG9fY3B1KGxyYW5nZS5mY19pbm8pLCBjdXIsIHJlbWFpbmluZyk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIzMjg9c3RhdGljIHZvaWQgZXh0NF9mY19zZXRfYml0bWFwc19hbmRfY291bnRlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzI5LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzMwOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzMxLVx0c3RydWN0IGlub2RlICppbm9kZTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4Ni0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzg3OmJvb2wgZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsaylcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg4LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg5LVx0aW50IGk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM5MDpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5MS1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNC0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDA1OnZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0MDYte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDE0PXN0YXRpYyBib29sIGV4dDRfZmNfdmFsdWVfbGVuX2lzdmFsaWQoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU3LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NTg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWxfdCAqam91cm5hbCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU5LVx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZixcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ2My1cdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NjQ6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjUtXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzItb3V0X2VycjpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTczOlx0dHJhY2VfZXh0NF9mY19yZXBsYXlfc2NhbihzYiwgcmV0LCBvZmYpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzQtXHRyZXR1cm4gcmV0O1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTgwLSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODE6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Mi1cdFx0XHRcdGVudW0gcGFzc3R5cGUgcGFzcywgaW50IG9mZiwgdGlkX3QgZXhwZWN0ZWRfdGlkKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTg4LVx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODk6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlID0gXHUwMDI2c2JpLVx1MDAzZXNfZmNfcmVwbGF5X3N0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTAtXHRzdHJ1Y3QgZXh0NF9mY190YWlsIHRhaWw7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTMtXHRcdHN0YXRlLVx1MDAzZWZjX2N1cnJlbnRfcGFzcyA9IFBBU1NfU0NBTjtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk0Olx0XHRyZXR1cm4gZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsLCBiaCwgb2ZmLCBleHBlY3RlZF90aWQpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTUtXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzEtXHRcdGNhc2UgRVhUNF9GQ19UQUdfTElOSzpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjMyOlx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmsoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzMtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNC1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19VTkxJTks6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNTpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzYtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNy1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19BRERfUkFOR0U6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzODpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc2IsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzOS1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQwLVx0XHRjYXNlIEVYVDRfRkNfVEFHX0NSRUFUOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NDE6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfY3JlYXRlKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQyLVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDMtXHRcdGNhc2UgRVhUNF9GQ19UQUdfREVMX1JBTkdFOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NDQ6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlKHNiLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDUtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Ni1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19JTk9ERTpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ3Olx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2lub2RlKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ4LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDktXHRcdGNhc2UgRVhUNF9GQ19UQUdfUEFEOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTA6XHRcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1BBRCwgMCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUxLVx0XHRcdFx0XHQgICAgIHRsLmZjX2xlbiwgMCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTMtXHRcdGNhc2UgRVhUNF9GQ19UQUdfVEFJTDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjU0Olx0XHRcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19UQUlMLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTUtXHRcdFx0XHRcdCAgICAgMCwgdGwuZmNfbGVuLCAwKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY2MS1cdFx0ZGVmYXVsdDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjYyOlx0XHRcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0bC5mY190YWcsIDAsIHRsLmZjX2xlbiwgMCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY2My1cdFx0XHRyZXQgPSAtRUNBTkNFTEVEO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNjczPXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3OS1cdCAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2ODA6XHRqb3VybmFsLVx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY4MS1cdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTM5PXN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiB7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTE0Ny0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxNDg6c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHtcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDktXHRpbnQgZmNfcmVwbGF5X251bV90YWdzO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTYxNjI9ZXh0NF9tYl9uZXdfYmxvY2tzX3NpbXBsZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgKmFyLCBpbnQgKmVycnApXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5My1cdFx0XHRcdGJyZWFrO1xuZnMvZXh0NC9tYmFsbG9jLmM6NjE5NDpcdFx0XHRpZiAoZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc2IsXG5mcy9leHQ0L21iYWxsb2MuYy02MTk1LVx0XHRcdFx0ZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZ3JvdXApICYjNDM7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU2NDUtXHR9XG5mcy9leHQ0L3N1cGVyLmM6NTY0NjpcdGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU2NDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgRmFzdCBDb21taXQgUmVwbGF5IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBgZXh0NF9mY19yZXBsYXlgLCBgZXh0NF9mY19yZXBsYXlfc2NhbmAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAuIERlZmluaXRlbHkgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhhdCB3aG9sZSBsb2dpYy4gTXkgbWFpbiBmb2N1cyBub3cgaXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLgoKSXQgc2VlbXMgdGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2ZpbmRfZXh0ZW50YCB0byB2YWxpZGF0ZSBleHRlbnRzIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXksIHdoaWNoIG1lYW5zIHRoYXQgZnVuY3Rpb25zIGxpa2UgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCBhcmUgZ29pbmcgdG8gYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgYW5kIHNlZSBob3cgdGhlIGV4dGVudCB2YWxpZGF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXBsYXkuCgpBbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQsIGBleHQ0X2V4dF9jaGVja2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgcGF0Y2gsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYy4gSWYgc28sIGl0IG1pZ2h0IGFmZmVjdCBob3cgSSBjYW4gbGV2ZXJhZ2UgaXQgaW4gbXkgZnV6emluZyBzZXR1cC4gTmVlZCB0byBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MTY9ZXh0ZXJuIHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICopO1xuZnMvZXh0NC9leHQ0Lmg6MzkxNzpleHRlcm4gaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzkxOC1leHRlcm4gZXh0NF9sYmxrX3QgZXh0NF9leHRfbmV4dF9hbGxvY2F0ZWRfYmxvY2soc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTM4OD1zdGF0aWMgaW50IGV4dDRfdmFsaWRfZXh0ZW50X2VudHJpZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NTQtXG5mcy9leHQ0L2V4dGVudHMuYzo0NTU6c3RhdGljIGludCBfX2V4dDRfZXh0X2NoZWNrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1Ni1cdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWgsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTE1LVxuZnMvZXh0NC9leHRlbnRzLmM6NTE2OiNkZWZpbmUgZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgcGJsaylcdFx0XHRcXFxuZnMvZXh0NC9leHRlbnRzLmM6NTE3Olx0X19leHQ0X2V4dF9jaGVjayhfX2Z1bmNfXywgX19MSU5FX18sIChpbm9kZSksIChlaCksIChkZXB0aCksIChwYmxrKSwgMClcbmZzL2V4dDQvZXh0ZW50cy5jLTUxOC1cbmZzL2V4dDQvZXh0ZW50cy5jOjUxOTppbnQgZXh0NF9leHRfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMC17XG5mcy9leHQ0L2V4dGVudHMuYzo1MjE6XHRyZXR1cm4gZXh0NF9leHRfY2hlY2soaW5vZGUsIGV4dF9pbm9kZV9oZHIoaW5vZGUpLCBleHRfZGVwdGgoaW5vZGUpLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMi19XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTUxPV9fcmVhZF9leHRlbnRfdHJlZV9ibG9jayhjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTc1LVx0XHRyZXR1cm4gYmg7XG5mcy9leHQ0L2V4dGVudHMuYzo1NzY6XHRlcnIgPSBfX2V4dDRfZXh0X2NoZWNrKGZ1bmN0aW9uLCBsaW5lLCBpbm9kZSwgZXh0X2Jsb2NrX2hkcihiaCksXG5mcy9leHQ0L2V4dGVudHMuYy01NzctXHRcdFx0ICAgICAgIGRlcHRoLCBwYmxrLCBsZTMyX3RvX2NwdShpZHgtXHUwMDNlZWlfYmxvY2spKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MDM9aW50IGV4dDRfZXh0X3ByZWNhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjMwLVx0cGF0aFswXS5wX2hkciA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpO1xuZnMvZXh0NC9leHRlbnRzLmM6NjMxOlx0cmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIHBhdGhbMF0ucF9oZHIsIGRlcHRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYzMi1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9ODg2PWV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtOTEwLVx0XHQgICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkge1xuZnMvZXh0NC9leHRlbnRzLmM6OTExOlx0XHRyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTkxMi1cdFx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0xOTE5PXN0YXRpYyB2b2lkIGV4dDRfZXh0X3RyeV90b19tZXJnZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTE5NDgtICovXG5mcy9leHQ0L2V4dGVudHMuYzoxOTQ5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG5mcy9leHQ0L2V4dGVudHMuYy0xOTUwLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTI4NDQ9aW50IGV4dDRfZXh0X3JlbW92ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yOTc1LVxuZnMvZXh0NC9leHRlbnRzLmM6Mjk3NjpcdFx0aWYgKGV4dDRfZXh0X2NoZWNrKGlub2RlLCBwYXRoWzBdLnBfaGRyLCBkZXB0aCwgMCkpIHtcbmZzL2V4dDQvZXh0ZW50cy5jLTI5NzctXHRcdFx0ZXJyID0gLUVGU0NPUlJVUFRFRDtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00Mjc2PWludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDQzNC1cdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KG1hcC1cdTAwM2VtX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzo0NDM1Olx0ZXJyID0gZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzYmksIGlub2RlLCBcdTAwMjZuZXdleCwgcGF0aCk7XG5mcy9leHQ0L2V4dGVudHMuYy00NDM2LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NTAyLVx0XHRcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSlcbmZzL2V4dDQvaW5vZGUuYzo1NTAzOlx0XHRcdFx0cmV0ID0gZXh0NF9leHRfY2hlY2tfaW5vZGUoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTU1MDQtXHRcdFx0ZWxzZVxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jPTYwMz1pbnQgZXh0NF9pbmRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTY0Ni1cdGRvd25fd3JpdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbmZzL2V4dDQvbWlncmF0ZS5jOjY0NzpcdHJldCA9IGV4dDRfZXh0X2NoZWNrX2lub2RlKGlub2RlKTtcbmZzL2V4dDQvbWlncmF0ZS5jLTY0OC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTEzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZpbGUgU3lzdGVtIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBleHQ0X2V4dF9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEgbWFjcm8gdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGBfX2V4dDRfZXh0X2NoZWNrYC4gVGhlIHBhdGNoIG1lbnRpb25zIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgZXh0NF9maW5kX2V4dGVudGAsIHNvIGl0IHNlZW1zIGxpa2UgYW4gZXh0ZW50LXJlbGF0ZWQgaXNzdWUuIFRoZSBmYWN0IHRoYXQgdGhlIGZhc3QgY29tbWl0IHJlcGxheSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGlzIGludGVyZXN0aW5nLgoKUmlnaHQsIHNvIHRoZSB0cmFjZSBwb2ludHMgdG8gYSBwcm9ibGVtIHNwZWNpZmljIHRvIGZhc3QgY29tbWl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBpbiB0aGUgZGVidWdnaW5nIHRvb2xzLiBMZXQmIzM5O3MgYWRkIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzaG91bGQgaGVscCBwaW5wb2ludCB0aGUgcHJvYmxlbS4KCk5vdywgdGhpcyBjb25maWcuLi4gaXQgbG9va3MgbGlrZSBpdCBpcyBjb250cm9sbGVkIGJ5IGBFWFQ0X0ZTYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgd29uZGVyLCB0aG91Z2gsIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9uIHJlbGF0ZWQganVzdCB0byB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSBpdHNlbGYuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8ga25vdyBpZiB0aGUgZmFzdCBjb21taXQgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGF0IGFsbC4gTGV0JiMzOTtzIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZBU1RfQ09NTUlUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xMzA4LVxuZnMvZXh0NC9leHQ0Lmg6MTMwOTojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcdDB4MDAwMDAwMTAgLyogSm91cm5hbCBmYXN0IGNvbW1pdCAqL1xuZnMvZXh0NC9leHQ0LmgtMTMxMC0jZGVmaW5lIEVYVDRfTU9VTlQyX0RBWF9ORVZFUlx0XHQweDAwMDAwMDIwIC8qIERvIG5vdCBhbGxvdyBEaXJlY3QgQWNjZXNzICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjEyOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2Jocyhcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMTc0LS8qXG5mcy9leHQ0L2V4dDQuaDoyMTc1OiAqIFRoZSByZWFzb24gd2h5IFwmIzM0O0ZBU1RfQ09NTUlUXCYjMzQ7IGlzIGEgY29tcGF0IGZlYXR1cmUgaXMgdGhhdCwgRlMgYmVjb21lc1xuZnMvZXh0NC9leHQ0LmgtMjE3Ni0gKiBpbmNvbXBhdGlibGUgb25seSBpZiBmYXN0IGNvbW1pdCBibG9ja3MgYXJlIHByZXNlbnQgaW4gdGhlIEZTLiBTaW5jZSB3ZVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIxODAtICovXG5mcy9leHQ0L2V4dDQuaDoyMTgxOiNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVFx0XHQweDA0MDBcbmZzL2V4dDQvZXh0NC5oLTIxODItI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NUQUJMRV9JTk9ERVNcdDB4MDgwMFxuLS1cbmZzL2V4dDQvZXh0NC5oPTIyODY9RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzcGFyc2Vfc3VwZXIyLFx0U1BBUlNFX1NVUEVSMilcbmZzL2V4dDQvZXh0NC5oOjIyODc6RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhmYXN0X2NvbW1pdCxcdFx0RkFTVF9DT01NSVQpXG5mcy9leHQ0L2V4dDQuaC0yMjg4LUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3RhYmxlX2lub2RlcyxcdFNUQUJMRV9JTk9ERVMpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0ND1zdGF0aWMgYm9vbCBleHQ0X2ZjX2Rpc2FibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY6XHRyZXR1cm4gKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ3LVx0XHQoRVhUNF9TQihzYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDA5PXN0YXRpYyBpbnQgZXh0NF9mY190cmFja190ZW1wbGF0ZShcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDM5LVx0XHRcdFx0KHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDQwOlx0XHRcdFx0IHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKSA/XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDQxLVx0XHRcdFx0XHUwMDI2c2JpLVx1MDAzZXNfZmNfcVtGQ19RX1NUQUdJTkddIDpcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDU0PXN0YXRpYyBpbnQgX190cmFja19kZW50cnlfdXBkYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ5MC1cdGlmIChzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRlVMTF9DT01NSVRfT05HT0lORyB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ5MTpcdFx0c2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDkyLVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm5vZGUtXHUwMDNlZmNkX2xpc3QsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE1ODY9aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU5NS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxNTk2Olx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTctXHRcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNjczPXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY4MC1cdGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjgxOlx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODItXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMi1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDozOiNpZm5kZWYgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaC01LVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTg4LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cbi0tXG5mcy9leHQ0L2lub2RlLmM9MzQyOT1zdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXHRcdFx0cmV0dXJuIGZhbHNlO1xuZnMvZXh0NC9pbm9kZS5jOjM0Mzg6XHRcdGlmICh0ZXN0X29wdDIoaW5vZGUtXHUwMDNlaV9zYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2lub2RlLmMtMzQzOS1cdFx0XHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX2xpc3QpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cdFx0XHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xuZnMvZXh0NC9uYW1laS5jOjQwMDg6XHRcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTQwMDktXHRcdCAgICAhKEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTg4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTU0LSNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jOjE5NTU6XHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxuZnMvZXh0NC9zdXBlci5jLTE5NTYtXHQgTU9QVF9TRVQgfCBNT1BUXzIgfCBNT1BUX0VYVDRfT05MWX0sXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQzOTY9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDQxNS1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcbmZzL2V4dDQvc3VwZXIuYzo0NDE2Olx0XHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNDQxNy1cdC8qIGRvbiYjMzk7dCBmb3JnZXQgdG8gZW5hYmxlIGpvdXJuYWxfY3N1bSB3aGVuIG1ldGFkYXRhX2NzdW0gaXMgZW5hYmxlZC4gKi9cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDk2ND1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5ODctXG5mcy9leHQ0L3N1cGVyLmM6NDk4ODpcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9zdXBlci5jLTQ5ODktXHRcdCFqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKEVYVDRfU0Ioc2IpLVx1MDAzZXNfam91cm5hbCwgMCwgMCxcbmZzL2V4dDQvc3VwZXIuYzo0OTkwOlx0XHRcdFx0XHQgIEpCRDJfRkVBVFVSRV9JTkNPTVBBVF9GQVNUX0NPTU1JVCkpIHtcbmZzL2V4dDQvc3VwZXIuYy00OTkxLVx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNDg9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNTUtXHRcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xuZnMvZXh0NC9zdXBlci5jOjUwNTY6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTUwNTctXHRcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzQ2PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NTQ0LVx0XHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xuZnMvZXh0NC9zdXBlci5jOjU1NDU6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTU1NDYtXHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0cyBvbiBGYXN0IENvbW1pdCBpbiBleHQ0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZmFzdCBjb21taXQgaW4gZXh0NC4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBlbmFibGVkIHRocm91Z2ggdGhlIGZpbGUgc3lzdGVtIGFuZCBqb3VybmFsIGZlYXR1cmVzOiBgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVGAgYW5kIGBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfRkFTVF9DT01NSVRgLiBJdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZSBhIGRpcmVjdCBgQ09ORklHX0VYVDRfRkFTVF9DT01NSVRgLiBJdCYjMzk7cyBqdXN0IGJ1bmRsZWQgaW50byBgQ09ORklHX0VYVDRfRlNgLiBCdXQgaGFuZyBvbiBhIHNlY29uZCwgaXMgdGhlcmUgYSBzcGVjaWZpYyBgSkJEMl9GQVNUX0NPTU1JVGAgY29uZmlnIG9wdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGVpdGhlciBgZnMvamJkMi9LY29uZmlnYCBvciwgcGVyaGFwcywgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYWx3YXlzIHRoZSBkZXRhaWxzIGluIHRob3NlIGNvbmZpZyBmaWxlcyB0aGF0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSkJEMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXG5mcy9qYmQyL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZnMvamJkMi9LY29uZmlnLTE5LVxuZnMvamJkMi9LY29uZmlnOjIwOmNvbmZpZyBKQkQyX0RFQlVHXG5mcy9qYmQyL0tjb25maWctMjEtXHRib29sIFwmIzM0O0pCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ2hlY2tpbmcgdGhlIEV4dDQgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKgoKQWxyaWdodCwgc28gYENPTkZJR19FWFQ0X0ZTYCBzZWVtcyB0byBiZSB0aGUgb25lIGFic29sdXRlLCBub24tbmVnb3RpYWJsZSBjb25maWcgc2V0dGluZyB3ZSAqbXVzdCogaGF2ZSBpbiBwbGFjZS4gSXQmIzM5O3MgdGhlIGx5bmNocGluLCBubyBkb3VidC4gQnV0IEkmIzM5O20gYWx3YXlzIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBxdWljayBzd2VlcC4gSXQmIzM5O3MgYSBnb29kIGhhYml0IC0gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRseSByZXF1aXJlZCBjb25maWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGJpdGUgdXMgbGF0ZXIuIE5vIGhhcm0gaW4gYSBzZWNvbmQgbG9vay4gSnVzdCBtYWtpbmcgc3VyZSB3ZSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nIGNydWNpYWwgZHVyaW5nIG91ciBpbml0aWFsIHBhc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy0zNC1cbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbmZzL2V4dDQvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTY3LVxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXG5mcy9leHQ0L0tjb25maWctNjktXHRib29sIFwmIzM0O0V4dDQgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNzYtXG5mcy9leHQ0L0tjb25maWc6Nzc6Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcbmZzL2V4dDQvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBleHQ0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVYVDQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBFWFQ0IHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSBsaW5lIG9mIHRoaW5raW5nLiBJdCBsb29rcyBsaWtlIGBFWFQ0X0ZTYCBpcyB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtIHRvIGZvY3VzIG9uLCB3aGljaCBpcyBhIGdpdmVuLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBhZGRlZCB3aXRoaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIGNoZWNrIHNwZWNpZmljYWxseSBhY3RpdmF0ZXMgb25seSB3aGVuIGBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19tb3VudF9zdGF0ZSAmYW1wOyBFWFQ0X0ZDX1JFUExBWWAgaXMgdHJ1ZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MgaGVyZS4KCkZhc3QgY29tbWl0IHJlcGxheSBpdHNlbGYgaXMgdHJpZ2dlcmVkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50LCBidXQgb25seSBpZiB0aGVyZSBhcmUgZmFzdCBjb21taXQgYmxvY2tzIHRoYXQgbmVlZCB0byBiZSByZXBsYXllZC4gU28gdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgcmVwbGF5IHByb2Nlc3MgaXMgZGVmaW5pdGVseSBgZXh0NF9mY19yZXBsYXlgLiBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBgZXh0NF9leHRfY2hlY2tfaW5vZGVgIG9yIGl0cyBtYWNybyBleHBhbnNpb24gYF9fZXh0NF9leHRfY2hlY2tgIGFzIHBvdGVudGlhbCBrZXkgc3ltYm9scy4gQnV0IEkgbmVlZCB0byBuYXJyb3cgdGhlIGZvY3VzIHRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nICpkdXJpbmcqIGZhc3QgY29tbWl0IHJlcGxheSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgpJIHN0YXJ0ZWQgYnkgbGlzdGluZyBgZXh0NF9mY19yZXBsYXlgLCBgX19leHQ0X2V4dF9jaGVja2AsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAgZm9yIHRoZSBmb2N1cyBzeW1ib2xzLiBIb3dldmVyLCBJIHJlYWxpemVkIGBfX2V4dDRfZXh0X2NoZWNrYCBpcyB0b28gZ2VuZXJpYy4gVGhlIHBhdGNoIGlzbiYjMzk7dCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoYXQgZnVuY3Rpb24gaW4gaXNvbGF0aW9uLCBidXQgaG93IGl0JiMzOTtzIHVzZWQgKndpdGhpbiogdGhlIGZhc3QgY29tbWl0IHJlcGxheSBjb250ZXh0LiBGb2N1c2luZyBvbiByZXBsYXkgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgaXMgZ29pbmcgdG8gYmUgbW9yZSBkaXJlY3QuCgpTbywgSSByZWZpbmVkIHRoYXQgbGlzdCB0byBpbmNsdWRlIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYC4gTm93LCBldmVuIHRob3VnaCBgZXh0NF9maW5kX2V4dGVudGAgaXMgY2FsbGVkIGZyb20gdmFyaW91cyBwbGFjZXMsIGl0IGlzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiBmYXN0IGNvbW1pdCByZXBsYXkgYnkgYGV4dDRfZXh0X21hcF9ibG9ja3NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBleHQ0X2ZpbmRfZXh0ZW50YCBpcyBjYWxsZWQgKnNwZWNpZmljYWxseSogZHVyaW5nIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgc2VxdWVuY2UuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2ZpbmRfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Njg0PWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTc0MS0gKiBUaGUgYml0IHBvc2l0aW9uIG9mIHRoZXNlIGZsYWdzIG11c3Qgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlXG5mcy9leHQ0L2V4dDQuaDo3NDI6ICogRVhUNF9HRVRfQkxPQ0tTXyouICBUaGV5IGFyZSB1c2VkIGJ5IGV4dDRfZmluZF9leHRlbnQoKSxcbmZzL2V4dDQvZXh0NC5oLTc0My0gKiByZWFkX2V4dGVudF90cmVlX2Jsb2NrKCksIGV4dDRfc3BsaXRfZXh0ZW50X2F0KCksXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzkwOT1leHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZXh0X2luc2VydF9leHRlbnQoXG4tLVxuZnMvZXh0NC9leHQ0LmgtMzkxMi1cdFx0XHRcdHN0cnVjdCBleHQ0X2V4dGVudCAqbmV3ZXh0LCBpbnQgZ2JfZmxhZ3MpO1xuZnMvZXh0NC9leHQ0Lmg6MzkxMzpleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxuZnMvZXh0NC9leHQ0LmgtMzkxNC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKixcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTM5MT1zdGF0aWMgdm9pZCB0ZXN0X3NwbGl0X2NvbnZlcnQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDA3LVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzo0MDg6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX0RBVEFfTEJMSywgTlVMTCwgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDA5LVx0ZXggPSBwYXRoLVx1MDAzZXBfZXh0O1xuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDMzLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzo0MzQ6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX0RBVEFfTEJMSywgTlVMTCwgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtNDM1LVx0ZXggPSBwYXRoLVx1MDAzZXBfZXh0O1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTg4NT1zdHJ1Y3QgZXh0NF9leHRfcGF0aCAqXG5mcy9leHQ0L2V4dGVudHMuYzo4ODY6ZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcbmZzL2V4dDQvZXh0ZW50cy5jLTg4Ny1cdFx0IHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtODk0LVxuZnMvZXh0NC9leHRlbnRzLmM6ODk1Olx0S1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoZXh0NF9maW5kX2V4dGVudCwgaW5vZGUsIGJsb2NrLCBwYXRoLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy04OTYtXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MTQwNz1leHQ0X2V4dF9jcmVhdGVfbmV3X2xlYWYoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0xNDM1LVx0XHQvKiByZWZpbGwgcGF0aCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6MTQzNjpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBwYXRoLCBnYl9mbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy0xNDM3LVx0XHRyZXR1cm4gcGF0aDtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0xNDQ1LVx0LyogcmVmaWxsIHBhdGggKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjE0NDY6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIHBhdGgsIGdiX2ZsYWdzKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTE0NDctXHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTE5OTk9ZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIwMzQtXHRcdCAqIHJpZ2h0IGZyb20gZXgsIG9yIGZyb20gdGhlIGxlZnQgb2YgZXguIFRoaXMgaXMgYmVjYXVzZVxuZnMvZXh0NC9leHRlbnRzLmM6MjAzNTpcdFx0ICogZXh0NF9maW5kX2V4dGVudCgpIGNhbiByZXR1cm4gZWl0aGVyIGV4dGVudCBvbiB0aGVcbmZzL2V4dDQvZXh0ZW50cy5jLTIwMzYtXHRcdCAqIGxlZnQsIG9yIG9uIHRoZSByaWdodCBmcm9tIHRoZSBzZWFyY2hlZCBwb3NpdGlvbi4gVGhpc1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIxMTYtXHRcdGV4dF9kZWJ1Zyhpbm9kZSwgXCYjMzQ7bmV4dCBsZWFmIGJsb2NrIC0gJXVcXG5cJiMzNDssIG5leHQpO1xuZnMvZXh0NC9leHRlbnRzLmM6MjExNzpcdFx0bnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBuZXh0LCBOVUxMLCBnYl9mbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy0yMTE4LVx0XHRpZiAoSVNfRVJSKG5wYXRoKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTI4NDQ9aW50IGV4dDRfZXh0X3JlbW92ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yODgzLVx0XHQvKiBmaW5kIGV4dGVudCBmb3Igb3IgY2xvc2VzdCBleHRlbnQgdG8gdGhpcyBibG9jayAqL1xuZnMvZXh0NC9leHRlbnRzLmM6Mjg4NDpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVuZCwgTlVMTCwgZmxhZ3MpO1xuZnMvZXh0NC9leHRlbnRzLmMtMjg4NS1cdFx0aWYgKElTX0VSUihwYXRoKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTMxOTg9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudF9hdChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTMyNjktXHQgKiBHZXQgYSBuZXcgcGF0aCB0byB0cnkgdG8gemVyb291dCBvciBmaXggdGhlIGV4dGVudCBsZW5ndGguXG5mcy9leHQ0L2V4dGVudHMuYzozMjcwOlx0ICogVXNpbmcgRVhUNF9FWF9OT0ZBSUwgZ3VhcmFudGVlcyB0aGF0IGV4dDRfZmluZF9leHRlbnQoKVxuZnMvZXh0NC9leHRlbnRzLmMtMzI3MS1cdCAqIHdpbGwgbm90IHJldHVybiAtRU5PTUVNLCBvdGhlcndpc2UgLUVOT01FTSB3aWxsIGNhdXNlIGFcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zMjc1LVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzozMjc2Olx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBOVUxMLCBmbGFncyB8IEVYVDRfRVhfTk9GQUlMKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTMyNzctXHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzQxNj1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzQ1MS1cdFx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzozNDUyOlx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgcGF0aCwgZmxhZ3MpO1xuZnMvZXh0NC9leHRlbnRzLmMtMzQ1My1cdFx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zNTAzLVxuZnMvZXh0NC9leHRlbnRzLmM6MzUwNDpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXHUwMDNlbV9sYmxrLCBOVUxMLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy0zNTA1LVx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zODIzPXN0YXRpYyBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9zcGxpdF9jb252ZXJ0X2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zODY4LWNvbnZlcnQ6XG5mcy9leHQ0L2V4dGVudHMuYzozODY5Olx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIHBhdGgsIGZsYWdzKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM4NzAtXHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTM5NDM9Y29udmVydF9pbml0aWFsaXplZF9leHRlbnQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zOTgwLVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzozOTgxOlx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIHBhdGgsIGZsYWdzKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM5ODItXHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQyNzY9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MjkyLVx0LyogZmluZCBleHRlbnQgZm9yIHRoaXMgYmxvY2sgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjQyOTM6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgTlVMTCwgZmxhZ3MpO1xuZnMvZXh0NC9leHRlbnRzLmMtNDI5NC1cdGlmIChJU19FUlIocGF0aCkpIHtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MzAzLVx0ICogdGhpcyBzaXR1YXRpb24gaXMgcG9zc2libGUsIHRob3VnaCwgX2R1cmluZ18gdHJlZSBtb2RpZmljYXRpb247XG5mcy9leHQ0L2V4dGVudHMuYzo0MzA0Olx0ICogdGhpcyBpcyB3aHkgYXNzZXJ0IGNhbiYjMzk7dCBiZSBwdXQgaW4gZXh0NF9maW5kX2V4dGVudCgpXG5mcy9leHQ0L2V4dGVudHMuYy00MzA1LVx0ICovXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDM4OS1cdCAqIElmIHdlIGFyZSBkb2luZyBiaWdhbGxvYywgY2hlY2sgdG8gc2VlIGlmIHRoZSBleHRlbnQgcmV0dXJuZWRcbmZzL2V4dDQvZXh0ZW50cy5jOjQzOTA6XHQgKiBieSBleHQ0X2ZpbmRfZXh0ZW50KCkgaW1wbGllcyBhIGNsdXN0ZXIgd2UgY2FuIHVzZS5cbmZzL2V4dDQvZXh0ZW50cy5jLTQzOTEtXHQgKi9cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MzkxPWV4dDRfZXh0X3NoaWZ0X2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01NDAxLVx0LyogTGV0IHBhdGggcG9pbnQgdG8gdGhlIGxhc3QgZXh0ZW50ICovXG5mcy9leHQ0L2V4dGVudHMuYzo1NDAyOlx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9NQVhfQkxPQ0tTIC0gMSwgTlVMTCxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0MDMtXHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTU0MTktXHRpZiAoU0hJRlQgPT0gU0hJRlRfTEVGVCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NTQyMDpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0IC0gMSwgcGF0aCxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0MjEtXHRcdFx0XHRcdEVYVDRfRVhfTk9DQUNIRSk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTQ2OC1cdHdoaWxlIChpdGVyYXRvciBcdTAwMjZcdTAwMjYgc3RhcnQgXHUwMDNjPSBzdG9wKSB7XG5mcy9leHQ0L2V4dGVudHMuYzo1NDY5Olx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgKml0ZXJhdG9yLCBwYXRoLFxuZnMvZXh0NC9leHRlbnRzLmMtNTQ3MC1cdFx0XHRcdFx0RVhUNF9FWF9OT0NBQ0hFKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01NjM1PXN0YXRpYyBpbnQgZXh0NF9pbnNlcnRfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTY5Ni1cbmZzL2V4dDQvZXh0ZW50cy5jOjU2OTc6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgc3RhcnRfbGJsaywgTlVMTCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy01Njk4LVx0aWYgKElTX0VSUihwYXRoKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU3NzI9ZXh0NF9zd2FwX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTc5My1cbmZzL2V4dDQvZXh0ZW50cy5jOjU3OTQ6XHRcdHBhdGgxID0gZXh0NF9maW5kX2V4dGVudChpbm9kZTEsIGxibGsxLCBwYXRoMSwgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTU3OTUtXHRcdGlmIChJU19FUlIocGF0aDEpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTc5OC1cdFx0fVxuZnMvZXh0NC9leHRlbnRzLmM6NTc5OTpcdFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlMiwgbGJsazIsIHBhdGgyLCBFWFQ0X0VYX05PQ0FDSEUpO1xuZnMvZXh0NC9leHRlbnRzLmMtNTgwMC1cdFx0aWYgKElTX0VSUihwYXRoMikpIHtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01OTU3PWludCBleHQ0X2NsdV9tYXBwZWQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGNsdSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01OTc0LVx0Lyogc2VhcmNoIGZvciB0aGUgZXh0ZW50IGNsb3Nlc3QgdG8gdGhlIGZpcnN0IGJsb2NrIGluIHRoZSBjbHVzdGVyICovXG5mcy9leHQ0L2V4dGVudHMuYzo1OTc1Olx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVDRfQzJCKHNiaSwgbGNsdSksIE5VTEwsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtNTk3Ni1cdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTk4My1cdCAqIHRob3VnaCwgX2R1cmluZ18gdHJlZSBtb2RpZmljYXRpb24sIGFuZCBpdCYjMzk7cyB3aHkgYW4gYXNzZXJ0IGNhbiYjMzk7dFxuZnMvZXh0NC9leHRlbnRzLmM6NTk4NDpcdCAqIGJlIHB1dCBpbiBleHQ0X2ZpbmRfZXh0ZW50KCkuXG5mcy9leHQ0L2V4dGVudHMuYy01OTg1LVx0ICovXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjAzNj1pbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MDQyLVxuZnMvZXh0NC9leHRlbnRzLmM6NjA0MzpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgTlVMTCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy02MDQ0LVx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MDYyLVxuZnMvZXh0NC9leHRlbnRzLmM6NjA2MzpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0LCBwYXRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYwNjQtXHRcdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjA3OS1cbmZzL2V4dDQvZXh0ZW50cy5jOjYwODA6XHRcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0LCBwYXRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYwODEtXHRcdFx0aWYgKElTX0VSUihwYXRoKSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MTAxPXZvaWQgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBlbmQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjEwNy1cdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NjEwODpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgTlVMTCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy02MTA5LVx0XHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTYxNDk9aW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYxNTgtXHQvKiBEZXRlcm1pbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBmaXJzdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NjE1OTpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXG5mcy9leHQ0L2V4dGVudHMuYy02MTYwLVx0XHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYxOTEtXHRcdGdvdG8gb3V0O1xuZnMvZXh0NC9leHRlbnRzLmM6NjE5MjpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtNjE5My1cdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjE5Ni1cdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NjE5NzpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG5mcy9leHQ0L2V4dGVudHMuYy02MTk4LVx0XHRpZiAoSVNfRVJSKHBhdGgpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYyMDktXG5mcy9leHQ0L2V4dGVudHMuYzo2MjEwOlx0XHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtNjIxMS1cdFx0aWYgKElTX0VSUihwYXRoMikpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjIzNj1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjQ3LVx0LyogRGV0ZXJtaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgZmlyc3QgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjYyNDg6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxuZnMvZXh0NC9leHRlbnRzLmMtNjI0OS1cdFx0XHRcdFx0RVhUNF9FWF9OT0NBQ0hFKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjY0LVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG5mcy9leHQ0L2V4dGVudHMuYzo2MjY1Olx0XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNjYtXHRcdFx0aWYgKCFJU19FUlIocGF0aCkpIHtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MzEzPUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KTtcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMTQ6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZmluZF9leHRlbnQpO1xuZnMvZXh0NC9leHRlbnRzLmMtNjMxNS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9pc3N1ZV96ZXJvb3V0KTtcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9NjczPXN0YXRpYyB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudF9leHRfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNjgyLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjY4MzpcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBlcy1cdTAwM2Vlc19sYmxrLCBOVUxMLCBFWFQ0X0VYX05PQ0FDSEUpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTY4NC1cdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE5Ny1cdFx0XHQvKiBSYW5nZSBpcyBub3QgbWFwcGVkICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjE5ODpcdFx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTk5LVx0XHRcdGlmIChJU19FUlIocGF0aCkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIzMjg9c3RhdGljIHZvaWQgZXh0NF9mY19zZXRfYml0bWFwc19hbmRfY291bnRlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM2MC1cdFx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM2MTpcdFx0XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzYyLVx0XHRcdFx0aWYgKCFJU19FUlIocGF0aCkpIHtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYz0yMT1zdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTM2LVx0ZG93bl93cml0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pO1xuZnMvZXh0NC9taWdyYXRlLmM6Mzc6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbGItXHUwMDNlZmlyc3RfYmxvY2ssIE5VTEwsIDApO1xuZnMvZXh0NC9taWdyYXRlLmMtMzgtXHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4tLVxuZnMvZXh0NC92ZXJpdHkuYz0yNzE9c3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcl9sb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMjkzLVxuZnMvZXh0NC92ZXJpdHkuYzoyOTQ6XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLCAwKTtcbmZzL2V4dDQvdmVyaXR5LmMtMjk1LVx0aWYgKElTX0VSUihwYXRoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBleHQ0X2ZpbmRfZXh0ZW50YCBpcyBhIGtleSBmdW5jdGlvbiwgaGVhdmlseSBpbnZvbHZlZCBpbiB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgaXRzIGRpcmVjdCBjYWxscyBmcm9tIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgIGFuZCBgZXh0NF9mY19zZXRfYml0bWFwc19hbmRfY291bnRlcnNgLiBCdXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgc3VjaCBhcyBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgLiBUaGF0IG1ha2VzIGl0IGNsZWFyIHRoYXQgY29uY2VudHJhdGluZyBvbiB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGlzIHRoZSBvcHRpbWFsIHN0cmF0ZWd5IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KClNvLCBJJiMzOTttIGdvaW5nIHRvIGxpc3Qgb3V0IHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246IGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2VgLCBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZmFzdCBjb21taXQgcmVwbGF5IHRoYXQgSSBuZWVkIHRvIGFuYWx5emUuCgpIbW0sIGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCBsb29rcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkzND1leHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oOjM5MzU6ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxuZnMvZXh0NC9leHQ0LmgtMzkzNi1cdFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU5NTc9aW50IGV4dDRfY2x1X21hcHBlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsY2x1KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYwMzUtICovXG5mcy9leHQ0L2V4dGVudHMuYzo2MDM2OmludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxuZnMvZXh0NC9leHRlbnRzLmMtNjAzNy1cdFx0XHQgICAgICBpbnQgbGVuLCBpbnQgdW53cml0dGVuLCBleHQ0X2ZzYmxrX3QgcGJsaylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjIyLVx0XHRcdCAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyMjM6XHRcdFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChpbm9kZSwgY3VyLCBtYXAubV9sZW4sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIyNC1cdFx0XHRcdFx0ZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI0NC1cdFx0XHRleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpLCBtYXAubV9wYmxrKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjQ1Olx0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KGlub2RlLCBjdXIsIG1hcC5tX2xlbixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjQ2LVx0XHRcdFx0XHRleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpLCBtYXAubV9wYmxrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1ODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEV4dDQgUmVwbGF5IEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAgaXNuJiMzOTt0IHN0YXRpYywgd2hpY2ggaXMgYXMgSSBleHBlY3RlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhhdCBzYW1lIGNvbnRleHQuICBMZXQmIzM5O3Mgc2VlLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYCBhcmUgKmFsc28qIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIEdvb2QsIGdvb2QuIE5vdywgSSBzaG91bGQgZm9jdXMgb24gYGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGVgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2h5IHRoYXQmIzM5O3MgdGhlIGNhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW4gdGhlIHJlY292ZXJ5IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zOTMwPWV4dGVybiBpbnQgZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHQ0LmgtMzkzMi1cdFx0XHRcdCAgICAgICBpbnQgcmV2b2tlX2NyZWQpO1xuZnMvZXh0NC9leHQ0Lmg6MzkzMzpleHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XG5mcy9leHQ0L2V4dDQuaC0zOTM0LWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTYwMzY9aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjEwMC0vKiBUcnkgdG8gc2hyaW5rIHRoZSBleHRlbnQgdHJlZSAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NjEwMTp2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKVxuZnMvZXh0NC9leHRlbnRzLmMtNjEwMi17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI1Mi1cdFx0ICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI1MzpcdFx0ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZShpbm9kZSwgc3RhcnQgJiM0MzsgbGVuKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjU0LW5leHQ6XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNTctXHR9XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI1ODpcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2VcdTAwM2VcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjU5LVx0XHRcdFx0XHRzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI2OD1leHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMxOS1cdFx0Z290byBvdXQ7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMyMDpcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMyMS1cdFx0aV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgRXh0ZW50IFZhbGlkYXRpb24qKgoKT2theSwgdGhlc2Ugc3ltYm9scyBhcmUgYWxsIHZlcnkgcmVsZXZhbnQgdG8gdGhlIGNvcmUgb2YgZXh0NCYjMzk7cyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gaW50ZWdyYXRlIGEgZmV3IG1vcmUgaW50byBteSBhbmFseXNpczogYGV4dDRfZmNfcmVwbGF5YCwgYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYC4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRVhUNF9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgbW9kaWZpY2F0aW9uIGxpZXMgd2l0aGluIHRoZSBgZXh0NF9maW5kX2V4dGVudGAgZnVuY3Rpb24uIFRoaXMgdmFsaWRhdGlvbiBjaGVjayBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXksIGFzIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBFWFQ0X0ZDX1JFUExBWWAgZmxhZy4gRmFzdCBjb21taXQgcmVwbGF5LCBiZWluZyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBvZiBleHQ0LCBpcyB0cmlnZ2VyZWQgdXBvbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gY29uZmlndXJlZCB3aXRoIGZhc3QgY29tbWl0IGJsb2Nrcy4gRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgYW4gYWRkaXRpb25hbCBsYXllciBvZiBleHRlbnQgdmFsaWRhdGlvbiBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSByZXBsYXkgcHJvY2Vzcy4gSSBzaG91bGQgYWxzbyB2ZXJpZnkgdGhlIHVzZSBvZiBgZXh0NF9leHRfY2xlYXJfYmJgLCBhcyB0aGlzIG1pZ2h0IGJlIGtleSB0byB2YWxpZGF0aW5nIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9jbGVhcl9iYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MzU9ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxuZnMvZXh0NC9leHQ0LmgtMzkzNi1cdFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xuZnMvZXh0NC9leHQ0Lmg6MzkzNzpleHRlcm4gaW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzkzOC1cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MTQ5PWludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjM1LVxuZnMvZXh0NC9leHRlbnRzLmM6NjIzNjppbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0ZW50cy5jLTYyMzcte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xOTQ0PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2Mi1cdGlmICghSVNfRVJSKGlub2RlKSkge1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NjM6XHRcdGV4dDRfZXh0X2NsZWFyX2JiKGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTY0LVx0XHRpcHV0KGlub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTIKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBoZWFkLiBXZSYjMzk7dmUgZ290IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVpbmcgaW50cm9kdWNlZCB0byBgZXh0NF9maW5kX2V4dGVudGAuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYW4gYGV4dDRfZXh0X2NoZWNrYCB2YWxpZGF0aW9uLCBhbmQgdGhpcyBpc24mIzM5O3QganVzdCBhbnkgY2hlY2s7IGl0JiMzOTtzICpzcGVjaWZpY2FsbHkqIGludGVuZGVkIHRvIGJlIHJ1biBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGF0IG5hcnJvd3Mgb3VyIGZvY3VzIHNpZ25pZmljYW50bHkuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIG5ldyBjaGVjayB3aWxsIGV4ZWN1dGUgb25seSB3aGVuIGBFWFQ0X0ZDX1JFUExBWWAgaXMgc2V0IGluIHRoZSBtb3VudCBzdGF0ZS4gVGhhdCYjMzk7cyBvdXIga2V5IHRyaWdnZXIuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGFuIGV4dDQgZmlsZXN5c3RlbSB3aXRoIGZhc3QgY29tbWl0IGJsb2NrcywgYmVpbmcgbW91bnRlZCBhbmQgcmVwbGF5ZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhvc2Ugc3ltYm9scyB3ZSBuZWVkIHRvIHJlYWxseSBob25lIGluIG9uLiBXZSYjMzk7dmUgZ290IHRvIGNvbnNpZGVyIGBleHQ0X2ZjX3JlcGxheWAsIHRoYXQmIzM5O3Mgb2J2aW91cy4gQnV0IHdlIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhlIGV4dGVudCByZXBsYXlpbmcgcHJvY2VzcyB3aWxsIGltcGFjdCB0aGluZ3M6IGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCwgYGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGVgLCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYW5kIGZpbmFsbHksIGRvbiYjMzk7dCBmb3JnZXQgYGV4dDRfZXh0X2NsZWFyX2JiYCB3aGljaCBpc24mIzM5O3Qgc3RhdGljLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB0aGF0IGZhc3QgY29tbWl0IHJlcGxheS4KClNvLCBgRVhUNF9GU2AgaXMgb2J2aW91c2x5IHRoZSBiYXNlIGNvbmZpZyBoZXJlLCBidXQgaXQmIzM5O3MgdGhlIGBFWFQ0X0ZDX1JFUExBWWAgdGhhdCB3ZSByZWFsbHkgbmVlZCB0byBjYXJlIGFib3V0LgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfY2xlYXJfYmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDssCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfY2xlYXJfYmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNWExZGRlZjA2ZWFhOGIwMWUwOGJmZTg3NzQyMDA2ZDY2MzczM2QxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTE6MDQ6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDE1OTcyNDEwZDQ2MDUuLmI5NWVhZmIwZDVjYWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC05MDUsNiAmIzQzOzkwNSwxMyBAQCBleHQ0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGJsb2NrLAogCQlyZXQgPSAtRUZTQ09SUlVQVEVEOwogCQlnb3RvIGVycjsKIAl9CiYjNDM7CS8qIGV4dDRfaWdldCgpIHNraXBzIGV4dGVudCB2YWxpZGF0aW9uIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkuICovCiYjNDM7CWlmICh1bmxpa2VseSgoRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbW91bnRfc3RhdGUgJmFtcDsgRVhUNF9GQ19SRVBMQVkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7CiYjNDM7CQlyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCAwKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KIAogCWlmIChwYXRoKSB7CiAJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjAKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEV4dDQgRXh0ZW50IFZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGZzL2V4dDQvZXh0ZW50cy5jYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIHdpdGhpbiBgZXh0NF9maW5kX2V4dGVudGAgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYGV4dDRfZXh0X2NoZWNrYC4gVGhlIGNvZGUgc25pcHBldCBtYWtlcyBpdCBjbGVhcjsgd2UmIzM5O3JlIHZhbGlkYXRpbmcgZXh0ZW50IGhlYWRlcnMuCgpUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYXR0ZW1wdGluZyB0byBwcm9jZXNzIGNvcnJ1cHRlZCBleHRlbnRzIGR1cmluZyByZXBsYXksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gQ29ycnVwdGVkIGV4dGVudHMgYXJlIGEga25vd24gdmVjdG9yIGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBpc3N1ZXMg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyB2YWxpZGF0aW9uIGlzIGEgcG9zaXRpdmUgY2hhbmdlLCBsaWtlbHkgdG8gaW1wcm92ZSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LgoKVGhlIGNvcmUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYSBuZXcgcmlzayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIEkmIzM5O3ZlIGdvdCB0byBiZSB0aG9yb3VnaCBoZXJlLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCYjMzk7cyBsb2dpYyBpcyB0aGF0IGl0ICp2YWxpZGF0ZXMqIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBleHRlbnQgaGVhZGVyLCBiZWZvcmUgdGhleSYjMzk7cmUgYWN0ZWQgdXBvbi4gSXQmIzM5O3MgKm5vdCogY3JlYXRpbmcgbmV3IHN0cnVjdHVyZXMgb3IgY2hhbmdpbmcgZXhpc3RpbmcgbG9naWMgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIHBvdGVudGlhbCByZWFkIG9yIHdyaXRlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBraW5kIG9mIGJ1ZyBpcyBhIGRpc3RpbmN0IHdvcnJ5LCBidXQgaGVyZSBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgY29uY2Vybi4KClNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGFkZHMgYSAqY2hlY2sqIG9uIGV4aXN0aW5nIGRhdGEsIG5vdCBhICpzb3VyY2UqIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgdG9vbCBmb3IgZGV0ZWN0aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB3aGljaCBpcyB0aGUgcHJpbWFyeSBpc3N1ZSBoZXJlLCBhbmQgaXQmIzM5O2xsIGNhdGNoIGFueSBwcm9ibGVtcy4gV2UgZG9uJiMzOTt0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgb25lLiBUaGlzIHBhdGNoIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MDIuMDIxMDkxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDE5NDIyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leFwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzXCIsXG4gICAgXCJleHQ0X2V4dF9jbGVhcl9iYlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGV4dDRfZmluZF9leHRlbnRgIGJ5IGFkZGluZyBhbiBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZXhlY3V0ZWQgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSAod2hlbiBgRVhUNF9GQ19SRVBMQVlgIGlzIHNldCBpbiB0aGUgbW91bnQgc3RhdGUpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgd2hlbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBmYXN0IGNvbW1pdCBibG9ja3MsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDowMi4wMjEwOTY4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0MDUwNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTVhMWRkZWYwNmVhYThiMDFlMDhiZmU4Nzc0MjAwNmQ2NjM3MzNkMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTowNDowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuaW5kZXggMTU5NzI0MTBkNDYwNS4uYjk1ZWFmYjBkNWNhZCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuQEAgLTkwNSw2ICs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcXG4gXFx0XFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4rXFx0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkge1xcbitcXHRcXHRyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCAwKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChwYXRoKSB7XFxuIFxcdFxcdGV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MDIuNDQ2MDAyMzk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjI1MjM4NDE0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmNfcmVwbGF5XCIsXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4XCIsXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlXCIsXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgICBcImV4dDRfZXh0X2NsZWFyX2JiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBieSBhZGRpbmcgYW4gZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGV4ZWN1dGVkIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgKHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHRoYXQgY29udGFpbnMgZmFzdCBjb21taXQgYmxvY2tzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTVhMWRkZWYwNmVhYThiMDFlMDhiZmU4Nzc0MjAwNmQ2NjM3MzNkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDExOjA0OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xuaW5kZXggMTU5NzI0MTBkNDYwNS4uYjk1ZWFmYjBkNWNhZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXG4rKysgYi9mcy9leHQ0L2V4dGVudHMuY1xuQEAgLTkwNSw2ICs5MDUsMTMgQEAgZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcbiBcdFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4rXHQvKiBleHQ0X2lnZXQoKSBza2lwcyBleHRlbnQgdmFsaWRhdGlvbiBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiAqL1xuK1x0aWYgKHVubGlrZWx5KChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHtcbitcdFx0cmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgMCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRpZiAocGF0aCkge1xuIFx0XHRleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDowMi40NDYwMDQxMjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTYxNjYyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NF9maW5kX2V4dGVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgZXh0NF9maW5kX2V4dGVudGAgZnVuY3Rpb24uIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgaXQncyBxdWl0ZSBzcGVjaWZpYy4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGFuIGVkZ2UgY2FzZSByZWxhdGVkIHRvIGZhc3QgY29tbWl0IHJlcGxheSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS5cblxuVGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBtb3VudCBzdGF0ZSBpbmNsdWRlcyBgRVhUNF9GQ19SRVBMQVlgIGFuZCBpZiB0aGUgaW5vZGUgdXRpbGl6ZXMgZXh0ZW50cyAoYEVYVDRfSU5PREVfRVhURU5UU2ApLiBJZiBib3RoIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgdHJpZ2dlcnMgYSBjYWxsIHRvIGBleHQ0X2V4dF9jaGVja2Agd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHNvbWUgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIHRoaXMgZmFzdCBjb21taXQgcmVwbGF5LiBUaGUgYGV4dDRfaWdldCgpYCBmdW5jdGlvbiBhbHJlYWR5IHNraXBzIGV4dGVudCB2YWxpZGF0aW9uIGZvciBmYXN0IGNvbW1pdCwgc28gdGhpcyBpcyB0YXJnZXRlZCBhdCBzb21lIGRlZXBlciBpbnRlZ3JpdHkgY2hlY2ssIGl0IHdvdWxkIHNlZW0uIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgb3IgZXJyb3IgY29uZGl0aW9uIHRoYXQgbmVlZHMgdG8gYmUgY2F1Z2h0IGR1cmluZyB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3Iga2VybmVsIHBhcmFtZXRlcnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgb3IgYWZmZWN0IHRoaXMgYEVYVDRfRkNfUkVQTEFZYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBleHQ0LiBJJ2xsIG5lZWQgdG8gZGlnIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgZmFzdCBjb21taXQgcmVwbGF5IG1vZGUgd2l0aGluIGV4dDQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgYWRkZWQgZXh0ZW50IGNoZWNrLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGBFWFQ0X0ZDX1JFUExBWWAgc2hvdWxkIGJlIG15IG5leHQgbW92ZSwganVzdCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgYW5kIGhvdyB0aGlzIGZsYWcgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCB3aWxsIGhlbHAgbWUgY29ubmVjdCB0aGUgZG90cyBiZXR0ZXIgYW5kIGRldGVybWluZSB3aGF0IHBvdGVudGlhbCBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIG92ZXJhbGwgZmlsZXN5c3RlbSBiZWhhdmlvciwgZXNwZWNpYWxseSBkdXJpbmcgcmVjb3Zlcnkgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MDcuNDA3NjcwNDM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTIzMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYVDRfRkNfUkVQTEFZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvYmFsbG9jLmM9Mzk5PXN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9ibG9ja19iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvYmFsbG9jLmMtNDA2LVxcbmZzL2V4dDQvYmFsbG9jLmM6NDA3OlxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvYmFsbG9jLmMtNDA4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEyMzctI2RlZmluZVxcdEVYVDRfT1JQSEFOX0ZTXFx0XFx0XFx0MHgwMDA0XFx0LyogT3JwaGFucyBiZWluZyByZWNvdmVyZWQgKi9cXG5mcy9leHQ0L2V4dDQuaDoxMjM4OiNkZWZpbmUgRVhUNF9GQ19SRVBMQVlcXHRcXHRcXHQweDAwMjBcXHQvKiBGYXN0IGNvbW1pdCByZXBsYXkgb25nb2luZyAqL1xcbmZzL2V4dDQvZXh0NC5oLTEyMzktXFxuLS1cXG5mcy9leHQ0L2V4dDRfamJkMi5jPTkyPWhhbmRsZV90ICpfX2V4dDRfam91cm5hbF9zdGFydF9zYihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYy0xMTEtXFx0am91cm5hbCA9IEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2pvdXJuYWw7XFxuZnMvZXh0NC9leHQ0X2piZDIuYzoxMTI6XFx0aWYgKCFqb3VybmFsIHx8IChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSlcXG5mcy9leHQ0L2V4dDRfamJkMi5jLTExMy1cXHRcXHRyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz04ODY9ZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTkwOC1cXHQvKiBleHQ0X2lnZXQoKSBza2lwcyBleHRlbnQgdmFsaWRhdGlvbiBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjkwOTpcXHRpZiAodW5saWtlbHkoKEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9leHRlbnRzLmMtOTEwLVxcdFxcdCAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9MzYzPXZvaWQgZXh0NF9lc19maW5kX2V4dGVudF9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTM2OS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MzcwOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0zNzEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTQxNz1ib29sIGV4dDRfZXNfc2Nhbl9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTQyMi1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6NDIzOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy00MjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTQ2Mz1ib29sIGV4dDRfZXNfc2Nhbl9jbHUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy00NjgtXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjQ2OTpcXHRpZiAoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNDcwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz05MDU9dm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MTgtXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjkxOTpcXHRpZiAoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtOTIwLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0xMDI0PXZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDMzLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDM0OlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDM1LVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0xMDkyPWludCBleHQ0X2VzX2xvb2t1cF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMTAxLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMTAyOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMTAzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTE2MjM9dm9pZCBleHQ0X2VzX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xNjMwLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxNjMxOlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xNjMyLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz0yMjAxPXZvaWQgZXh0NF9lc19pbnNlcnRfZGVsYXllZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0yMjEzLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoyMjE0OlxcdGlmIChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0yMjE1LVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDQ9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0Ni1cXHRyZXR1cm4gKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIHx8XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NzpcXHRcXHQoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDgtfVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MTU9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjgtXFx0XFx0XFx0XFx0c2l6ZW9mKGludCkgKiAoc3RhdGUtXFx1MDAzZWZjX21vZGlmaWVkX2lub2Rlc19zaXplICtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkyOTpcXHRcXHRcXHRcXHRFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVCksXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MzAtXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzNC1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfbW9kaWZpZWRfaW5vZGVzX3NpemUgKz1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkzNTpcXHRcXHRcXHRFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVDtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzNi1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjEwOD1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMjYtXFx0XFx0XFx0XFx0ICAgICAgKHN0YXRlLVxcdTAwM2VmY19yZWdpb25zX3NpemUgK1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTI3OlxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0ZDX1JFUExBWV9SRUFMTE9DX0lOQ1JFTUVOVCksXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMjgtXFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEzMS1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfcmVnaW9uc19zaXplICs9XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMzI6XFx0XFx0XFx0RVhUNF9GQ19SRVBMQVlfUkVBTExPQ19JTkNSRU1FTlQ7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMtXFx0XFx0c3RhdGUtXFx1MDAzZWZjX3JlZ2lvbnMgPSBmY19yZWdpb25zO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0MDU9dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwOC1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwOTpcXHRzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNj0gfkVYVDRfRkNfUkVQTEFZO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDEwLVxcdGtmcmVlKHNiaS1cXHUwMDNlc19mY19yZXBsYXlfc3RhdGUuZmNfcmVnaW9ucyk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU4MT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk4LVxcdFxcdHN0YXRlLVxcdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBwYXNzO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk5OlxcdFxcdHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSB8PSBFWFQ0X0ZDX1JFUExBWTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYwMC1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTIwPXN0cnVjdCBleHQ0X2ZjX3N0YXRzIHtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xMjktXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjEzMDojZGVmaW5lIEVYVDRfRkNfUkVQTEFZX1JFQUxMT0NfSU5DUkVNRU5UXFx0NFxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xMzEtXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jPTgxPXN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9pbm9kZV9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtODgtXFxuZnMvZXh0NC9pYWxsb2MuYzo4OTpcXHRpZiAoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lhbGxvYy5jLTkwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz0yMzc9dm9pZCBleHQ0X2ZyZWVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMjk1LVxcdH1cXG5mcy9leHQ0L2lhbGxvYy5jOjI5NjpcXHRpZiAoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcXG5mcy9leHQ0L2lhbGxvYy5jLTI5Ny1cXHRcXHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBibG9ja19ncm91cCk7XFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jPTkzMz1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9uZXdfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTEwNTMtXFxuZnMvZXh0NC9pYWxsb2MuYzoxMDU0OlxcdFxcdGlmICghKHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtMTA1NS1cXHRcXHRcXHRncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBncm91cCk7XFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTEwNzAtXFx0XFx0fVxcbmZzL2V4dDQvaWFsbG9jLmM6MTA3MTpcXHRcXHRpZiAoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lhbGxvYy5jLTEwNzItXFx0XFx0ICAgIEVYVDRfTUJfR1JQX0lCSVRNQVBfQ09SUlVQVChncnApKVxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMDg2LVxcbmZzL2V4dDQvaWFsbG9jLmM6MTA4NzpcXHRcXHRpZiAoKCEoc2JpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKSBcXHUwMDI2XFx1MDAyNiAhaGFuZGxlKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy0xMDg4LVxcdFxcdFxcdEJVR19PTihuYmxvY2tzIFxcdTAwM2M9IDApO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMTkyLVxcbmZzL2V4dDQvaWFsbG9jLmM6MTE5MzpcXHRcXHRpZiAoIShzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpIHtcXG5mcy9leHQ0L2lhbGxvYy5jLTExOTQtXFx0XFx0XFx0Z3JwID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhzYiwgZ3JvdXApO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMjE4LVxcdFxcdFxcdFxcdFxcdChFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpIC0gaW5vKSk7XFxuZnMvZXh0NC9pYWxsb2MuYzoxMjE5OlxcdFxcdGlmICghKHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSlcXG5mcy9leHQ0L2lhbGxvYy5jLTEyMjAtXFx0XFx0XFx0dXBfcmVhZChcXHUwMDI2Z3JwLVxcdTAwM2VhbGxvY19zZW0pO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQ0MD12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbm9kZS5jLTQ0MS17XFxuZnMvZXh0NC9pbm9kZS5jOjQ0MjpcXHRpZiAoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lub2RlLmMtNDQzLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz05Nzk9c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2dldGJsayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTk4Ny1cXG5mcy9leHQ0L2lub2RlLmM6OTg4OlxcdEFTU0VSVCgoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lub2RlLmMtOTg5LVxcdFxcdCAgICB8fCBoYW5kbGUgIT0gTlVMTCB8fCBjcmVhdGUgPT0gMCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTAxNS1cXHRcXHRBU1NFUlQoY3JlYXRlICE9IDApO1xcbmZzL2V4dDQvaW5vZGUuYzoxMDE2OlxcdFxcdEFTU0VSVCgoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSlcXG5mcy9leHQ0L2lub2RlLmMtMTAxNy1cXHRcXHRcXHQgICAgfHwgKGhhbmRsZSAhPSBOVUxMKSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUzMjctXFx0ICAgIGV4dDRfc2ltdWxhdGVfZmFpbChzYiwgRVhUNF9TSU1fSU5PREVfQ1JDKSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmM6NTMyODpcXHQgICAgICghKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKSkge1xcbmZzL2V4dDQvaW5vZGUuYy01MzI5LVxcdFxcdGV4dDRfZXJyb3JfaW5vZGVfZXJyKGlub2RlLCBmdW5jdGlvbiwgbGluZSwgMCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01NDk3LVxcdFxcdC8qIHZhbGlkYXRlIHRoZSBibG9jayByZWZlcmVuY2VzIGluIHRoZSBpbm9kZSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo1NDk4OlxcdFxcdGlmICghKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9pbm9kZS5jLTU0OTktXFx0XFx0XFx0KFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9MjAwMD1zdGF0aWMgdm9pZCBtYl9mcmVlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjAzNi1cXHRcXHQgKi9cXG5mcy9leHQ0L21iYWxsb2MuYzoyMDM3OlxcdFxcdGlmIChzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkge1xcbmZzL2V4dDQvbWJhbGxvYy5jLTIwMzgtXFx0XFx0XFx0bWJfcmVnZW5lcmF0ZV9idWRkeShlNGIpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTYyMS1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NjIyOlxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU2MjMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NjIyOT1leHQ0X2ZzYmxrX3QgZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MjQ1LVxcdHRyYWNlX2V4dDRfcmVxdWVzdF9ibG9ja3MoYXIpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYyNDY6XFx0aWYgKHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTYyNDctXFx0XFx0cmV0dXJuIGV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoYXIsIGVycnApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NjY5MT12b2lkIGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTY3MDctXFxuZnMvZXh0NC9tYmFsbG9jLmM6NjcwODpcXHRpZiAoc2JpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIHtcXG5mcy9leHQ0L21iYWxsb2MuYy02NzA5LVxcdFxcdGV4dDRfZnJlZV9ibG9ja3Nfc2ltcGxlKGlub2RlLCBibG9jaywgRVhUNF9OVU1fQjJDKHNiaSwgY291bnQpKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zMjI2PWludCBfX2V4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZF9uYW1lLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTMyNTItXFx0XFx0ICovXFxuZnMvZXh0NC9uYW1laS5jOjMyNTM6XFx0XFx0aWYgKEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpXFxuZnMvZXh0NC9uYW1laS5jLTMyNTQtXFx0XFx0XFx0c2tpcF9yZW1vdmVfZGVudHJ5ID0gMTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy00MDA4LVxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jOjQwMDk6XFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtNDAxMC1cXHRcXHQgICAgIShleHQ0X3Rlc3RfbW91bnRfZmxhZyhzYiwgRVhUNF9NRl9GQ19JTkVMSUdJQkxFKSkpIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01Mjg1PXN0YXRpYyBpbnQgZXh0NF9ibG9ja19ncm91cF9tZXRhX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpbGVudClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MzI2LVxcdHNiaS1cXHUwMDNlc19kZXNjX3Blcl9ibG9jayA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAvIEVYVDRfREVTQ19TSVpFKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTMyNzpcXHRzYmktXFx1MDAzZXNfbW91bnRfc3RhdGUgPSBsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19zdGF0ZSkgXFx1MDAyNiB+RVhUNF9GQ19SRVBMQVk7XFxuZnMvZXh0NC9zdXBlci5jLTUzMjgtXFx0c2JpLVxcdTAwM2VzX2FkZHJfcGVyX2Jsb2NrX2JpdHMgPSBpbG9nMihFWFQ0X0FERFJfUEVSX0JMT0NLKHNiKSk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjU2Nj1zdGF0aWMgaW50IF9fZXh0NF9yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02Nzc3LVxcdFxcdFxcdHNiaS1cXHUwMDNlc19tb3VudF9zdGF0ZSA9IChsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19zdGF0ZSkgXFx1MDAyNlxcbmZzL2V4dDQvc3VwZXIuYzo2Nzc4OlxcdFxcdFxcdFxcdFxcdCAgICAgIH5FWFQ0X0ZDX1JFUExBWSk7XFxuZnMvZXh0NC9zdXBlci5jLTY3NzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjA3LjQ1MzE5ODg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMjI1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGV4dDQgRmFzdCBDb21taXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHBsYXlpbmcgaW4gdGhlIGBleHQ0X2ZpbmRfZXh0ZW50YCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgYSBjaGVjayBmb3IgYEVYVDRfRkNfUkVQTEFZYCBhbmQgdGhlbiBjYWxsaW5nIGBleHQ0X2V4dF9jaGVja2AuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGxpa2VseSBhZmZlY3RzIHRoZSBmaWxlIHN5c3RlbSdzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGNoZWNrLlxuXG5SaWdodCwgc28gZmFzdCBjb21taXQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZSBgQ09ORklHX0VYVDRfRlNgIG9wdGlvbiwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dCBJIHdvbmRlciBpZiB0aGVyZSdzIGEgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaXRzZWxmLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIEknbSBhY3Jvc3MgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDoxMS4wNjU0NTkwMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NDQzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSk9VUk5BTF9GQVNUX0NPTU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTMwOC1cXG5mcy9leHQ0L2V4dDQuaDoxMzA5OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFxcdDB4MDAwMDAwMTAgLyogSm91cm5hbCBmYXN0IGNvbW1pdCAqL1xcbmZzL2V4dDQvZXh0NC5oLTEzMTAtI2RlZmluZSBFWFQ0X01PVU5UMl9EQVhfTkVWRVJcXHRcXHQweDAwMDAwMDIwIC8qIERvIG5vdCBhbGxvdyBEaXJlY3QgQWNjZXNzICovXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ2OlxcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ3LVxcdFxcdChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU4Nj1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1OTY6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NzM9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODItXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM0Mjk9c3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmZzL2V4dDQvaW5vZGUuYzozNDM4OlxcdFxcdGlmICh0ZXN0X29wdDIoaW5vZGUtXFx1MDAzZWlfc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvaW5vZGUuYy0zNDM5LVxcdFxcdFxcdHJldHVybiAhbGlzdF9lbXB0eShcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mY19saXN0KTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy00MDA3LVxcdFxcdFxcdGV4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZSwgbmV3LmRlbnRyeSk7XFxuZnMvZXh0NC9uYW1laS5jOjQwMDg6XFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtNDAwOS1cXHRcXHQgICAgIShFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTU0LSNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYzoxOTU1OlxcdHtPcHRfZmNfZGVidWdfZm9yY2UsIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVQsXFxuZnMvZXh0NC9zdXBlci5jLTE5NTYtXFx0IE1PUFRfU0VUIHwgTU9QVF8yIHwgTU9QVF9FWFQ0X09OTFl9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQzOTY9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NDE1LVxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcXG5mcy9leHQ0L3N1cGVyLmM6NDQxNjpcXHRcXHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTQ0MTctXFx0LyogZG9uJ3QgZm9yZ2V0IHRvIGVuYWJsZSBqb3VybmFsX2NzdW0gd2hlbiBtZXRhZGF0YV9jc3VtIGlzIGVuYWJsZWQuICovXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDk2ND1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDk4Ny1cXG5mcy9leHQ0L3N1cGVyLmM6NDk4ODpcXHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvc3VwZXIuYy00OTg5LVxcdFxcdCFqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2pvdXJuYWwsIDAsIDAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTA0OD1zdGF0aWMgaW50IGV4dDRfY2hlY2tfam91cm5hbF9kYXRhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDU1LVxcdFxcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xcbmZzL2V4dDQvc3VwZXIuYzo1MDU2OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01MDU3LVxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTU0NC1cXHRcXHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xcbmZzL2V4dDQvc3VwZXIuYzo1NTQ1OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01NTQ2LVxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MTEuMTE1MjA5MTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MzE5ODI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRmFzdCBDb21taXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSB3aXRoaW4gZXh0NC4gVGhlIGNvbnRleHQgaGVyZSBpcyBtb2RpZnlpbmcgYGV4dDRfZmluZF9leHRlbnRgLCB3aGljaCBpcyBhICpjb3JlKiBmdW5jdGlvbiwgbm8gcXVlc3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBFWFQ0X0ZDX1JFUExBWWAgYW5kIHN1YnNlcXVlbnRseSBjYWxscyBgZXh0NF9leHRfY2hlY2tgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGluc3RpbmN0IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldCFcIi4gRGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZGl2ZSB0aGVyZS5cblxuSW5pdGlhbGx5LCBJIHplcm9lZCBpbiBvbiBgZXh0NF9maW5kX2V4dGVudGAgYW5kIGBleHQ0X2V4dF9jaGVja2AgYXMgcHJpbWUgZnV6emluZyB0YXJnZXRzLiBCdXQsIGhvbGQgb24uLi4gYGV4dDRfZmluZF9leHRlbnRgIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBJIHJlY2FsbCB0aGUgZ3VpZGVsaW5lczogd2Ugd2FudCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RzIGZyb20gYmVpbmcgc2tld2VkLiBUaGV5IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFdlIHdhbnQgZ29vZCBjb3ZlcmFnZS5cblxuT2theSwgc28gYGV4dDRfZmluZF9leHRlbnRgICppcyogY2FsbGVkIGZyZXF1ZW50bHkuIEJ1dCBjcnVjaWFsbHksIGBleHQ0X2V4dF9jaGVja2AgaXMgb25seSBjYWxsZWQgKmhlcmUqLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZmFzdCBjb21taXQgcmVwbGF5LiBUaGUgc3BlY2lmaWMgY29uZGl0aW9uIGlzIGRlcGVuZGVudCBvbiBgRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWWAsIHdoaWNoIGlzIG9ubHkgdHJ1ZSAqZHVyaW5nKiBmYXN0IGNvbW1pdCByZXBsYXksIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBlZGdlIGNhc2VzLlxuXG5BaCwgSSB0aGluayBJIHNlZSB0aGUga2V5LiBGYXN0IGNvbW1pdCByZXBsYXkgaXRzZWxmIGlzIGxpa2VseSBoYW5kbGVkIGluIGBleHQ0X2ZjX3JlcGxheWAuIExldCdzIHNoaWZ0IG91ciBmb2N1cyB0byBpbnZlc3RpZ2F0aW5nIHRoYXQgZnVuY3Rpb24gYXMgd2VsbC4gVGhpcyBtaWdodCBnaXZlIHVzIG1vcmUgb2YgdGhlIGNvbXBsZXRlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MTYuNzk4NDEwNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNjkyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9mY19yZXBsYXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTU4Nj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE4NjEtI2VuZGlmXFxuZnMvZXh0NC9leHQ0Lmg6MTg2MjpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgc19mY19yZXBsYXlfc3RhdGU7XFxuZnMvZXh0NC9leHQ0LmgtMTg2My19O1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzA3OT12b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjMwODA6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2spO1xcbmZzL2V4dDQvZXh0NC5oOjMwODE6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvZXh0NC5oLTMwODItaW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTgwND1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19nZXRfdGwoc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODEzLS8qIFVubGluayByZXBsYXkgZnVuY3Rpb24gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgxNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3VubGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODE1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjMtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MjQ6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1VOTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MjUtXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg1Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg1MzpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg1NC1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5X2luZm9fYXJncyAqZGFyZyxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg4LS8qIExpbmsgcmVwbGF5IGZ1bmN0aW9uICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4ODk6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5Ni1cXHR0bF90b19kYXJnKFxcdTAwMjZkYXJnLCB0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg5NzpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTgtXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkwNS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkwNjpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTA3LVxcdGlwdXQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MTU9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTE2LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkxNzpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTE4LVxcdGludCBpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDMtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NDQ6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTQ1LVxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk1OC1cXHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTU5OlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0YWcsIGlubywgMCwgMCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NjAtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0OS0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA1MDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDUxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNTktXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNjA6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0NSRUFULCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA2MS1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDkyLVxcdH1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA5MzpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDk0LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjEwOD1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTAte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTExOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMTItXFx0c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uICpyZWdpb247XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0Ny0vKiBSZXBsYXkgYWRkIHJhbmdlIHRhZyAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTQ4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDkte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNjItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNjM6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0FERF9SQU5HRSxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2NC1cXHRcXHRsZTMyX3RvX2NwdShmY19hZGRfZXguZmNfaW5vKSwgbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjY3PXN0YXRpYyBpbnRcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI2ODpleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI2OS17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3OS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI4MDpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfREVMX1JBTkdFLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgxLVxcdFxcdGxlMzJfdG9fY3B1KGxyYW5nZS5mY19pbm8pLCBjdXIsIHJlbWFpbmluZyk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjMyOD1zdGF0aWMgdm9pZCBleHQ0X2ZjX3NldF9iaXRtYXBzX2FuZF9jb3VudGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzI5LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMzMDpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzMxLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4Ni0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM4Nzpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODgte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg5LVxcdGludCBpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzkwOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzOTEtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNC0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwNTp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNi17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQxND1zdGF0aWMgYm9vbCBleHQ0X2ZjX3ZhbHVlX2xlbl9pc3ZhbGlkKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDU4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsX3QgKmpvdXJuYWwsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTktXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZixcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDYzLVxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY0OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjUtXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzItb3V0X2VycjpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU3MzpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheV9zY2FuKHNiLCByZXQsIG9mZik7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzQtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTgwLSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTgxOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTgyLVxcdFxcdFxcdFxcdGVudW0gcGFzc3R5cGUgcGFzcywgaW50IG9mZiwgdGlkX3QgZXhwZWN0ZWRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODgtXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTg5OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGUgPSBcXHUwMDI2c2JpLVxcdTAwM2VzX2ZjX3JlcGxheV9zdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5MC1cXHRzdHJ1Y3QgZXh0NF9mY190YWlsIHRhaWw7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5My1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfY3VycmVudF9wYXNzID0gUEFTU19TQ0FOO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk0OlxcdFxcdHJldHVybiBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWwsIGJoLCBvZmYsIGV4cGVjdGVkX3RpZCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1OTUtXFx0fVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzEtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19MSU5LOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjMyOlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzMy1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNC1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX1VOTElOSzpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNTpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNi1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNy1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0FERF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzODpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzktXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDAtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19DUkVBVDpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0MTpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Mi1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0My1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0RFTF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0NDpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDUtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDYtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19JTk9ERTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0NzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9pbm9kZShzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ4LVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ5LVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfUEFEOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjUwOlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19QQUQsIDAsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTEtXFx0XFx0XFx0XFx0XFx0ICAgICB0bC5mY19sZW4sIDApO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTMtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19UQUlMOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjU0OlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19UQUlMLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjU1LVxcdFxcdFxcdFxcdFxcdCAgICAgMCwgdGwuZmNfbGVuLCAwKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjYxLVxcdFxcdGRlZmF1bHQ6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NjI6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRsLmZjX3RhZywgMCwgdGwuZmNfbGVuLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY2My1cXHRcXHRcXHRyZXQgPSAtRUNBTkNFTEVEO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NzM9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzktXFx0ICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2ODA6XFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY4MS1cXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTM5PXN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiB7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxNDg6c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ5LVxcdGludCBmY19yZXBsYXlfbnVtX3RhZ3M7XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz02MTYyPWV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5My1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L21iYWxsb2MuYzo2MTk0OlxcdFxcdFxcdGlmIChleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzYixcXG5mcy9leHQ0L21iYWxsb2MuYy02MTk1LVxcdFxcdFxcdFxcdGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSArXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM0Nj1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NjQ1LVxcdH1cXG5mcy9leHQ0L3N1cGVyLmM6NTY0NjpcXHRleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTY0Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MTYuODQ1NjgyNjQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3ODkwNTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBGYXN0IENvbW1pdCBSZXBsYXkgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBgZXh0NF9mY19yZXBsYXlgLCBgZXh0NF9mY19yZXBsYXlfc2NhbmAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAuIERlZmluaXRlbHkgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhhdCB3aG9sZSBsb2dpYy4gTXkgbWFpbiBmb2N1cyBub3cgaXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLlxuXG5JdCBzZWVtcyB0aGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfZmluZF9leHRlbnRgIHRvIHZhbGlkYXRlIGV4dGVudHMgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSwgd2hpY2ggbWVhbnMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlYCwgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGFyZSBnb2luZyB0byBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGUgZXh0ZW50IHZhbGlkYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlcGxheS5cblxuQW5kIGxldCdzIG5vdCBmb3JnZXQsIGBleHQ0X2V4dF9jaGVja2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgcGF0Y2gsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIHN0YXRpYy4gSWYgc28sIGl0IG1pZ2h0IGFmZmVjdCBob3cgSSBjYW4gbGV2ZXJhZ2UgaXQgaW4gbXkgZnV6emluZyBzZXR1cC4gTmVlZCB0byBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDoyMS42MjQ1OTE0MTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjAzMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZXh0X2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MTY9ZXh0ZXJuIHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICopO1xcbmZzL2V4dDQvZXh0NC5oOjM5MTc6ZXh0ZXJuIGludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTE4LWV4dGVybiBleHQ0X2xibGtfdCBleHQ0X2V4dF9uZXh0X2FsbG9jYXRlZF9ibG9jayhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zODg9c3RhdGljIGludCBleHQ0X3ZhbGlkX2V4dGVudF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NTQtXFxuZnMvZXh0NC9leHRlbnRzLmM6NDU1OnN0YXRpYyBpbnQgX19leHQ0X2V4dF9jaGVjayhjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDU2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTUxNS1cXG5mcy9leHQ0L2V4dGVudHMuYzo1MTY6I2RlZmluZSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoLCBwYmxrKVxcdFxcdFxcdFxcXFxcXG5mcy9leHQ0L2V4dGVudHMuYzo1MTc6XFx0X19leHQ0X2V4dF9jaGVjayhfX2Z1bmNfXywgX19MSU5FX18sIChpbm9kZSksIChlaCksIChkZXB0aCksIChwYmxrKSwgMClcXG5mcy9leHQ0L2V4dGVudHMuYy01MTgtXFxuZnMvZXh0NC9leHRlbnRzLmM6NTE5OmludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMC17XFxuZnMvZXh0NC9leHRlbnRzLmM6NTIxOlxcdHJldHVybiBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZXh0X2lub2RlX2hkcihpbm9kZSksIGV4dF9kZXB0aChpbm9kZSksIDApO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMi19XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01NTE9X19yZWFkX2V4dGVudF90cmVlX2Jsb2NrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU3NS1cXHRcXHRyZXR1cm4gYmg7XFxuZnMvZXh0NC9leHRlbnRzLmM6NTc2OlxcdGVyciA9IF9fZXh0NF9leHRfY2hlY2soZnVuY3Rpb24sIGxpbmUsIGlub2RlLCBleHRfYmxvY2tfaGRyKGJoKSxcXG5mcy9leHQ0L2V4dGVudHMuYy01NzctXFx0XFx0XFx0ICAgICAgIGRlcHRoLCBwYmxrLCBsZTMyX3RvX2NwdShpZHgtXFx1MDAzZWVpX2Jsb2NrKSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDM9aW50IGV4dDRfZXh0X3ByZWNhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MzAtXFx0cGF0aFswXS5wX2hkciA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMTpcXHRyZXQgPSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgcGF0aFswXS5wX2hkciwgZGVwdGgsIDApO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTYzMi1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9ODg2PWV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy05MTAtXFx0XFx0ICAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo5MTE6XFx0XFx0cmV0ID0gZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtOTEyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0xOTE5PXN0YXRpYyB2b2lkIGV4dDRfZXh0X3RyeV90b19tZXJnZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMTk0OC0gKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoxOTQ5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXFxuZnMvZXh0NC9leHRlbnRzLmMtMTk1MC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mjg0ND1pbnQgZXh0NF9leHRfcmVtb3ZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjk3NS1cXG5mcy9leHQ0L2V4dGVudHMuYzoyOTc2OlxcdFxcdGlmIChleHQ0X2V4dF9jaGVjayhpbm9kZSwgcGF0aFswXS5wX2hkciwgZGVwdGgsIDApKSB7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjk3Ny1cXHRcXHRcXHRlcnIgPSAtRUZTQ09SUlVQVEVEO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDI3Nj1pbnQgZXh0NF9leHRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDQzNC1cXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihtYXAtXFx1MDAzZW1fbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0NDM1OlxcdGVyciA9IGV4dDRfZXh0X2NoZWNrX292ZXJsYXAoc2JpLCBpbm9kZSwgXFx1MDAyNm5ld2V4LCBwYXRoKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00NDM2LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU1MDItXFx0XFx0XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKVxcbmZzL2V4dDQvaW5vZGUuYzo1NTAzOlxcdFxcdFxcdFxcdHJldCA9IGV4dDRfZXh0X2NoZWNrX2lub2RlKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNTUwNC1cXHRcXHRcXHRlbHNlXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYz02MDM9aW50IGV4dDRfaW5kX21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTY0Ni1cXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG5mcy9leHQ0L21pZ3JhdGUuYzo2NDc6XFx0cmV0ID0gZXh0NF9leHRfY2hlY2tfaW5vZGUoaW5vZGUpO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTY0OC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDoyMS42NzY4MDA5MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjExOTE0OTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGaWxlIFN5c3RlbSBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGV4dDRfZXh0X2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBtYWNybyB0aGF0IHVsdGltYXRlbHkgY2FsbHMgYF9fZXh0NF9leHRfY2hlY2tgLiBUaGUgcGF0Y2ggbWVudGlvbnMgYWRkaW5nIGEgY2hlY2sgd2l0aGluIGBleHQ0X2ZpbmRfZXh0ZW50YCwgc28gaXQgc2VlbXMgbGlrZSBhbiBleHRlbnQtcmVsYXRlZCBpc3N1ZS4gVGhlIGZhY3QgdGhhdCB0aGUgZmFzdCBjb21taXQgcmVwbGF5IGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaXMgaW50ZXJlc3RpbmcuXG5cblJpZ2h0LCBzbyB0aGUgdHJhY2UgcG9pbnRzIHRvIGEgcHJvYmxlbSBzcGVjaWZpYyB0byBmYXN0IGNvbW1pdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIHZpc2libGUgaW4gdGhlIGRlYnVnZ2luZyB0b29scy4gTGV0J3MgYWRkIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzaG91bGQgaGVscCBwaW5wb2ludCB0aGUgcHJvYmxlbS5cblxuTm93LCB0aGlzIGNvbmZpZy4uLiBpdCBsb29rcyBsaWtlIGl0IGlzIGNvbnRyb2xsZWQgYnkgYEVYVDRfRlNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b25kZXIsIHRob3VnaCwgaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbiByZWxhdGVkIGp1c3QgdG8gdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaXRzZWxmLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIGtub3cgaWYgdGhlIGZhc3QgY29tbWl0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBhdCBhbGwuIExldCdzIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjI3Ljc5NTk1MzQ5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NjA3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFTVF9DT01NSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEzMDgtXFxuZnMvZXh0NC9leHQ0Lmg6MTMwOTojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXFx0XFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjEyOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocyhcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIxNzQtLypcXG5mcy9leHQ0L2V4dDQuaDoyMTc1OiAqIFRoZSByZWFzb24gd2h5IFxcXCJGQVNUX0NPTU1JVFxcXCIgaXMgYSBjb21wYXQgZmVhdHVyZSBpcyB0aGF0LCBGUyBiZWNvbWVzXFxuZnMvZXh0NC9leHQ0LmgtMjE3Ni0gKiBpbmNvbXBhdGlibGUgb25seSBpZiBmYXN0IGNvbW1pdCBibG9ja3MgYXJlIHByZXNlbnQgaW4gdGhlIEZTLiBTaW5jZSB3ZVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE4MC0gKi9cXG5mcy9leHQ0L2V4dDQuaDoyMTgxOiNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVFxcdFxcdDB4MDQwMFxcbmZzL2V4dDQvZXh0NC5oLTIxODItI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NUQUJMRV9JTk9ERVNcXHQweDA4MDBcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIyODY9RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzcGFyc2Vfc3VwZXIyLFxcdFNQQVJTRV9TVVBFUjIpXFxuZnMvZXh0NC9leHQ0Lmg6MjI4NzpFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKGZhc3RfY29tbWl0LFxcdFxcdEZBU1RfQ09NTUlUKVxcbmZzL2V4dDQvZXh0NC5oLTIyODgtRVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzdGFibGVfaW5vZGVzLFxcdFNUQUJMRV9JTk9ERVMpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQ0PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ2OlxcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ3LVxcdFxcdChFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSBcXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDA5PXN0YXRpYyBpbnQgZXh0NF9mY190cmFja190ZW1wbGF0ZShcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MzktXFx0XFx0XFx0XFx0KHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ0MDpcXHRcXHRcXHRcXHQgc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpID9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDQxLVxcdFxcdFxcdFxcdFxcdTAwMjZzYmktXFx1MDAzZXNfZmNfcVtGQ19RX1NUQUdJTkddIDpcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00NTQ9c3RhdGljIGludCBfX3RyYWNrX2RlbnRyeV91cGRhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00OTAtXFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ5MTpcXHRcXHRzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORylcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDkyLVxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5vZGUtXFx1MDAzZWZjZF9saXN0LFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE1ODY9aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk1LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxNTk2OlxcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU5Ny1cXHRcXHRyZXR1cm4gamJkMl9jb21wbGV0ZV90cmFuc2FjdGlvbihqb3VybmFsLCBjb21taXRfdGlkKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNjczPXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgwLVxcdGpvdXJuYWwtXFx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2ODE6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgyLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0yLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaDozOiNpZm5kZWYgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6NDojZGVmaW5lIF9fRkFTVF9DT01NSVRfSF9fXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTUtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTYzPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFnMnN0cihfX3UxNiB0YWcpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTg4LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxODk6I2VuZGlmIC8qIF9fRkFTVF9DT01NSVRfSF9fICovXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MzQyOT1zdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQzNy1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuZnMvZXh0NC9pbm9kZS5jOjM0Mzg6XFx0XFx0aWYgKHRlc3Rfb3B0Mihpbm9kZS1cXHUwMDNlaV9zYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9pbm9kZS5jLTM0MzktXFx0XFx0XFx0cmV0dXJuICFsaXN0X2VtcHR5KFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZjX2xpc3QpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTM3OTc9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTQwMDctXFx0XFx0XFx0ZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlLCBuZXcuZGVudHJ5KTtcXG5mcy9leHQ0L25hbWVpLmM6NDAwODpcXHRcXHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYy00MDA5LVxcdFxcdCAgICAhKEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTg4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NTQtI2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jOjE5NTU6XFx0e09wdF9mY19kZWJ1Z19mb3JjZSwgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVCxcXG5mcy9leHQ0L3N1cGVyLmMtMTk1Ni1cXHQgTU9QVF9TRVQgfCBNT1BUXzIgfCBNT1BUX0VYVDRfT05MWX0sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDM5Nj1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ0MTUtXFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmFzdF9jb21taXQoc2IpKVxcbmZzL2V4dDQvc3VwZXIuYzo0NDE2OlxcdFxcdHNldF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcXG5mcy9leHQ0L3N1cGVyLmMtNDQxNy1cXHQvKiBkb24ndCBmb3JnZXQgdG8gZW5hYmxlIGpvdXJuYWxfY3N1bSB3aGVuIG1ldGFkYXRhX2NzdW0gaXMgZW5hYmxlZC4gKi9cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00OTY0PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00OTg3LVxcbmZzL2V4dDQvc3VwZXIuYzo0OTg4OlxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9zdXBlci5jLTQ5ODktXFx0XFx0IWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoRVhUNF9TQihzYiktXFx1MDAzZXNfam91cm5hbCwgMCwgMCxcXG5mcy9leHQ0L3N1cGVyLmM6NDk5MDpcXHRcXHRcXHRcXHRcXHQgIEpCRDJfRkVBVFVSRV9JTkNPTVBBVF9GQVNUX0NPTU1JVCkpIHtcXG5mcy9leHQ0L3N1cGVyLmMtNDk5MS1cXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTA0OD1zdGF0aWMgaW50IGV4dDRfY2hlY2tfam91cm5hbF9kYXRhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDU1LVxcdFxcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xcbmZzL2V4dDQvc3VwZXIuYzo1MDU2OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01MDU3LVxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTU0NC1cXHRcXHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xcbmZzL2V4dDQvc3VwZXIuYzo1NTQ1OlxcdFxcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy01NTQ2LVxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6MjcuODQ0ODIyNDkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjQwOTUxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodHMgb24gRmFzdCBDb21taXQgaW4gZXh0NCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBmYXN0IGNvbW1pdCBpbiBleHQ0LiBJdCdzIGNsZWFyIHRoYXQgaXQncyBlbmFibGVkIHRocm91Z2ggdGhlIGZpbGUgc3lzdGVtIGFuZCBqb3VybmFsIGZlYXR1cmVzOiBgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVGAgYW5kIGBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfRkFTVF9DT01NSVRgLiBJdCdzIG5vdCBhIHN0YW5kYWxvbmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlIGEgZGlyZWN0IGBDT05GSUdfRVhUNF9GQVNUX0NPTU1JVGAuIEl0J3MganVzdCBidW5kbGVkIGludG8gYENPTkZJR19FWFQ0X0ZTYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQsIGlzIHRoZXJlIGEgc3BlY2lmaWMgYEpCRDJfRkFTVF9DT01NSVRgIGNvbmZpZyBvcHRpb24gdGhhdCBJJ20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGVpdGhlciBgZnMvamJkMi9LY29uZmlnYCBvciwgcGVyaGFwcywgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQncyBhbHdheXMgdGhlIGRldGFpbHMgaW4gdGhvc2UgY29uZmlnIGZpbGVzIHRoYXQgSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjI0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjMxLjcwODkyMTA3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1ODA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEpCRDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXFxuZnMvamJkMi9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmZzL2piZDIvS2NvbmZpZy0xOS1cXG5mcy9qYmQyL0tjb25maWc6MjA6Y29uZmlnIEpCRDJfREVCVUdcXG5mcy9qYmQyL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjMxLjc5NjUwNjk0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM0NjczODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDaGVja2luZyB0aGUgRXh0NCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfRVhUNF9GU2Agc2VlbXMgdG8gYmUgdGhlIG9uZSBhYnNvbHV0ZSwgbm9uLW5lZ290aWFibGUgY29uZmlnIHNldHRpbmcgd2UgKm11c3QqIGhhdmUgaW4gcGxhY2UuIEl0J3MgdGhlIGx5bmNocGluLCBubyBkb3VidC4gQnV0IEknbSBhbHdheXMgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSdtIGdvaW5nIHRvIGRvIGEgcXVpY2sgc3dlZXAuIEl0J3MgYSBnb29kIGhhYml0IC0gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc3VidGx5IHJlcXVpcmVkIGNvbmZpZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYml0ZSB1cyBsYXRlci4gTm8gaGFybSBpbiBhIHNlY29uZCBsb29rLiBKdXN0IG1ha2luZyBzdXJlIHdlIGRpZG4ndCBtaXNzIHNvbWV0aGluZyBjcnVjaWFsIGR1cmluZyBvdXIgaW5pdGlhbCBwYXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA4NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjM1LjIzMTE4MjY1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MzY0ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctMzQtXFxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbmZzL2V4dDQvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy02Ny1cXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcXG5mcy9leHQ0L0tjb25maWctNjktXFx0Ym9vbCBcXFwiRXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy03Ni1cXG5mcy9leHQ0L0tjb25maWc6Nzc6Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcXG5mcy9leHQ0L0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBleHQ0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjM1LjI3NzAyMzU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTgzNjkxNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFWFQ0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEVYVDQgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgbGluZSBvZiB0aGlua2luZy4gSXQgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSB0byBmb2N1cyBvbiwgd2hpY2ggaXMgYSBnaXZlbi4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYWRkZWQgd2l0aGluIGBleHQ0X2ZpbmRfZXh0ZW50YC4gVGhpcyBjaGVjayBzcGVjaWZpY2FsbHkgYWN0aXZhdGVzIG9ubHkgd2hlbiBgRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWWAgaXMgdHJ1ZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCB0aGUgZmFzdCBjb21taXQgcmVwbGF5IHByb2Nlc3MgaGVyZS5cblxuRmFzdCBjb21taXQgcmVwbGF5IGl0c2VsZiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQsIGJ1dCBvbmx5IGlmIHRoZXJlIGFyZSBmYXN0IGNvbW1pdCBibG9ja3MgdGhhdCBuZWVkIHRvIGJlIHJlcGxheWVkLiBTbyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyByZXBsYXkgcHJvY2VzcyBpcyBkZWZpbml0ZWx5IGBleHQ0X2ZjX3JlcGxheWAuIEluaXRpYWxseSwgSSBjb25zaWRlcmVkIGBleHQ0X2V4dF9jaGVja19pbm9kZWAgb3IgaXRzIG1hY3JvIGV4cGFuc2lvbiBgX19leHQ0X2V4dF9jaGVja2AgYXMgcG90ZW50aWFsIGtleSBzeW1ib2xzLiBCdXQgSSBuZWVkIHRvIG5hcnJvdyB0aGUgZm9jdXMgdG8gd2hhdCdzIGhhcHBlbmluZyAqZHVyaW5nKiBmYXN0IGNvbW1pdCByZXBsYXkgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5JIHN0YXJ0ZWQgYnkgbGlzdGluZyBgZXh0NF9mY19yZXBsYXlgLCBgX19leHQ0X2V4dF9jaGVja2AsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZWAgZm9yIHRoZSBmb2N1cyBzeW1ib2xzLiBIb3dldmVyLCBJIHJlYWxpemVkIGBfX2V4dDRfZXh0X2NoZWNrYCBpcyB0b28gZ2VuZXJpYy4gVGhlIHBhdGNoIGlzbid0IHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBmdW5jdGlvbiBpbiBpc29sYXRpb24sIGJ1dCBob3cgaXQncyB1c2VkICp3aXRoaW4qIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgY29udGV4dC4gRm9jdXNpbmcgb24gcmVwbGF5IGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGlzIGdvaW5nIHRvIGJlIG1vcmUgZGlyZWN0LlxuXG5TbywgSSByZWZpbmVkIHRoYXQgbGlzdCB0byBpbmNsdWRlIGBleHQ0X2ZjX3JlcGxheWAsIGBleHQ0X2ZjX3JlcGxheV9zY2FuYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYC4gTm93LCBldmVuIHRob3VnaCBgZXh0NF9maW5kX2V4dGVudGAgaXMgY2FsbGVkIGZyb20gdmFyaW91cyBwbGFjZXMsIGl0IGlzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiBmYXN0IGNvbW1pdCByZXBsYXkgYnkgYGV4dDRfZXh0X21hcF9ibG9ja3NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBleHQ0X2ZpbmRfZXh0ZW50YCBpcyBjYWxsZWQgKnNwZWNpZmljYWxseSogZHVyaW5nIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgc2VxdWVuY2UuIFRoYXQncyB0aGUga2V5IHRvIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjY3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ0LjI2MDcxNzI5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1OTcxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maW5kX2V4dGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD02ODQ9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC03NDEtICogVGhlIGJpdCBwb3NpdGlvbiBvZiB0aGVzZSBmbGFncyBtdXN0IG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZVxcbmZzL2V4dDQvZXh0NC5oOjc0MjogKiBFWFQ0X0dFVF9CTE9DS1NfKi4gIFRoZXkgYXJlIHVzZWQgYnkgZXh0NF9maW5kX2V4dGVudCgpLFxcbmZzL2V4dDQvZXh0NC5oLTc0My0gKiByZWFkX2V4dGVudF90cmVlX2Jsb2NrKCksIGV4dDRfc3BsaXRfZXh0ZW50X2F0KCksXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0zOTA5PWV4dGVybiBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9leHRfaW5zZXJ0X2V4dGVudChcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTM5MTItXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQsIGludCBnYl9mbGFncyk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkxMzpleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxcbmZzL2V4dDQvZXh0NC5oLTM5MTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKixcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MzkxPXN0YXRpYyB2b2lkIHRlc3Rfc3BsaXRfY29udmVydChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTQwNy1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjQwODpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX0RBVEFfTEJMSywgTlVMTCwgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTQwOS1cXHRleCA9IHBhdGgtXFx1MDAzZXBfZXh0O1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy00MzMtXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzo0MzQ6XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9EQVRBX0xCTEssIE5VTEwsIEVYVDRfRVhfTk9DQUNIRSk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy00MzUtXFx0ZXggPSBwYXRoLVxcdTAwM2VwX2V4dDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTg4NT1zdHJ1Y3QgZXh0NF9leHRfcGF0aCAqXFxuZnMvZXh0NC9leHRlbnRzLmM6ODg2OmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXFxuZnMvZXh0NC9leHRlbnRzLmMtODg3LVxcdFxcdCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtODk0LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjg5NTpcXHRLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChleHQ0X2ZpbmRfZXh0ZW50LCBpbm9kZSwgYmxvY2ssIHBhdGgsIGZsYWdzKTtcXG5mcy9leHQ0L2V4dGVudHMuYy04OTYtXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0xNDA3PWV4dDRfZXh0X2NyZWF0ZV9uZXdfbGVhZihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMTQzNS1cXHRcXHQvKiByZWZpbGwgcGF0aCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjE0MzY6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBwYXRoLCBnYl9mbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMTQzNy1cXHRcXHRyZXR1cm4gcGF0aDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTE0NDUtXFx0LyogcmVmaWxsIHBhdGggKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoxNDQ2OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBlZV9ibG9jaywgcGF0aCwgZ2JfZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTE0NDctXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTE5OTk9ZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjAzNC1cXHRcXHQgKiByaWdodCBmcm9tIGV4LCBvciBmcm9tIHRoZSBsZWZ0IG9mIGV4LiBUaGlzIGlzIGJlY2F1c2VcXG5mcy9leHQ0L2V4dGVudHMuYzoyMDM1OlxcdFxcdCAqIGV4dDRfZmluZF9leHRlbnQoKSBjYW4gcmV0dXJuIGVpdGhlciBleHRlbnQgb24gdGhlXFxuZnMvZXh0NC9leHRlbnRzLmMtMjAzNi1cXHRcXHQgKiBsZWZ0LCBvciBvbiB0aGUgcmlnaHQgZnJvbSB0aGUgc2VhcmNoZWQgcG9zaXRpb24uIFRoaXNcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTIxMTYtXFx0XFx0ZXh0X2RlYnVnKGlub2RlLCBcXFwibmV4dCBsZWFmIGJsb2NrIC0gJXVcXFxcblxcXCIsIG5leHQpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjIxMTc6XFx0XFx0bnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBuZXh0LCBOVUxMLCBnYl9mbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjExOC1cXHRcXHRpZiAoSVNfRVJSKG5wYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mjg0ND1pbnQgZXh0NF9leHRfcmVtb3ZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjg4My1cXHRcXHQvKiBmaW5kIGV4dGVudCBmb3Igb3IgY2xvc2VzdCBleHRlbnQgdG8gdGhpcyBibG9jayAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjI4ODQ6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVuZCwgTlVMTCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTI4ODUtXFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MzE5OD1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50X2F0KGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zMjY5LVxcdCAqIEdldCBhIG5ldyBwYXRoIHRvIHRyeSB0byB6ZXJvb3V0IG9yIGZpeCB0aGUgZXh0ZW50IGxlbmd0aC5cXG5mcy9leHQ0L2V4dGVudHMuYzozMjcwOlxcdCAqIFVzaW5nIEVYVDRfRVhfTk9GQUlMIGd1YXJhbnRlZXMgdGhhdCBleHQ0X2ZpbmRfZXh0ZW50KClcXG5mcy9leHQ0L2V4dGVudHMuYy0zMjcxLVxcdCAqIHdpbGwgbm90IHJldHVybiAtRU5PTUVNLCBvdGhlcndpc2UgLUVOT01FTSB3aWxsIGNhdXNlIGFcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTMyNzUtXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6MzI3NjpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIE5VTEwsIGZsYWdzIHwgRVhUNF9FWF9OT0ZBSUwpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTMyNzctXFx0aWYgKElTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MzQxNj1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zNDUxLVxcdFxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjM0NTI6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBwYXRoLCBmbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMzQ1My1cXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzUwMy1cXG5mcy9leHQ0L2V4dGVudHMuYzozNTA0OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgTlVMTCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM1MDUtXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM4MjM9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2NvbnZlcnRfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzg2OC1jb252ZXJ0OlxcbmZzL2V4dDQvZXh0ZW50cy5jOjM4Njk6XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBwYXRoLCBmbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMzg3MC1cXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mzk0Mz1jb252ZXJ0X2luaXRpYWxpemVkX2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzk4MC1cXHQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzozOTgxOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgcGF0aCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM5ODItXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNzY9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQyOTItXFx0LyogZmluZCBleHRlbnQgZm9yIHRoaXMgYmxvY2sgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo0MjkzOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgTlVMTCwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQyOTQtXFx0aWYgKElTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDMwMy1cXHQgKiB0aGlzIHNpdHVhdGlvbiBpcyBwb3NzaWJsZSwgdGhvdWdoLCBfZHVyaW5nXyB0cmVlIG1vZGlmaWNhdGlvbjtcXG5mcy9leHQ0L2V4dGVudHMuYzo0MzA0OlxcdCAqIHRoaXMgaXMgd2h5IGFzc2VydCBjYW4ndCBiZSBwdXQgaW4gZXh0NF9maW5kX2V4dGVudCgpXFxuZnMvZXh0NC9leHRlbnRzLmMtNDMwNS1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQzODktXFx0ICogSWYgd2UgYXJlIGRvaW5nIGJpZ2FsbG9jLCBjaGVjayB0byBzZWUgaWYgdGhlIGV4dGVudCByZXR1cm5lZFxcbmZzL2V4dDQvZXh0ZW50cy5jOjQzOTA6XFx0ICogYnkgZXh0NF9maW5kX2V4dGVudCgpIGltcGxpZXMgYSBjbHVzdGVyIHdlIGNhbiB1c2UuXFxuZnMvZXh0NC9leHRlbnRzLmMtNDM5MS1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTUzOTE9ZXh0NF9leHRfc2hpZnRfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQwMS1cXHQvKiBMZXQgcGF0aCBwb2ludCB0byB0aGUgbGFzdCBleHRlbnQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo1NDAyOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQwMy1cXHRcXHRcXHRcXHRFWFQ0X0VYX05PQ0FDSEUpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQxOS1cXHRpZiAoU0hJRlQgPT0gU0hJRlRfTEVGVCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjU0MjA6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIHN0YXJ0IC0gMSwgcGF0aCxcXG5mcy9leHQ0L2V4dGVudHMuYy01NDIxLVxcdFxcdFxcdFxcdFxcdEVYVDRfRVhfTk9DQUNIRSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01NDY4LVxcdHdoaWxlIChpdGVyYXRvciBcXHUwMDI2XFx1MDAyNiBzdGFydCBcXHUwMDNjPSBzdG9wKSB7XFxuZnMvZXh0NC9leHRlbnRzLmM6NTQ2OTpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgKml0ZXJhdG9yLCBwYXRoLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0NzAtXFx0XFx0XFx0XFx0XFx0RVhUNF9FWF9OT0NBQ0hFKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTU2MzU9c3RhdGljIGludCBleHQ0X2luc2VydF9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU2OTYtXFxuZnMvZXh0NC9leHRlbnRzLmM6NTY5NzpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgc3RhcnRfbGJsaywgTlVMTCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTY5OC1cXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01NzcyPWV4dDRfc3dhcF9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTc5My1cXG5mcy9leHQ0L2V4dGVudHMuYzo1Nzk0OlxcdFxcdHBhdGgxID0gZXh0NF9maW5kX2V4dGVudChpbm9kZTEsIGxibGsxLCBwYXRoMSwgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYy01Nzk1LVxcdFxcdGlmIChJU19FUlIocGF0aDEpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01Nzk4LVxcdFxcdH1cXG5mcy9leHQ0L2V4dGVudHMuYzo1Nzk5OlxcdFxcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZTIsIGxibGsyLCBwYXRoMiwgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYy01ODAwLVxcdFxcdGlmIChJU19FUlIocGF0aDIpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01OTU3PWludCBleHQ0X2NsdV9tYXBwZWQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGNsdSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU5NzQtXFx0Lyogc2VhcmNoIGZvciB0aGUgZXh0ZW50IGNsb3Nlc3QgdG8gdGhlIGZpcnN0IGJsb2NrIGluIHRoZSBjbHVzdGVyICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NTk3NTpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUNF9DMkIoc2JpLCBsY2x1KSwgTlVMTCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTk3Ni1cXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTk4My1cXHQgKiB0aG91Z2gsIF9kdXJpbmdfIHRyZWUgbW9kaWZpY2F0aW9uLCBhbmQgaXQncyB3aHkgYW4gYXNzZXJ0IGNhbid0XFxuZnMvZXh0NC9leHRlbnRzLmM6NTk4NDpcXHQgKiBiZSBwdXQgaW4gZXh0NF9maW5kX2V4dGVudCgpLlxcbmZzL2V4dDQvZXh0ZW50cy5jLTU5ODUtXFx0ICovXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDM2PWludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA0Mi1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MDQzOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgTlVMTCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA0NC1cXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA2Mi1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MDYzOlxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgcGF0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA2NC1cXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA3OS1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MDgwOlxcdFxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBzdGFydCwgcGF0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4MS1cXHRcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjEwMT12b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjEwNy1cXHR3aGlsZSAoY3VyIFxcdTAwM2MgZW5kKSB7XFxuZnMvZXh0NC9leHRlbnRzLmM6NjEwODpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBOVUxMLCAwKTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MTA5LVxcdFxcdGlmIChJU19FUlIocGF0aCkpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MTQ5PWludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYxNTgtXFx0LyogRGV0ZXJtaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgZmlyc3QgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo2MTU5OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXFxuZnMvZXh0NC9leHRlbnRzLmMtNjE2MC1cXHRcXHRcXHRcXHRcXHRFWFQ0X0VYX05PQ0FDSEUpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjE5MS1cXHRcXHRnb3RvIG91dDtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MTkyOlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTYxOTMtXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYxOTYtXFx0d2hpbGUgKGN1ciBcXHUwMDNjIGVuZCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYxOTc6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjE5OC1cXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjIwOS1cXG5mcy9leHQ0L2V4dGVudHMuYzo2MjEwOlxcdFxcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoMiwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjIxMS1cXHRcXHRpZiAoSVNfRVJSKHBhdGgyKSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyMzY9aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MjQ3LVxcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NjI0ODpcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNDktXFx0XFx0XFx0XFx0XFx0RVhUNF9FWF9OT0NBQ0hFKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNjQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MjY1OlxcdFxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MjY2LVxcdFxcdFxcdGlmICghSVNfRVJSKHBhdGgpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MzEzPUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KTtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MzE0OkVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2ZpbmRfZXh0ZW50KTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MzE1LUVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X2lzc3VlX3plcm9vdXQpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTY3Mz1zdGF0aWMgdm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnRfZXh0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtNjgyLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo2ODM6XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGVzLVxcdTAwM2Vlc19sYmxrLCBOVUxMLCBFWFQ0X0VYX05PQ0FDSEUpO1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy02ODQtXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTQ4PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE5Ny1cXHRcXHRcXHQvKiBSYW5nZSBpcyBub3QgbWFwcGVkICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxOTg6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxOTktXFx0XFx0XFx0aWYgKElTX0VSUihwYXRoKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM2MC1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzYxOlxcdFxcdFxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBtYXAubV9sYmxrLCBwYXRoLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM2Mi1cXHRcXHRcXHRcXHRpZiAoIUlTX0VSUihwYXRoKSkge1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9MjE9c3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTM2LVxcdGRvd25fd3JpdGUoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbmZzL2V4dDQvbWlncmF0ZS5jOjM3OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBsYi1cXHUwMDNlZmlyc3RfYmxvY2ssIE5VTEwsIDApO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTM4LVxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmM9MjcxPXN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmMtMjkzLVxcbmZzL2V4dDQvdmVyaXR5LmM6Mjk0OlxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsIDApO1xcbmZzL2V4dDQvdmVyaXR5LmMtMjk1LVxcdGlmIChJU19FUlIocGF0aCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ0LjMwOTMxODY4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjMwMjg5NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYGV4dDRfZmluZF9leHRlbnRgIGlzIGEga2V5IGZ1bmN0aW9uLCBoZWF2aWx5IGludm9sdmVkIGluIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIGl0cyBkaXJlY3QgY2FsbHMgZnJvbSBgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlYCBhbmQgYGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzYC4gQnV0IGl0J3MgYWxzbyBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgc3VjaCBhcyBgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leGAsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgLiBUaGF0IG1ha2VzIGl0IGNsZWFyIHRoYXQgY29uY2VudHJhdGluZyBvbiB0aGVzZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb25zIGlzIHRoZSBvcHRpbWFsIHN0cmF0ZWd5IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuU28sIEknbSBnb2luZyB0byBsaXN0IG91dCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgZXh0NF9mY19yZXBsYXlgLCBgZXh0NF9mY19yZXBsYXlfc2NhbmAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2VgLCBgZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlYCwgYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGZhc3QgY29tbWl0IHJlcGxheSB0aGF0IEkgbmVlZCB0byBhbmFseXplLlxuXG5IbW0sIGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCBsb29rcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0J3MgdGltZSB0byBjaGVjayBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ5LjkzOTYxMjAyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MzI2MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTM0PWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjM5MzU6ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbmZzL2V4dDQvZXh0NC5oLTM5MzYtXFx0XFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTk1Nz1pbnQgZXh0NF9jbHVfbWFwcGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxjbHUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MDM1LSAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYwMzY6aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXFxuZnMvZXh0NC9leHRlbnRzLmMtNjAzNy1cXHRcXHRcXHQgICAgICBpbnQgbGVuLCBpbnQgdW53cml0dGVuLCBleHQ0X2ZzYmxrX3QgcGJsaylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTQ4PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIyMi1cXHRcXHRcXHQgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjIyMzpcXHRcXHRcXHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KGlub2RlLCBjdXIsIG1hcC5tX2xlbixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIyNC1cXHRcXHRcXHRcXHRcXHRleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNDQtXFx0XFx0XFx0ZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSwgbWFwLm1fcGJsayk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyNDU6XFx0XFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChpbm9kZSwgY3VyLCBtYXAubV9sZW4sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNDYtXFx0XFx0XFx0XFx0XFx0ZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSwgbWFwLm1fcGJsayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjQ5Ljk5MDA1MjIyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MjEwMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEV4dDQgUmVwbGF5IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4YCBpc24ndCBzdGF0aWMsIHdoaWNoIGlzIGFzIEkgZXhwZWN0ZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhhdCBzYW1lIGNvbnRleHQuICBMZXQncyBzZWUsIGBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlYCwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGFuZCBgZXh0NF9leHRfY2xlYXJfYmJgIGFyZSAqYWxzbyogbm90IGRlY2xhcmVkIGFzIHN0YXRpYy4gR29vZCwgZ29vZC4gTm93LCBJIHNob3VsZCBmb2N1cyBvbiBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoeSB0aGF0J3MgdGhlIGNhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW4gdGhlIHJlY292ZXJ5IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6NTQuMTM0MjY0Mjk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MzA9ZXh0ZXJuIGludCBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTM5MzItXFx0XFx0XFx0XFx0ICAgICAgIGludCByZXZva2VfY3JlZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkzMzpleHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XFxuZnMvZXh0NC9leHQ0LmgtMzkzNC1leHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYwMzY9aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MTAwLS8qIFRyeSB0byBzaHJpbmsgdGhlIGV4dGVudCB0cmVlICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NjEwMTp2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYxMDIte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjUyLVxcdFxcdCAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjUzOlxcdFxcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsIHN0YXJ0ICsgbGVuKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI1NC1uZXh0Olxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNTctXFx0fVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjU4OlxcdGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNlXFx1MDAzZVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjU5LVxcdFxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjY4PWV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMTktXFx0XFx0Z290byBvdXQ7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzMjA6XFx0ZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZShpbm9kZSxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMyMS1cXHRcXHRpX3NpemVfcmVhZChpbm9kZSkgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTowNDo1NC4xODIwMzI5MjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDAwNzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb2N1cyBTeW1ib2xzIGFuZCBFeHRlbnQgVmFsaWRhdGlvbioqXG5cbk9rYXksIHRoZXNlIHN5bWJvbHMgYXJlIGFsbCB2ZXJ5IHJlbGV2YW50IHRvIHRoZSBjb3JlIG9mIGV4dDQncyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gaW50ZWdyYXRlIGEgZmV3IG1vcmUgaW50byBteSBhbmFseXNpczogYGV4dDRfZmNfcmVwbGF5YCwgYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgYGV4dDRfZXh0X2NsZWFyX2JiYC4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRVhUNF9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5UaGUgcGF0Y2gncyBjb3JlIG1vZGlmaWNhdGlvbiBsaWVzIHdpdGhpbiB0aGUgYGV4dDRfZmluZF9leHRlbnRgIGZ1bmN0aW9uLiBUaGlzIHZhbGlkYXRpb24gY2hlY2sgaXMgc3BlY2lmaWNhbGx5IHRyaWdnZXJlZCBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHRoZSBgRVhUNF9GQ19SRVBMQVlgIGZsYWcuIEZhc3QgY29tbWl0IHJlcGxheSwgYmVpbmcgYSBmdW5kYW1lbnRhbCBjb21wb25lbnQgb2YgZXh0NCwgaXMgdHJpZ2dlcmVkIHVwb24gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyZWQgd2l0aCBmYXN0IGNvbW1pdCBibG9ja3MuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIGFuIGFkZGl0aW9uYWwgbGF5ZXIgb2YgZXh0ZW50IHZhbGlkYXRpb24gc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgcmVwbGF5IHByb2Nlc3MuIEkgc2hvdWxkIGFsc28gdmVyaWZ5IHRoZSB1c2Ugb2YgYGV4dDRfZXh0X2NsZWFyX2JiYCwgYXMgdGhpcyBtaWdodCBiZSBrZXkgdG8gdmFsaWRhdGluZyB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0ODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDQ6NTguNzQ2MDQyMzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTkwMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZXh0X2NsZWFyX2JiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MzU9ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbmZzL2V4dDQvZXh0NC5oLTM5MzYtXFx0XFx0aW50IGxlbiwgaW50IHVud3JpdHRlbiwgZXh0NF9mc2Jsa190IHBibGspO1xcbmZzL2V4dDQvZXh0NC5oOjM5Mzc6ZXh0ZXJuIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTM4LVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjE0OT1pbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MjM1LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjYyMzY6aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjIzNy17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTk0ND1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2Mi1cXHRpZiAoIUlTX0VSUihpbm9kZSkpIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk2MzpcXHRcXHRleHQ0X2V4dF9jbGVhcl9iYihpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NjQtXFx0XFx0aXB1dChpbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA0OjU4Ljc5MzYzNjE2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDkxMDc3MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBQYXRoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IGhlYWQuIFdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlaW5nIGludHJvZHVjZWQgdG8gYGV4dDRfZmluZF9leHRlbnRgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYW4gYGV4dDRfZXh0X2NoZWNrYCB2YWxpZGF0aW9uLCBhbmQgdGhpcyBpc24ndCBqdXN0IGFueSBjaGVjazsgaXQncyAqc3BlY2lmaWNhbGx5KiBpbnRlbmRlZCB0byBiZSBydW4gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gVGhhdCBuYXJyb3dzIG91ciBmb2N1cyBzaWduaWZpY2FudGx5LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgbmV3IGNoZWNrIHdpbGwgZXhlY3V0ZSBvbmx5IHdoZW4gYEVYVDRfRkNfUkVQTEFZYCBpcyBzZXQgaW4gdGhlIG1vdW50IHN0YXRlLiBUaGF0J3Mgb3VyIGtleSB0cmlnZ2VyLiBXZSdyZSB0YWxraW5nIGFib3V0IGFuIGV4dDQgZmlsZXN5c3RlbSB3aXRoIGZhc3QgY29tbWl0IGJsb2NrcywgYmVpbmcgbW91bnRlZCBhbmQgcmVwbGF5ZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRob3NlIHN5bWJvbHMgd2UgbmVlZCB0byByZWFsbHkgaG9uZSBpbiBvbi4gV2UndmUgZ290IHRvIGNvbnNpZGVyIGBleHQ0X2ZjX3JlcGxheWAsIHRoYXQncyBvYnZpb3VzLiBCdXQgd2UgYWxzbyBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyB0aGUgZXh0ZW50IHJlcGxheWluZyBwcm9jZXNzIHdpbGwgaW1wYWN0IHRoaW5nczogYGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhgLCBgZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZWAsIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBhbmQgZmluYWxseSwgZG9uJ3QgZm9yZ2V0IGBleHQ0X2V4dF9jbGVhcl9iYmAgd2hpY2ggaXNuJ3Qgc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgZHVyaW5nIHRoYXQgZmFzdCBjb21taXQgcmVwbGF5LlxuXG5TbywgYEVYVDRfRlNgIGlzIG9idmlvdXNseSB0aGUgYmFzZSBjb25maWcgaGVyZSwgYnV0IGl0J3MgdGhlIGBFWFQ0X0ZDX1JFUExBWWAgdGhhdCB3ZSByZWFsbHkgbmVlZCB0byBjYXJlIGFib3V0LlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyOTIsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA1OjA0Ljg4NDcxNjY5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MTIzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yZXBsYXlcIixcbiAgICBcImV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXhcIixcbiAgICBcImV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGVcIixcbiAgICBcImV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc1wiLFxuICAgIFwiZXh0NF9leHRfY2xlYXJfYmJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGV4dDRfZmluZF9leHRlbnRgIGJ5IGFkZGluZyBhbiBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZXhlY3V0ZWQgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSAod2hlbiBgRVhUNF9GQ19SRVBMQVlgIGlzIHNldCBpbiB0aGUgbW91bnQgc3RhdGUpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgd2hlbiBtb3VudGluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBmYXN0IGNvbW1pdCBibG9ja3MsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leFwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3Nocmlua19pbm9kZVwiLFxuICAgIFwiZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzXCIsXG4gICAgXCJleHQ0X2V4dF9jbGVhcl9iYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgZXh0NF9maW5kX2V4dGVudGAgYnkgYWRkaW5nIGFuIGV4dGVudCB2YWxpZGF0aW9uIGNoZWNrIChgZXh0NF9leHRfY2hlY2tgKSB0aGF0IGlzIHNwZWNpZmljYWxseSBleGVjdXRlZCBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5ICh3aGVuIGBFWFQ0X0ZDX1JFUExBWWAgaXMgc2V0IGluIHRoZSBtb3VudCBzdGF0ZSkuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB3aGVuIG1vdW50aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSB0aGF0IGNvbnRhaW5zIGZhc3QgY29tbWl0IGJsb2NrcywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA1OjA0Ljk2OTg0OTA0N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3MDY1MjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjA1OjA0Ljk3MDQ0MDQwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDcwMDI0MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE1YTFkZGVmMDZlYWE4YjAxZTA4YmZlODc3NDIwMDZkNjYzNzMzZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTowNDowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IDE1OTcyNDEwZDQ2MDUuLmI5NWVhZmIwZDVjYWQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC05MDUsNiArOTA1LDEzIEBAIGV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgYmxvY2ssXG4gXHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuK1x0LyogZXh0NF9pZ2V0KCkgc2tpcHMgZXh0ZW50IHZhbGlkYXRpb24gZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gKi9cbitcdGlmICh1bmxpa2VseSgoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKSB7XG4rXHRcdHJldCA9IGV4dDRfZXh0X2NoZWNrKGlub2RlLCBlaCwgZGVwdGgsIDApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuIFxuIFx0aWYgKHBhdGgpIHtcbiBcdFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDU6MDQuOTcwNDQzMTE3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0Njk5OTQ4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXh0NCBFeHRlbnQgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGZzL2V4dDQvZXh0ZW50cy5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgY2hlY2sgd2l0aGluIGBleHQ0X2ZpbmRfZXh0ZW50YCBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgZXh0NF9leHRfY2hlY2tgLiBUaGUgY29kZSBzbmlwcGV0IG1ha2VzIGl0IGNsZWFyOyB3ZSdyZSB2YWxpZGF0aW5nIGV4dGVudCBoZWFkZXJzLlxuXG5UaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYXR0ZW1wdGluZyB0byBwcm9jZXNzIGNvcnJ1cHRlZCBleHRlbnRzIGR1cmluZyByZXBsYXksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gQ29ycnVwdGVkIGV4dGVudHMgYXJlIGEga25vd24gdmVjdG9yIGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBpc3N1ZXMg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyB2YWxpZGF0aW9uIGlzIGEgcG9zaXRpdmUgY2hhbmdlLCBsaWtlbHkgdG8gaW1wcm92ZSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LlxuXG5UaGUgY29yZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIG5ldyByaXNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSSd2ZSBnb3QgdG8gYmUgdGhvcm91Z2ggaGVyZS4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gncyBsb2dpYyBpcyB0aGF0IGl0ICp2YWxpZGF0ZXMqIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBleHRlbnQgaGVhZGVyLCBiZWZvcmUgdGhleSdyZSBhY3RlZCB1cG9uLiBJdCdzICpub3QqIGNyZWF0aW5nIG5ldyBzdHJ1Y3R1cmVzIG9yIGNoYW5naW5nIGV4aXN0aW5nIGxvZ2ljIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcmVhZCBvciB3cml0ZSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQga2luZCBvZiBidWcgaXMgYSBkaXN0aW5jdCB3b3JyeSwgYnV0IGhlcmUgaXQncyBub3QgdGhlIHByaW1hcnkgY29uY2Vybi5cblxuU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggYWRkcyBhICpjaGVjayogb24gZXhpc3RpbmcgZGF0YSwgbm90IGEgKnNvdXJjZSogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGlzIHRoZSB0b29sIGZvciBkZXRlY3Rpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IGlzc3VlIGhlcmUsIGFuZCBpdCdsbCBjYXRjaCBhbnkgcHJvYmxlbXMuIFdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBvbmUuIFRoaXMgcGF0Y2ggaXMgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjAsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6MDU6MTMuNDQwNDQyM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgZXh0ZW50IHZhbGlkYXRpb24gY2hlY2sgKGBleHQ0X2V4dF9jaGVja2ApIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIHByZXZlbnRzIHRoZSBwcm9jZXNzaW5nIG9mIGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQgZXh0ZW50cywgd2hpY2ggdHlwaWNhbGx5IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcCkgdG8gcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBleHRlbnQgdmFsaWRhdGlvbiBjaGVjayAoYGV4dDRfZXh0X2NoZWNrYCkgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpbiBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgcHJldmVudHMgdGhlIHByb2Nlc3Npbmcgb2YgY29ycnVwdGVkIG9yIG1hbGZvcm1lZCBleHRlbnRzLCB3aGljaCB0eXBpY2FsbHkgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwKSB0byByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[1] Phase: Succeeded StartedAt: 2026-08-21 11:05:24 +0000 UTC FinishedAt: 2026-08-21 11:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 11:05:24 +0000 UTC FinishedAt: 2026-08-21 11:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2] Phase: Succeeded StartedAt: 2026-08-21 11:05:24 +0000 UTC FinishedAt: 2026-08-21 14:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 11:05:24 +0000 UTC FinishedAt: 2026-08-21 14:48:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 11:05:24 +0000 UTC FinishedAt: 2026-08-21 11:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 11:05:24 +0000 UTC FinishedAt: 2026-08-21 11:05:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowkw5h8/series-workflowkw5h8-convert-artifact-1644138006/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 11:05:34 +0000 UTC FinishedAt: 2026-08-21 11:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 11:05:34 +0000 UTC FinishedAt: 2026-08-21 11:25:05 +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:*4681fc41-8caa-4305-9120-65cd23b41170,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-workflowkw5h8/series-workflowkw5h8-convert-artifact-1644138006/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": "cbdfabd7-48ee-49c3-bdf7-9556d6a44595", "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-workflowkw5h8/series-workflowkw5h8-build-action-2329591212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 11:05:34 +0000 UTC FinishedAt: 2026-08-21 11:24:55 +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:*4681fc41-8caa-4305-9120-65cd23b41170,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-workflowkw5h8/series-workflowkw5h8-convert-artifact-1644138006/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": "cbdfabd7-48ee-49c3-bdf7-9556d6a44595", "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-workflowkw5h8/series-workflowkw5h8-build-action-2329591212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 11:25:05 +0000 UTC FinishedAt: 2026-08-21 11:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 11:25:05 +0000 UTC FinishedAt: 2026-08-21 11:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 11:25:05 +0000 UTC FinishedAt: 2026-08-21 11:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 11:25:05 +0000 UTC FinishedAt: 2026-08-21 11:25:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowkw5h8/series-workflowkw5h8-convert-artifact-1107959721/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 11:25:15 +0000 UTC FinishedAt: 2026-08-21 11:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 11:25:15 +0000 UTC FinishedAt: 2026-08-21 11:27:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cbdfabd7-48ee-49c3-bdf7-9556d6a44595,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-workflowkw5h8/series-workflowkw5h8-build-action-2329591212/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-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 11:27:19 +0000 UTC FinishedAt: 2026-08-21 11:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 11:27:19 +0000 UTC FinishedAt: 2026-08-21 11:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 11:27:19 +0000 UTC FinishedAt: 2026-08-21 11:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 11:27:19 +0000 UTC FinishedAt: 2026-08-21 11:43:51 +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:*4681fc41-8caa-4305-9120-65cd23b41170,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-workflowkw5h8/series-workflowkw5h8-convert-artifact-1107959721/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": "846b4d1c-5214-4f65-8077-ba1c603f9acc", "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-workflowkw5h8/series-workflowkw5h8-build-action-2964415621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 11:27:19 +0000 UTC FinishedAt: 2026-08-21 11:43:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4681fc41-8caa-4305-9120-65cd23b41170,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-workflowkw5h8/series-workflowkw5h8-convert-artifact-1107959721/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": "846b4d1c-5214-4f65-8077-ba1c603f9acc", "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-workflowkw5h8/series-workflowkw5h8-build-action-2964415621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 11:43:51 +0000 UTC FinishedAt: 2026-08-21 11:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 11:43:51 +0000 UTC FinishedAt: 2026-08-21 11:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 11:43:51 +0000 UTC FinishedAt: 2026-08-21 11:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 11:43:51 +0000 UTC FinishedAt: 2026-08-21 11:45:38 +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:*846b4d1c-5214-4f65-8077-ba1c603f9acc,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-workflowkw5h8/series-workflowkw5h8-build-action-2964415621/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-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 14:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 14:48:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"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:*cbdfabd7-48ee-49c3-bdf7-9556d6a44595,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*846b4d1c-5214-4f65-8077-ba1c603f9acc,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-workflowkw5h8/series-workflowkw5h8-build-action-2329591212/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-workflowkw5h8/series-workflowkw5h8-build-action-2964415621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 11:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 11:45:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"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-workflowkw5h8/series-workflowkw5h8-convert-artifact-4259425022/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 11:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 11:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 11:45:48 +0000 UTC FinishedAt: 2026-08-21 11:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 11:45:58 +0000 UTC FinishedAt: 2026-08-21 14:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw5h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_replay","ext4_ext_replay_update_ex","ext4_ext_replay_shrink_inode","ext4_ext_replay_set_iblocks","ext4_ext_clear_bb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50c44fea13ec339d0d457079b254e8c8420d6511","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"4e586f3b-2bcb-4dbd-8400-b459ead9aa03","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 11:45:58 +0000 UTC FinishedAt: 2026-08-21 14:48:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cbdfabd7-48ee-49c3-bdf7-9556d6a44595,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*846b4d1c-5214-4f65-8077-ba1c603f9acc,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-workflowkw5h8/series-workflowkw5h8-build-action-2329591212/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-workflowkw5h8/series-workflowkw5h8-build-action-2964415621/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-workflowkw5h8/series-workflowkw5h8-convert-artifact-4259425022/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,}