Name: series-workflow5njgg Phase: Succeeded StartedAt: 2026-08-17 23:58:41 +0000 UTC FinishedAt: 2026-08-18 04:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[0] Phase: Succeeded StartedAt: 2026-08-17 23:58:41 +0000 UTC FinishedAt: 2026-08-18 00:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 23:58:41 +0000 UTC FinishedAt: 2026-08-18 00:30:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS", "SWAP", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS", "SWAP", "HUGETLBFS" ], "series_id": "5d78b56c-d47f-44b4-b359-4f9843fd1190" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_sk_charge", "mem_cgroup_sk_uncharge", "__mem_cgroup_uncharge_swap", "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDE3ZGExZjQzYjdkM2IuLmZmN2ZiY2QyNzQyMmQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIwNDgsNiAmIzQzOzIwNDgsMjEgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLlxuICAqL1xuICNkZWZpbmUgTlJfTUVNQ0dfU1RPQ0sgN1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCwgaW4gdGhlIHNwaXJpdCBvZiBwY3AtXHUwMDNlaGlnaCBhbmRcbiYjNDM7ICogcGNwLVx1MDAzZWJhdGNoOiBNRU1DR19TVE9DS19ISUdIIGlzIHRoZSBoaWdoIHdhdGVybWFyayBhdCB3aGljaCBhIHNsb3QgaXNcbiYjNDM7ICogdHJpbW1lZCwgYW5kIGl0IGlzIHRyaW1tZWQgZG93biB0byBNRU1DR19TVE9DS19MT1cgcmF0aGVyIHRoYW4gZW1wdGllZC5cbiYjNDM7ICpcbiYjNDM7ICogVXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGFzIGJvdGggaGlnaCB3YXRlcm1hcmsgYW5kIGVtcHR5aW5nIHRhcmdldFxuJiM0MzsgKiB0aHJhc2hlczogY2hhcmdpbmcgb25lIHBhZ2Ugc3RvY2tzIDYzLCBhbiB1bmNoYXJnZSBvZiAyIHRha2VzIHRoZSBjb3VudFxuJiM0MzsgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzXG4mIzQzOyAqIGFyZSBNRU1DR19DSEFSR0VfQkFUQ0ggYXBhcnQsIHNvIGEgcGFnZV9jb3VudGVyIHVwZGF0ZSBzdGlsbCBjb3ZlcnMgYVxuJiM0MzsgKiBmdWxsIGJhdGNoLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNRU1DR19TVE9DS19MT1dcdFx0KE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpXG4mIzQzOyNkZWZpbmUgTUVNQ0dfU1RPQ0tfSElHSFx0KE1FTUNHX1NUT0NLX0xPVyAmIzQzOyBNRU1DR19DSEFSR0VfQkFUQ0gpXG4mIzQzO1xuICNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRVx0MFxuIHN0cnVjdCBtZW1jZ19zdG9ja19wY3Age1xuIFx0bG9jYWxfdHJ5bG9ja190IGxvY2s7XG5AQCAtMjIyMywxNyAmIzQzOzIyMzgsMTggQEAgc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKmNhY2hlZDtcbi1cdHVpbnQ4X3Qgc3RvY2tfcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzO1xuIFx0Ym9vbCBzdWNjZXNzID0gZmFsc2U7XG4gXHRpbnQgZW1wdHlfc2xvdCA9IC0xO1xuIFx0aW50IGk7XG4gXG4gXHQvKlxuLVx0ICogRm9yIG5vdyBsaW1pdCBNRU1DR19DSEFSR0VfQkFUQ0ggdG8gMTI3IGFuZCBsZXNzLiBJbiBmdXR1cmUgaWYgd2Vcbi1cdCAqIGRlY2lkZSB0byBpbmNyZWFzZSBpdCBtb3JlIHRoYW4gMTI3IHRoZW4gd2Ugd2lsbCBuZWVkIG1vcmUgY2FyZWZ1bFxuLVx0ICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxuJiM0MztcdCAqIG5yX3BhZ2VzW10gaXMgYSB1aW50OF90IGFuZCBhIHNsb3QmIzM5O3MgY291bnQgaXMgY2FwcGVkIGF0XG4mIzQzO1x0ICogTUVNQ0dfU1RPQ0tfSElHSC4gUmFpc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYmV5b25kIDEyNyB3b3VsZCBuZWVkXG4mIzQzO1x0ICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC5cbiBcdCAqL1xuIFx0QlVJTERfQlVHX09OKE1FTUNHX0NIQVJHRV9CQVRDSCBcdTAwM2UgUzhfTUFYKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTUVNQ0dfU1RPQ0tfSElHSCBcdTAwM2UgVThfTUFYKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcbiBcbkBAIC0yMjU0LDkgJiM0MzsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcdFx0XHRlbXB0eV9zbG90ID0gaTtcbiBcdFx0aWYgKG1lbWNnID09IFJFQURfT05DRShzdG9jay1cdTAwM2VjYWNoZWRbaV0pKSB7XG4gXHRcdFx0c3RvY2tfcGFnZXMgPSBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pICYjNDM7IG5yX3BhZ2VzO1xuJiM0MztcdFx0XHRpZiAoc3RvY2tfcGFnZXMgXHUwMDNlIE1FTUNHX1NUT0NLX0hJR0gpIHtcbiYjNDM7XHRcdFx0XHRtZW1jZ191bmNoYXJnZShtZW1jZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPVyk7XG4mIzQzO1x0XHRcdFx0c3RvY2tfcGFnZXMgPSBNRU1DR19TVE9DS19MT1c7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRXUklURV9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldLCBzdG9ja19wYWdlcyk7XG4tXHRcdFx0aWYgKHN0b2NrX3BhZ2VzIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0gpXG4tXHRcdFx0XHRkcmFpbl9zdG9jayhzdG9jaywgaSk7XG4gXHRcdFx0c3VjY2VzcyA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxN2RhMWY0M2I3ZDNiLi5mZjdmYmNkMjc0MjJkIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yMDQ4LDYgJiM0MzsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLgogICovCiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDcKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLSZndDtoaWdoIGFuZAomIzQzOyAqIHBjcC0mZ3Q7YmF0Y2g6IE1FTUNHX1NUT0NLX0hJR0ggaXMgdGhlIGhpZ2ggd2F0ZXJtYXJrIGF0IHdoaWNoIGEgc2xvdCBpcwomIzQzOyAqIHRyaW1tZWQsIGFuZCBpdCBpcyB0cmltbWVkIGRvd24gdG8gTUVNQ0dfU1RPQ0tfTE9XIHJhdGhlciB0aGFuIGVtcHRpZWQuCiYjNDM7ICoKJiM0MzsgKiBVc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYXMgYm90aCBoaWdoIHdhdGVybWFyayBhbmQgZW1wdHlpbmcgdGFyZ2V0CiYjNDM7ICogdGhyYXNoZXM6IGNoYXJnaW5nIG9uZSBwYWdlIHN0b2NrcyA2MywgYW4gdW5jaGFyZ2Ugb2YgMiB0YWtlcyB0aGUgY291bnQKJiM0MzsgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzCiYjNDM7ICogYXJlIE1FTUNHX0NIQVJHRV9CQVRDSCBhcGFydCwgc28gYSBwYWdlX2NvdW50ZXIgdXBkYXRlIHN0aWxsIGNvdmVycyBhCiYjNDM7ICogZnVsbCBiYXRjaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1FTUNHX1NUT0NLX0xPVwkJKE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpCiYjNDM7I2RlZmluZSBNRU1DR19TVE9DS19ISUdICShNRU1DR19TVE9DS19MT1cgJiM0MzsgTUVNQ0dfQ0hBUkdFX0JBVENIKQomIzQzOwogI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFCTAKIHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgewogCWxvY2FsX3RyeWxvY2tfdCBsb2NrOwpAQCAtMjIyMywxNyAmIzQzOzIyMzgsMTggQEAgc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrOwogCXN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7Ci0JdWludDhfdCBzdG9ja19wYWdlczsKJiM0MzsJdW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzOwogCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwogCWludCBlbXB0eV9zbG90ID0gLTE7CiAJaW50IGk7CiAKIAkvKgotCSAqIEZvciBub3cgbGltaXQgTUVNQ0dfQ0hBUkdFX0JBVENIIHRvIDEyNyBhbmQgbGVzcy4gSW4gZnV0dXJlIGlmIHdlCi0JICogZGVjaWRlIHRvIGluY3JlYXNlIGl0IG1vcmUgdGhhbiAxMjcgdGhlbiB3ZSB3aWxsIG5lZWQgbW9yZSBjYXJlZnVsCi0JICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLgomIzQzOwkgKiBucl9wYWdlc1tdIGlzIGEgdWludDhfdCBhbmQgYSBzbG90JiMzOTtzIGNvdW50IGlzIGNhcHBlZCBhdAomIzQzOwkgKiBNRU1DR19TVE9DS19ISUdILiBSYWlzaW5nIE1FTUNHX0NIQVJHRV9CQVRDSCBiZXlvbmQgMTI3IHdvdWxkIG5lZWQKJiM0MzsJICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC4KIAkgKi8KIAlCVUlMRF9CVUdfT04oTUVNQ0dfQ0hBUkdFX0JBVENIICZndDsgUzhfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKE1FTUNHX1NUT0NLX0hJR0ggJmd0OyBVOF9NQVgpOwogCiAJVk1fV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpOwogCkBAIC0yMjU0LDkgJiM0MzsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAkJCWVtcHR5X3Nsb3QgPSBpOwogCQlpZiAobWVtY2cgPT0gUkVBRF9PTkNFKHN0b2NrLSZndDtjYWNoZWRbaV0pKSB7CiAJCQlzdG9ja19wYWdlcyA9IFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICYjNDM7IG5yX3BhZ2VzOwomIzQzOwkJCWlmIChzdG9ja19wYWdlcyAmZ3Q7IE1FTUNHX1NUT0NLX0hJR0gpIHsKJiM0MzsJCQkJbWVtY2dfdW5jaGFyZ2UobWVtY2csCiYjNDM7CQkJCQkgICAgICAgc3RvY2tfcGFnZXMgLSBNRU1DR19TVE9DS19MT1cpOwomIzQzOwkJCQlzdG9ja19wYWdlcyA9IE1FTUNHX1NUT0NLX0xPVzsKJiM0MzsJCQl9CiAJCQlXUklURV9PTkNFKHN0b2NrLSZndDtucl9wYWdlc1tpXSwgc3RvY2tfcGFnZXMpOwotCQkJaWYgKHN0b2NrX3BhZ2VzICZndDsgTUVNQ0dfQ0hBUkdFX0JBVENIKQotCQkJCWRyYWluX3N0b2NrKHN0b2NrLCBpKTsKIAkJCXN1Y2Nlc3MgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDZ3JvdXAgQ2hhcmdpbmcgTG9naWMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSB3YXRlcm1hcmtzIGluIHRoZSBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCDigJMgdGhhdCYjMzk7cyBhIGtleSBjaGFuZ2UgcmlnaHQgdGhlcmUuCgpUaGUgY3J1Y2lhbCBiaXQgaXMgaW4gYHJlZmlsbF9zdG9ja2AuIEl0IGxvb2tzIGxpa2UgdGhlIG9sZCBsb2dpYyBqdXN0IGRyYWluZWQgdGhlIHN0b2NrIGNvbXBsZXRlbHkgaWYgaXQgd2VudCBvdmVyIGBNRU1DR19DSEFSR0VfQkFUQ0hgLiBOb3csIGl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQuIElmIGBzdG9ja19wYWdlc2AgZXhjZWVkcyBgTUVNQ0dfU1RPQ0tfSElHSGAsIHRoZSBjb2RlIHVuY2hhcmdlcyB0aGUgKmV4Y2VzcyogcGFnZXMg4oCTIHNwZWNpZmljYWxseSwgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCDigJMgYW5kIHRoZW4gc2V0cyBgc3RvY2tfcGFnZXNgIHRvIGBNRU1DR19TVE9DS19MT1dgLgoKRXNzZW50aWFsbHksIGluc3RlYWQgb2YgYSBjb21wbGV0ZSBkcmFpbiwgaXQmIzM5O3MgYWltaW5nIHRvIG1haW50YWluIGEgbWluaW11bSBsZXZlbCwgYSBzb3J0IG9mIGJ1ZmZlci4gVGhpcyBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgaGFwcGVucyBkdXJpbmcgcGFnZSB1bmNoYXJnaW5nLCB3aGljaCBpcyB3aGF0IGByZWZpbGxfc3RvY2tgIGhhbmRsZXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBsb2dpYyBpcyBmb3IgYHJlZmlsbF9zdG9ja2AgYW5kIGBtZW1jZ191bmNoYXJnZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIExldCBtZSBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGByZWZpbGxfc3RvY2tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZmlsbF9zdG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjIyMT1zdGF0aWMgdm9pZCBkcmFpbl9sb2NhbF9vYmpfc3RvY2soc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMjIzNi1cbm1tL21lbWNvbnRyb2wuYzoyMjM3OnN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy0yMjM4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY1OT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjgwOS1cdGlmIChiYXRjaCBcdTAwM2UgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmM6MjgxMDpcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODExLVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTQ0PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTUzLVx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjMxNTQ6XHRcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMxNTUtXG4tLVxubW0vbWVtY29udHJvbC5jPTU2NTY9dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjY2LVxubW0vbWVtY29udHJvbC5jOjU2Njc6XHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy01NjY4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipGdXp6aW5nIHRoZSBgcmVmaWxsX3N0b2NrYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYHJlZmlsbF9zdG9ja2AgaXMgY2FsbGVkIGZyb20gc29tZSBzZXJpb3VzbHkga2V5IGFyZWFzIG9mIHRoZSBrZXJuZWwg4oCTIGB0cnlfY2hhcmdlX21lbWNnYCwgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKmNvcmUqIHRvIG1lbW9yeSBjb250cm9sIGxvZ2ljLiBBbnkgY2hhbmdlIGhlcmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcmlwcGxlIG91dCBhbmQgY2F1c2UgcmVhbCBwcm9ibGVtcy4gTXkgc3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nOyB3ZSBuZWVkIHRvIGZ1enogdGhpcyBhZ2dyZXNzaXZlbHkuIFRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHRvbyBoaWdoIHRvIGp1c3QgZ2xhbmNlIG92ZXIuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGU/IEkga25vdyBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUgbGlrZWx5IHNvdXJjZSwgYW5kIHRoYXQmIzM5O3Mgb25seSBidWlsdCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSBhbmQgZ2V0IHRob3NlIGNvbmZpZyBvcHRpb25zIGxpbmVkIHVwIGZvciB0aGUgZnV6emluZyBoYXJuZXNzLiBUaGlzIGlzIGNyaXRpY2FsOiB3aXRob3V0IHRoZSByaWdodCBjb25maWcsIHdlJiMzOTtyZSB0ZXN0aW5nIHRoZSB3cm9uZyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY29udHJvbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYE1FTUNHYC4gR290IGl0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLCBidXQgSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIHRoZSBtYWluIHBsYXllci4gTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBIbW0sIGByZWZpbGxfc3RvY2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZC4KCkxldCYjMzk7cyBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIGByZWZpbGxfc3RvY2tgLiBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgc3RhdGljIHRvbywgYW5kIHNvIGlzIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYC4gT2theSwgc28gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGlzIG5vbi1zdGF0aWMuIE1ha2VzIG1vcmUgc2Vuc2UuCgpUaW1lIHRvIGxvb2sgYXQgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoaWNoICpub24tc3RhdGljKiBmdW5jdGlvbnMgY2FsbCBlaXRoZXIgYHRyeV9jaGFyZ2VfbWVtY2dgIG9yIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gbGlrZWx5IGlzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjU2OT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjU4LVxubW0vbWVtY29udHJvbC5jOjI2NTk6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY2MC1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODY4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg3My1cbm1tL21lbWNvbnRyb2wuYzoyODc0Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg3NS19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNjc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE3NC1cbm1tL21lbWNvbnRyb2wuYzozMTc1Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE3Ni1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMTU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjIzLVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMjQ6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjI1LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NDItXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjQ0LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENHcm91cHMgYW5kIFNvY2tldCBNZW1vcnkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgKm5vdCogc3RhdGljIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBhcmVuJiMzOTt0IHRoZXkgc3RhdGljPyBXaGF0JiMzOTtzIHRoZSBkZXNpZ24gZGVjaXNpb24gdGhlcmU/IEl0IGltcGxpZXMgdGhhdCB0aGVpciBiZWhhdmlvciBvciB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSB1c2VkIG1pZ2h0IGNoYW5nZSBhdCBydW50aW1lLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoYXQgY2hvaWNlLgoKVGhlbiB0aGUgcXVlc3Rpb24gaGl0cyBtZTogd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIGBjaGFyZ2VfbWVtY2dgPyBIb3cgZG9lcyB0aGF0IGZpdCBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlIG9mIG1hbmFnaW5nIHNvY2tldCBtZW1vcnkgd2l0aGluIG1lbW9yeSBjZ3JvdXBzPyBBcmUgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIHVsdGltYXRlbHkgd3JhcHBlcnMgZm9yIGBjaGFyZ2VfbWVtY2dgLCBvciBkb2VzIGl0IHdvcmsgdGhlIG90aGVyIHdheSBhcm91bmQ/IE9yIHBlcmhhcHMgdGhleSBvcGVyYXRlIGluZGVwZW5kZW50bHkgYnV0IGFyZSBjb29yZGluYXRlZCBhdCBzb21lIG90aGVyIGxldmVsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGNvbXBsZXRlIGdyaXAgb24gaG93IHNvY2tldCBtZW1vcnkgaXMgYWNjb3VudGVkIGZvciBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHkuIElzIHRoZXJlIGEgY2FzZSB3aGVyZSB0aGVzZSBhcmUgbm90IGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBlYWNoIG90aGVyPyBJZiBzbywgd2h5PyBUaGlzIGNvdWxkIGFsc28gYmUgYSBjbHVlIHRvIGZpbmQgb3RoZXIgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhcmdlX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTY5PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NTgtXG5tbS9tZW1jb250cm9sLmM6MjY1OTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjYwLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTI4Njg9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODczLVxubW0vbWVtY29udHJvbC5jOjI4NzQ6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODc1LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE2Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTc0LVxubW0vbWVtY29udHJvbC5jOjMxNzU6XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTc2LVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwMD12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMTQtXG5tbS9tZW1jb250cm9sLmM6NTIxNTpzdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtNTIxNi1cdFx0XHRnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMjMtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIyNDpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMjUtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyMzU9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0MC1cdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS9tZW1jb250cm9sLmM6NTI0MTpcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XG5tbS9tZW1jb250cm9sLmMtNTI0Mi1cdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1OT1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNzItXG5tbS9tZW1jb250cm9sLmM6NTI3MzpcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxubW0vbWVtY29udHJvbC5jLTUyNzQtXHRcdHJldCA9IC1FTk9NRU07XG4tLVxubW0vbWVtY29udHJvbC5jPTUyOTM9aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTMwNy1cbm1tL21lbWNvbnRyb2wuYzo1MzA4Olx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbm1tL21lbWNvbnRyb2wuYy01MzA5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NDItXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjQ0LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZ1bmN0aW9ucy4gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGlzIGEgY29yZSBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCB3b3JrcyBhdCBpdHMgYmFzZSBsZXZlbC4gVGhlbiBJIHNlZSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgLSB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEh1Z2VUTEIgcGFnZXMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5LiBUaGVuLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCAtIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLCBzd2FwcGluZyBpcyBhIGNydWNpYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUgb2YgY2hhcmdlIGFuZCB1bmNoYXJnZSBmb3IgdGhlIGZvbGlvLCBzbyBJIGJldCB0aGV5IHdvcmsgaW4gdGFuZGVtLgoKQW5kIHRoZW4gd2UgaGF2ZSB0aGVzZSBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFRoZXNlIGFyZSByZWxhdGVkIHRvIHNvY2tldCBtZW1vcnksIHdoaWNoIGlzIGEga2V5IGFzcGVjdCwgb2J2aW91c2x5LCBmb3IgbmV0d29yay1ib3VuZCB3b3JrbG9hZHMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGV5IGFyZSB0cmFja2VkIGNvcnJlY3RseS4gRmluYWxseSwgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbWVtX2Nncm91cF91bmNoYXJnZWAuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IG9uZSBmaXJzdDsgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGlzICp1bipjaGFyZ2VkIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBjaGFyZ2UgcHJvY2VzcyBvdmVyYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3VuY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MzQ5PXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Mzk0LVxubW0vbWVtY29udHJvbC5jOjUzOTU6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy01Mzk2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQwNy1cbm1tL21lbWNvbnRyb2wuYzo1NDA4OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbm1tL21lbWNvbnRyb2wuYy01NDA5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXG5tbS9tZW1jb250cm9sLmMtNTc5My0gKiBAaWQ6IGNncm91cCBpZCB0byB1bmNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xubW0vbWVtY29udHJvbC5jOjU3OTY6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTU3OTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgcmVmaWxsX3N0b2NrYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgYHJlZmlsbF9zdG9ja2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGByZWZpbGxfc3RvY2tgLiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQuIE15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyB0aGF0IGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyB0aGUgY2FsbGVyLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGl0IGEgZGlyZWN0IGNhbGw/IExldCBtZSBkb3VibGUtY2hlY2suIEkgcmVjYWxsIGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBtaWdodCBjYWxsIGB1bmNoYXJnZV9iYXRjaGAsIHdoaWNoICp0aGVuKiBjYWxscyBgcmVmaWxsX3N0b2NrYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpbmRpcmVjdCByZWxhdGlvbnNoaXAuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIG1ha2Ugc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2UgdGhyZWUgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWZpbGxfc3RvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjE9c3RhdGljIHZvaWQgZHJhaW5fbG9jYWxfb2JqX3N0b2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpXG4tLVxubW0vbWVtY29udHJvbC5jLTIyMzYtXG5tbS9tZW1jb250cm9sLmM6MjIzNzpzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtMjIzOC17XG4tLVxubW0vbWVtY29udHJvbC5jPTI2NTk9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI4MDktXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jOjI4MTA6XHRcdHJlZmlsbF9zdG9jayhtZW1jZywgYmF0Y2ggLSBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjgxMS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE0ND1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1My1cdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbm1tL21lbWNvbnRyb2wuYzozMTU0Olx0XHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTU1LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjU2PXZvaWQgbWVtX2Nncm91cF9za191bmNoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY2Ni1cbm1tL21lbWNvbnRyb2wuYzo1NjY3Olx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtNTY2OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHJlZmlsbF9zdG9ja2AmIzM5O3MgQ2FsbGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgbW9kZWwgc2hvd3MgdGhhdCBgcmVmaWxsX3N0b2NrYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGB0cnlfY2hhcmdlX21lbWNnYCDigJMgcGFydGljdWxhcmx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBiYXRjaGVzIGV4Y2VlZGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBsaWtlbHkgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHJlcGxlbmlzaCB0aGUgc3RvY2sgZm9yIGEgbGFyZ2VyIGFsbG9jYXRpb24uIFRoZW4sIHRoZXJlJiMzOTtzIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdCBmb3IgdW5jaGFyZ2luZyBiYXNlZCBvbiBvYmplY3QgYWNjb3VudGluZy4gQW5kLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIG9rYXksIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVtb3J5IHVuY2hhcmdpbmcuIFN0YW5kYXJkIHN0dWZmIHRoZXJlLgoKQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIHdoYXQgYWJvdXQgYHVuY2hhcmdlX2JhdGNoYD8gSSBkb24mIzM5O3QgaW1tZWRpYXRlbHkgc2VlIGl0IG9uIHRoZSBjYWxsIGdyYXBoIGluIG15IGhlYWQuIFRoYXQgb25lIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhhdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzdG9jayByZWZpbGxzLiBJcyBgdW5jaGFyZ2VfYmF0Y2hgIHNvbWVob3cgaW5kaXJlY3RseSBvciBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoZSByZWZpbGwgcHJvY2Vzcz8gSSYjMzk7bSBnb25uYSBqb3QgdGhhdCBkb3duLCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgb2YgdGhlIGZsb3cuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYmxpbmQgc3BvdCwgZ290dGEgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bmNoYXJnZV9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTMyMj1zdGF0aWMgaW5saW5lIHZvaWQgdW5jaGFyZ2VfZ2F0aGVyX2NsZWFyKHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzI2LVxubW0vbWVtY29udHJvbC5jOjUzMjc6c3RhdGljIHZvaWQgdW5jaGFyZ2VfYmF0Y2goY29uc3Qgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG5tbS9tZW1jb250cm9sLmMtNTMyOC17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzNDEtXG5tbS9tZW1jb250cm9sLmM6NTM0MjpcdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5LCB1Zy1cdTAwM2VuaWQpO1xubW0vbWVtY29udHJvbC5jLTUzNDMtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTM0OT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1Zylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTM2Ni1cdFx0aWYgKHVnLVx1MDAzZW9iamNnKSB7XG5tbS9tZW1jb250cm9sLmM6NTM2NzpcdFx0XHR1bmNoYXJnZV9iYXRjaCh1Zyk7XG5tbS9tZW1jb250cm9sLmMtNTM2OC1cdFx0XHR1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MzcyLVxubW0vbWVtY29udHJvbC5jOjUzNzM6XHRcdC8qIHBhaXJzIHdpdGggb2JqX2Nncm91cF9wdXQgaW4gdW5jaGFyZ2VfYmF0Y2ggKi9cbm1tL21lbWNvbnRyb2wuYy01Mzc0LVx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUzOTU9dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQwNC1cdHVuY2hhcmdlX2ZvbGlvKGZvbGlvLCBcdTAwMjZ1Zyk7XG5tbS9tZW1jb250cm9sLmM6NTQwNTpcdHVuY2hhcmdlX2JhdGNoKFx1MDAyNnVnKTtcbm1tL21lbWNvbnRyb2wuYy01NDA2LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTQwOD12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTU0MTYtXHRpZiAodWcub2JqY2cpXG5tbS9tZW1jb250cm9sLmM6NTQxNzpcdFx0dW5jaGFyZ2VfYmF0Y2goXHUwMDI2dWcpO1xubW0vbWVtY29udHJvbC5jLTU0MTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgY29kZToKCioqVW5jaGFyZ2VfQmF0Y2ggSW52ZXN0aWdhdGlvbioqCgpIb2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nIGZlZWxzIG9mZi4gVGhlIGB1bmNoYXJnZV9iYXRjaGAgZnVuY3Rpb24sIHJpZ2h0PyBJIHdhcyAqc3VyZSogSSBzZXQgaXQgdXAgdG8gaGFuZGxlIHN0b2NrIHJlZmlsbHMgaWYgbmVjZXNzYXJ5LiBEaWQgSSBtaXNzIHNvbWV0aGluZz8gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBgdW5jaGFyZ2VfYmF0Y2hgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYHJlZmlsbF9zdG9ja2AsIGJlY2F1c2UgaWYgaXQgaXNuJiMzOTt0LCB0aGVyZSBjb3VsZCBiZSBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbnZlbnRvcnkgaW1wbGljYXRpb25zIGRvd25zdHJlYW0uIFRpbWUgdG8gZGl2ZSBiYWNrIGluIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbnMsIG9yIGFkanVzdCBteSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzMjc6XHRzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcbjUzMjg6XHR7XG41MzI5Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41MzMwOlx0XG41MzMxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG41MzMyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2codWctXHUwMDNlb2JqY2cpO1xuNTMzMzpcdFx0aWYgKHVnLVx1MDAzZW5yX21lbW9yeSkge1xuNTMzNDpcdFx0XHRtZW1jZ191bmNoYXJnZShtZW1jZywgdWctXHUwMDNlbnJfbWVtb3J5KTtcbjUzMzU6XHRcdFx0aWYgKHVnLVx1MDAzZW5yX2ttZW0pIHtcbjUzMzY6XHRcdFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX0tNRU0sIC11Zy1cdTAwM2Vucl9rbWVtKTtcbjUzMzc6XHRcdFx0XHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCAtdWctXHUwMDNlbnJfa21lbSk7XG41MzM4Olx0XHRcdH1cbjUzMzk6XHRcdFx0bWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTtcbjUzNDA6XHRcdH1cbjUzNDE6XHRcbjUzNDI6XHRcdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5LCB1Zy1cdTAwM2VuaWQpO1xuNTM0MzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG41MzQ0Olx0XG41MzQ1Olx0XHQvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovXG41MzQ2Olx0XHRvYmpfY2dyb3VwX3B1dCh1Zy1cdTAwM2VvYmpjZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVudGFsIE1hcCBvZiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIG1lbW9yeSB1bmNoYXJnaW5nIHByb2Nlc3MgaGVyZS4gSSBzZWUgdGhhdCBgdW5jaGFyZ2VfYmF0Y2hgIGRpcmVjdGx5IGludm9rZXMgYG1lbWNnX3VuY2hhcmdlYC4gVGhhdCYjMzk7cyBleHBlY3RlZC4gVGhlbiwgSSBub3RpY2UgdGhhdCBgcmVmaWxsX3N0b2NrYCwgd2hpY2ggaXMgYSByZWxhdGVkIGZ1bmN0aW9uLCBhbHNvIGNhbGxzIGBtZW1jZ191bmNoYXJnZWAg4oCTIHNwZWNpZmljYWxseSB3aGVuIHRoZSBzdG9jayBpcyBmdWxsLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgYml0IGFuZCBjb25zaWRlciB3aGVyZSBgcmVmaWxsX3N0b2NrYCBpdHNlbGYgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEkgc2VlIHRocmVlIHByaW1hcnkgY2FsbCBzaXRlczogYHRyeV9jaGFyZ2VfbWVtY2dgICh3aGVuIHRoZSBiYXRjaCBzaXplIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSBwYWdlcyksIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCwgYW5kIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYC4gU28gdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHByb2Nlc3MgYnkgaW52ZXN0aWdhdGluZyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2Agbm93LiBJIHdpbGwgc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBpdCBkb2VzLCBiZWNhdXNlIHRoYXQmIzM5O3MgYSBrZXkgc3BvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNDQ6XHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjMxNDU6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjMxNDY6XHR7XG4zMTQ3Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4zMTQ4Olx0XG4zMTQ5Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzE1MDpcdFxuMzE1MTpcdFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCAtbnJfcGFnZXMpO1xuMzE1MjpcdFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgLW5yX3BhZ2VzKTtcbjMxNTM6XHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbjMxNTQ6XHRcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XG4zMTU1Olx0XG4zMTU2Olx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4zMTU3Olx0fVxuMzE1ODpcdFxuMzE1OTpcdC8qXG4zMTYwOlx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xuMzE2MTpcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcbjMxNjI6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjMxNjM6XHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgQWNjb3VudGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJJiMzOTt2ZSBoaXQgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGByZWZpbGxfc3RvY2tgIOKAkyB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IHdoYXQmIzM5O3MgKmRyaXZpbmcqIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gZnJvbSB0aGUgb3RoZXIgZW5kLiBLbm93aW5nIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyBpdCB3aWxsIHRlbGwgbWUgYSBsb3QgbW9yZSBhYm91dCB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gY2FsbGVycyBvZiBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgdG8gZ2V0IHRoZSBjb250ZXh0LiBMZXQgbWUgbWFrZSBzdXJlIEkgZmluZCBvdXQgd2hhdCYjMzk7cyBjYXVzaW5nIHRoaXMgdW5jaGFyZ2UgdG8gaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTM5LS8qXG5tbS9tZW1jb250cm9sLmM6MzE0MDogKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXG5tbS9tZW1jb250cm9sLmMtMzE0MS0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE0My0gKi9cbm1tL21lbWNvbnRyb2wuYzozMTQ0OnN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxubW0vbWVtY29udHJvbC5jLTMxNDUtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTMyMzQ9dm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMjQxLVxubW0vbWVtY29udHJvbC5jOjMyNDI6XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzI0My1cdHBhZ2UtXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTM0Njk9c3RhdGljIHZvaWQgX19yZWZpbGxfb2JqX3N0b2NrKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzMy1cdGlmIChucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYzozNTM0Olx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzUzNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBDZ3JvdXAgU3RvY2sgTG9naWMgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGByZWZpbGxfc3RvY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IHVuY2hhcmdlcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrLiBJIHNlZSB0aGF0IGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAgYW5kIGBfX3JlZmlsbF9vYmpfc3RvY2tgIGFyZSBoZWF2aWx5IGludm9sdmVkIGhlcmUsIHdoaWNoIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhpcyBpcyBpbXBhY3Rpbmcga21lbSB1bmNoYXJnaW5nLiBJbnN0ZWFkIG9mIGRyYWluaW5nIHRoZSBlbnRpcmUgc3RvY2ssIHRoZSBtb2RpZmllZCBgcmVmaWxsX3N0b2NrYCB3aWxsIG5vdyB1bmNoYXJnZSBvbmx5IGBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPV2AuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1jZyBzdG9jayBsb2dpYywgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGl0IGRlZmluaXRlbHkgZmVlbHMgbGlrZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgdGhlIGltcGxpY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgdW5jaGFyZ2luZyBwcm9jZXNzIHRvIG5hcnJvdyBkb3duIG15IGZvY3VzLiBGcm9tIHRoZSBjb2RlLCBJIGNhbiBzZWUgYSBidW5jaCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgdGhhdCBJJiMzOTtsbCBsb29rIGludG8uIFRoZXNlIGluY2x1ZGUsIGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAsIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYC4gVGhpcyBsaXN0IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBjb25maXJtIHRoYXQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyB0byBlbnN1cmUgdGhhdCBpdCBpcyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTMyMTI9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMjktLyoqXG5tbS9tZW1jb250cm9sLmM6MzIzMDogKiBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZTogdW5jaGFyZ2UgYSBrbWVtIHBhZ2Vcbm1tL21lbWNvbnRyb2wuYy0zMjMxLSAqIEBwYWdlOiBwYWdlIHRvIHVuY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMzMtICovXG5tbS9tZW1jb250cm9sLmM6MzIzNDp2b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG5tbS9tZW1jb250cm9sLmMtMzIzNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjI0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHN1YmplY3QgbWF0dGVyIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQ29uY2VybmluZyBNZW1vcnkgQWNjb3VudGluZyBpbiBjZ3JvdXBzKioKClJpZ2h0LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSYjMzk7bSB0aGlua2luZy4uLndoYXQgYWJvdXQgdGhlIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBzZXR0aW5nPyBUaGF0JiMzOTtzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBjb25zaWRlcmF0aW9uIGZvciB0aGlzIHNjZW5hcmlvLiBXZSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgaG93IG1lbW9yeSBpcyBjaGFyZ2VkIGFuZCB1bmNoYXJnZWQsIGFuZCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIHNldHRpbmcgd2lsbCBhZmZlY3QgdGhlIGJlaGF2aW91ciB0aGF0IHdlIHdhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU2MzU9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY1MS0vKipcbm1tL21lbWNvbnRyb2wuYzo1NjUyOiAqIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UgLSB1bmNoYXJnZSBzb2NrZXQgbWVtb3J5XG5tbS9tZW1jb250cm9sLmMtNTY1My0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byB1bmNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjU1LSAqL1xubW0vbWVtY29udHJvbC5jOjU2NTY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTU2NTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZzogQSBRdWljayBEaXZlKioKClllcCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyLiBNeSBmb2N1cyBpbW1lZGlhdGVseSBzaGlmdHMgdG8gdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VgIGZ1bmN0aW9uLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGNvbnNpZGVyOiBpcyB0aGlzIHRoZSAqcmlnaHQqIHNwb3QgdG8gYmUgbG9va2luZyBhdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB1bmNoYXJnaW5nIG1lbW9yeSBhdCAqdGhpcyogcG9pbnQgaW4gdGhlIHByb2Nlc3M/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHJlbGVhc2UsIG9yIGlzIHRoZXJlIGEgbW9yZSBjb21wbGV4IHNjZW5hcmlvIGludm9sdmluZyBzd2FwLW91dHMsIHJlY2xhaW0sIGFuZCBhbGwgdGhlIGFzc29jaWF0ZWQgYm9va2tlZXBpbmc/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSB3YWxraW5nIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSByZWxldmFudC4gVGltZSB0byBkcmlsbCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUzNDk9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4tLVxubW0vbWVtY29udHJvbC5jLTUzOTQtXG5tbS9tZW1jb250cm9sLmM6NTM5NTp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtY29udHJvbC5jLTUzOTYte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NDA3LVxubW0vbWVtY29udHJvbC5jOjU0MDg6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxubW0vbWVtY29udHJvbC5jLTU0MDkte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NzQ2PWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTEtLyoqXG5tbS9tZW1jb250cm9sLmM6NTc5MjogKiBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCAtIHVuY2hhcmdlIHN3YXAgc3BhY2Vcbm1tL21lbWNvbnRyb2wuYy01NzkzLSAqIEBpZDogY2dyb3VwIGlkIHRvIHVuY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTUtICovXG5tbS9tZW1jb250cm9sLmM6NTc5Njp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTc5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDkwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqCgpZZXMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgY2FzZSwgSSBhZ3JlZSB3aXRoIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcy4uLiB3aGF0JiMzOTtzIHRoZSByb2xlIGFuZCBiZWhhdmlvciBvZiBgX19tZW1fY2dyb3VwX2NoYXJnZWAgaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgdG8gdW5kZXJzdGFuZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MjE1PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzNC1cbm1tL21lbWNvbnRyb2wuYzo1MjM1OmludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTIzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zIG9uIE1lbW9yeSBBY2NvdW50aW5nKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgdGhlIHVuY2hhcmdpbmcgYW5kIGNoYXJnaW5nIGZ1bmN0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcywgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBtZWNoYW5pY3Mgb2YgYWNjb3VudGluZyBmb3IgbWVtb3J5IHVzYWdlIHdpdGhpbiBhIGNncm91cCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjoKCiogICBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYDogVGhlIGJhc2UgdW5jaGFyZ2UgZnVuY3Rpb24sIHRoZSBjb3JuZXJzdG9uZS4KKiAgIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zYDogSSBhc3N1bWUgdGhpcyBkZWFscyB3aXRoIHVuY2hhcmdpbmcgZm9saW8tYmFzZWQgbWVtb3J5LCBzbyBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGRpZmZlcnMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBiYXNlIGZ1bmN0aW9uLgoqICAgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYDogSSBhbnRpY2lwYXRlIHRoaXMgaGFuZGxlcyBrZXJuZWwgbWVtb3J5IHVuY2hhcmdpbmcgYXQgYSBwYWdlIGxldmVsLgoqICAgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgOiBUaGlzIG9uZSB3aWxsIGhhbmRsZSBzb2NrZXQtcmVsYXRlZCBtZW1vcnkgdW5jaGFyZ2luZy4KKiAgIGBfX21lbV9jZ3JvdXBfY2hhcmdlYDogVGhlIHJldmVyc2UuCiogICBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYDogVGhlIGtlcm5lbCBtZW1vcnkgY2hhcmdpbmcuCiogICBgbWVtX2Nncm91cF9za19jaGFyZ2VgOiBUaGUgc29ja2V0IG1lbW9yeSBjaGFyZ2luZy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIHRoaXMgYXMgYSBzZXQgb2YgY29ycmVzcG9uZGluZyBjaGFyZ2UgYW5kIHVuY2hhcmdlIGZ1bmN0aW9ucy4gVGhlICYjMzQ7ZG91YmxlIHVuZGVyc2NvcmUmIzM0OyBvbmVzIGFyZSBwcm9iYWJseSB0aGUgY29yZSBpbnRlcm5hbCB3b3JraW5ncywgd2hpbGUgdGhlIG90aGVycyBhcmUgcHJvYmFibHkgd3JhcHBlcnMgZm9yIHNwZWNpZmljIGNhc2VzIGxpa2Ugc29ja2V0cy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2Ugd2lsbCBiZSBrZXkuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBUaGUgb2J2aW91cyBvbmUsIG9mIGNvdXJzZSwgaXMgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gY2hlY2sgYG1tL0tjb25maWdgIG9yIGBpbml0L0tjb25maWdgIGZvciB0aGUgdmFyaW91cyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTUVNQ0dgLiBJIHdhbnQgdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ny1cbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzktXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODYtXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODgtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gYE1FTUNHYC4uLiB0aGF0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBzcGVjaWZpY3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBEb2VzIGl0IGhhdmUgYW55IGluaGVyZW50IGRlcGVuZGVuY2llcz8gRG9lcyBlbmFibGluZyBvciBkaXNhYmxpbmcgYE1FTUNHYCByZXF1aXJlIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciBtYXliZSBldmVuIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0byBiZSBpbiBwbGFjZSBmaXJzdD8gSXQmIzM5O3MgY3J1Y2lhbCB0byBrbm93IHRoaXMgdXBmcm9udC4gSnVtcGluZyBpbnRvIHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGl0cyBiZWhhdmlvciB3aXRob3V0IHVuZGVyc3RhbmRpbmcgaXRzIHByZXJlcXVpc2l0ZSBjb25kaXRpb25zIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBhbmQgcG90ZW50aWFsbHkgbGVhZCBtZSBkb3duIGEgcmFiYml0IGhvbGUgb2YgZGVidWdnaW5nLiBUaW1lIHRvIGxvb2sgaW50byB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMDQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMga25vd2xlZGdlYWJsZToKCioqTmF2aWdhdGluZyB0aGUgQ0dST1VQUyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdGhpbmcgYW5kLCB3aGlsZSBpdCBkb2VzbiYjMzk7dCAqZXhwbGljaXRseSogZGVjbGFyZSBhIGRlcGVuZGVuY3kgb24gYENHUk9VUFNgLCBpdCYjMzk7cyBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGBDR1JPVVBTYCBtZW51LiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gRXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGxpbmthZ2UgcmVzaWRlcywgZXZlbiBpZiBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpbiB0aGUgY29kZSBvciBjb25maWd1cmF0aW9uLiBTbywgbXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSB0aGF0IHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiB0aGVyZSB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSAqZXhhY3RseSogaG93IHRoaXMgY29tcG9uZW50IGludGVyYWN0cyB3aXRoIHRoZSBgQ0dST1VQU2Agc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLCBldmVuIGlmIGl0JiMzOTtzIGFuIGluZGlyZWN0IG9uZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFuZCBwZWVsIGJhY2sgdGhlIGxheWVycyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNDY9Y29uZmlnIFNMQUJfT0JKX0VYVFxuLS1cbmluaXQvS2NvbmZpZy0xMDQ4LVxuaW5pdC9LY29uZmlnOjEwNDk6bWVudWNvbmZpZyBDR1JPVVBTXG5pbml0L0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTExNDA9Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcbi0tXG5pbml0L0tjb25maWctMTE0NC1cbmluaXQvS2NvbmZpZzoxMTQ1Om1lbnVjb25maWcgQ0dST1VQX1NDSEVEXG5pbml0L0tjb25maWctMTE0Ni1cdGJvb2wgXCYjMzQ7Q1BVIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDZ3JvdXAgQ2hhcmdpbmcgTG9naWMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYENHUk9VUFNgIGlzIHRoZSB0b3AtbGV2ZWwsIGFuZCBgQ0dST1VQU2AgYW5kIGBNRU1DR2AgcmVwcmVzZW50IHRoZSBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZXNlIGNoYW5nZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGFkanVzdGluZyB0aGUgc3RvY2sgZHJhaW5pbmcgbG9naWMgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWx0ZXJlZCB0aGUgdGhyZXNob2xkcywgc28gbm93LCBpbnN0ZWFkIG9mIGEgY29tcGxldGUgZHJhaW4sIGV4Y2VzcyBwYWdlcyBhYm92ZSBhIG5ldyBgTUVNQ0dfU1RPQ0tfSElHSGAgdGhyZXNob2xkIGFyZSAqdW5jaGFyZ2VkKiBkb3duIHRvIGBNRU1DR19TVE9DS19MT1dgLCBsZWF2aW5nIGEgcmVzaWR1YWwgYW1vdW50IGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlc2UgcGFnZSB1bmNoYXJnZXMgYW5kIHJlZmlsbCBjeWNsZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlJiMzOTt2ZSBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3NgLCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLgoKSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmVzIGFyZSB0aGUgbW9zdCB2YWx1YWJsZT8gYF9fbWVtX2Nncm91cF91bmNoYXJnZWAgaXMgdW5kb3VidGVkbHkgYSBob3QgcGF0aCwgY2FsbGVkIGZvciB2aXJ0dWFsbHkgZXZlcnkgcGFnZSB1bmNoYXJnZS4gQnV0IGl0JiMzOTtzIGFsc28gKnZlcnkqIGdlbmVyaWMsIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBkb3duc2lkZSDigJMgaXQgY291bGQgbGVhZCB0byBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGUgZ29hbCBpcyB0byBmb2N1cyBvbiBlbnRyeXBvaW50cywgYW5kIGF2b2lkIHRoZSBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4KClRoaW5raW5nIGFib3V0IGl0LCB3aGlsZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyBpbXBvcnRhbnQsIGxldCYjMzk7cyBub3QgbWFrZSBpdCB0aGUgb25seSBvbmUuIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIHNwZWNpZmljIHRvIHNvY2tldCBtZW1vcnksIGFuZCB0aGF0IG1ha2VzIGl0IGxlc3MgaG90LXBhdGggdGhhbiB0aGUgZ2VuZXJpYyBwYWdlIHVuY2hhcmdpbmcsIGJ1dCBzdGlsbCBpcyBhbiBBUEkgZW50cnlwb2ludCwgd2hpY2ggaXMgZ29vZC4gV2Ugc2hvdWxkIGFsc28gaW5jbHVkZSBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgIGJlY2F1c2UgaXQgaGFuZGxlcyBrbWVtIHBhZ2VzLiBJJiMzOTtsbCBhbHNvIGFkZCBpdHMgY291bnRlcnBhcnQsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYW5kIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIGJlY2F1c2Ugd2Ugc2hvdWxkIGZ1enogYm90aCBjaGFyZ2UgYW5kIHVuY2hhcmdlLgoKQWZ0ZXIgYSBzZWNvbmQgbG9vaywgd2hpbGUgYF9fbWVtX2Nncm91cF91bmNoYXJnZWAgbG9va3MgZ29vZCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGZvbGlvX3B1dGAgb3Igb3RoZXIgcGFnZSBmcmVlaW5nIGZ1bmN0aW9ucyB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGluc2FuZWx5IGhvdCBwYXRoIGFuZCBub3QgZm9jdXNlZCBlbm91Z2guIEkmIzM5O20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIHVzaW5nIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBhcyB0aGUgcHJpbWFyeSB0YXJnZXRzIHRvIGF2b2lkIHRoZSBnZW5lcmFsIGhvdCBwYXRoLCBhbmQgZm9jdXMgb24gc29ja2V0IGFuZCBrbWVtIG1lbW9yeSB3aGljaCBhcmUgYm90aCBlbnRyeXBvaW50cy4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc3VpdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTYzND1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNS1cdFx0XHQgIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2MzY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzctXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTY5Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MDMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzA0OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MDUtXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NTEtLyoqXG5tbS9tZW1jb250cm9sLmM6NTY1MjogKiBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlIC0gdW5jaGFyZ2Ugc29ja2V0IG1lbW9yeVxubW0vbWVtY29udHJvbC5jLTU2NTMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY1NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NjU2OnZvaWQgbWVtX2Nncm91cF9za191bmNoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy01NjU3LXtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MTAzMD1zdGF0aWMgaW50IHNvY2tfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpXG4tLVxubmV0L2NvcmUvc29jay5jLTEwNjEtXHRcdHNrX21lbW9yeV9hbGxvY2F0ZWRfc3ViKHNrLCBwYWdlcyk7XG5uZXQvY29yZS9zb2NrLmM6MTA2MjpcdFx0bWVtX2Nncm91cF9za191bmNoYXJnZShzaywgcGFnZXMpO1xubmV0L2NvcmUvc29jay5jLTEwNjMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0zMzMzPWludCBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGFtdCwgaW50IGtpbmQpXG4tLVxubmV0L2NvcmUvc29jay5jLTM0MzUtXHRpZiAoY2hhcmdlZClcbm5ldC9jb3JlL3NvY2suYzozNDM2Olx0XHRtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKHNrLCBhbXQpO1xubmV0L2NvcmUvc29jay5jLTM0MzctXG4tLVxubmV0L2NvcmUvc29jay5jPTM0NzA9dm9pZCBfX3NrX21lbV9yZWR1Y2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudClcbi0tXG5uZXQvY29yZS9zb2NrLmMtMzQ3Mi1cdGlmIChtZW1fY2dyb3VwX3NrX2VuYWJsZWQoc2spKVxubmV0L2NvcmUvc29jay5jOjM0NzM6XHRcdG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2Uoc2ssIGFtb3VudCk7XG5uZXQvY29yZS9zb2NrLmMtMzQ3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTWVtb3J5IENncm91cCBVbmNoYXJnaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGluIGBzb2NrLmNg4oCmIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gU291bmRzIGxpa2UgYSBnb29kIGZ1bmN0aW9uIHRvIGRpZyBpbnRvLCBhcyBpdCBwcm9iYWJseSBoYW5kbGVzIHNvY2tldC1yZWxhdGVkIG1lbW9yeSBhY2NvdW50aW5nLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBub3QgaW4gdGhlIGhvdCBwYXRoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHdpdGhvdXQgcmlza2luZyBtYWpvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gTm93LCB3aGVyZSBlbHNlIGRvIHdlIHNlZSBzaW1pbGFyIHVuY2hhcmdpbmcgbWVjaGFuaXNtcyBhdCBwbGF5PyBBaCwgeWVzLi4uIEkgbmVlZCB0byBjb25zaWRlciBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgIGFzIHdlbGwuIE11c3QgZW5zdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgcmVkdW5kYW5jeSBpbiB0aGVpciBiZWhhdmlvcnMsIGFzIHRoZXNlIHR5cGVzIG9mIGludGVyYWN0aW9ucyBhbHdheXMgbWFrZSBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyMj1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzIzOnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzI0LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NzA9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzItXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzM6XHRcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzQtfVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4Mjc9c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgzMi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MzM6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODM0LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzIxMj1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIyOS0vKipcbm1tL21lbWNvbnRyb2wuYzozMjMwOiAqIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlOiB1bmNoYXJnZSBhIGttZW0gcGFnZVxubW0vbWVtY29udHJvbC5jLTMyMzEtICogQHBhZ2U6IHBhZ2UgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIzMy0gKi9cbm1tL21lbWNvbnRyb2wuYzozMjM0OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0zMjM1LXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTEzMzMtXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgUGFnZU1lbWNnS21lbShwYWdlKSlcbm1tL3BhZ2VfYWxsb2MuYzoxMzM0Olx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtMTMzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAqKgoKUmlnaHQsIHRoaXMgaXMgYSBjYWxsIGNvbWluZyBmcm9tIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSB2ZXJ5ICpob3QqIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgYmVjYXVzZSBwZXJmb3JtYW5jZSBpbiB0aGlzIGFyZWEgaXMgY3JpdGljYWwuIEFueSBzbG93ZG93biBoZXJlIHJpcHBsZXMgb3V0d2FyZCwgaW1wYWN0aW5nIG92ZXJhbGwgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKVGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZnJlZWluZyBwYWdlcywgdW5jaGFyZ2luZyBzd2FwIG1ha2VzIGNvbXBsZXRlIHNlbnNlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbWVtb3J5IGNncm91cCB1bmNoYXJnaW5nIGxvZ2ljIGlzIGludGVyYWN0aW5nIHdpdGggdGhpcyBjb3JlIGZyZWVpbmcgcHJvY2Vzcy4gQXJlIHRoZXJlIGFueSB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zPyBDb250ZW50aW9uIGlzc3Vlcz8gUG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIHRoYXQgY291bGQgYmUgb3B0aW1pemVkPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHByb2JsZW0gbWlnaHQgbGllLCBhbmQgdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgdW5jaGFyZ2luZyBsb2dpYyBpcyB3b3JraW5nIGluIGNvbmp1bmN0aW9uIHdpdGggZnJlZWluZyBtZW1vcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTQ5Nj1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwMi1cbmluY2x1ZGUvbGludXgvc3dhcC5oOjUwMzpleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNC1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVx0XHRyZXR1cm47XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDg6XHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA5LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXG5tbS9tZW1jb250cm9sLmMtNTc5My0gKiBAaWQ6IGNncm91cCBpZCB0byB1bmNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xubW0vbWVtY29udHJvbC5jOjU3OTY6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTU3OTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE1OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFN3YXAgVW5jaGFyZ2UgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgb25lLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20/IFRpbWUgdG8gdHJhY2UgaXQuIEdvdHRhIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBjYWxsIHNpdGVzIGFyZSBhbmQgd2hhdCB0aGV5JiMzOTtyZSBkb2luZyB3aGVuIHRoZXkgdHJpZ2dlciB0aGF0IHN3YXAgdW5jaGFyZ2UuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbWNnX3Rlc3QucnN0PTExPVBsZWFzZSBub3RlIHRoYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBjYW4gYmUgY2hhbmdlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1jZ190ZXN0LnJzdC00NS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbWNnX3Rlc3QucnN0OjQ2Olx0bWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKClcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbWNnX3Rlc3QucnN0LTQ3LVx0ICBDYWxsZWQgd2hlbiBzd3BfZW50cnkmIzM5O3MgcmVmY250IGdvZXMgZG93biB0byAwLiBBIGNoYXJnZSBhZ2FpbnN0IHN3YXBcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00OTY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDItXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDM6ZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDQ6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDctXHRcdHJldHVybjtcbmluY2x1ZGUvbGludXgvc3dhcC5oOjUwODpcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDktfVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTUxND1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTUxOC1cbmluY2x1ZGUvbGludXgvc3dhcC5oOjUxOTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTIwLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz02OTA9dm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTcyMy1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xubW0vbWVtY29udHJvbC12MS5jOjcyNDpcdG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC12MS5jLTcyNS19XG4tLVxubW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5MS0vKipcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy01Nzk3LXtcbi0tXG5tbS9zd2FwZmlsZS5jPTE5MTU9dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTk0Ny1cdFx0XHRpZiAoYmF0Y2hfaWQpXG5tbS9zd2FwZmlsZS5jOjE5NDg6XHRcdFx0XHRtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoYmF0Y2hfaWQsIGNpX29mZiAtIGJhdGNoX29mZik7XG5tbS9zd2FwZmlsZS5jLTE5NDktXHRcdFx0YmF0Y2hfaWQgPSBpZF9jdXI7XG4tLVxubW0vc3dhcGZpbGUuYy0xOTU0LVx0aWYgKGJhdGNoX2lkKVxubW0vc3dhcGZpbGUuYzoxOTU1Olx0XHRtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoYmF0Y2hfaWQsIGNpX29mZiAtIGJhdGNoX29mZik7XG5tbS9zd2FwZmlsZS5jLTE5NTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjI0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgTWVtb3J5IEFjY291bnRpbmcgRWZmaWNpZW5jeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYSBkZWNlbnQsIG5vbi1ob3QtcGF0aCBmdW5jdGlvbiwgYSByZWFzb25hYmx5IHdlbGwtd3JpdHRlbiBwaWVjZSBvZiBjb2RlLiBJdCYjMzk7cyBub3QgdHlwaWNhbGx5IHRoZSBib3R0bGVuZWNrIGluIG1vc3QgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGFsd2F5cyByZWFzc3VyaW5nIHRvIGtub3cgdGhhdCBzb21lIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFyZSB3b3JraW5nIGVmZmljaWVudGx5IGFuZCBub3QgY29uc3VtaW5nIGN5Y2xlcyB1bm5lY2Vzc2FyaWx5LgoKTm93LCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYD8gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoYXQgZnVuY3Rpb24uIEkgaGF2ZW4mIzM5O3Qgc3BlY2lmaWNhbGx5IGFuYWx5emVkIGl0IHJlY2VudGx5LCBzbyBpdCYjMzk7cyB3b3J0aCByZXZpc2l0aW5nIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGNncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmVjb21lIGEgaG90c3BvdCB1bmRlciBoZWF2eSBsb2FkLiBUaGUgaHVnZXRsYiBwYXRoIGlzIG9mdGVuIGEgY3JpdGljYWwgb25lIHRvIG1vbml0b3IsIHNvIEkgbmVlZCB0byBwdXQgdGhhdCBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuIEl0IGNvdWxkIGJlIHdvcnRoIGxvb2tpbmcgYXQgaG93IGl0cyBoYW5kbGluZyBvZiBsYXJnZSBwYWdlcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGNncm91cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjUyPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1OS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYxLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNDg9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUzLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1NDpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTUte1xuLS1cbm1tL2h1Z2V0bGIuYz0yODI4PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODgzLVxubW0vaHVnZXRsYi5jOjI4ODQ6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0yODg1LVx0Lypcbm1tL2h1Z2V0bGIuYy0yODg2LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4ODc6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg4OC1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjM1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNDctLyoqXG5tbS9tZW1jb250cm9sLmM6NTI0ODogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTI0OS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1OC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjU5OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MjYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDZ3JvdXAgQWNjb3VudGluZyBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9ucy4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGxvb2tzIGxpa2UgYW5vdGhlciBpbXBvcnRhbnQgb25lLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGEgZGVjZW50IGxpc3QgdG8gc3RhcnQgd2l0aDogYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHJhY2tpbmcgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gUmlnaHQgbm93LCBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYC4gSSB0aGluayB0aGUgYmVzdCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIHRvIHNlZSBleGFjdGx5ICp3aG8qIGlzIGNoYXJnaW5nIGFnYWluc3Qga2VybmVsIG1lbW9yeSBwYWdlcyBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgY2dyb3Vwcy4gVGhhdCYjMzk7bGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgbG9naWMgYXQgcGxheSwgYW5kIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHdob2xlIHN5c3RlbSBpcyBzdXBwb3NlZCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyMT1ib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MjI6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyMy12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NjI9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NjUtXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NjY6XHRcdHJldHVybiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzY3LVx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyMz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgyNi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4Mjc6c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODI4LVx0XHRcdFx0XHQgICBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTMxOTk9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIwNC0vKipcbm1tL21lbWNvbnRyb2wuYzozMjA1OiAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcbm1tL21lbWNvbnRyb2wuYy0zMjA2LSAqIEBwYWdlOiBwYWdlIHRvIGNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMjExLSAqL1xubW0vbWVtY29udHJvbC5jOjMyMTI6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG5tbS9tZW1jb250cm9sLmMtMzIxMy17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODM9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ1Mi1cdGlmIChtZW1jZ19rbWVtX29ubGluZSgpIFx1MDAyNlx1MDAyNiAoZ2ZwIFx1MDAyNiBfX0dGUF9BQ0NPVU5UKSBcdTAwMjZcdTAwMjYgcGFnZSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2VfYWxsb2MuYzo1NDUzOlx0ICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKSAhPSAwKSkge1xubW0vcGFnZV9hbGxvYy5jLTU0NTQtXHRcdF9fZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIsXG4tLVxubW0vc2x1Yi5jPTI1NTM9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNTY5LVx0XHRvcmRlciA9IGxhcmdlX2ttYWxsb2Nfb3JkZXIocGFnZSk7XG5tbS9zbHViLmM6MjU3MDpcdFx0aWYgKF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBmbGFncywgb3JkZXIpKVxubW0vc2x1Yi5jLTI1NzEtXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMxMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcmlvcml0aXppbmcgT3B0aW1pemF0aW9uIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2hlcmUgd2UmIzM5O3JlIHNwZW5kaW5nIGEgbG90IG9mIHRpbWUuIFRoZSBwcm9maWxlciBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGFuZCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCwgbWVhbmluZyB3ZSBuZWVkIHRvIG9wdGltaXplIHRoZWlyIGJlaGF2aW9yLgoKSG93ZXZlciwgSSBzdXNwZWN0IHRoYXQgd2UgbWlnaHQgZmluZCBiZXR0ZXIgb3Bwb3J0dW5pdGllcyBlbHNld2hlcmUuIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgbWlnaHQgYmUgbW9yZSBmcnVpdGZ1bCBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4gVGhleSYjMzk7cmUgcmVsYXRlZCB0byBzb2NrZXQgbWVtb3J5IGFuZCBzd2FwcGluZywgc28gdGhlcmUmIzM5O3MgcHJvYmFibHkgbW9yZSBjb21wbGV4aXR5IHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZW0uCgpCZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRob3NlLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gU3dhcHBpbmcgYmVoYXZpb3IgaXMgdXN1YWxseSBhIGdvb2QgaW5kaWNhdG9yIG9mIG1lbW9yeSBwcmVzc3VyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBvYnZpb3VzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjYwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjI6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2My1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTQ9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTYwLVx0XHQgdW5zaWduZWQgc2hvcnQgaWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jPTUyNTk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjgxLS8qKlxubW0vbWVtY29udHJvbC5jOjUyODI6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXG5tbS9tZW1jb250cm9sLmMtNTI4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI5Mi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjkzOmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQwOT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDYxLVxubW0vc3dhcF9zdGF0ZS5jOjQ2MjpcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxubW0vc3dhcF9zdGF0ZS5jLTQ2My1cdFx0XHRcdFx0ICAgdm1mID8gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSA6IE5VTEwsIGdmcCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN3YXAgYW5kIE1lbW9yeSBDR3JvdXBzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBmdW5jdGlvbiwgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY29uc2lkZXJlZCBhIG5vbi1ob3QtcGF0aCBmdW5jdGlvbiBpcyB1c2VmdWwgY29udGV4dC4gUmlnaHQgbm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgYXJlYTogYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBvZiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY2dyb3VwcyBkdXJpbmcgc3dhcHBpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQuIGBNRU1DR2AgYW5kIGBDR1JPVVBTYCBhcmUgaW1tZWRpYXRlbHkgb2J2aW91cywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHNwZWNpZmljYWxseSB0byBzd2FwLiBBaGEhIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIHNwZWNpZmljYWxseSBmb3IgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGNvbmZpZ3MgaW4gZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL0tjb25maWc9MTI2Mj1jb25maWcgTUlQU19TUFJBTVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTEyNjQtXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY1OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY2LVx0Ym9vbFxuLS1cbmFyY2gvc2gvS2NvbmZpZz0xMjY9Y29uZmlnIElPX1RSQVBQRURcbi0tXG5hcmNoL3NoL0tjb25maWctMTI4LVxuYXJjaC9zaC9LY29uZmlnOjEyOTpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9zaC9LY29uZmlnLTEzMC1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgU1dBUGAgZGVmaW5pdGVseSBkaWN0YXRlcyB0aGUgc3lzdGVtJiMzOTtzIHN3YXAgZnVuY3Rpb25hbGl0eSwgdGhhdCYjMzk7cyBjbGVhci4gTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGF0IGFuZCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGRvZXNuJiMzOTt0IHNvbWVob3cgZ2V0IGNvbXBpbGVkIGluLCBldmVuIHdoZW4gYFNXQVBgIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQuIEl0IHdvdWxkIGJlIGEgYml0IG9mIGEgY29kZSBzbWVsbCBpZiB3ZSBzYXcgdGhhdCBoYXBwZW5pbmcuIEl0JiMzOTtzIGEga2V5IHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgZmxhZ3MgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYW5kIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgYmxvYXQgb3IgdW5pbnRlbmRlZCBiZWhhdmlvciBpbiBjb25maWd1cmF0aW9ucyB3aGVyZSBzd2FwIGlzIGludGVudGlvbmFsbHkgYWJzZW50LiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyBwYXR0ZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyNTk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjgxLS8qKlxubW0vbWVtY29udHJvbC5jOjUyODI6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXG5tbS9tZW1jb250cm9sLmMtNTI4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI5Mi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjkzOmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTd2FwIGFuZCBNZW1vcnkgQ29udHJvbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL21lbWNvbnRyb2wuY2AuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYmFzaWM6IGlzIGl0IGJlaW5nIGNvbXBpbGVkIHdpdGggYFNXQVBgIGVuYWJsZWQ/IE5vLCB3YWl0LCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodCDigJMgaXQmIzM5O3MgYmVpbmcgY29tcGlsZWQgd2l0aCBgTUVNQ0dgLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LgoKSG1tLCBidXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZCAqd2l0aGluKiBgbW0vbWVtY29udHJvbC5jYC4gIE5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1NXQVBgIHByZXByb2Nlc3NvciBkaXJlY3RpdmU/IFRoYXTigJlzIHRoZSBrZXkuIElmIGl0JiMzOTtzIG5vdCwgdGhlbiB0aGUgc3dhcC1pbiBjaGFyZ2luZyBsb2dpYyBpcyBhbHdheXMgcHJlc2VudCwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcuIElmIGl0ICppcyogZ3VhcmRlZCwgdGhlbiB0aGlzIHdob2xlIGFyZWEgaXMgb25seSBhY3RpdmUgd2hlbiBzd2FwIGlzIGVuYWJsZWQsIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI4MDpcdFxuNTI4MTpcdC8qKlxuNTI4MjpcdCAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxuNTI4MzpcdCAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuNTI4NDpcdCAqIEBpZDogbWVtb3J5IGNncm91cCBpZFxuNTI4NTpcdCAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgdmljdGltXG41Mjg2Olx0ICogQGdmcDogcmVjbGFpbSBtb2RlXG41Mjg3Olx0ICpcbjUyODg6XHQgKiBUaGlzIGZ1bmN0aW9uIGNoYXJnZXMgYSBmb2xpbyBhbGxvY2F0ZWQgZm9yIHN3YXBpbi4gUGxlYXNlIGNhbGwgdGhpcyBiZWZvcmVcbjUyODk6XHQgKiBhZGRpbmcgdGhlIGZvbGlvIHRvIHRoZSBzd2FwY2FjaGUuXG41MjkwOlx0ICpcbjUyOTE6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gT3RoZXJ3aXNlLCBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLlxuNTI5MjpcdCAqL1xuNTI5MzpcdGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG41Mjk0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuNTI5NTpcdHtcbjUyOTY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjUyOTc6XHRcdGludCByZXQ7XG41Mjk4Olx0XG41Mjk5Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBBY2NvdW50aW5nIGluIE1lbWNvbnRyb2wqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHN3YXAgdXNhZ2UgaXMgYWNjb3VudGVkIGZvciBpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBjb2RlLiBJIG5vdGljZWQgc29tZXRoaW5nIGEgbGl0dGxlIG9mZi1raWx0ZXI6IHRoZSBjb3JlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgYXJlbiYjMzk7dCAqZGlyZWN0bHkqIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfU1dBUGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgdW5jaGFyZ2VkIHdoZW4gYSBwcm9jZXNzJiMzOTtzIHBhZ2VzIGFyZSBzd2FwcGVkIG91dC4gVGhlIG1haW4gZnVuY3Rpb24gSSYjMzk7bSBjb25jZXJuZWQgd2l0aCBoZXJlIGlzIGBtZW1fY2dyb3VwX3VuY2hhcmdlYC4gVGhhdCYjMzk7cyB3aGVyZSBJICpleHBlY3QqIHRvIHNlZSB0aGUgY2hlY2suCgpIb3dldmVyLCBJIGRpZCBzZWUgdGhhdCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBzd2FwIGNvbmZpZy4gVGhhdCBzdWdnZXN0cyBzb21lIG1vZHVsYXJpdHksIGFuZCBtYXliZSBgbWVtX2Nncm91cF91bmNoYXJnZWAgbWFrZXMgc29tZSBjYWxscyB0byB0aGUgc3dhcCB1bmNoYXJnaW5nIGZ1bmN0aW9uIHdoZW4gYXBwcm9wcmlhdGUuCgpUaGlzIHJhaXNlcyBhIGZldyBxdWVzdGlvbnMgaW4gbXkgbWluZC4gSXMgdGhlIHN3YXAgYmVoYXZpb3IgZnVsbHkgaW50ZWdyYXRlZD8gUGVyaGFwcyB0aGVyZSBhcmUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIHN3YXAgaXMgZW5hYmxlZCB0aGF0IGFyZSBjb25kaXRpb25hbC4gSSB0aGluayBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBjaGFpbiB0byBzZWUgaWYgdGhlIHVuY2hhcmdlIGZ1bmN0aW9uIGlzIHN0aWxsIHVzZWQgd2hlbiBzd2FwIGlzICpub3QqIGVuYWJsZWQuIEkgc2hvdWxkIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgbWVtX2Nncm91cF91bmNoYXJnZWAgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgY29udHJvbCBmbG93IGFjdHVhbGx5IGxvb2tzIGxpa2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsIHNpdGVzIG9mIHRoYXQgc3dhcCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5MS0vKipcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy01Nzk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOgoKKipDaGVja2luZyBmb3IgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGAjaWZkZWYgQ09ORklHX1NXQVBgIGFyb3VuZCBpdC4mIzM0OyBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkmIzM5O20gbG9va2luZyBmb3IgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jay4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgbGlrZWx5IG9ubHkgaW5jbHVkZWQgaWYgdGhlIGBDT05GSUdfU1dBUGAgbWFjcm8gaXMgZGVmaW5lZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY29uZGl0aW9uYWwgZXhpc3RzLiBJcyBzd2FwIGZ1bmN0aW9uYWxpdHkgb3B0aW9uYWw/IElzIGl0IGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGAjaWZkZWZgIGlzIGNydWNpYWwgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSSB3aWxsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19TV0FQYCB0byB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nIGFuZCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTc0MDpcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxuNTc0MTpcdCAqXG41NzQyOlx0ICogVHJ5IHRvIGNoYXJnZSBAZm9saW8mIzM5O3MgbWVtY2cgZm9yIHRoZSBzd2FwIHNwYWNlIGF0IGZvbGlvLVx1MDAzZXN3YXAuXG41NzQzOlx0ICpcbjU3NDQ6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxuNTc0NTpcdCAqL1xuNTc0NjpcdGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG41NzQ3Olx0e1xuNTc0ODpcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuNTc0OTpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbjU3NTA6XHRcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG41NzUxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41NzUyOlx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG41NzUzOlx0XG41NzU0Olx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuNTc1NTpcdFx0XHRyZXR1cm4gMDtcbjU3NTY6XHRcbjU3NTc6XHRcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuNTc1ODpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xuNTc1OTpcdFx0aWYgKCFvYmpjZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IENvbnRyb2wgd2l0aCBDT05GSUdfU1dBUCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3dhcCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY29udHJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIHRhcmdldGVkIHNlYXJjaC4gSSYjMzk7bSB0aGlua2luZywgYSBsaWtlbHkgcGxhY2UgdG8gZmluZCByZWxldmFudCBjb2RlIHdvdWxkIGJlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgbWVtb3J5IGNvbnRyb2wgbG9naWMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBBbmQgc2luY2UgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBzd2FwIGZpZ3VyZXMgaW50byBhbGwgb2YgdGhpcywgbGV0JiMzOTtzIGxvb2sgZm9yIGAjaWZkZWYgQ09ORklHX1NXQVBgIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB3aWxsIGxpa2VseSBjb25kaXRpb24gY29kZSBiYXNlZCBvbiB3aGV0aGVyIHN3YXAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIHNwZWNpZmljIHNlY3Rpb25zIEkgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbGxlciBoYW5kbGVzIHN3YXAtcmVsYXRlZCBvcGVyYXRpb25zIGFuZCBhY2NvdW50aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDgtXHROUl9TV0FQQ0FDSEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjEwLVx0UEdMQVpZRlJFRUQsXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTYxMi1cdFNXUElOX1pFUk8sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYwOS1cdHsgXCYjMzQ7ZmlsZV93cml0ZWJhY2tcJiMzNDssXHRcdE5SX1dSSVRFQkFDS1x0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYxMDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy0xNjExLVx0eyBcJiMzNDtzd2FwY2FjaGVkXCYjMzQ7LFx0XHRcdE5SX1NXQVBDQUNIRVx0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTU3MDE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczNi1cbm1tL21lbWNvbnRyb2wuYzo1NzM3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTU3MzgtLyoqXG4tLVxubW0vbWVtY29udHJvbC5jPTYyMDA9c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MjAxLVxubW0vbWVtY29udHJvbC5jOjYyMDI6I2VuZGlmIC8qIENPTkZJR19TV0FQICovXG5tbS9tZW1jb250cm9sLmMtNjIwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3ODkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgZnVuY3Rpb24uIFRoZSBjb2RlIGNsZWFybHkgc2hvd3MgaXQmIzM5O3MgY29uZGl0aW9uYWwgb24gYCNpZmRlZiBDT05GSUdfU1dBUGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UsIHRoYXQgZnVuY3Rpb24gaXMgYWJvdXQgdW5jaGFyZ2luZyBzd2FwIHNwYWNlIGZyb20gbWVtb3J5IGNncm91cHMsIHNvIGl0IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGhlIHN3YXAgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLiBSaWdodCwgc28gd2UgbmVlZCBgU1dBUGAgY29uZmlnIHNldC4KCk5vdywgYSBiaXQgb2YgYW4gYW5vbWFseS4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgdGhlIHNhbWUgYFNXQVBgIGd1YXJkLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGxpbmUgbnVtYmVycyB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGRlZmluZWQgYXQgbGluZSA1MjkzLiBBbmQgdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgYXQgNTczNy4gVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb246IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGNvbXBpbGVkIGV2ZW4gaWYgd2UgZG9uJiMzOTt0IGhhdmUgc3dhcCBlbmFibGVkLiBUaGF0JiMzOTtz4oCmIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgYSBidWcgb3IgYXQgbGVhc3QgYW4gdW5uZWNlc3NhcnkgY29tcGxpY2F0aW9uLgoKVG8gYmUgY2VydGFpbiwgSSByZWFsbHkgbmVlZCB0byBjaGVjayB0aGUgZGVjbGFyYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIExldCYjMzk7cyB0YWtlIGEgbG9vayBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY29tcGlsZWQgaW4gdGhlIGFic2VuY2Ugb2YgYENPTkZJR19TV0FQYC4gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IG1lbW9yeSBhY2NvdW50aW5nIHdvcmtzIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NjA9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MjppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYzLVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE1ND1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAtXHRcdCB1bnNpZ25lZCBzaG9ydCBpZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1lbW9yeSBDZ3JvdXAgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHRoYXQgdGhlIHRoaW5nIGlzIGRlY2xhcmVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIEkmIzM5O20gbm90aW5nIHRoYXQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgZmlsZSBoYXMgYSBjb25kaXRpb25hbCBkZWNsYXJhdGlvbiBiYXNlZCBvbiBgQ09ORklHX1NXQVBgLiBJbnRlcmVzdGluZy4gSSBoYXZlIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyByZWxhdGVkIHRvIGBIVUdFVExCX1BBR0VgLCBidXQgSSYjMzk7bSBiZWluZyB0aG9yb3VnaC4gVGltZSB0byBqdW1wIG92ZXIgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBpbiBtaW5kIGFuZCBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTIzNT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjQ3LS8qKlxubW0vbWVtY29udHJvbC5jOjUyNDg6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUyNDktICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNTgtICovXG5tbS9tZW1jb250cm9sLmM6NTI1OTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTI2MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgTWVtb3J5IENvbnRyb2wgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgY29udHJvbCBpcyBjb21waWxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE1FTUNHYCwgYENHUk9VUFNgLCBhbmQgdGhlbiBgU1dBUGAgZm9yIHRoZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGZ1bmN0aW9uLiBObyBvdGhlciBmbGFncyBqdW1wIG91dCBhdCBtZSBhcyBkaXJlY3RseSBpbmZsdWVuY2luZyB0aGlzIHNlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGxhdGVyIHdoZW4gSSYjMzk7bSBjaGVja2luZyBkZXBlbmRlbmNpZXMuCgpOb3csIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGguIEZyb20gdGhlIGNvZGUsIHRoZSBmdW5jdGlvbnMgdGhhdCBqdW1wIG91dCBhcyB2aXRhbCBhcmU6IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuCgpCZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgaW5kZWVkIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGJhc2ljLiBJJiMzOTtsbCBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhhdC4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayBhIHN1YnRsZSBjb25kaXRpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU2MTA9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjYtLyoqXG5tbS9tZW1jb250cm9sLmM6NTYyNzogKiBtZW1fY2dyb3VwX3NrX2NoYXJnZSAtIGNoYXJnZSBzb2NrZXQgbWVtb3J5XG5tbS9tZW1jb250cm9sLmMtNTYyOC0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYzNC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NjM1OmJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtNTYzNi1cdFx0XHQgIGdmcF90IGdmcF9tYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY2NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBGdXp6aW5nIENhbmRpZGF0ZXMqKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIG15IHN1c3BpY2lvbjsgaXQgbG9va3MgbGlrZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgICppcyogYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBHb29kLiBMZXQmIzM5O3Mgc2VlLi4uIHllcCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGFuZCAqdGhhdCogb25lIGlzIGNhbGxlZCBmcm9tIGJvdGggYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYW5kIGBtZW1jZzFfc3dhcGluYC4gVGhhdCYjMzk7cyBhIHNvbGlkLCByZWFjaGFibGUgcGF0aC4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBZZXMsIHJlYWNoYWJsZS4gSSYjMzk7bSBzZWVpbmcgcGF0aHMgdGhyb3VnaCBgc29ja19yZXNlcnZlX21lbW9yeWAsIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgLCBhbmQgYF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWRgLiBUaG9zZSBhcmUgYWxsIHNvY2tldCBvcGVyYXRpb25zLCB3aGljaCBnaXZlcyB1cyBnb29kIGNvdmVyYWdlLgoKTmV4dCB1cCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBZZXAsIHJlYWNoYWJsZSB0aHJvdWdoIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IGhpdHMgdGhlIGh1Z2UgcGFnZXMgcGF0aC4KCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgcmVhY2hhYmlsaXR5IG9mIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBZZXMsIHJlYWNoYWJsZSBmcm9tIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLgoKU28sIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCByZWFjaGFibGUuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCB3aGljaCBpcyBncmVhdC4KCk9rYXksIG5vdyBsZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBjb25maWdzIGFyZSBzZXQgcHJvcGVybHkuIEkgbmVlZCB0byByZXZpZXc6IGBNRU1DR2AsIGBDR1JPVVBTYCwgYFNXQVBgLCBhbmQsIGNyaXRpY2FsbHksIGBIVUdFVExCX1BBR0VgIHNpbmNlIHdlJiMzOTtyZSBmdXp6aW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBIVUdFVExCX1BBR0VgIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjEzOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTQyLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Mzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDUtXG5hcmNoL3NoL21tL0tjb25maWc6MTQ2OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDktXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTUxLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9Njk0PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuLS1cbm1tL0tjb25maWctNjk2LVxubW0vS2NvbmZpZzo2OTc6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY5OC1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc3BlY2lhbGlzdCBpbiB0aGUgZmllbGQ6CgoqKlJlZ2FyZGluZyBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBIVUdFVExCX1BBR0VgIGhlcmUuIFRoYXQmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGZyb20gd2hhdCBJIGNhbiB0ZWxsIGZyb20gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGl0IGRlZmF1bHRzIHRvIHRoZSBgSFVHRVRMQkZTYCBzZXR0aW5nLiBTbywgbG9va2luZyBhdCB0aGUgZGVmYXVsdHMsIHRoZSB3YXkgdG8gZ28gaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIGBIVUdFVExCRlNgIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwb2ludHMuIFRoYXQmIzM5O3MgdGhlIGtleSB0aGluZyB0byBmb2N1cyBvbiBmb3Igb3VyIGN1cnJlbnQgc2V0dXAgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjEzCgkJCQkJCQlvdXRwdXQ6IDI3MAoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IOKAkyB5ZXMsIGBIVUdFVExCRlNgIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgTUVNQ0dgLCBgQ0dST1VQU2AsIGBTV0FQYCwgYW5kIGBIVUdFVExCRlNgLiBKdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrZWQsIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWdzIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIEl0JiMzOTtzIGFsdGVyaW5nIHRoZSB3YXRlcm1hcmtzLCBgTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgYE1FTUNHX1NUT0NLX0hJR0hgLCB3aXRoaW4gdGhlIGBtZW1jZ19zdG9ja19wY3BgIHN0cnVjdHVyZS4gVGhlIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gYHJlZmlsbF9zdG9ja2AuIEluc3RlYWQgb2YgY29tcGxldGVseSBkcmFpbmluZyB0aGUgY2hhcmdlIHN0b2NrIHdoZW4gaXQmIzM5O3Mgb3ZlciBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgdGhlIHBhdGNoIGlzIG5vdyB1bmNoYXJnaW5nIG9ubHkgdGhlIGV4Y2VzcywgbGVhdmluZyBhIHJlc2VydmUgb2YgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMuIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgcGFnZXMgYXJlIHVuY2hhcmdlZCBhbmQgcmVmaWxsZWQgaW4gdGhhdCBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoZWQgdmlhIHZhcmlvdXMgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgY3J1Y2lhbGx5LCBodWdldGxiIHBhZ2VzLgoKSSYjMzk7dmUgZ290IHRoZSBrZXkgc3ltYm9scyBpbiBteSBzaWdodHMgdG9vOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhvc2Ugc3ltYm9sIG5hbWVzIG9uZSBtb3JlIHRpbWUuIFllcCwgdGhleSYjMzk7cmUgY29ycmVjdC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IHRob3NlIGFyZSB0aGUgcmlnaHQgc3ltYm9scy4gVGhleSBjYXB0dXJlIHRoZSBkaWZmZXJlbnQgdW5jaGFyZ2UgcGF0aHMgdGhhdCBldmVudHVhbGx5IGhpdCBgcmVmaWxsX3N0b2NrYCBvciBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGJ1dCB3aXRob3V0IGJlaW5nIG92ZXJseSBnZW5lcmljLCBhbmQgbm90IGZvY3VzaW5nIG9uIHRoZSAqaG90dGVzdCogcGF0aHMgbGlrZSBnZW5lcmljIHBhZ2UgYWxsb2NhdGlvbi9mcmVlaW5nLiBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgcmlnaHQgdGhpbmdzIHRvIGZvY3VzIG9uLgoKT2theSwgSSYjMzk7bSBoYXBweSB3aXRoIHRoaXMgYW5hbHlzaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za191bmNoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za191bmNoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RvY2sgcmVmaWxsIGxvZ2ljIGJ5IGludHJvZHVjaW5nIG5ldyBoaWdoIGFuZCBsb3cgd2F0ZXJtYXJrcyAoYE1FTUNHX1NUT0NLX0hJR0hgIGFuZCBgTUVNQ0dfU1RPQ0tfTE9XYCkgZm9yIGNoYXJnZSBzdG9jayBzbG90cywgYW5kIGNoYW5naW5nIHRoZSB0eXBlIG9mIGBzdG9ja19wYWdlc2AgdG8gYHVuc2lnbmVkIGludGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHRoZSBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBjYWNoaW5nIG9mIG1lbW9yeSBjaGFyZ2VzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWNhbCBlcnJvcnMgaW4gbWVtb3J5IGFjY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3VlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB3YXJuaW5ncyksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxN2RhMWY0M2I3ZDNiLi5mZjdmYmNkMjc0MjJkIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yMDQ4LDYgJiM0MzsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLgogICovCiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDcKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLSZndDtoaWdoIGFuZAomIzQzOyAqIHBjcC0mZ3Q7YmF0Y2g6IE1FTUNHX1NUT0NLX0hJR0ggaXMgdGhlIGhpZ2ggd2F0ZXJtYXJrIGF0IHdoaWNoIGEgc2xvdCBpcwomIzQzOyAqIHRyaW1tZWQsIGFuZCBpdCBpcyB0cmltbWVkIGRvd24gdG8gTUVNQ0dfU1RPQ0tfTE9XIHJhdGhlciB0aGFuIGVtcHRpZWQuCiYjNDM7ICoKJiM0MzsgKiBVc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYXMgYm90aCBoaWdoIHdhdGVybWFyayBhbmQgZW1wdHlpbmcgdGFyZ2V0CiYjNDM7ICogdGhyYXNoZXM6IGNoYXJnaW5nIG9uZSBwYWdlIHN0b2NrcyA2MywgYW4gdW5jaGFyZ2Ugb2YgMiB0YWtlcyB0aGUgY291bnQKJiM0MzsgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzCiYjNDM7ICogYXJlIE1FTUNHX0NIQVJHRV9CQVRDSCBhcGFydCwgc28gYSBwYWdlX2NvdW50ZXIgdXBkYXRlIHN0aWxsIGNvdmVycyBhCiYjNDM7ICogZnVsbCBiYXRjaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1FTUNHX1NUT0NLX0xPVwkJKE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpCiYjNDM7I2RlZmluZSBNRU1DR19TVE9DS19ISUdICShNRU1DR19TVE9DS19MT1cgJiM0MzsgTUVNQ0dfQ0hBUkdFX0JBVENIKQomIzQzOwogI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFCTAKIHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgewogCWxvY2FsX3RyeWxvY2tfdCBsb2NrOwpAQCAtMjIyMywxNyAmIzQzOzIyMzgsMTggQEAgc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrOwogCXN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7Ci0JdWludDhfdCBzdG9ja19wYWdlczsKJiM0MzsJdW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzOwogCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwogCWludCBlbXB0eV9zbG90ID0gLTE7CiAJaW50IGk7CiAKIAkvKgotCSAqIEZvciBub3cgbGltaXQgTUVNQ0dfQ0hBUkdFX0JBVENIIHRvIDEyNyBhbmQgbGVzcy4gSW4gZnV0dXJlIGlmIHdlCi0JICogZGVjaWRlIHRvIGluY3JlYXNlIGl0IG1vcmUgdGhhbiAxMjcgdGhlbiB3ZSB3aWxsIG5lZWQgbW9yZSBjYXJlZnVsCi0JICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLgomIzQzOwkgKiBucl9wYWdlc1tdIGlzIGEgdWludDhfdCBhbmQgYSBzbG90JiMzOTtzIGNvdW50IGlzIGNhcHBlZCBhdAomIzQzOwkgKiBNRU1DR19TVE9DS19ISUdILiBSYWlzaW5nIE1FTUNHX0NIQVJHRV9CQVRDSCBiZXlvbmQgMTI3IHdvdWxkIG5lZWQKJiM0MzsJICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC4KIAkgKi8KIAlCVUlMRF9CVUdfT04oTUVNQ0dfQ0hBUkdFX0JBVENIICZndDsgUzhfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKE1FTUNHX1NUT0NLX0hJR0ggJmd0OyBVOF9NQVgpOwogCiAJVk1fV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpOwogCkBAIC0yMjU0LDkgJiM0MzsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAkJCWVtcHR5X3Nsb3QgPSBpOwogCQlpZiAobWVtY2cgPT0gUkVBRF9PTkNFKHN0b2NrLSZndDtjYWNoZWRbaV0pKSB7CiAJCQlzdG9ja19wYWdlcyA9IFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICYjNDM7IG5yX3BhZ2VzOwomIzQzOwkJCWlmIChzdG9ja19wYWdlcyAmZ3Q7IE1FTUNHX1NUT0NLX0hJR0gpIHsKJiM0MzsJCQkJbWVtY2dfdW5jaGFyZ2UobWVtY2csCiYjNDM7CQkJCQkgICAgICAgc3RvY2tfcGFnZXMgLSBNRU1DR19TVE9DS19MT1cpOwomIzQzOwkJCQlzdG9ja19wYWdlcyA9IE1FTUNHX1NUT0NLX0xPVzsKJiM0MzsJCQl9CiAJCQlXUklURV9PTkNFKHN0b2NrLSZndDtucl9wYWdlc1tpXSwgc3RvY2tfcGFnZXMpOwotCQkJaWYgKHN0b2NrX3BhZ2VzICZndDsgTUVNQ0dfQ0hBUkdFX0JBVENIKQotCQkJCWRyYWluX3N0b2NrKHN0b2NrLCBpKTsKIAkJCXN1Y2Nlc3MgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTIKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtY2cgU3RvY2sgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbWVtY2cgc3RvY2sgbWVjaGFuaXNtIGFuZCBjaGFyZ2UvdW5jaGFyZ2Ugd2F0ZXJtYXJrcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWZpbmluZyB0aGUgc3RvY2sgbWFuYWdlbWVudCB1c2luZyBgTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgYE1FTUNHX1NUT0NLX0hJR0hgIHZhbHVlcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBsb2dpYyBjaGFuZ2UuIGByZWZpbGxfc3RvY2tgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyB3YXRlcm1hcmtzLCBhbmQgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCBpcyBnZXR0aW5nIGJ1bXBlZCB1cCB0byBhbiBgdW5zaWduZWQgaW50YC4gVGhlIGFkZGVkIGBCVUlMRF9CVUdfT05gIGVuc3VyZXMgYE1FTUNHX1NUT0NLX0hJR0hgIGRvZXNuJiMzOTt0IGV4Y2VlZCBhIGJ5dGUsIHdoaWNoIGlzIGdvb2Qgc2FuaXR5IGNoZWNraW5nLgoKVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgbmV3IGxvZ2ljIGluIGByZWZpbGxfc3RvY2tgIHdoZW4gYHN0b2NrX3BhZ2VzYCBleGNlZWRzIGBNRU1DR19TVE9DS19ISUdIYC4gSW5zdGVhZCBvZiBkcmFpbmluZyBldmVyeXRoaW5nIGxpa2UgYmVmb3JlLCBpdCB1bmNoYXJnZXMgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgcmVzZXRzIGBzdG9ja19wYWdlc2AgdG8gYE1FTUNHX1NUT0NLX0xPV2AuIFRoaXMgc2VlbXMgZGVzaWduZWQgdG8gc21vb3RoIG91dCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb3BlcmF0aW9ucywgcHJldmVudGluZyBodWdlIHNwaWtlcy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEsIHRoaXMgaXMgbW9zdGx5IG1lbW9yeSBhY2NvdW50aW5nLCBpdCBpc24mIzM5O3QgZGlyZWN0bHkgaW52b2x2aW5nIGFueSBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBzbyBLTVNBTiBzaG91bGQgYmUgdW5uZWNlc3NhcnkuIEFueSBidWdzIGludHJvZHVjZWQgYXJlIGxpa2VseSB0byBiZSBsb2dpY2FsIGVycm9ycyBpbiB0aGUgYWNjb3VudGluZyBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcy91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaWYgb2JqZWN0IGxpZmV0aW1lcyBnZXQgdGFuZ2xlZCwgYnV0IG5vdCBiZWNhdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4KCk9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGtleSB2YXJpYWJsZSwgYHN0b2NrX3BhZ2VzYCwgbWFraW5nIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSXQgYXBwZWFycyB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgYHJlZmlsbF9zdG9ja2AgZnVuY3Rpb246IGl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBpbml0aWFsaXplZCB1c2luZyB0aGUgY3VycmVudCBjb3VudCBwbHVzIGBucl9wYWdlc2AuIEkgc2VlIHRoYXQuIEl0IGlzIGJlaW5nIGluaXRpYWxpemVkIGNvcnJlY3RseSB0byBhbiBhcmd1bWVudCBvZiB0aGF0IGZ1bmN0aW9uLiBObyBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgc2VudCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IHJlaW5mb3JjZXMgbXkgb3JpZ2luYWwgdGhvdWdodHMuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGludHJvZHVjZXMgbG9naWMgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgd2l0aG91dCBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoZSByaXNrIGlzIGxpbWl0ZWQgdG8gbG9naWNhbCBlcnJvcnMgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrIHJlZmlsbCBsb2dpYyBieSBpbnRyb2R1Y2luZyBuZXcgaGlnaCBhbmQgbG93IHdhdGVybWFya3MgKGBNRU1DR19TVE9DS19ISUdIYCBhbmQgYE1FTUNHX1NUT0NLX0xPV2ApIGZvciBjaGFyZ2Ugc3RvY2sgc2xvdHMsIGFuZCBjaGFuZ2luZyB0aGUgdHlwZSBvZiBgc3RvY2tfcGFnZXNgIHRvIGB1bnNpZ25lZCBpbnRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgY2FjaGluZyBvZiBtZW1vcnkgY2hhcmdlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkbyBub3QgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljYWwgZXJyb3JzIGluIG1lbW9yeSBhY2NvdW50aW5nIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgd2FybmluZ3MpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MDIuMjYxNzU1NjEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMzQzMTEwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9za191bmNoYXJnZVwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzowMi4yNjE3NjExMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzA5OTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDA6Mjc6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTdkYTFmNDNiN2QzYi4uZmY3ZmJjZDI3NDIyZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjA0OCw2ICsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgKiBucl9wYWdlcyBpbiBhIHNpbmdsZSBjYWNoZWxpbmUuIFRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUuXFxuICAqL1xcbiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDdcXG4rXFxuKy8qXFxuKyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLVxcdTAwM2VoaWdoIGFuZFxcbisgKiBwY3AtXFx1MDAzZWJhdGNoOiBNRU1DR19TVE9DS19ISUdIIGlzIHRoZSBoaWdoIHdhdGVybWFyayBhdCB3aGljaCBhIHNsb3QgaXNcXG4rICogdHJpbW1lZCwgYW5kIGl0IGlzIHRyaW1tZWQgZG93biB0byBNRU1DR19TVE9DS19MT1cgcmF0aGVyIHRoYW4gZW1wdGllZC5cXG4rICpcXG4rICogVXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGFzIGJvdGggaGlnaCB3YXRlcm1hcmsgYW5kIGVtcHR5aW5nIHRhcmdldFxcbisgKiB0aHJhc2hlczogY2hhcmdpbmcgb25lIHBhZ2Ugc3RvY2tzIDYzLCBhbiB1bmNoYXJnZSBvZiAyIHRha2VzIHRoZSBjb3VudFxcbisgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzXFxuKyAqIGFyZSBNRU1DR19DSEFSR0VfQkFUQ0ggYXBhcnQsIHNvIGEgcGFnZV9jb3VudGVyIHVwZGF0ZSBzdGlsbCBjb3ZlcnMgYVxcbisgKiBmdWxsIGJhdGNoLlxcbisgKi9cXG4rI2RlZmluZSBNRU1DR19TVE9DS19MT1dcXHRcXHQoTUVNQ0dfQ0hBUkdFX0JBVENIIC8gMilcXG4rI2RlZmluZSBNRU1DR19TVE9DS19ISUdIXFx0KE1FTUNHX1NUT0NLX0xPVyArIE1FTUNHX0NIQVJHRV9CQVRDSClcXG4rXFxuICNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRVxcdDBcXG4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcCB7XFxuIFxcdGxvY2FsX3RyeWxvY2tfdCBsb2NrO1xcbkBAIC0yMjIzLDE3ICsyMjM4LDE4IEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jaztcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKmNhY2hlZDtcXG4tXFx0dWludDhfdCBzdG9ja19wYWdlcztcXG4rXFx0dW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzO1xcbiBcXHRib29sIHN1Y2Nlc3MgPSBmYWxzZTtcXG4gXFx0aW50IGVtcHR5X3Nsb3QgPSAtMTtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBGb3Igbm93IGxpbWl0IE1FTUNHX0NIQVJHRV9CQVRDSCB0byAxMjcgYW5kIGxlc3MuIEluIGZ1dHVyZSBpZiB3ZVxcbi1cXHQgKiBkZWNpZGUgdG8gaW5jcmVhc2UgaXQgbW9yZSB0aGFuIDEyNyB0aGVuIHdlIHdpbGwgbmVlZCBtb3JlIGNhcmVmdWxcXG4tXFx0ICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxcbitcXHQgKiBucl9wYWdlc1tdIGlzIGEgdWludDhfdCBhbmQgYSBzbG90J3MgY291bnQgaXMgY2FwcGVkIGF0XFxuK1xcdCAqIE1FTUNHX1NUT0NLX0hJR0guIFJhaXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGJleW9uZCAxMjcgd291bGQgbmVlZFxcbitcXHQgKiBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxcbiBcXHQgKi9cXG4gXFx0QlVJTERfQlVHX09OKE1FTUNHX0NIQVJHRV9CQVRDSCBcXHUwMDNlIFM4X01BWCk7XFxuK1xcdEJVSUxEX0JVR19PTihNRU1DR19TVE9DS19ISUdIIFxcdTAwM2UgVThfTUFYKTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcXG4gXFxuQEAgLTIyNTQsOSArMjI3MCwxMiBAQCBzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuIFxcdFxcdFxcdGVtcHR5X3Nsb3QgPSBpO1xcbiBcXHRcXHRpZiAobWVtY2cgPT0gUkVBRF9PTkNFKHN0b2NrLVxcdTAwM2VjYWNoZWRbaV0pKSB7XFxuIFxcdFxcdFxcdHN0b2NrX3BhZ2VzID0gUkVBRF9PTkNFKHN0b2NrLVxcdTAwM2Vucl9wYWdlc1tpXSkgKyBucl9wYWdlcztcXG4rXFx0XFx0XFx0aWYgKHN0b2NrX3BhZ2VzIFxcdTAwM2UgTUVNQ0dfU1RPQ0tfSElHSCkge1xcbitcXHRcXHRcXHRcXHRtZW1jZ191bmNoYXJnZShtZW1jZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XKTtcXG4rXFx0XFx0XFx0XFx0c3RvY2tfcGFnZXMgPSBNRU1DR19TVE9DS19MT1c7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShzdG9jay1cXHUwMDNlbnJfcGFnZXNbaV0sIHN0b2NrX3BhZ2VzKTtcXG4tXFx0XFx0XFx0aWYgKHN0b2NrX3BhZ2VzIFxcdTAwM2UgTUVNQ0dfQ0hBUkdFX0JBVENIKVxcbi1cXHRcXHRcXHRcXHRkcmFpbl9zdG9jayhzdG9jaywgaSk7XFxuIFxcdFxcdFxcdHN1Y2Nlc3MgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzowMi43Mjk1OTAxMzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODM1OTQ1MjU3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX3VuY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGU4NDJmZDgyM2VhYmQ4ZjBlYzZiZTgzYWFlOWI4ZjdlNDMzMjEzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI3OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi5mZjdmYmNkMjc0MjJkIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yMDQ4LDYgKzIwNDgsMjEgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLlxuICAqL1xuICNkZWZpbmUgTlJfTUVNQ0dfU1RPQ0sgN1xuK1xuKy8qXG4rICogV2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCwgaW4gdGhlIHNwaXJpdCBvZiBwY3AtXHUwMDNlaGlnaCBhbmRcbisgKiBwY3AtXHUwMDNlYmF0Y2g6IE1FTUNHX1NUT0NLX0hJR0ggaXMgdGhlIGhpZ2ggd2F0ZXJtYXJrIGF0IHdoaWNoIGEgc2xvdCBpc1xuKyAqIHRyaW1tZWQsIGFuZCBpdCBpcyB0cmltbWVkIGRvd24gdG8gTUVNQ0dfU1RPQ0tfTE9XIHJhdGhlciB0aGFuIGVtcHRpZWQuXG4rICpcbisgKiBVc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYXMgYm90aCBoaWdoIHdhdGVybWFyayBhbmQgZW1wdHlpbmcgdGFyZ2V0XG4rICogdGhyYXNoZXM6IGNoYXJnaW5nIG9uZSBwYWdlIHN0b2NrcyA2MywgYW4gdW5jaGFyZ2Ugb2YgMiB0YWtlcyB0aGUgY291bnRcbisgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzXG4rICogYXJlIE1FTUNHX0NIQVJHRV9CQVRDSCBhcGFydCwgc28gYSBwYWdlX2NvdW50ZXIgdXBkYXRlIHN0aWxsIGNvdmVycyBhXG4rICogZnVsbCBiYXRjaC5cbisgKi9cbisjZGVmaW5lIE1FTUNHX1NUT0NLX0xPV1x0XHQoTUVNQ0dfQ0hBUkdFX0JBVENIIC8gMilcbisjZGVmaW5lIE1FTUNHX1NUT0NLX0hJR0hcdChNRU1DR19TVE9DS19MT1cgKyBNRU1DR19DSEFSR0VfQkFUQ0gpXG4rXG4gI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFXHQwXG4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcCB7XG4gXHRsb2NhbF90cnlsb2NrX3QgbG9jaztcbkBAIC0yMjIzLDE3ICsyMjM4LDE4IEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jaztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7XG4tXHR1aW50OF90IHN0b2NrX3BhZ2VzO1xuK1x0dW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzO1xuIFx0Ym9vbCBzdWNjZXNzID0gZmFsc2U7XG4gXHRpbnQgZW1wdHlfc2xvdCA9IC0xO1xuIFx0aW50IGk7XG4gXG4gXHQvKlxuLVx0ICogRm9yIG5vdyBsaW1pdCBNRU1DR19DSEFSR0VfQkFUQ0ggdG8gMTI3IGFuZCBsZXNzLiBJbiBmdXR1cmUgaWYgd2Vcbi1cdCAqIGRlY2lkZSB0byBpbmNyZWFzZSBpdCBtb3JlIHRoYW4gMTI3IHRoZW4gd2Ugd2lsbCBuZWVkIG1vcmUgY2FyZWZ1bFxuLVx0ICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxuK1x0ICogbnJfcGFnZXNbXSBpcyBhIHVpbnQ4X3QgYW5kIGEgc2xvdCdzIGNvdW50IGlzIGNhcHBlZCBhdFxuK1x0ICogTUVNQ0dfU1RPQ0tfSElHSC4gUmFpc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYmV5b25kIDEyNyB3b3VsZCBuZWVkXG4rXHQgKiBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxuIFx0ICovXG4gXHRCVUlMRF9CVUdfT04oTUVNQ0dfQ0hBUkdFX0JBVENIIFx1MDAzZSBTOF9NQVgpO1xuK1x0QlVJTERfQlVHX09OKE1FTUNHX1NUT0NLX0hJR0ggXHUwMDNlIFU4X01BWCk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSk7XG4gXG5AQCAtMjI1NCw5ICsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcdFx0XHRlbXB0eV9zbG90ID0gaTtcbiBcdFx0aWYgKG1lbWNnID09IFJFQURfT05DRShzdG9jay1cdTAwM2VjYWNoZWRbaV0pKSB7XG4gXHRcdFx0c3RvY2tfcGFnZXMgPSBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pICsgbnJfcGFnZXM7XG4rXHRcdFx0aWYgKHN0b2NrX3BhZ2VzIFx1MDAzZSBNRU1DR19TVE9DS19ISUdIKSB7XG4rXHRcdFx0XHRtZW1jZ191bmNoYXJnZShtZW1jZyxcbitcdFx0XHRcdFx0ICAgICAgIHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XKTtcbitcdFx0XHRcdHN0b2NrX3BhZ2VzID0gTUVNQ0dfU1RPQ0tfTE9XO1xuK1x0XHRcdH1cbiBcdFx0XHRXUklURV9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldLCBzdG9ja19wYWdlcyk7XG4tXHRcdFx0aWYgKHN0b2NrX3BhZ2VzIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0gpXG4tXHRcdFx0XHRkcmFpbl9zdG9jayhzdG9jaywgaSk7XG4gXHRcdFx0c3VjY2VzcyA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjAyLjcyOTU5MTQ4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDYyMzUzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2dyb3VwIENoYXJnaW5nIExvZ2ljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgd2F0ZXJtYXJrcyBpbiB0aGUgYHN0cnVjdCBtZW1jZ19zdG9ja19wY3BgIGZvciBhIGNoYXJnZSBzdG9jayBzbG90LiBUaGV5J3ZlIGludHJvZHVjZWQgYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCDigJMgdGhhdCdzIGEga2V5IGNoYW5nZSByaWdodCB0aGVyZS5cblxuVGhlIGNydWNpYWwgYml0IGlzIGluIGByZWZpbGxfc3RvY2tgLiBJdCBsb29rcyBsaWtlIHRoZSBvbGQgbG9naWMganVzdCBkcmFpbmVkIHRoZSBzdG9jayBjb21wbGV0ZWx5IGlmIGl0IHdlbnQgb3ZlciBgTUVNQ0dfQ0hBUkdFX0JBVENIYC4gTm93LCBpdCdzIGRvaW5nIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQuIElmIGBzdG9ja19wYWdlc2AgZXhjZWVkcyBgTUVNQ0dfU1RPQ0tfSElHSGAsIHRoZSBjb2RlIHVuY2hhcmdlcyB0aGUgKmV4Y2VzcyogcGFnZXMg4oCTIHNwZWNpZmljYWxseSwgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCDigJMgYW5kIHRoZW4gc2V0cyBgc3RvY2tfcGFnZXNgIHRvIGBNRU1DR19TVE9DS19MT1dgLlxuXG5Fc3NlbnRpYWxseSwgaW5zdGVhZCBvZiBhIGNvbXBsZXRlIGRyYWluLCBpdCdzIGFpbWluZyB0byBtYWludGFpbiBhIG1pbmltdW0gbGV2ZWwsIGEgc29ydCBvZiBidWZmZXIuIFRoaXMgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGhhcHBlbnMgZHVyaW5nIHBhZ2UgdW5jaGFyZ2luZywgd2hpY2ggaXMgd2hhdCBgcmVmaWxsX3N0b2NrYCBoYW5kbGVzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGxvZ2ljIGlzIGZvciBgcmVmaWxsX3N0b2NrYCBhbmQgYG1lbWNnX3VuY2hhcmdlYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gTGV0IG1lIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgcmVmaWxsX3N0b2NrYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjA3LjU3NTgzMDIyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM0MTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWZpbGxfc3RvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yMjIxPXN0YXRpYyB2b2lkIGRyYWluX2xvY2FsX29ial9zdG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmR1bW15KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIyMzYtXFxubW0vbWVtY29udHJvbC5jOjIyMzc6c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy0yMjM4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjU5PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4MDktXFx0aWYgKGJhdGNoIFxcdTAwM2UgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jOjI4MTA6XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjgxMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTQ0PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTMtXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzozMTU0OlxcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTU1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2NTY9dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NjYtXFxubW0vbWVtY29udHJvbC5jOjU2Njc6XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTU2NjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzowNy42MjAxODAwMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4NzUwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkZ1enppbmcgdGhlIGByZWZpbGxfc3RvY2tgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGByZWZpbGxfc3RvY2tgIGlzIGNhbGxlZCBmcm9tIHNvbWUgc2VyaW91c2x5IGtleSBhcmVhcyBvZiB0aGUga2VybmVsIOKAkyBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCwgYW5kIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKmNvcmUqIHRvIG1lbW9yeSBjb250cm9sIGxvZ2ljLiBBbnkgY2hhbmdlIGhlcmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcmlwcGxlIG91dCBhbmQgY2F1c2UgcmVhbCBwcm9ibGVtcy4gTXkgc3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nOyB3ZSBuZWVkIHRvIGZ1enogdGhpcyBhZ2dyZXNzaXZlbHkuIFRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHRvbyBoaWdoIHRvIGp1c3QgZ2xhbmNlIG92ZXIuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQncyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGU/IEkga25vdyBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUgbGlrZWx5IHNvdXJjZSwgYW5kIHRoYXQncyBvbmx5IGJ1aWx0IHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIGFuZCBnZXQgdGhvc2UgY29uZmlnIG9wdGlvbnMgbGluZWQgdXAgZm9yIHRoZSBmdXp6aW5nIGhhcm5lc3MuIFRoaXMgaXMgY3JpdGljYWw6IHdpdGhvdXQgdGhlIHJpZ2h0IGNvbmZpZywgd2UncmUgdGVzdGluZyB0aGUgd3JvbmcgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MTEuODY4OTM0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODA2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MTEuOTE1NzQ2Nzc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1Nzk3NDU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgRnVuY3Rpb25zKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBoZXJlIGlzIGBNRU1DR2AuIEdvdCBpdC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0aGUgb25seSByZWxldmFudCBjb25maWcsIGJ1dCBJJ20gYmV0dGluZyBpdCdzIHRoZSBtYWluIHBsYXllci4gTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBIbW0sIGByZWZpbGxfc3RvY2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBkaWcgZnVydGhlciB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQuXG5cbkxldCdzIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYHJlZmlsbF9zdG9ja2AuIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBzdGF0aWMgdG9vLCBhbmQgc28gaXMgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLiBPa2F5LCBzbyBgbWVtX2Nncm91cF9za191bmNoYXJnZWAgaXMgbm9uLXN0YXRpYy4gTWFrZXMgbW9yZSBzZW5zZS5cblxuVGltZSB0byBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGljaCAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGNhbGwgZWl0aGVyIGB0cnlfY2hhcmdlX21lbWNnYCBvciBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gbGlrZWx5IGlzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MTguNDczNzIzNDg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzkyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTY5PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1OC1cXG5tbS9tZW1jb250cm9sLmM6MjY1OTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY2MC1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4Njg9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NzMtXFxubW0vbWVtY29udHJvbC5jOjI4NzQ6XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4NzUtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNjc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTc0LVxcbm1tL21lbWNvbnRyb2wuYzozMTc1OlxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTc2LVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIxNT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIyMy1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUyMjQ6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MjI1LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0Mi1cXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2NDQtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjE4LjUyOTExOTg3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTUyNzc3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENHcm91cHMgYW5kIFNvY2tldCBNZW1vcnkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgKm5vdCogc3RhdGljIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBhcmVuJ3QgdGhleSBzdGF0aWM/IFdoYXQncyB0aGUgZGVzaWduIGRlY2lzaW9uIHRoZXJlPyBJdCBpbXBsaWVzIHRoYXQgdGhlaXIgYmVoYXZpb3Igb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSdyZSB1c2VkIG1pZ2h0IGNoYW5nZSBhdCBydW50aW1lLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoYXQgY2hvaWNlLlxuXG5UaGVuIHRoZSBxdWVzdGlvbiBoaXRzIG1lOiB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgY2hhcmdlX21lbWNnYD8gSG93IGRvZXMgdGhhdCBmaXQgaW50byB0aGUgd2hvbGUgcGljdHVyZSBvZiBtYW5hZ2luZyBzb2NrZXQgbWVtb3J5IHdpdGhpbiBtZW1vcnkgY2dyb3Vwcz8gQXJlIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCB1bHRpbWF0ZWx5IHdyYXBwZXJzIGZvciBgY2hhcmdlX21lbWNnYCwgb3IgZG9lcyBpdCB3b3JrIHRoZSBvdGhlciB3YXkgYXJvdW5kPyBPciBwZXJoYXBzIHRoZXkgb3BlcmF0ZSBpbmRlcGVuZGVudGx5IGJ1dCBhcmUgY29vcmRpbmF0ZWQgYXQgc29tZSBvdGhlciBsZXZlbD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBncmlwIG9uIGhvdyBzb2NrZXQgbWVtb3J5IGlzIGFjY291bnRlZCBmb3IgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBJcyB0aGVyZSBhIGNhc2Ugd2hlcmUgdGhlc2UgYXJlIG5vdCBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZWFjaCBvdGhlcj8gSWYgc28sIHdoeT8gVGhpcyBjb3VsZCBhbHNvIGJlIGEgY2x1ZSB0byBmaW5kIG90aGVyIGFyZWFzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzoyMi4wMjQ0MDA0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyOTA3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU2OT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NTgtXFxubW0vbWVtY29udHJvbC5jOjI2NTk6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NjAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODY4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODczLVxcbm1tL21lbWNvbnRyb2wuYzoyODc0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODc1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTY3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE3NC1cXG5tbS9tZW1jb250cm9sLmM6MzE3NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE3Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMDA9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMTQtXFxubW0vbWVtY29udHJvbC5jOjUyMTU6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01MjE2LVxcdFxcdFxcdGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjIzLVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIyNDpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMjUtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMzU9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQwLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jOjUyNDE6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTI0Mi1cXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjU5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjcyLVxcbm1tL21lbWNvbnRyb2wuYzo1MjczOlxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbm1tL21lbWNvbnRyb2wuYy01Mjc0LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI5Mz1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMDctXFxubW0vbWVtY29udHJvbC5jOjUzMDg6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTMwOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0Mi1cXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2NDQtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjIyLjA3MTY5NjQ1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2Mjg4NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmdW5jdGlvbnMuIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBpcyBhIGNvcmUgZnVuY3Rpb24sIHNvIHRoYXQncyBkZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIGF0IGl0cyBiYXNlIGxldmVsLiBUaGVuIEkgc2VlIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCAtIHRoYXQncyBpbnRlcmVzdGluZzsgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEh1Z2VUTEIgcGFnZXMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5LiBUaGVuLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCAtIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBvbmUsIHN3YXBwaW5nIGlzIGEgY3J1Y2lhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gc2VlaW5nIGEgcGF0dGVybiBoZXJlIG9mIGNoYXJnZSBhbmQgdW5jaGFyZ2UgZm9yIHRoZSBmb2xpbywgc28gSSBiZXQgdGhleSB3b3JrIGluIHRhbmRlbS5cblxuQW5kIHRoZW4gd2UgaGF2ZSB0aGVzZSBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFRoZXNlIGFyZSByZWxhdGVkIHRvIHNvY2tldCBtZW1vcnksIHdoaWNoIGlzIGEga2V5IGFzcGVjdCwgb2J2aW91c2x5LCBmb3IgbmV0d29yay1ib3VuZCB3b3JrbG9hZHMsIHNvIGl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoZXkgYXJlIHRyYWNrZWQgY29ycmVjdGx5LiBGaW5hbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1fY2dyb3VwX3VuY2hhcmdlYC4gTGV0J3MgZGlnIGludG8gdGhhdCBvbmUgZmlyc3Q7IHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBpcyAqdW4qY2hhcmdlZCB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgY2hhcmdlIHByb2Nlc3Mgb3ZlcmFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjI2LjMwNzk4OTI4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzMzMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF91bmNoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUzNDk9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM5NC1cXG5tbS9tZW1jb250cm9sLmM6NTM5NTp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01Mzk2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDA3LVxcbm1tL21lbWNvbnRyb2wuYzo1NDA4OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcXG5tbS9tZW1jb250cm9sLmMtNTQwOS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3OTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXFxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTc5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjI2LjM1NjQyODE5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAwODAwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGByZWZpbGxfc3RvY2tgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGByZWZpbGxfc3RvY2tgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgcmVmaWxsX3N0b2NrYC4gSSBrbm93IGl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQuIE15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyB0aGF0IGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyB0aGUgY2FsbGVyLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGl0IGEgZGlyZWN0IGNhbGw/IExldCBtZSBkb3VibGUtY2hlY2suIEkgcmVjYWxsIGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBtaWdodCBjYWxsIGB1bmNoYXJnZV9iYXRjaGAsIHdoaWNoICp0aGVuKiBjYWxscyBgcmVmaWxsX3N0b2NrYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpbmRpcmVjdCByZWxhdGlvbnNoaXAuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gbWFrZSBzdXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRob3NlIHRocmVlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjI5LjY1NzIzMjM5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMTg2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVmaWxsX3N0b2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjIyMT1zdGF0aWMgdm9pZCBkcmFpbl9sb2NhbF9vYmpfc3RvY2soc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjM2LVxcbm1tL21lbWNvbnRyb2wuYzoyMjM3OnN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtMjIzOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjY1OT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODA5LVxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYzoyODEwOlxcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgYmF0Y2ggLSBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4MTEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE0ND1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTUzLVxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG5tbS9tZW1jb250cm9sLmM6MzE1NDpcXHRcXHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjU2PXZvaWQgbWVtX2Nncm91cF9za191bmNoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjY2LVxcbm1tL21lbWNvbnRyb2wuYzo1NjY3OlxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy01NjY4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MjkuNzA0NDU1ODI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDAxNzI0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcmVmaWxsX3N0b2NrYCdzIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIG15IG1lbnRhbCBtb2RlbCBzaG93cyB0aGF0IGByZWZpbGxfc3RvY2tgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHRyeV9jaGFyZ2VfbWVtY2dgIOKAkyBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYmF0Y2hlcyBleGNlZWRpbmcgdGhlIG51bWJlciBvZiBwYWdlcy4gTWFrZXMgc2Vuc2UsIHRoYXQncyBsaWtlbHkgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gcmVwbGVuaXNoIHRoZSBzdG9jayBmb3IgYSBsYXJnZXIgYWxsb2NhdGlvbi4gVGhlbiwgdGhlcmUncyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdCBmb3IgdW5jaGFyZ2luZyBiYXNlZCBvbiBvYmplY3QgYWNjb3VudGluZy4gQW5kLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIG9rYXksIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVtb3J5IHVuY2hhcmdpbmcuIFN0YW5kYXJkIHN0dWZmIHRoZXJlLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBgdW5jaGFyZ2VfYmF0Y2hgPyBJIGRvbid0IGltbWVkaWF0ZWx5IHNlZSBpdCBvbiB0aGUgY2FsbCBncmFwaCBpbiBteSBoZWFkLiBUaGF0IG9uZSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoYXQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3RvY2sgcmVmaWxscy4gSXMgYHVuY2hhcmdlX2JhdGNoYCBzb21laG93IGluZGlyZWN0bHkgb3IgZGlyZWN0bHkgdHJpZ2dlcmluZyB0aGUgcmVmaWxsIHByb2Nlc3M/IEknbSBnb25uYSBqb3QgdGhhdCBkb3duLCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgb2YgdGhlIGZsb3cuIFRoYXQncyBhIHBvdGVudGlhbCBibGluZCBzcG90LCBnb3R0YSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzozMy4yMDQ2MzE5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5jaGFyZ2VfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MzIyPXN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTMyNi1cXG5tbS9tZW1jb250cm9sLmM6NTMyNzpzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG5tbS9tZW1jb250cm9sLmMtNTMyOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM0MS1cXG5tbS9tZW1jb250cm9sLmM6NTM0MjpcXHRtZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLVxcdTAwM2VwZ3Bnb3V0LCB1Zy1cXHUwMDNlbnJfbWVtb3J5LCB1Zy1cXHUwMDNlbmlkKTtcXG5tbS9tZW1jb250cm9sLmMtNTM0My1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzQ5PXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzNjYtXFx0XFx0aWYgKHVnLVxcdTAwM2VvYmpjZykge1xcbm1tL21lbWNvbnRyb2wuYzo1MzY3OlxcdFxcdFxcdHVuY2hhcmdlX2JhdGNoKHVnKTtcXG5tbS9tZW1jb250cm9sLmMtNTM2OC1cXHRcXHRcXHR1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzNzItXFxubW0vbWVtY29udHJvbC5jOjUzNzM6XFx0XFx0LyogcGFpcnMgd2l0aCBvYmpfY2dyb3VwX3B1dCBpbiB1bmNoYXJnZV9iYXRjaCAqL1xcbm1tL21lbWNvbnRyb2wuYy01Mzc0LVxcdFxcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01Mzk1PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQwNC1cXHR1bmNoYXJnZV9mb2xpbyhmb2xpbywgXFx1MDAyNnVnKTtcXG5tbS9tZW1jb250cm9sLmM6NTQwNTpcXHR1bmNoYXJnZV9iYXRjaChcXHUwMDI2dWcpO1xcbm1tL21lbWNvbnRyb2wuYy01NDA2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDA4PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDE2LVxcdGlmICh1Zy5vYmpjZylcXG5tbS9tZW1jb250cm9sLmM6NTQxNzpcXHRcXHR1bmNoYXJnZV9iYXRjaChcXHUwMDI2dWcpO1xcbm1tL21lbWNvbnRyb2wuYy01NDE4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MzMuMjUwNTM0NDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTI4NjY2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIGNvZGU6XG5cbioqVW5jaGFyZ2VfQmF0Y2ggSW52ZXN0aWdhdGlvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBUaGUgYHVuY2hhcmdlX2JhdGNoYCBmdW5jdGlvbiwgcmlnaHQ/IEkgd2FzICpzdXJlKiBJIHNldCBpdCB1cCB0byBoYW5kbGUgc3RvY2sgcmVmaWxscyBpZiBuZWNlc3NhcnkuIERpZCBJIG1pc3Mgc29tZXRoaW5nPyBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgZm9yIGB1bmNoYXJnZV9iYXRjaGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBjYWxsaW5nIGByZWZpbGxfc3RvY2tgLCBiZWNhdXNlIGlmIGl0IGlzbid0LCB0aGVyZSBjb3VsZCBiZSBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbnZlbnRvcnkgaW1wbGljYXRpb25zIGRvd25zdHJlYW0uIFRpbWUgdG8gZGl2ZSBiYWNrIGluIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbnMsIG9yIGFkanVzdCBteSB1bmRlcnN0YW5kaW5nLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MzYuMjAzNDA0NDE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMyNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTMyNzpcXHRzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG41MzI4OlxcdHtcXG41MzI5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41MzMwOlxcdFxcbjUzMzE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjUzMzI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKHVnLVxcdTAwM2VvYmpjZyk7XFxuNTMzMzpcXHRcXHRpZiAodWctXFx1MDAzZW5yX21lbW9yeSkge1xcbjUzMzQ6XFx0XFx0XFx0bWVtY2dfdW5jaGFyZ2UobWVtY2csIHVnLVxcdTAwM2Vucl9tZW1vcnkpO1xcbjUzMzU6XFx0XFx0XFx0aWYgKHVnLVxcdTAwM2Vucl9rbWVtKSB7XFxuNTMzNjpcXHRcXHRcXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX0tNRU0sIC11Zy1cXHUwMDNlbnJfa21lbSk7XFxuNTMzNzpcXHRcXHRcXHRcXHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCAtdWctXFx1MDAzZW5yX2ttZW0pO1xcbjUzMzg6XFx0XFx0XFx0fVxcbjUzMzk6XFx0XFx0XFx0bWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTtcXG41MzQwOlxcdFxcdH1cXG41MzQxOlxcdFxcbjUzNDI6XFx0XFx0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cXHUwMDNlcGdwZ291dCwgdWctXFx1MDAzZW5yX21lbW9yeSwgdWctXFx1MDAzZW5pZCk7XFxuNTM0MzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG41MzQ0OlxcdFxcbjUzNDU6XFx0XFx0LyogZHJvcCByZWZlcmVuY2UgZnJvbSB1bmNoYXJnZV9mb2xpbyAqL1xcbjUzNDY6XFx0XFx0b2JqX2Nncm91cF9wdXQodWctXFx1MDAzZW9iamNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MzYuMjAzNjI1MTU4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODgyMjI2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIE1hcCBvZiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBtZW1vcnkgdW5jaGFyZ2luZyBwcm9jZXNzIGhlcmUuIEkgc2VlIHRoYXQgYHVuY2hhcmdlX2JhdGNoYCBkaXJlY3RseSBpbnZva2VzIGBtZW1jZ191bmNoYXJnZWAuIFRoYXQncyBleHBlY3RlZC4gVGhlbiwgSSBub3RpY2UgdGhhdCBgcmVmaWxsX3N0b2NrYCwgd2hpY2ggaXMgYSByZWxhdGVkIGZ1bmN0aW9uLCBhbHNvIGNhbGxzIGBtZW1jZ191bmNoYXJnZWAg4oCTIHNwZWNpZmljYWxseSB3aGVuIHRoZSBzdG9jayBpcyBmdWxsLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIHN0ZXAgYmFjayBhIGJpdCBhbmQgY29uc2lkZXIgd2hlcmUgYHJlZmlsbF9zdG9ja2AgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJIHNlZSB0aHJlZSBwcmltYXJ5IGNhbGwgc2l0ZXM6IGB0cnlfY2hhcmdlX21lbWNnYCAod2hlbiB0aGUgYmF0Y2ggc2l6ZSBleGNlZWRzIHRoZSBhdmFpbGFibGUgcGFnZXMpLCBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AsIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFNvIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHByb2Nlc3MgYnkgaW52ZXN0aWdhdGluZyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2Agbm93LiBJIHdpbGwgc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBpdCBkb2VzLCBiZWNhdXNlIHRoYXQncyBhIGtleSBzcG90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NDAuMTkxODUxNDU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE0NDpcXHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4zMTQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4zMTQ2OlxcdHtcXG4zMTQ3OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4zMTQ4OlxcdFxcbjMxNDk6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4zMTUwOlxcdFxcbjMxNTE6XFx0XFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCAtbnJfcGFnZXMpO1xcbjMxNTI6XFx0XFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgLW5yX3BhZ2VzKTtcXG4zMTUzOlxcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4zMTU0OlxcdFxcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbjMxNTU6XFx0XFxuMzE1NjpcXHRcXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4zMTU3OlxcdH1cXG4zMTU4OlxcdFxcbjMxNTk6XFx0LypcXG4zMTYwOlxcdCAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcXG4zMTYxOlxcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4zMTYyOlxcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbjMxNjM6XFx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjQwLjE5MjA4MDI4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQxMTY1ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBNZW1vcnkgQWNjb3VudGluZyoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSd2ZSBoaXQgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGByZWZpbGxfc3RvY2tgIOKAkyB0aGF0J3MgZ29vZCB0byBrbm93LiBCdXQgd2hhdCdzICpkcml2aW5nKiBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgaW4gdGhlIGZpcnN0IHBsYWNlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGZyb20gdGhlIG90aGVyIGVuZC4gS25vd2luZyB3aGF0J3MgdHJpZ2dlcmluZyBpdCB3aWxsIHRlbGwgbWUgYSBsb3QgbW9yZSBhYm91dCB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gY2FsbGVycyBvZiBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgdG8gZ2V0IHRoZSBjb250ZXh0LiBMZXQgbWUgbWFrZSBzdXJlIEkgZmluZCBvdXQgd2hhdCdzIGNhdXNpbmcgdGhpcyB1bmNoYXJnZSB0byBoYXBwZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzo0My4yMzMyNDk4MjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTM2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMzktLypcXG5tbS9tZW1jb250cm9sLmM6MzE0MDogKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXFxubW0vbWVtY29udHJvbC5jLTMxNDEtICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE0My0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzE0NDpzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG5tbS9tZW1jb250cm9sLmMtMzE0NS1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzIzND12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzI0MS1cXG5tbS9tZW1jb250cm9sLmM6MzI0MjpcXHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMyNDMtXFx0cGFnZS1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzQ2OT1zdGF0aWMgdm9pZCBfX3JlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1MzMtXFx0aWYgKG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYzozNTM0OlxcdFxcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMob2JqY2csIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzUzNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjQzLjI4MTE5MTc0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg2MTQxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBDZ3JvdXAgU3RvY2sgTG9naWMgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgdGhlIGByZWZpbGxfc3RvY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IHVuY2hhcmdlcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrLiBJIHNlZSB0aGF0IGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAgYW5kIGBfX3JlZmlsbF9vYmpfc3RvY2tgIGFyZSBoZWF2aWx5IGludm9sdmVkIGhlcmUsIHdoaWNoIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhpcyBpcyBpbXBhY3Rpbmcga21lbSB1bmNoYXJnaW5nLiBJbnN0ZWFkIG9mIGRyYWluaW5nIHRoZSBlbnRpcmUgc3RvY2ssIHRoZSBtb2RpZmllZCBgcmVmaWxsX3N0b2NrYCB3aWxsIG5vdyB1bmNoYXJnZSBvbmx5IGBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPV2AuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbWNnIHN0b2NrIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgaXQgZGVmaW5pdGVseSBmZWVscyBsaWtlIGl0J3Mgd29ydGggZnV6emluZyB0byBleHBsb3JlIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB1bmNoYXJnaW5nIHByb2Nlc3MgdG8gbmFycm93IGRvd24gbXkgZm9jdXMuIEZyb20gdGhlIGNvZGUsIEkgY2FuIHNlZSBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIGZ1bmN0aW9ucyB0aGF0IEknbGwgbG9vayBpbnRvLiBUaGVzZSBpbmNsdWRlLCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvc2AsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAuIFRoaXMgbGlzdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGNvbmZpcm0gdGhhdCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgIGlzIGluZGVlZCBub24tc3RhdGljIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc2OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzo0OC4yNjczMzU3MTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzMxMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzIxMj1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjI5LS8qKlxcbm1tL21lbWNvbnRyb2wuYzozMjMwOiAqIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlOiB1bmNoYXJnZSBhIGttZW0gcGFnZVxcbm1tL21lbWNvbnRyb2wuYy0zMjMxLSAqIEBwYWdlOiBwYWdlIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzIzMy0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzIzNDp2b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxubW0vbWVtY29udHJvbC5jLTMyMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzo0OC4zMTM2NzMyNTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwOTQ1MDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBzdWJqZWN0IG1hdHRlciBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipDb25jZXJuaW5nIE1lbW9yeSBBY2NvdW50aW5nIGluIGNncm91cHMqKlxuXG5SaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSdtIHRoaW5raW5nLi4ud2hhdCBhYm91dCB0aGUgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIHNldHRpbmc/IFRoYXQncyB0aGUgcGFydCB0aGF0IG5lZWRzIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiBmb3IgdGhpcyBzY2VuYXJpby4gV2UgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IGhvdyBtZW1vcnkgaXMgY2hhcmdlZCBhbmQgdW5jaGFyZ2VkLCBhbmQgSSdtIHdvbmRlcmluZyBpZiB0aGlzIHNldHRpbmcgd2lsbCBhZmZlY3QgdGhlIGJlaGF2aW91ciB0aGF0IHdlIHdhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NTEuMTIzMTI2MTU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ2OTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX3VuY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTYzNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU2NTI6ICogbWVtX2Nncm91cF9za191bmNoYXJnZSAtIHVuY2hhcmdlIHNvY2tldCBtZW1vcnlcXG5tbS9tZW1jb250cm9sLmMtNTY1My0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byB1bmNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTUtICovXFxubW0vbWVtY29udHJvbC5jOjU2NTY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy01NjU3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NTEuMTcxNjAwNjc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODcyNDU0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZzogQSBRdWljayBEaXZlKipcblxuWWVwLCBpdCdzIHByZXR0eSBjbGVhci4gTXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHRoZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBmdW5jdGlvbi4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBjb25zaWRlcjogaXMgdGhpcyB0aGUgKnJpZ2h0KiBzcG90IHRvIGJlIGxvb2tpbmcgYXQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdW5jaGFyZ2luZyBtZW1vcnkgYXQgKnRoaXMqIHBvaW50IGluIHRoZSBwcm9jZXNzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSByZWxlYXNlLCBvciBpcyB0aGVyZSBhIG1vcmUgY29tcGxleCBzY2VuYXJpbyBpbnZvbHZpbmcgc3dhcC1vdXRzLCByZWNsYWltLCBhbmQgYWxsIHRoZSBhc3NvY2lhdGVkIGJvb2trZWVwaW5nPyBJJ20gYWxyZWFkeSBtZW50YWxseSB3YWxraW5nIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSByZWxldmFudC4gVGltZSB0byBkcmlsbCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjUzLjk1ODg0OTQ2OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNDEzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTM0OT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Mzk0LVxcbm1tL21lbWNvbnRyb2wuYzo1Mzk1OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTUzOTYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0MDctXFxubW0vbWVtY29udHJvbC5jOjU0MDg6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbm1tL21lbWNvbnRyb2wuYy01NDA5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzQ2PWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5MS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTc5MjogKiBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCAtIHVuY2hhcmdlIHN3YXAgc3BhY2VcXG5tbS9tZW1jb250cm9sLmMtNTc5My0gKiBAaWQ6IGNncm91cCBpZCB0byB1bmNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3OTUtICovXFxubW0vbWVtY29udHJvbC5jOjU3OTY6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy01Nzk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NTQuMDA0OTk1NjE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzkyMjY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5ZZXMsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBjYXNlLCBJIGFncmVlIHdpdGggdGhlIGluaXRpYWwgYXNzZXNzbWVudC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLi4uIHdoYXQncyB0aGUgcm9sZSBhbmQgYmVoYXZpb3Igb2YgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbz8gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgdG8gdW5kZXJzdGFuZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjU2LjU0NDIyNjQyMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMTIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUyMTU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzQtXFxubW0vbWVtY29udHJvbC5jOjUyMzU6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTIzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjU2LjU4OTM0NjA2OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA0Mzg5NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBDb25zaWRlcmF0aW9ucyBvbiBNZW1vcnkgQWNjb3VudGluZyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHNwZWNpZmljYWxseSB0aGUgdW5jaGFyZ2luZyBhbmQgY2hhcmdpbmcgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gdGhlIG1lY2hhbmljcyBvZiBhY2NvdW50aW5nIGZvciBtZW1vcnkgdXNhZ2Ugd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uOlxuXG4qICAgYF9fbWVtX2Nncm91cF91bmNoYXJnZWA6IFRoZSBiYXNlIHVuY2hhcmdlIGZ1bmN0aW9uLCB0aGUgY29ybmVyc3RvbmUuXG4qICAgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3NgOiBJIGFzc3VtZSB0aGlzIGRlYWxzIHdpdGggdW5jaGFyZ2luZyBmb2xpby1iYXNlZCBtZW1vcnksIHNvIEknbGwgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkaWZmZXJzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgYmFzZSBmdW5jdGlvbi5cbiogICBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgOiBJIGFudGljaXBhdGUgdGhpcyBoYW5kbGVzIGtlcm5lbCBtZW1vcnkgdW5jaGFyZ2luZyBhdCBhIHBhZ2UgbGV2ZWwuXG4qICAgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgOiBUaGlzIG9uZSB3aWxsIGhhbmRsZSBzb2NrZXQtcmVsYXRlZCBtZW1vcnkgdW5jaGFyZ2luZy5cbiogICBgX19tZW1fY2dyb3VwX2NoYXJnZWA6IFRoZSByZXZlcnNlLlxuKiAgIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgOiBUaGUga2VybmVsIG1lbW9yeSBjaGFyZ2luZy5cbiogICBgbWVtX2Nncm91cF9za19jaGFyZ2VgOiBUaGUgc29ja2V0IG1lbW9yeSBjaGFyZ2luZy5cblxuRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBvZiB0aGlzIGFzIGEgc2V0IG9mIGNvcnJlc3BvbmRpbmcgY2hhcmdlIGFuZCB1bmNoYXJnZSBmdW5jdGlvbnMuIFRoZSBcImRvdWJsZSB1bmRlcnNjb3JlXCIgb25lcyBhcmUgcHJvYmFibHkgdGhlIGNvcmUgaW50ZXJuYWwgd29ya2luZ3MsIHdoaWxlIHRoZSBvdGhlcnMgYXJlIHByb2JhYmx5IHdyYXBwZXJzIGZvciBzcGVjaWZpYyBjYXNlcyBsaWtlIHNvY2tldHMuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHdpbGwgYmUga2V5LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBvYnZpb3VzIG9uZSwgb2YgY291cnNlLCBpcyBgQ09ORklHX01FTUNHYC4gVGltZSB0byBjaGVjayBgbW0vS2NvbmZpZ2Agb3IgYGluaXQvS2NvbmZpZ2AgZm9yIHRoZSB2YXJpb3VzIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1DR2AuIEkgd2FudCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MDQuNTkzNzM4OTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ0MjEzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MDYuNzM3OTYwODVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxODQ4Mjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNRU1DRyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYE1FTUNHYC4uLiB0aGF0J3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJIG5lZWQgdG8gZm9jdXMgb24uIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIERvZXMgaXQgaGF2ZSBhbnkgaW5oZXJlbnQgZGVwZW5kZW5jaWVzPyBEb2VzIGVuYWJsaW5nIG9yIGRpc2FibGluZyBgTUVNQ0dgIHJlcXVpcmUgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzIHRvIGJlIGluIHBsYWNlIGZpcnN0PyBJdCdzIGNydWNpYWwgdG8ga25vdyB0aGlzIHVwZnJvbnQuIEp1bXBpbmcgaW50byB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBpdHMgYmVoYXZpb3Igd2l0aG91dCB1bmRlcnN0YW5kaW5nIGl0cyBwcmVyZXF1aXNpdGUgY29uZGl0aW9ucyB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgYW5kIHBvdGVudGlhbGx5IGxlYWQgbWUgZG93biBhIHJhYmJpdCBob2xlIG9mIGRlYnVnZ2luZy4gVGltZSB0byBsb29rIGludG8gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODowOS42NTY0NDcyNTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA4NDpcXHRcXHRoZWxwXFxuMTA4NTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDg2OlxcdFxcbjEwODc6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDg4OlxcdFxcdGJvb2xcXG4xMDg5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDkwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDkxOlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDkyOlxcdFxcdGRlZmF1bHQgeVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MDkuNjU2NTk4NTk5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODc0OTQ2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMga25vd2xlZGdlYWJsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBDR1JPVVBTIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgdGhpbmcgYW5kLCB3aGlsZSBpdCBkb2Vzbid0ICpleHBsaWNpdGx5KiBkZWNsYXJlIGEgZGVwZW5kZW5jeSBvbiBgQ0dST1VQU2AsIGl0J3MgbmVzdGVkIGRlZXAgd2l0aGluIHRoZSBgQ0dST1VQU2AgbWVudS4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gRXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbGlua2FnZSByZXNpZGVzLCBldmVuIGlmIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gdGhlIGNvZGUgb3IgY29uZmlndXJhdGlvbi4gU28sIG15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGVyZSdzIGEgY29ubmVjdGlvbiB0aGVyZSB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlICpleGFjdGx5KiBob3cgdGhpcyBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhlIGBDR1JPVVBTYCBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAsIGV2ZW4gaWYgaXQncyBhbiBpbmRpcmVjdCBvbmUuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhbmQgcGVlbCBiYWNrIHRoZSBsYXllcnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDA0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODoxMy4xNDQwOTU4ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQ0MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA0Nj1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA0OC1cXG5pbml0L0tjb25maWc6MTA0OTptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA1MC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuLS1cXG5pbml0L0tjb25maWc9MTE0MD1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbi0tXFxuaW5pdC9LY29uZmlnLTExNDQtXFxuaW5pdC9LY29uZmlnOjExNDU6bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE0Ni1cXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MTMuMTkzMTQ0OTYyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzI3NDU1MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIENoYXJnaW5nIExvZ2ljIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYENHUk9VUFNgIGlzIHRoZSB0b3AtbGV2ZWwsIGFuZCBgQ0dST1VQU2AgYW5kIGBNRU1DR2AgcmVwcmVzZW50IHRoZSBjb25maWd1cmF0aW9ucy4gTGV0J3MgZGlnIGludG8gdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYWRqdXN0aW5nIHRoZSBzdG9jayBkcmFpbmluZyBsb2dpYyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFsdGVyZWQgdGhlIHRocmVzaG9sZHMsIHNvIG5vdywgaW5zdGVhZCBvZiBhIGNvbXBsZXRlIGRyYWluLCBleGNlc3MgcGFnZXMgYWJvdmUgYSBuZXcgYE1FTUNHX1NUT0NLX0hJR0hgIHRocmVzaG9sZCBhcmUgKnVuY2hhcmdlZCogZG93biB0byBgTUVNQ0dfU1RPQ0tfTE9XYCwgbGVhdmluZyBhIHJlc2lkdWFsIGFtb3VudCBpbiB0aGUgc3RvY2suIFRoaXMgaXMgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHRoZXNlIHBhZ2UgdW5jaGFyZ2VzIGFuZCByZWZpbGwgY3ljbGVzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZy4gV2UndmUgZ290IHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgYF9fbWVtX2Nncm91cF91bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zYCwgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCwgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYC5cblxuSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmVzIGFyZSB0aGUgbW9zdCB2YWx1YWJsZT8gYF9fbWVtX2Nncm91cF91bmNoYXJnZWAgaXMgdW5kb3VidGVkbHkgYSBob3QgcGF0aCwgY2FsbGVkIGZvciB2aXJ0dWFsbHkgZXZlcnkgcGFnZSB1bmNoYXJnZS4gQnV0IGl0J3MgYWxzbyAqdmVyeSogZ2VuZXJpYywgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBUaGF0J3MgYSBwb3RlbnRpYWwgZG93bnNpZGUg4oCTIGl0IGNvdWxkIGxlYWQgdG8gc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gZW50cnlwb2ludHMsIGFuZCBhdm9pZCB0aGUgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXG5cblRoaW5raW5nIGFib3V0IGl0LCB3aGlsZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyBpbXBvcnRhbnQsIGxldCdzIG5vdCBtYWtlIGl0IHRoZSBvbmx5IG9uZS4gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGxvb2tzIHByb21pc2luZy4gSXQncyBzcGVjaWZpYyB0byBzb2NrZXQgbWVtb3J5LCBhbmQgdGhhdCBtYWtlcyBpdCBsZXNzIGhvdC1wYXRoIHRoYW4gdGhlIGdlbmVyaWMgcGFnZSB1bmNoYXJnaW5nLCBidXQgc3RpbGwgaXMgYW4gQVBJIGVudHJ5cG9pbnQsIHdoaWNoIGlzIGdvb2QuIFdlIHNob3VsZCBhbHNvIGluY2x1ZGUgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBiZWNhdXNlIGl0IGhhbmRsZXMga21lbSBwYWdlcy4gSSdsbCBhbHNvIGFkZCBpdHMgY291bnRlcnBhcnQsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYW5kIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIGJlY2F1c2Ugd2Ugc2hvdWxkIGZ1enogYm90aCBjaGFyZ2UgYW5kIHVuY2hhcmdlLlxuXG5BZnRlciBhIHNlY29uZCBsb29rLCB3aGlsZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBsb29rcyBnb29kLCBpdCdzIGNhbGxlZCBmcm9tIGBmb2xpb19wdXRgIG9yIG90aGVyIHBhZ2UgZnJlZWluZyBmdW5jdGlvbnMgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBpbnNhbmVseSBob3QgcGF0aCBhbmQgbm90IGZvY3VzZWQgZW5vdWdoLiBJJ20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIHVzaW5nIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBhcyB0aGUgcHJpbWFyeSB0YXJnZXRzIHRvIGF2b2lkIHRoZSBnZW5lcmFsIGhvdCBwYXRoLCBhbmQgZm9jdXMgb24gc29ja2V0IGFuZCBrbWVtIG1lbW9yeSB3aGljaCBhcmUgYm90aCBlbnRyeXBvaW50cy4gSSdsbCBkb3VibGUgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIHRvIG1ha2Ugc3VyZSBpdCdzIHN1aXRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODoyMy41MjA2MDM1MDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjM3MDgxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9za191bmNoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTYzND1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzUtXFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNjp2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjk3PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzAzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MDQ6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MDUtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYzNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU2NTI6ICogbWVtX2Nncm91cF9za191bmNoYXJnZSAtIHVuY2hhcmdlIHNvY2tldCBtZW1vcnlcXG5tbS9tZW1jb250cm9sLmMtNTY1My0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byB1bmNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTUtICovXFxubW0vbWVtY29udHJvbC5jOjU2NTY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy01NjU3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0xMDMwPXN0YXRpYyBpbnQgc29ja19yZXNlcnZlX21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0xMDYxLVxcdFxcdHNrX21lbW9yeV9hbGxvY2F0ZWRfc3ViKHNrLCBwYWdlcyk7XFxubmV0L2NvcmUvc29jay5jOjEwNjI6XFx0XFx0bWVtX2Nncm91cF9za191bmNoYXJnZShzaywgcGFnZXMpO1xcbm5ldC9jb3JlL3NvY2suYy0xMDYzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTMzMzM9aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0zNDM1LVxcdGlmIChjaGFyZ2VkKVxcbm5ldC9jb3JlL3NvY2suYzozNDM2OlxcdFxcdG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2Uoc2ssIGFtdCk7XFxubmV0L2NvcmUvc29jay5jLTM0MzctXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MzQ3MD12b2lkIF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgYW1vdW50KVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTM0NzItXFx0aWYgKG1lbV9jZ3JvdXBfc2tfZW5hYmxlZChzaykpXFxubmV0L2NvcmUvc29jay5jOjM0NzM6XFx0XFx0bWVtX2Nncm91cF9za191bmNoYXJnZShzaywgYW1vdW50KTtcXG5uZXQvY29yZS9zb2NrLmMtMzQ3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MjUuMjQ0MzE3Mzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDE1NDA1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIFVuY2hhcmdpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGluIGBzb2NrLmNg4oCmIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBTb3VuZHMgbGlrZSBhIGdvb2QgZnVuY3Rpb24gdG8gZGlnIGludG8sIGFzIGl0IHByb2JhYmx5IGhhbmRsZXMgc29ja2V0LXJlbGF0ZWQgbWVtb3J5IGFjY291bnRpbmcsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3Mgbm90IGluIHRoZSBob3QgcGF0aCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBhbmFseXNpcyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbiB3aXRob3V0IHJpc2tpbmcgbWFqb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIE5vdywgd2hlcmUgZWxzZSBkbyB3ZSBzZWUgc2ltaWxhciB1bmNoYXJnaW5nIG1lY2hhbmlzbXMgYXQgcGxheT8gQWgsIHllcy4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBhcyB3ZWxsLiBNdXN0IGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgaWYgdGhlcmUncyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgcmVkdW5kYW5jeSBpbiB0aGVpciBiZWhhdmlvcnMsIGFzIHRoZXNlIHR5cGVzIG9mIGludGVyYWN0aW9ucyBhbHdheXMgbWFrZSBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODozMC42ODU4NjAzMTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE4NTMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3MjI9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MjM6dm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc3MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcyLVxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzM6XFx0XFx0X19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2UocGFnZSwgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyNz1zdGF0aWMgaW5saW5lIGludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MzItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTgzMzpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODM0LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMjEyPWludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMyMjktLyoqXFxubW0vbWVtY29udHJvbC5jOjMyMzA6ICogX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2U6IHVuY2hhcmdlIGEga21lbSBwYWdlXFxubW0vbWVtY29udHJvbC5jLTMyMzEtICogQHBhZ2U6IHBhZ2UgdG8gdW5jaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjMzLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMjM0OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcXG5tbS9tZW1jb250cm9sLmMtMzIzNS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTMxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTMzMy1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiBQYWdlTWVtY2dLbWVtKHBhZ2UpKVxcbm1tL3BhZ2VfYWxsb2MuYzoxMzM0OlxcdFxcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtMTMzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MzIuMjk3NzE4ODcxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjM4MDgxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCoqXG5cblJpZ2h0LCB0aGlzIGlzIGEgY2FsbCBjb21pbmcgZnJvbSBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLiBUaGF0J3MgYSByZWQgZmxhZyDigJMgYSB2ZXJ5ICpob3QqIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaGVyZSBiZWNhdXNlIHBlcmZvcm1hbmNlIGluIHRoaXMgYXJlYSBpcyBjcml0aWNhbC4gQW55IHNsb3dkb3duIGhlcmUgcmlwcGxlcyBvdXR3YXJkLCBpbXBhY3Rpbmcgb3ZlcmFsbCBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi5cblxuVGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzLCB1bmNoYXJnaW5nIHN3YXAgbWFrZXMgY29tcGxldGUgc2Vuc2UuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHVuY2hhcmdpbmcgbG9naWMgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGNvcmUgZnJlZWluZyBwcm9jZXNzLiBBcmUgdGhlcmUgYW55IHVubmVjZXNzYXJ5IG9wZXJhdGlvbnM/IENvbnRlbnRpb24gaXNzdWVzPyBQb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQ/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgcHJvYmxlbSBtaWdodCBsaWUsIGFuZCB0aGlzIGlzIHdoZXJlIEknbGwgc3RhcnQgbG9va2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHVuY2hhcmdpbmcgbG9naWMgaXMgd29ya2luZyBpbiBjb25qdW5jdGlvbiB3aXRoIGZyZWVpbmcgbWVtb3J5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjM3LjAyMTUyOTU1OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTE2MjcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9NDk2PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDItXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTAzOmV4dGVybiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNC1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDctXFx0XFx0cmV0dXJuO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjUwODpcXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwOS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3OTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXFxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTc5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjM4LjYwMjY5ODU2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTk2OTEwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgU3dhcCBVbmNoYXJnZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgb25lLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20/IFRpbWUgdG8gdHJhY2UgaXQuIEdvdHRhIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBMZXQncyBzZWUgd2hlcmUgdGhlIGNhbGwgc2l0ZXMgYXJlIGFuZCB3aGF0IHRoZXkncmUgZG9pbmcgd2hlbiB0aGV5IHRyaWdnZXIgdGhhdCBzd2FwIHVuY2hhcmdlLiBLbm93aW5nIHRoZSBjYWxsIGhpZXJhcmNoeSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTU4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6NDEuMTYyMzk5NDQzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcwMzQxMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtY2dfdGVzdC5yc3Q9MTE9UGxlYXNlIG5vdGUgdGhhdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGNhbiBiZSBjaGFuZ2VkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtY2dfdGVzdC5yc3QtNDUtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtY2dfdGVzdC5yc3Q6NDY6XFx0bWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKClcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1jZ190ZXN0LnJzdC00Ny1cXHQgIENhbGxlZCB3aGVuIHN3cF9lbnRyeSdzIHJlZmNudCBnb2VzIGRvd24gdG8gMC4gQSBjaGFyZ2UgYWdhaW5zdCBzd2FwXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00OTY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwMi1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDM6ZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTA0OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVxcdFxcdHJldHVybjtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDg6XFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTE0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MTgtXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTE5OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTIwLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NjkwPXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTcyMy1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG5tbS9tZW1jb250cm9sLXYxLmM6NzI0OlxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy03MjUtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxcbm1tL21lbWNvbnRyb2wuYy01NzkzLSAqIEBpZDogY2dyb3VwIGlkIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTc5Njp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jLTU3OTcte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xOTE1PXZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTk0Ny1cXHRcXHRcXHRpZiAoYmF0Y2hfaWQpXFxubW0vc3dhcGZpbGUuYzoxOTQ4OlxcdFxcdFxcdFxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChiYXRjaF9pZCwgY2lfb2ZmIC0gYmF0Y2hfb2ZmKTtcXG5tbS9zd2FwZmlsZS5jLTE5NDktXFx0XFx0XFx0YmF0Y2hfaWQgPSBpZF9jdXI7XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5NTQtXFx0aWYgKGJhdGNoX2lkKVxcbm1tL3N3YXBmaWxlLmM6MTk1NTpcXHRcXHRtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoYmF0Y2hfaWQsIGNpX29mZiAtIGJhdGNoX29mZik7XFxubW0vc3dhcGZpbGUuYy0xOTU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODo0Mi44MzI3NDYyNjFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5ODI3NTkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgTWVtb3J5IEFjY291bnRpbmcgRWZmaWNpZW5jeSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGEgZGVjZW50LCBub24taG90LXBhdGggZnVuY3Rpb24sIGEgcmVhc29uYWJseSB3ZWxsLXdyaXR0ZW4gcGllY2Ugb2YgY29kZS4gSXQncyBub3QgdHlwaWNhbGx5IHRoZSBib3R0bGVuZWNrIGluIG1vc3QgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLiBUaGF0J3MgZ29vZDsgaXQncyBhbHdheXMgcmVhc3N1cmluZyB0byBrbm93IHRoYXQgc29tZSBvZiB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgd29ya2luZyBlZmZpY2llbnRseSBhbmQgbm90IGNvbnN1bWluZyBjeWNsZXMgdW5uZWNlc3NhcmlseS5cblxuTm93LCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYD8gSSdtIGN1cmlvdXMgYWJvdXQgdGhhdCBmdW5jdGlvbi4gSSBoYXZlbid0IHNwZWNpZmljYWxseSBhbmFseXplZCBpdCByZWNlbnRseSwgc28gaXQncyB3b3J0aCByZXZpc2l0aW5nIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGNncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmVjb21lIGEgaG90c3BvdCB1bmRlciBoZWF2eSBsb2FkLiBUaGUgaHVnZXRsYiBwYXRoIGlzIG9mdGVuIGEgY3JpdGljYWwgb25lIHRvIG1vbml0b3IsIHNvIEkgbmVlZCB0byBwdXQgdGhhdCBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuIEl0IGNvdWxkIGJlIHdvcnRoIGxvb2tpbmcgYXQgaG93IGl0cyBoYW5kbGluZyBvZiBsYXJnZSBwYWdlcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGNncm91cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6NDYuMDMxMDI1MTU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYwMjI0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Mj1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1OS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjA6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTQ4PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTQ6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1NS17XFxuLS1cXG5tbS9odWdldGxiLmM9MjgyOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODgzLVxcbm1tL2h1Z2V0bGIuYzoyODg0OlxcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbm1tL2h1Z2V0bGIuYy0yODg1LVxcdC8qXFxubW0vaHVnZXRsYi5jLTI4ODYtXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbm1tL2h1Z2V0bGIuYzoyODg3OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcXG5tbS9odWdldGxiLmMtMjg4OC1cXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjM1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0Ny0vKipcXG5tbS9tZW1jb250cm9sLmM6NTI0ODogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUyNDktICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1OC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1OTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODo0Ny43OTEyNTkzOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5MTA5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25zLiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgbG9va3MgbGlrZSBhbm90aGVyIGltcG9ydGFudCBvbmUsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGEgZGVjZW50IGxpc3QgdG8gc3RhcnQgd2l0aDogYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHJhY2tpbmcgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gUmlnaHQgbm93LCBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLiBJIHRoaW5rIHRoZSBiZXN0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAgdG8gc2VlIGV4YWN0bHkgKndobyogaXMgY2hhcmdpbmcgYWdhaW5zdCBrZXJuZWwgbWVtb3J5IHBhZ2VzIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXBzLiBUaGF0J2xsIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBzcGVjaWZpYyB1c2UgY2FzZXMgYW5kIGxvZ2ljIGF0IHBsYXksIGFuZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB3aG9sZSBzeXN0ZW0gaXMgc3VwcG9zZWQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6NTEuMzkwMzczNzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzIxMTc0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNzIxPWJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MjI6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MjMtdm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NjI9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2NS1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY2OlxcdFxcdHJldHVybiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4MjM9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgyNi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODI3OnN0YXRpYyBpbmxpbmUgaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MjgtXFx0XFx0XFx0XFx0XFx0ICAgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxOTk9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjA0LS8qKlxcbm1tL21lbWNvbnRyb2wuYzozMjA1OiAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcXG5tbS9tZW1jb250cm9sLmMtMzIwNi0gKiBAcGFnZTogcGFnZSB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjExLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMjEyOmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbm1tL21lbWNvbnRyb2wuYy0zMjEzLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzgzPXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ1Mi1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiAoZ2ZwIFxcdTAwMjYgX19HRlBfQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjYgcGFnZSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2VfYWxsb2MuYzo1NDUzOlxcdCAgICB1bmxpa2VseShfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcikgIT0gMCkpIHtcXG5tbS9wYWdlX2FsbG9jLmMtNTQ1NC1cXHRcXHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLFxcbi0tXFxubW0vc2x1Yi5jPTI1NTM9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1NjktXFx0XFx0b3JkZXIgPSBsYXJnZV9rbWFsbG9jX29yZGVyKHBhZ2UpO1xcbm1tL3NsdWIuYzoyNTcwOlxcdFxcdGlmIChfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZmxhZ3MsIG9yZGVyKSlcXG5tbS9zbHViLmMtMjU3MS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjUzLjEyMjQ5Nzk4N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkxNTc0OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlByaW9yaXRpemluZyBPcHRpbWl6YXRpb24gT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2hlcmUgd2UncmUgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZS4gVGhlIHByb2ZpbGVyIGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhhdCdzIGludGVyZXN0aW5nLCB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgaG90LXBhdGgsIG1lYW5pbmcgd2UgbmVlZCB0byBvcHRpbWl6ZSB0aGVpciBiZWhhdmlvci5cblxuSG93ZXZlciwgSSBzdXNwZWN0IHRoYXQgd2UgbWlnaHQgZmluZCBiZXR0ZXIgb3Bwb3J0dW5pdGllcyBlbHNld2hlcmUuIEknbSB0aGlua2luZyB0aGF0IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYW5kIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBtaWdodCBiZSBtb3JlIGZydWl0ZnVsIGFyZWFzIHRvIGludmVzdGlnYXRlLiBUaGV5J3JlIHJlbGF0ZWQgdG8gc29ja2V0IG1lbW9yeSBhbmQgc3dhcHBpbmcsIHNvIHRoZXJlJ3MgcHJvYmFibHkgbW9yZSBjb21wbGV4aXR5IHRoZXJlLiBMZXQncyBzZWUgaWYgd2UgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlbS5cblxuQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aG9zZSwgSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIFN3YXBwaW5nIGJlaGF2aW9yIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiBtZW1vcnkgcHJlc3N1cmUuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIG9idmlvdXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjU2LjYxNDA3NjgyMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTM5MTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2MD1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjI6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTU5OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAtXFx0XFx0IHVuc2lnbmVkIHNob3J0IGlkLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyNTk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyODEtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyODI6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxubW0vbWVtY29udHJvbC5jLTUyODMtICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI5Mi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI5MzppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbm1tL21lbWNvbnRyb2wuYy01Mjk0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQ2MS1cXG5tbS9zd2FwX3N0YXRlLmM6NDYyOlxcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxcbm1tL3N3YXBfc3RhdGUuYy00NjMtXFx0XFx0XFx0XFx0XFx0ICAgdm1mID8gdm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tIDogTlVMTCwgZ2ZwKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODo1OC4xOTM0NzQwMjNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTI1NTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBmdW5jdGlvbiwgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBjb25zaWRlcmVkIGEgbm9uLWhvdC1wYXRoIGZ1bmN0aW9uIGlzIHVzZWZ1bCBjb250ZXh0LiBSaWdodCBub3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBjZ3JvdXBzIGR1cmluZyBzd2FwcGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIHJlbGV2YW50LiBgTUVNQ0dgIGFuZCBgQ0dST1VQU2AgYXJlIGltbWVkaWF0ZWx5IG9idmlvdXMsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHNwZWNpZmljYWxseSB0byBzd2FwLiBBaGEhIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIHNwZWNpZmljYWxseSBmb3IgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgY29uZmlncyBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjU0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjAyLjU5ODczMjg0OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzM3ODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL0tjb25maWc9MTI2Mj1jb25maWcgTUlQU19TUFJBTVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMTI2NC1cXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY1OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9taXBzL0tjb25maWctMTI2Ni1cXHRib29sXFxuLS1cXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXFxuLS1cXG5hcmNoL3NoL0tjb25maWctMTI4LVxcbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL3NoL0tjb25maWctMTMwLVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjA0LjE5MjExNzEyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjU3ODMxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgU1dBUGAgZGVmaW5pdGVseSBkaWN0YXRlcyB0aGUgc3lzdGVtJ3Mgc3dhcCBmdW5jdGlvbmFsaXR5LCB0aGF0J3MgY2xlYXIuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhhdCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBkb2Vzbid0IHNvbWVob3cgZ2V0IGNvbXBpbGVkIGluLCBldmVuIHdoZW4gYFNXQVBgIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQuIEl0IHdvdWxkIGJlIGEgYml0IG9mIGEgY29kZSBzbWVsbCBpZiB3ZSBzYXcgdGhhdCBoYXBwZW5pbmcuIEl0J3MgYSBrZXkgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBmbGFncyBhcmUgd29ya2luZyBhcyBleHBlY3RlZCBhbmQgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBibG9hdCBvciB1bmludGVuZGVkIGJlaGF2aW9yIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIHN3YXAgaXMgaW50ZW50aW9uYWxseSBhYnNlbnQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHBhdHRlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MDguNzE3OTAyNzI0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk0ODUyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTI1OT1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI4MS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTI4MjogKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cXG5tbS9tZW1jb250cm9sLmMtNTI4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjkyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjkzOmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxubW0vbWVtY29udHJvbC5jLTUyOTQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MDkuMTQ3Mzk1NDRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyNzQ3NTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFN3YXAgYW5kIE1lbW9yeSBDb250cm9sKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1tL21lbWNvbnRyb2wuY2AuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYmFzaWM6IGlzIGl0IGJlaW5nIGNvbXBpbGVkIHdpdGggYFNXQVBgIGVuYWJsZWQ/IE5vLCB3YWl0LCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0IOKAkyBpdCdzIGJlaW5nIGNvbXBpbGVkIHdpdGggYE1FTUNHYCwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudC5cblxuSG1tLCBidXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZCAqd2l0aGluKiBgbW0vbWVtY29udHJvbC5jYC4gIE5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1NXQVBgIHByZXByb2Nlc3NvciBkaXJlY3RpdmU/IFRoYXTigJlzIHRoZSBrZXkuIElmIGl0J3Mgbm90LCB0aGVuIHRoZSBzd2FwLWluIGNoYXJnaW5nIGxvZ2ljIGlzIGFsd2F5cyBwcmVzZW50LCB3aGljaCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gSWYgaXQgKmlzKiBndWFyZGVkLCB0aGVuIHRoaXMgd2hvbGUgYXJlYSBpcyBvbmx5IGFjdGl2ZSB3aGVuIHN3YXAgaXMgZW5hYmxlZCwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjE3LjQ3NDg3NDQ3OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyODA6XFx0XFxuNTI4MTpcXHQvKipcXG41MjgyOlxcdCAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxcbjUyODM6XFx0ICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuNTI4NDpcXHQgKiBAaWQ6IG1lbW9yeSBjZ3JvdXAgaWRcXG41Mjg1OlxcdCAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgdmljdGltXFxuNTI4NjpcXHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcXG41Mjg3OlxcdCAqXFxuNTI4ODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNoYXJnZXMgYSBmb2xpbyBhbGxvY2F0ZWQgZm9yIHN3YXBpbi4gUGxlYXNlIGNhbGwgdGhpcyBiZWZvcmVcXG41Mjg5OlxcdCAqIGFkZGluZyB0aGUgZm9saW8gdG8gdGhlIHN3YXBjYWNoZS5cXG41MjkwOlxcdCAqXFxuNTI5MTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gT3RoZXJ3aXNlLCBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLlxcbjUyOTI6XFx0ICovXFxuNTI5MzpcXHRpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbjUyOTQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG41Mjk1OlxcdHtcXG41Mjk2OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41Mjk3OlxcdFxcdGludCByZXQ7XFxuNTI5ODpcXHRcXG41Mjk5OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjE3LjQ3NTEyMzQwOFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc2MjYxNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQWNjb3VudGluZyBpbiBNZW1jb250cm9sKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBob3cgc3dhcCB1c2FnZSBpcyBhY2NvdW50ZWQgZm9yIGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIGNvZGUuIEkgbm90aWNlZCBzb21ldGhpbmcgYSBsaXR0bGUgb2ZmLWtpbHRlcjogdGhlIGNvcmUgc3dhcC1yZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmVuJ3QgKmRpcmVjdGx5KiBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NXQVBgLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgdW5jaGFyZ2VkIHdoZW4gYSBwcm9jZXNzJ3MgcGFnZXMgYXJlIHN3YXBwZWQgb3V0LiBUaGUgbWFpbiBmdW5jdGlvbiBJJ20gY29uY2VybmVkIHdpdGggaGVyZSBpcyBgbWVtX2Nncm91cF91bmNoYXJnZWAuIFRoYXQncyB3aGVyZSBJICpleHBlY3QqIHRvIHNlZSB0aGUgY2hlY2suXG5cbkhvd2V2ZXIsIEkgZGlkIHNlZSB0aGF0IGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgY29uZGl0aW9uYWwgb24gdGhlIHN3YXAgY29uZmlnLiBUaGF0IHN1Z2dlc3RzIHNvbWUgbW9kdWxhcml0eSwgYW5kIG1heWJlIGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBtYWtlcyBzb21lIGNhbGxzIHRvIHRoZSBzd2FwIHVuY2hhcmdpbmcgZnVuY3Rpb24gd2hlbiBhcHByb3ByaWF0ZS5cblxuVGhpcyByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIElzIHRoZSBzd2FwIGJlaGF2aW9yIGZ1bGx5IGludGVncmF0ZWQ/IFBlcmhhcHMgdGhlcmUgYXJlIG90aGVyIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBzd2FwIGlzIGVuYWJsZWQgdGhhdCBhcmUgY29uZGl0aW9uYWwuIEkgdGhpbmsgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGwgY2hhaW4gdG8gc2VlIGlmIHRoZSB1bmNoYXJnZSBmdW5jdGlvbiBpcyBzdGlsbCB1c2VkIHdoZW4gc3dhcCBpcyAqbm90KiBlbmFibGVkLiBJIHNob3VsZCBsb29rIHNwZWNpZmljYWxseSBhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG1lbV9jZ3JvdXBfdW5jaGFyZ2VgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgY29udHJvbCBmbG93IGFjdHVhbGx5IGxvb2tzIGxpa2UuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBzd2FwIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MjIuNDUxMzg5MDY4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0NjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxcbm1tL21lbWNvbnRyb2wuYy01NzkzLSAqIEBpZDogY2dyb3VwIGlkIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTc5Njp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jLTU3OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToyMi40OTkzNDE3MjdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MDU4NjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6XG5cbioqQ2hlY2tpbmcgZm9yIFByZXByb2Nlc3NvciBEaXJlY3RpdmVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMsIFwiTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgYXJvdW5kIGl0LlwiIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSdtIGxvb2tpbmcgZm9yIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2suIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGxpa2VseSBvbmx5IGluY2x1ZGVkIGlmIHRoZSBgQ09ORklHX1NXQVBgIG1hY3JvIGlzIGRlZmluZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIGNvbmRpdGlvbmFsIGV4aXN0cy4gSXMgc3dhcCBmdW5jdGlvbmFsaXR5IG9wdGlvbmFsPyBJcyBpdCBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBgI2lmZGVmYCBpcyBjcnVjaWFsIHRvIGNvcnJlY3RseSBpbnRlcnByZXQgdGhlIGNvZGUncyBiZWhhdmlvci4gSSB3aWxsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19TV0FQYCB0byB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nIGFuZCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjI2LjQ0OTkzMTM5NloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3NDA6XFx0ICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXFxuNTc0MTpcXHQgKlxcbjU3NDI6XFx0ICogVHJ5IHRvIGNoYXJnZSBAZm9saW8ncyBtZW1jZyBmb3IgdGhlIHN3YXAgc3BhY2UgYXQgZm9saW8tXFx1MDAzZXN3YXAuXFxuNTc0MzpcXHQgKlxcbjU3NDQ6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cXG41NzQ1OlxcdCAqL1xcbjU3NDY6XFx0aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG41NzQ3OlxcdHtcXG41NzQ4OlxcdFxcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG41NzQ5OlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuNTc1MDpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjU3NTE6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjU3NTI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbjU3NTM6XFx0XFxuNTc1NDpcXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbjU3NTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbjU3NTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbjU3NTk6XFx0XFx0aWYgKCFvYmpjZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MjYuNDUwMTYzODg2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQyOTEyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBNZW1vcnkgQ29udHJvbCB3aXRoIENPTkZJR19TV0FQKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN3YXAgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGNvbnRyb2wgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgYSB0YXJnZXRlZCBzZWFyY2guIEknbSB0aGlua2luZywgYSBsaWtlbHkgcGxhY2UgdG8gZmluZCByZWxldmFudCBjb2RlIHdvdWxkIGJlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgbWVtb3J5IGNvbnRyb2wgbG9naWMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBBbmQgc2luY2UgSSdtIGludGVyZXN0ZWQgaW4gaG93IHN3YXAgZmlndXJlcyBpbnRvIGFsbCBvZiB0aGlzLCBsZXQncyBsb29rIGZvciBgI2lmZGVmIENPTkZJR19TV0FQYCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgd2lsbCBsaWtlbHkgY29uZGl0aW9uIGNvZGUgYmFzZWQgb24gd2hldGhlciBzd2FwIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoYXQgc2hvdWxkIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBzZWN0aW9ucyBJIG5lZWQgdG8gZXhhbWluZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaGFuZGxlcyBzd2FwLXJlbGF0ZWQgb3BlcmF0aW9ucyBhbmQgYWNjb3VudGluZy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjI5LjUwNDQ1ODcyNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3MTg1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zNzg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MDYtXFx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRSxcXG5tbS9tZW1jb250cm9sLmM6NDA3OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MDgtXFx0TlJfU1dBUENBQ0hFLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTAtXFx0UEdMQVpZRlJFRUQsXFxubW0vbWVtY29udHJvbC5jOjYxMTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNjEyLVxcdFNXUElOX1pFUk8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTU5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTE2MDktXFx0eyBcXFwiZmlsZV93cml0ZWJhY2tcXFwiLFxcdFxcdE5SX1dSSVRFQkFDS1xcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MTA6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTE2MTEtXFx0eyBcXFwic3dhcGNhY2hlZFxcXCIsXFx0XFx0XFx0TlJfU1dBUENBQ0hFXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzAxPWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczNi1cXG5tbS9tZW1jb250cm9sLmM6NTczNzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNTczOC0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MjAwPXN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XFxubW0vbWVtY29udHJvbC5jLTYyMDEtXFxubW0vbWVtY29udHJvbC5jOjYyMDI6I2VuZGlmIC8qIENPTkZJR19TV0FQICovXFxubW0vbWVtY29udHJvbC5jLTYyMDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjI5LjU1OTE4Mjg3M1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTAzMzgwMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBmdW5jdGlvbi4gVGhlIGNvZGUgY2xlYXJseSBzaG93cyBpdCdzIGNvbmRpdGlvbmFsIG9uIGAjaWZkZWYgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZSwgb2YgY291cnNlLCB0aGF0IGZ1bmN0aW9uIGlzIGFib3V0IHVuY2hhcmdpbmcgc3dhcCBzcGFjZSBmcm9tIG1lbW9yeSBjZ3JvdXBzLCBzbyBpdCBzaG91bGQgYmUgZW5hYmxlZCB3aGVuIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZC4gUmlnaHQsIHNvIHdlIG5lZWQgYFNXQVBgIGNvbmZpZyBzZXQuXG5cbk5vdywgYSBiaXQgb2YgYW4gYW5vbWFseS4gSSdtIHNlZWluZyB0aGF0IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIHRoZSBzYW1lIGBTV0FQYCBndWFyZC4gVGhhdCdzIHVuZXhwZWN0ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGxpbmUgbnVtYmVycyB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGRlZmluZWQgYXQgbGluZSA1MjkzLiBBbmQgdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgYXQgNTczNy4gVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb246IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGNvbXBpbGVkIGV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSBzd2FwIGVuYWJsZWQuIFRoYXQnc+KApiBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGEgYnVnIG9yIGF0IGxlYXN0IGFuIHVubmVjZXNzYXJ5IGNvbXBsaWNhdGlvbi5cblxuVG8gYmUgY2VydGFpbiwgSSByZWFsbHkgbmVlZCB0byBjaGVjayB0aGUgZGVjbGFyYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIExldCdzIHRha2UgYSBsb29rIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNvbXBpbGVkIGluIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfU1dBUGAuIFRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBtZW1vcnkgYWNjb3VudGluZyB3b3JrcyBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MzQuNjYyNTY1NjYxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwMTQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjYwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MjppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTQ9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MC1cXHRcXHQgdW5zaWduZWQgc2hvcnQgaWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjM0LjcxMTE3MDY3OVoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk0NDkyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IENncm91cCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdGhhdCB0aGUgdGhpbmcgaXMgZGVjbGFyZWQgdW5jb25kaXRpb25hbGx5LCB3aGljaCBpcyBhcyBleHBlY3RlZC4gSG93ZXZlciwgSSdtIG5vdGluZyB0aGF0IGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0IGZpbGUgaGFzIGEgY29uZGl0aW9uYWwgZGVjbGFyYXRpb24gYmFzZWQgb24gYENPTkZJR19TV0FQYC4gSW50ZXJlc3RpbmcuIEkgaGF2ZSB0byBtYWtlIGEgbm90ZSBvZiB0aGlzLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gSSdtIHByZXR0eSBzdXJlIGl0J3MgcmVsYXRlZCB0byBgSFVHRVRMQl9QQUdFYCwgYnV0IEknbSBiZWluZyB0aG9yb3VnaC4gVGltZSB0byBqdW1wIG92ZXIgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBpbiBtaW5kIGFuZCBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTozOC4wMDU2Njc2MThaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjk3MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MjM1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0Ny0vKipcXG5tbS9tZW1jb250cm9sLmM6NTI0ODogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUyNDktICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1OC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1OTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTozOC4wNTE5Njk1NjZaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NTYzODg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIE1lbW9yeSBDb250cm9sIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBjb250cm9sIGlzIGNvbXBpbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb2RlIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTUVNQ0dgLCBgQ0dST1VQU2AsIGFuZCB0aGVuIGBTV0FQYCBmb3IgdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgZnVuY3Rpb24uIE5vIG90aGVyIGZsYWdzIGp1bXAgb3V0IGF0IG1lIGFzIGRpcmVjdGx5IGluZmx1ZW5jaW5nIHRoaXMgc2VjdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIGZvciBsYXRlciB3aGVuIEknbSBjaGVja2luZyBkZXBlbmRlbmNpZXMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB3aGF0J3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoLiBGcm9tIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb25zIHRoYXQganVtcCBvdXQgYXMgdml0YWwgYXJlOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgaW5kZWVkIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgYmFzaWMuIEknbGwgZ28gYmFjayBhbmQgZG91YmxlIGNoZWNrIHRoYXQuIEl0J3MgZWFzeSB0byBvdmVybG9vayBhIHN1YnRsZSBjb25kaXRpb25hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NDMuMTQ3NjExNDIyWiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcwMjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU2MTA9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyNi0vKipcXG5tbS9tZW1jb250cm9sLmM6NTYyNzogKiBtZW1fY2dyb3VwX3NrX2NoYXJnZSAtIGNoYXJnZSBzb2NrZXQgbWVtb3J5XFxubW0vbWVtY29udHJvbC5jLTU2MjgtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYzNC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTYzNTpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy01NjM2LVxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjQzLjE5MzMxODkyWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTU0Njk5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgRnV6emluZyBDYW5kaWRhdGVzKipcblxuT2theSwgc28gSSdtIGNvbmZpcm1pbmcgbXkgc3VzcGljaW9uOyBpdCBsb29rcyBsaWtlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgKmlzKiBhY3R1YWxseSBiZWluZyBjYWxsZWQuIEdvb2QuIExldCdzIHNlZS4uLiB5ZXAsIGl0J3MgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGFuZCAqdGhhdCogb25lIGlzIGNhbGxlZCBmcm9tIGJvdGggYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYW5kIGBtZW1jZzFfc3dhcGluYC4gVGhhdCdzIGEgc29saWQsIHJlYWNoYWJsZSBwYXRoLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBZZXMsIHJlYWNoYWJsZS4gSSdtIHNlZWluZyBwYXRocyB0aHJvdWdoIGBzb2NrX3Jlc2VydmVfbWVtb3J5YCwgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAsIGFuZCBgX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZGAuIFRob3NlIGFyZSBhbGwgc29ja2V0IG9wZXJhdGlvbnMsIHdoaWNoIGdpdmVzIHVzIGdvb2QgY292ZXJhZ2UuXG5cbk5leHQgdXAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gWWVwLCByZWFjaGFibGUgdGhyb3VnaCBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIFRoYXQncyBnb29kLCB0aGF0IGhpdHMgdGhlIGh1Z2UgcGFnZXMgcGF0aC5cblxuRmluYWxseSwgbGV0J3MgdmVyaWZ5IHJlYWNoYWJpbGl0eSBvZiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gWWVzLCByZWFjaGFibGUgZnJvbSBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS5cblxuU28sIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCByZWFjaGFibGUuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCB3aGljaCBpcyBncmVhdC5cblxuT2theSwgbm93IGxldCdzIG1ha2Ugc3VyZSBvdXIgY29uZmlncyBhcmUgc2V0IHByb3Blcmx5LiBJIG5lZWQgdG8gcmV2aWV3OiBgTUVNQ0dgLCBgQ0dST1VQU2AsIGBTV0FQYCwgYW5kLCBjcml0aWNhbGx5LCBgSFVHRVRMQl9QQUdFYCBzaW5jZSB3ZSdyZSBmdXp6aW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gTGV0J3MganVzdCBtYWtlIHN1cmUgYEhVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgYSBjb25maWd1cmFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY2NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo0OC44ODg4MDI1NTZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDE5NzQ5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTEyOT1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjEzNTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNi1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzOC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTM5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0MC1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDItXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Mzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0NS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTQ2OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ3LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDktXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE1MDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNTEtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4tLVxcbm1tL0tjb25maWctNjk2LVxcbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNjk4LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NTAuNDkwNzgyNDM3WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzgyMjUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc3BlY2lhbGlzdCBpbiB0aGUgZmllbGQ6XG5cbioqUmVnYXJkaW5nIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBIVUdFVExCX1BBR0VgIGhlcmUuIFRoYXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHRlbGwgZnJvbSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgaXQgZGVmYXVsdHMgdG8gdGhlIGBIVUdFVExCRlNgIHNldHRpbmcuIFNvLCBsb29raW5nIGF0IHRoZSBkZWZhdWx0cywgdGhlIHdheSB0byBnbyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB3ZSBlbmFibGUgYEhVR0VUTEJGU2Agc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcG9pbnRzLiBUaGF0J3MgdGhlIGtleSB0aGluZyB0byBmb2N1cyBvbiBmb3Igb3VyIGN1cnJlbnQgc2V0dXAgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo1NS42MjkwMTExMTRaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjY5MDY3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NTcuMjk1OTIzOTczWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NTIzMjU4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyBteSBpbml0aWFsIGFzc2Vzc21lbnQg4oCTIHllcywgYEhVR0VUTEJGU2AgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYE1FTUNHYCwgYENHUk9VUFNgLCBgU1dBUGAsIGFuZCBgSFVHRVRMQkZTYC4gSnVzdCBxdWlja2x5IGRvdWJsZS1jaGVja2VkLCBhbmQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWdzIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIHRoZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCdzIGFsdGVyaW5nIHRoZSB3YXRlcm1hcmtzLCBgTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgYE1FTUNHX1NUT0NLX0hJR0hgLCB3aXRoaW4gdGhlIGBtZW1jZ19zdG9ja19wY3BgIHN0cnVjdHVyZS4gVGhlIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gYHJlZmlsbF9zdG9ja2AuIEluc3RlYWQgb2YgY29tcGxldGVseSBkcmFpbmluZyB0aGUgY2hhcmdlIHN0b2NrIHdoZW4gaXQncyBvdmVyIGBNRU1DR19DSEFSR0VfQkFUQ0hgLCB0aGUgcGF0Y2ggaXMgbm93IHVuY2hhcmdpbmcgb25seSB0aGUgZXhjZXNzLCBsZWF2aW5nIGEgcmVzZXJ2ZSBvZiBgTUVNQ0dfU1RPQ0tfTE9XYCBwYWdlcy4gVGhpcyBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbiB0aGF0IHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hlZCB2aWEgdmFyaW91cyBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBjcnVjaWFsbHksIGh1Z2V0bGIgcGFnZXMuXG5cbkkndmUgZ290IHRoZSBrZXkgc3ltYm9scyBpbiBteSBzaWdodHMgdG9vOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhvc2Ugc3ltYm9sIG5hbWVzIG9uZSBtb3JlIHRpbWUuIFllcCwgdGhleSdyZSBjb3JyZWN0LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IHRob3NlIGFyZSB0aGUgcmlnaHQgc3ltYm9scy4gVGhleSBjYXB0dXJlIHRoZSBkaWZmZXJlbnQgdW5jaGFyZ2UgcGF0aHMgdGhhdCBldmVudHVhbGx5IGhpdCBgcmVmaWxsX3N0b2NrYCBvciBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGJ1dCB3aXRob3V0IGJlaW5nIG92ZXJseSBnZW5lcmljLCBhbmQgbm90IGZvY3VzaW5nIG9uIHRoZSAqaG90dGVzdCogcGF0aHMgbGlrZSBnZW5lcmljIHBhZ2UgYWxsb2NhdGlvbi9mcmVlaW5nLiBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgcmlnaHQgdGhpbmdzIHRvIGZvY3VzIG9uLlxuXG5Pa2F5LCBJJ20gaGFwcHkgd2l0aCB0aGlzIGFuYWx5c2lzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjEzLCJPdXRwdXRUb2tlbnMiOjI3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDowNi4yNDgyNjA0OTNaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg1MTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX3VuY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDowNi4zMjQxMjAxM1oiLCJTZXEiOjc1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4MDczNjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjMwOjA2LjMyNDY2ODQwMVoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjgwMTg0OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrIHJlZmlsbCBsb2dpYyBieSBpbnRyb2R1Y2luZyBuZXcgaGlnaCBhbmQgbG93IHdhdGVybWFya3MgKGBNRU1DR19TVE9DS19ISUdIYCBhbmQgYE1FTUNHX1NUT0NLX0xPV2ApIGZvciBjaGFyZ2Ugc3RvY2sgc2xvdHMsIGFuZCBjaGFuZ2luZyB0aGUgdHlwZSBvZiBgc3RvY2tfcGFnZXNgIHRvIGB1bnNpZ25lZCBpbnRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgY2FjaGluZyBvZiBtZW1vcnkgY2hhcmdlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkbyBub3QgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljYWwgZXJyb3JzIGluIG1lbW9yeSBhY2NvdW50aW5nIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgd2FybmluZ3MpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTdkYTFmNDNiN2QzYi4uZmY3ZmJjZDI3NDIyZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjA0OCw2ICsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqIG5yX3BhZ2VzIGluIGEgc2luZ2xlIGNhY2hlbGluZS4gVGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZS5cbiAgKi9cbiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDdcbitcbisvKlxuKyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLVx1MDAzZWhpZ2ggYW5kXG4rICogcGNwLVx1MDAzZWJhdGNoOiBNRU1DR19TVE9DS19ISUdIIGlzIHRoZSBoaWdoIHdhdGVybWFyayBhdCB3aGljaCBhIHNsb3QgaXNcbisgKiB0cmltbWVkLCBhbmQgaXQgaXMgdHJpbW1lZCBkb3duIHRvIE1FTUNHX1NUT0NLX0xPVyByYXRoZXIgdGhhbiBlbXB0aWVkLlxuKyAqXG4rICogVXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGFzIGJvdGggaGlnaCB3YXRlcm1hcmsgYW5kIGVtcHR5aW5nIHRhcmdldFxuKyAqIHRocmFzaGVzOiBjaGFyZ2luZyBvbmUgcGFnZSBzdG9ja3MgNjMsIGFuIHVuY2hhcmdlIG9mIDIgdGFrZXMgdGhlIGNvdW50XG4rICogdG8gNjUgYW5kIGVtcHRpZXMgdGhlIHNsb3QsIGFuZCB0aGUgbmV4dCBjaGFyZ2UgbWlzc2VzLiBUaGUgd2F0ZXJtYXJrc1xuKyAqIGFyZSBNRU1DR19DSEFSR0VfQkFUQ0ggYXBhcnQsIHNvIGEgcGFnZV9jb3VudGVyIHVwZGF0ZSBzdGlsbCBjb3ZlcnMgYVxuKyAqIGZ1bGwgYmF0Y2guXG4rICovXG4rI2RlZmluZSBNRU1DR19TVE9DS19MT1dcdFx0KE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpXG4rI2RlZmluZSBNRU1DR19TVE9DS19ISUdIXHQoTUVNQ0dfU1RPQ0tfTE9XICsgTUVNQ0dfQ0hBUkdFX0JBVENIKVxuK1xuICNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRVx0MFxuIHN0cnVjdCBtZW1jZ19zdG9ja19wY3Age1xuIFx0bG9jYWxfdHJ5bG9ja190IGxvY2s7XG5AQCAtMjIyMywxNyArMjIzOCwxOCBAQCBzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2s7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqY2FjaGVkO1xuLVx0dWludDhfdCBzdG9ja19wYWdlcztcbitcdHVuc2lnbmVkIGludCBzdG9ja19wYWdlcztcbiBcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuIFx0aW50IGVtcHR5X3Nsb3QgPSAtMTtcbiBcdGludCBpO1xuIFxuIFx0Lypcbi1cdCAqIEZvciBub3cgbGltaXQgTUVNQ0dfQ0hBUkdFX0JBVENIIHRvIDEyNyBhbmQgbGVzcy4gSW4gZnV0dXJlIGlmIHdlXG4tXHQgKiBkZWNpZGUgdG8gaW5jcmVhc2UgaXQgbW9yZSB0aGFuIDEyNyB0aGVuIHdlIHdpbGwgbmVlZCBtb3JlIGNhcmVmdWxcbi1cdCAqIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC5cbitcdCAqIG5yX3BhZ2VzW10gaXMgYSB1aW50OF90IGFuZCBhIHNsb3QncyBjb3VudCBpcyBjYXBwZWQgYXRcbitcdCAqIE1FTUNHX1NUT0NLX0hJR0guIFJhaXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGJleW9uZCAxMjcgd291bGQgbmVlZFxuK1x0ICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC5cbiBcdCAqL1xuIFx0QlVJTERfQlVHX09OKE1FTUNHX0NIQVJHRV9CQVRDSCBcdTAwM2UgUzhfTUFYKTtcbitcdEJVSUxEX0JVR19PTihNRU1DR19TVE9DS19ISUdIIFx1MDAzZSBVOF9NQVgpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpO1xuIFxuQEAgLTIyNTQsOSArMjI3MCwxMiBAQCBzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRcdFx0ZW1wdHlfc2xvdCA9IGk7XG4gXHRcdGlmIChtZW1jZyA9PSBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlY2FjaGVkW2ldKSkge1xuIFx0XHRcdHN0b2NrX3BhZ2VzID0gUkVBRF9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldKSArIG5yX3BhZ2VzO1xuK1x0XHRcdGlmIChzdG9ja19wYWdlcyBcdTAwM2UgTUVNQ0dfU1RPQ0tfSElHSCkge1xuK1x0XHRcdFx0bWVtY2dfdW5jaGFyZ2UobWVtY2csXG4rXHRcdFx0XHRcdCAgICAgICBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPVyk7XG4rXHRcdFx0XHRzdG9ja19wYWdlcyA9IE1FTUNHX1NUT0NLX0xPVztcbitcdFx0XHR9XG4gXHRcdFx0V1JJVEVfT05DRShzdG9jay1cdTAwM2Vucl9wYWdlc1tpXSwgc3RvY2tfcGFnZXMpO1xuLVx0XHRcdGlmIChzdG9ja19wYWdlcyBcdTAwM2UgTUVNQ0dfQ0hBUkdFX0JBVENIKVxuLVx0XHRcdFx0ZHJhaW5fc3RvY2soc3RvY2ssIGkpO1xuIFx0XHRcdHN1Y2Nlc3MgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDowNi4zMjQ2NzAyNDFaIiwiU2VxIjo3NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI4MDE1OTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIFN0b2NrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbWVtY2cgc3RvY2sgbWVjaGFuaXNtIGFuZCBjaGFyZ2UvdW5jaGFyZ2Ugd2F0ZXJtYXJrcy4gSXQgbG9va3MgbGlrZSBpdCdzIHJlZmluaW5nIHRoZSBzdG9jayBtYW5hZ2VtZW50IHVzaW5nIGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGAgdmFsdWVzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIGxvZ2ljIGNoYW5nZS4gYHJlZmlsbF9zdG9ja2AgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlc2UgbmV3IHdhdGVybWFya3MsIGFuZCB0aGUgdHlwZSBvZiBgc3RvY2tfcGFnZXNgIGlzIGdldHRpbmcgYnVtcGVkIHVwIHRvIGFuIGB1bnNpZ25lZCBpbnRgLiBUaGUgYWRkZWQgYEJVSUxEX0JVR19PTmAgZW5zdXJlcyBgTUVNQ0dfU1RPQ0tfSElHSGAgZG9lc24ndCBleGNlZWQgYSBieXRlLCB3aGljaCBpcyBnb29kIHNhbml0eSBjaGVja2luZy5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgbmV3IGxvZ2ljIGluIGByZWZpbGxfc3RvY2tgIHdoZW4gYHN0b2NrX3BhZ2VzYCBleGNlZWRzIGBNRU1DR19TVE9DS19ISUdIYC4gSW5zdGVhZCBvZiBkcmFpbmluZyBldmVyeXRoaW5nIGxpa2UgYmVmb3JlLCBpdCB1bmNoYXJnZXMgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgcmVzZXRzIGBzdG9ja19wYWdlc2AgdG8gYE1FTUNHX1NUT0NLX0xPV2AuIFRoaXMgc2VlbXMgZGVzaWduZWQgdG8gc21vb3RoIG91dCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb3BlcmF0aW9ucywgcHJldmVudGluZyBodWdlIHNwaWtlcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXJlYSwgdGhpcyBpcyBtb3N0bHkgbWVtb3J5IGFjY291bnRpbmcsIGl0IGlzbid0IGRpcmVjdGx5IGludm9sdmluZyBhbnkgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgc28gS01TQU4gc2hvdWxkIGJlIHVubmVjZXNzYXJ5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGFyZSBsaWtlbHkgdG8gYmUgbG9naWNhbCBlcnJvcnMgaW4gdGhlIGFjY291bnRpbmcgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGlmIG9iamVjdCBsaWZldGltZXMgZ2V0IHRhbmdsZWQsIGJ1dCBub3QgYmVjYXVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LCBidXQgbGV0J3MgZG91YmxlLWNoZWNrLlxuXG5Pa2F5LCBsZXQncyBzdGVwIHRocm91Z2ggdGhlIGtleSB2YXJpYWJsZSwgYHN0b2NrX3BhZ2VzYCwgbWFraW5nIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSXQgYXBwZWFycyB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgYHJlZmlsbF9zdG9ja2AgZnVuY3Rpb246IGl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBpbml0aWFsaXplZCB1c2luZyB0aGUgY3VycmVudCBjb3VudCBwbHVzIGBucl9wYWdlc2AuIEkgc2VlIHRoYXQuIEl0IGlzIGJlaW5nIGluaXRpYWxpemVkIGNvcnJlY3RseSB0byBhbiBhcmd1bWVudCBvZiB0aGF0IGZ1bmN0aW9uLiBObyBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgc2VudCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IHJlaW5mb3JjZXMgbXkgb3JpZ2luYWwgdGhvdWdodHMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHdpdGhvdXQgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgcmlzayBpcyBsaW1pdGVkIHRvIGxvZ2ljYWwgZXJyb3JzIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDoxNC42MDQ4MzI4NDJaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RvY2sgcmVmaWxsIGxvZ2ljIGJ5IGludHJvZHVjaW5nIG5ldyBoaWdoIGFuZCBsb3cgd2F0ZXJtYXJrcyAoYE1FTUNHX1NUT0NLX0hJR0hgIGFuZCBgTUVNQ0dfU1RPQ0tfTE9XYCkgZm9yIGNoYXJnZSBzdG9jayBzbG90cywgYW5kIGNoYW5naW5nIHRoZSB0eXBlIG9mIGBzdG9ja19wYWdlc2AgdG8gYHVuc2lnbmVkIGludGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHRoZSBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBjYWNoaW5nIG9mIG1lbW9yeSBjaGFyZ2VzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWNhbCBlcnJvcnMgaW4gbWVtb3J5IGFjY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3VlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB3YXJuaW5ncyksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 23:58:41 +0000 UTC FinishedAt: 2026-08-18 00:30:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS", "SWAP", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS", "SWAP", "HUGETLBFS" ], "series_id": "5d78b56c-d47f-44b4-b359-4f9843fd1190" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_sk_charge", "mem_cgroup_sk_uncharge", "__mem_cgroup_uncharge_swap", "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDE3ZGExZjQzYjdkM2IuLmZmN2ZiY2QyNzQyMmQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIwNDgsNiAmIzQzOzIwNDgsMjEgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLlxuICAqL1xuICNkZWZpbmUgTlJfTUVNQ0dfU1RPQ0sgN1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCwgaW4gdGhlIHNwaXJpdCBvZiBwY3AtXHUwMDNlaGlnaCBhbmRcbiYjNDM7ICogcGNwLVx1MDAzZWJhdGNoOiBNRU1DR19TVE9DS19ISUdIIGlzIHRoZSBoaWdoIHdhdGVybWFyayBhdCB3aGljaCBhIHNsb3QgaXNcbiYjNDM7ICogdHJpbW1lZCwgYW5kIGl0IGlzIHRyaW1tZWQgZG93biB0byBNRU1DR19TVE9DS19MT1cgcmF0aGVyIHRoYW4gZW1wdGllZC5cbiYjNDM7ICpcbiYjNDM7ICogVXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGFzIGJvdGggaGlnaCB3YXRlcm1hcmsgYW5kIGVtcHR5aW5nIHRhcmdldFxuJiM0MzsgKiB0aHJhc2hlczogY2hhcmdpbmcgb25lIHBhZ2Ugc3RvY2tzIDYzLCBhbiB1bmNoYXJnZSBvZiAyIHRha2VzIHRoZSBjb3VudFxuJiM0MzsgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzXG4mIzQzOyAqIGFyZSBNRU1DR19DSEFSR0VfQkFUQ0ggYXBhcnQsIHNvIGEgcGFnZV9jb3VudGVyIHVwZGF0ZSBzdGlsbCBjb3ZlcnMgYVxuJiM0MzsgKiBmdWxsIGJhdGNoLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNRU1DR19TVE9DS19MT1dcdFx0KE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpXG4mIzQzOyNkZWZpbmUgTUVNQ0dfU1RPQ0tfSElHSFx0KE1FTUNHX1NUT0NLX0xPVyAmIzQzOyBNRU1DR19DSEFSR0VfQkFUQ0gpXG4mIzQzO1xuICNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRVx0MFxuIHN0cnVjdCBtZW1jZ19zdG9ja19wY3Age1xuIFx0bG9jYWxfdHJ5bG9ja190IGxvY2s7XG5AQCAtMjIyMywxNyAmIzQzOzIyMzgsMTggQEAgc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKmNhY2hlZDtcbi1cdHVpbnQ4X3Qgc3RvY2tfcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzO1xuIFx0Ym9vbCBzdWNjZXNzID0gZmFsc2U7XG4gXHRpbnQgZW1wdHlfc2xvdCA9IC0xO1xuIFx0aW50IGk7XG4gXG4gXHQvKlxuLVx0ICogRm9yIG5vdyBsaW1pdCBNRU1DR19DSEFSR0VfQkFUQ0ggdG8gMTI3IGFuZCBsZXNzLiBJbiBmdXR1cmUgaWYgd2Vcbi1cdCAqIGRlY2lkZSB0byBpbmNyZWFzZSBpdCBtb3JlIHRoYW4gMTI3IHRoZW4gd2Ugd2lsbCBuZWVkIG1vcmUgY2FyZWZ1bFxuLVx0ICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxuJiM0MztcdCAqIG5yX3BhZ2VzW10gaXMgYSB1aW50OF90IGFuZCBhIHNsb3QmIzM5O3MgY291bnQgaXMgY2FwcGVkIGF0XG4mIzQzO1x0ICogTUVNQ0dfU1RPQ0tfSElHSC4gUmFpc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYmV5b25kIDEyNyB3b3VsZCBuZWVkXG4mIzQzO1x0ICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC5cbiBcdCAqL1xuIFx0QlVJTERfQlVHX09OKE1FTUNHX0NIQVJHRV9CQVRDSCBcdTAwM2UgUzhfTUFYKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTUVNQ0dfU1RPQ0tfSElHSCBcdTAwM2UgVThfTUFYKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcbiBcbkBAIC0yMjU0LDkgJiM0MzsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcdFx0XHRlbXB0eV9zbG90ID0gaTtcbiBcdFx0aWYgKG1lbWNnID09IFJFQURfT05DRShzdG9jay1cdTAwM2VjYWNoZWRbaV0pKSB7XG4gXHRcdFx0c3RvY2tfcGFnZXMgPSBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pICYjNDM7IG5yX3BhZ2VzO1xuJiM0MztcdFx0XHRpZiAoc3RvY2tfcGFnZXMgXHUwMDNlIE1FTUNHX1NUT0NLX0hJR0gpIHtcbiYjNDM7XHRcdFx0XHRtZW1jZ191bmNoYXJnZShtZW1jZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPVyk7XG4mIzQzO1x0XHRcdFx0c3RvY2tfcGFnZXMgPSBNRU1DR19TVE9DS19MT1c7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRXUklURV9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldLCBzdG9ja19wYWdlcyk7XG4tXHRcdFx0aWYgKHN0b2NrX3BhZ2VzIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0gpXG4tXHRcdFx0XHRkcmFpbl9zdG9jayhzdG9jaywgaSk7XG4gXHRcdFx0c3VjY2VzcyA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxN2RhMWY0M2I3ZDNiLi5mZjdmYmNkMjc0MjJkIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yMDQ4LDYgJiM0MzsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLgogICovCiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDcKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLSZndDtoaWdoIGFuZAomIzQzOyAqIHBjcC0mZ3Q7YmF0Y2g6IE1FTUNHX1NUT0NLX0hJR0ggaXMgdGhlIGhpZ2ggd2F0ZXJtYXJrIGF0IHdoaWNoIGEgc2xvdCBpcwomIzQzOyAqIHRyaW1tZWQsIGFuZCBpdCBpcyB0cmltbWVkIGRvd24gdG8gTUVNQ0dfU1RPQ0tfTE9XIHJhdGhlciB0aGFuIGVtcHRpZWQuCiYjNDM7ICoKJiM0MzsgKiBVc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYXMgYm90aCBoaWdoIHdhdGVybWFyayBhbmQgZW1wdHlpbmcgdGFyZ2V0CiYjNDM7ICogdGhyYXNoZXM6IGNoYXJnaW5nIG9uZSBwYWdlIHN0b2NrcyA2MywgYW4gdW5jaGFyZ2Ugb2YgMiB0YWtlcyB0aGUgY291bnQKJiM0MzsgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzCiYjNDM7ICogYXJlIE1FTUNHX0NIQVJHRV9CQVRDSCBhcGFydCwgc28gYSBwYWdlX2NvdW50ZXIgdXBkYXRlIHN0aWxsIGNvdmVycyBhCiYjNDM7ICogZnVsbCBiYXRjaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1FTUNHX1NUT0NLX0xPVwkJKE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpCiYjNDM7I2RlZmluZSBNRU1DR19TVE9DS19ISUdICShNRU1DR19TVE9DS19MT1cgJiM0MzsgTUVNQ0dfQ0hBUkdFX0JBVENIKQomIzQzOwogI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFCTAKIHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgewogCWxvY2FsX3RyeWxvY2tfdCBsb2NrOwpAQCAtMjIyMywxNyAmIzQzOzIyMzgsMTggQEAgc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrOwogCXN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7Ci0JdWludDhfdCBzdG9ja19wYWdlczsKJiM0MzsJdW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzOwogCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwogCWludCBlbXB0eV9zbG90ID0gLTE7CiAJaW50IGk7CiAKIAkvKgotCSAqIEZvciBub3cgbGltaXQgTUVNQ0dfQ0hBUkdFX0JBVENIIHRvIDEyNyBhbmQgbGVzcy4gSW4gZnV0dXJlIGlmIHdlCi0JICogZGVjaWRlIHRvIGluY3JlYXNlIGl0IG1vcmUgdGhhbiAxMjcgdGhlbiB3ZSB3aWxsIG5lZWQgbW9yZSBjYXJlZnVsCi0JICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLgomIzQzOwkgKiBucl9wYWdlc1tdIGlzIGEgdWludDhfdCBhbmQgYSBzbG90JiMzOTtzIGNvdW50IGlzIGNhcHBlZCBhdAomIzQzOwkgKiBNRU1DR19TVE9DS19ISUdILiBSYWlzaW5nIE1FTUNHX0NIQVJHRV9CQVRDSCBiZXlvbmQgMTI3IHdvdWxkIG5lZWQKJiM0MzsJICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC4KIAkgKi8KIAlCVUlMRF9CVUdfT04oTUVNQ0dfQ0hBUkdFX0JBVENIICZndDsgUzhfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKE1FTUNHX1NUT0NLX0hJR0ggJmd0OyBVOF9NQVgpOwogCiAJVk1fV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpOwogCkBAIC0yMjU0LDkgJiM0MzsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAkJCWVtcHR5X3Nsb3QgPSBpOwogCQlpZiAobWVtY2cgPT0gUkVBRF9PTkNFKHN0b2NrLSZndDtjYWNoZWRbaV0pKSB7CiAJCQlzdG9ja19wYWdlcyA9IFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICYjNDM7IG5yX3BhZ2VzOwomIzQzOwkJCWlmIChzdG9ja19wYWdlcyAmZ3Q7IE1FTUNHX1NUT0NLX0hJR0gpIHsKJiM0MzsJCQkJbWVtY2dfdW5jaGFyZ2UobWVtY2csCiYjNDM7CQkJCQkgICAgICAgc3RvY2tfcGFnZXMgLSBNRU1DR19TVE9DS19MT1cpOwomIzQzOwkJCQlzdG9ja19wYWdlcyA9IE1FTUNHX1NUT0NLX0xPVzsKJiM0MzsJCQl9CiAJCQlXUklURV9PTkNFKHN0b2NrLSZndDtucl9wYWdlc1tpXSwgc3RvY2tfcGFnZXMpOwotCQkJaWYgKHN0b2NrX3BhZ2VzICZndDsgTUVNQ0dfQ0hBUkdFX0JBVENIKQotCQkJCWRyYWluX3N0b2NrKHN0b2NrLCBpKTsKIAkJCXN1Y2Nlc3MgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDZ3JvdXAgQ2hhcmdpbmcgTG9naWMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSB3YXRlcm1hcmtzIGluIHRoZSBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCDigJMgdGhhdCYjMzk7cyBhIGtleSBjaGFuZ2UgcmlnaHQgdGhlcmUuCgpUaGUgY3J1Y2lhbCBiaXQgaXMgaW4gYHJlZmlsbF9zdG9ja2AuIEl0IGxvb2tzIGxpa2UgdGhlIG9sZCBsb2dpYyBqdXN0IGRyYWluZWQgdGhlIHN0b2NrIGNvbXBsZXRlbHkgaWYgaXQgd2VudCBvdmVyIGBNRU1DR19DSEFSR0VfQkFUQ0hgLiBOb3csIGl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQuIElmIGBzdG9ja19wYWdlc2AgZXhjZWVkcyBgTUVNQ0dfU1RPQ0tfSElHSGAsIHRoZSBjb2RlIHVuY2hhcmdlcyB0aGUgKmV4Y2VzcyogcGFnZXMg4oCTIHNwZWNpZmljYWxseSwgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCDigJMgYW5kIHRoZW4gc2V0cyBgc3RvY2tfcGFnZXNgIHRvIGBNRU1DR19TVE9DS19MT1dgLgoKRXNzZW50aWFsbHksIGluc3RlYWQgb2YgYSBjb21wbGV0ZSBkcmFpbiwgaXQmIzM5O3MgYWltaW5nIHRvIG1haW50YWluIGEgbWluaW11bSBsZXZlbCwgYSBzb3J0IG9mIGJ1ZmZlci4gVGhpcyBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgaGFwcGVucyBkdXJpbmcgcGFnZSB1bmNoYXJnaW5nLCB3aGljaCBpcyB3aGF0IGByZWZpbGxfc3RvY2tgIGhhbmRsZXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBsb2dpYyBpcyBmb3IgYHJlZmlsbF9zdG9ja2AgYW5kIGBtZW1jZ191bmNoYXJnZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIExldCBtZSBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGByZWZpbGxfc3RvY2tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZmlsbF9zdG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjIyMT1zdGF0aWMgdm9pZCBkcmFpbl9sb2NhbF9vYmpfc3RvY2soc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMjIzNi1cbm1tL21lbWNvbnRyb2wuYzoyMjM3OnN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy0yMjM4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY1OT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjgwOS1cdGlmIChiYXRjaCBcdTAwM2UgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmM6MjgxMDpcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODExLVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTQ0PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTUzLVx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjMxNTQ6XHRcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMxNTUtXG4tLVxubW0vbWVtY29udHJvbC5jPTU2NTY9dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjY2LVxubW0vbWVtY29udHJvbC5jOjU2Njc6XHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy01NjY4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipGdXp6aW5nIHRoZSBgcmVmaWxsX3N0b2NrYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYHJlZmlsbF9zdG9ja2AgaXMgY2FsbGVkIGZyb20gc29tZSBzZXJpb3VzbHkga2V5IGFyZWFzIG9mIHRoZSBrZXJuZWwg4oCTIGB0cnlfY2hhcmdlX21lbWNnYCwgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKmNvcmUqIHRvIG1lbW9yeSBjb250cm9sIGxvZ2ljLiBBbnkgY2hhbmdlIGhlcmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcmlwcGxlIG91dCBhbmQgY2F1c2UgcmVhbCBwcm9ibGVtcy4gTXkgc3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nOyB3ZSBuZWVkIHRvIGZ1enogdGhpcyBhZ2dyZXNzaXZlbHkuIFRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHRvbyBoaWdoIHRvIGp1c3QgZ2xhbmNlIG92ZXIuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGU/IEkga25vdyBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUgbGlrZWx5IHNvdXJjZSwgYW5kIHRoYXQmIzM5O3Mgb25seSBidWlsdCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSBhbmQgZ2V0IHRob3NlIGNvbmZpZyBvcHRpb25zIGxpbmVkIHVwIGZvciB0aGUgZnV6emluZyBoYXJuZXNzLiBUaGlzIGlzIGNyaXRpY2FsOiB3aXRob3V0IHRoZSByaWdodCBjb25maWcsIHdlJiMzOTtyZSB0ZXN0aW5nIHRoZSB3cm9uZyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY29udHJvbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYE1FTUNHYC4gR290IGl0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLCBidXQgSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIHRoZSBtYWluIHBsYXllci4gTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBIbW0sIGByZWZpbGxfc3RvY2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZC4KCkxldCYjMzk7cyBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIGByZWZpbGxfc3RvY2tgLiBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgc3RhdGljIHRvbywgYW5kIHNvIGlzIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYC4gT2theSwgc28gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGlzIG5vbi1zdGF0aWMuIE1ha2VzIG1vcmUgc2Vuc2UuCgpUaW1lIHRvIGxvb2sgYXQgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoaWNoICpub24tc3RhdGljKiBmdW5jdGlvbnMgY2FsbCBlaXRoZXIgYHRyeV9jaGFyZ2VfbWVtY2dgIG9yIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gbGlrZWx5IGlzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjU2OT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjU4LVxubW0vbWVtY29udHJvbC5jOjI2NTk6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY2MC1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODY4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg3My1cbm1tL21lbWNvbnRyb2wuYzoyODc0Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg3NS19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNjc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE3NC1cbm1tL21lbWNvbnRyb2wuYzozMTc1Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE3Ni1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMTU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjIzLVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMjQ6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjI1LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NDItXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjQ0LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENHcm91cHMgYW5kIFNvY2tldCBNZW1vcnkqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgKm5vdCogc3RhdGljIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBhcmVuJiMzOTt0IHRoZXkgc3RhdGljPyBXaGF0JiMzOTtzIHRoZSBkZXNpZ24gZGVjaXNpb24gdGhlcmU/IEl0IGltcGxpZXMgdGhhdCB0aGVpciBiZWhhdmlvciBvciB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSB1c2VkIG1pZ2h0IGNoYW5nZSBhdCBydW50aW1lLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoYXQgY2hvaWNlLgoKVGhlbiB0aGUgcXVlc3Rpb24gaGl0cyBtZTogd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIGBjaGFyZ2VfbWVtY2dgPyBIb3cgZG9lcyB0aGF0IGZpdCBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlIG9mIG1hbmFnaW5nIHNvY2tldCBtZW1vcnkgd2l0aGluIG1lbW9yeSBjZ3JvdXBzPyBBcmUgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIHVsdGltYXRlbHkgd3JhcHBlcnMgZm9yIGBjaGFyZ2VfbWVtY2dgLCBvciBkb2VzIGl0IHdvcmsgdGhlIG90aGVyIHdheSBhcm91bmQ/IE9yIHBlcmhhcHMgdGhleSBvcGVyYXRlIGluZGVwZW5kZW50bHkgYnV0IGFyZSBjb29yZGluYXRlZCBhdCBzb21lIG90aGVyIGxldmVsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGNvbXBsZXRlIGdyaXAgb24gaG93IHNvY2tldCBtZW1vcnkgaXMgYWNjb3VudGVkIGZvciBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHkuIElzIHRoZXJlIGEgY2FzZSB3aGVyZSB0aGVzZSBhcmUgbm90IGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBlYWNoIG90aGVyPyBJZiBzbywgd2h5PyBUaGlzIGNvdWxkIGFsc28gYmUgYSBjbHVlIHRvIGZpbmQgb3RoZXIgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhcmdlX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTY5PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NTgtXG5tbS9tZW1jb250cm9sLmM6MjY1OTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjYwLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTI4Njg9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODczLVxubW0vbWVtY29udHJvbC5jOjI4NzQ6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODc1LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE2Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTc0LVxubW0vbWVtY29udHJvbC5jOjMxNzU6XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTc2LVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwMD12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMTQtXG5tbS9tZW1jb250cm9sLmM6NTIxNTpzdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtNTIxNi1cdFx0XHRnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMjMtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIyNDpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMjUtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyMzU9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0MC1cdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS9tZW1jb250cm9sLmM6NTI0MTpcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XG5tbS9tZW1jb250cm9sLmMtNTI0Mi1cdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1OT1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNzItXG5tbS9tZW1jb250cm9sLmM6NTI3MzpcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxubW0vbWVtY29udHJvbC5jLTUyNzQtXHRcdHJldCA9IC1FTk9NRU07XG4tLVxubW0vbWVtY29udHJvbC5jPTUyOTM9aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTMwNy1cbm1tL21lbWNvbnRyb2wuYzo1MzA4Olx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbm1tL21lbWNvbnRyb2wuYy01MzA5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NDItXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjQ0LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGZ1bmN0aW9ucy4gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGlzIGEgY29yZSBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCB3b3JrcyBhdCBpdHMgYmFzZSBsZXZlbC4gVGhlbiBJIHNlZSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgLSB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEh1Z2VUTEIgcGFnZXMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5LiBUaGVuLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCAtIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLCBzd2FwcGluZyBpcyBhIGNydWNpYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUgb2YgY2hhcmdlIGFuZCB1bmNoYXJnZSBmb3IgdGhlIGZvbGlvLCBzbyBJIGJldCB0aGV5IHdvcmsgaW4gdGFuZGVtLgoKQW5kIHRoZW4gd2UgaGF2ZSB0aGVzZSBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFRoZXNlIGFyZSByZWxhdGVkIHRvIHNvY2tldCBtZW1vcnksIHdoaWNoIGlzIGEga2V5IGFzcGVjdCwgb2J2aW91c2x5LCBmb3IgbmV0d29yay1ib3VuZCB3b3JrbG9hZHMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGV5IGFyZSB0cmFja2VkIGNvcnJlY3RseS4gRmluYWxseSwgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbWVtX2Nncm91cF91bmNoYXJnZWAuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IG9uZSBmaXJzdDsgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGlzICp1bipjaGFyZ2VkIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBjaGFyZ2UgcHJvY2VzcyBvdmVyYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3VuY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MzQ5PXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Mzk0LVxubW0vbWVtY29udHJvbC5jOjUzOTU6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy01Mzk2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQwNy1cbm1tL21lbWNvbnRyb2wuYzo1NDA4OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbm1tL21lbWNvbnRyb2wuYy01NDA5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXG5tbS9tZW1jb250cm9sLmMtNTc5My0gKiBAaWQ6IGNncm91cCBpZCB0byB1bmNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xubW0vbWVtY29udHJvbC5jOjU3OTY6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTU3OTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgcmVmaWxsX3N0b2NrYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgYHJlZmlsbF9zdG9ja2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGByZWZpbGxfc3RvY2tgLiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQuIE15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyB0aGF0IGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyB0aGUgY2FsbGVyLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGl0IGEgZGlyZWN0IGNhbGw/IExldCBtZSBkb3VibGUtY2hlY2suIEkgcmVjYWxsIGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBtaWdodCBjYWxsIGB1bmNoYXJnZV9iYXRjaGAsIHdoaWNoICp0aGVuKiBjYWxscyBgcmVmaWxsX3N0b2NrYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpbmRpcmVjdCByZWxhdGlvbnNoaXAuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIG1ha2Ugc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2UgdGhyZWUgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWZpbGxfc3RvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjE9c3RhdGljIHZvaWQgZHJhaW5fbG9jYWxfb2JqX3N0b2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpXG4tLVxubW0vbWVtY29udHJvbC5jLTIyMzYtXG5tbS9tZW1jb250cm9sLmM6MjIzNzpzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtMjIzOC17XG4tLVxubW0vbWVtY29udHJvbC5jPTI2NTk9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI4MDktXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jOjI4MTA6XHRcdHJlZmlsbF9zdG9jayhtZW1jZywgYmF0Y2ggLSBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjgxMS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE0ND1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1My1cdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbm1tL21lbWNvbnRyb2wuYzozMTU0Olx0XHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTU1LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjU2PXZvaWQgbWVtX2Nncm91cF9za191bmNoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY2Ni1cbm1tL21lbWNvbnRyb2wuYzo1NjY3Olx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtNTY2OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHJlZmlsbF9zdG9ja2AmIzM5O3MgQ2FsbGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgbW9kZWwgc2hvd3MgdGhhdCBgcmVmaWxsX3N0b2NrYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGB0cnlfY2hhcmdlX21lbWNnYCDigJMgcGFydGljdWxhcmx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBiYXRjaGVzIGV4Y2VlZGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBsaWtlbHkgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHJlcGxlbmlzaCB0aGUgc3RvY2sgZm9yIGEgbGFyZ2VyIGFsbG9jYXRpb24uIFRoZW4sIHRoZXJlJiMzOTtzIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdCBmb3IgdW5jaGFyZ2luZyBiYXNlZCBvbiBvYmplY3QgYWNjb3VudGluZy4gQW5kLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIG9rYXksIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVtb3J5IHVuY2hhcmdpbmcuIFN0YW5kYXJkIHN0dWZmIHRoZXJlLgoKQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIHdoYXQgYWJvdXQgYHVuY2hhcmdlX2JhdGNoYD8gSSBkb24mIzM5O3QgaW1tZWRpYXRlbHkgc2VlIGl0IG9uIHRoZSBjYWxsIGdyYXBoIGluIG15IGhlYWQuIFRoYXQgb25lIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhhdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzdG9jayByZWZpbGxzLiBJcyBgdW5jaGFyZ2VfYmF0Y2hgIHNvbWVob3cgaW5kaXJlY3RseSBvciBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoZSByZWZpbGwgcHJvY2Vzcz8gSSYjMzk7bSBnb25uYSBqb3QgdGhhdCBkb3duLCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgb2YgdGhlIGZsb3cuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYmxpbmQgc3BvdCwgZ290dGEgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bmNoYXJnZV9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTMyMj1zdGF0aWMgaW5saW5lIHZvaWQgdW5jaGFyZ2VfZ2F0aGVyX2NsZWFyKHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzI2LVxubW0vbWVtY29udHJvbC5jOjUzMjc6c3RhdGljIHZvaWQgdW5jaGFyZ2VfYmF0Y2goY29uc3Qgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG5tbS9tZW1jb250cm9sLmMtNTMyOC17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzNDEtXG5tbS9tZW1jb250cm9sLmM6NTM0MjpcdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5LCB1Zy1cdTAwM2VuaWQpO1xubW0vbWVtY29udHJvbC5jLTUzNDMtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTM0OT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1Zylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTM2Ni1cdFx0aWYgKHVnLVx1MDAzZW9iamNnKSB7XG5tbS9tZW1jb250cm9sLmM6NTM2NzpcdFx0XHR1bmNoYXJnZV9iYXRjaCh1Zyk7XG5tbS9tZW1jb250cm9sLmMtNTM2OC1cdFx0XHR1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MzcyLVxubW0vbWVtY29udHJvbC5jOjUzNzM6XHRcdC8qIHBhaXJzIHdpdGggb2JqX2Nncm91cF9wdXQgaW4gdW5jaGFyZ2VfYmF0Y2ggKi9cbm1tL21lbWNvbnRyb2wuYy01Mzc0LVx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUzOTU9dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQwNC1cdHVuY2hhcmdlX2ZvbGlvKGZvbGlvLCBcdTAwMjZ1Zyk7XG5tbS9tZW1jb250cm9sLmM6NTQwNTpcdHVuY2hhcmdlX2JhdGNoKFx1MDAyNnVnKTtcbm1tL21lbWNvbnRyb2wuYy01NDA2LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTQwOD12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTU0MTYtXHRpZiAodWcub2JqY2cpXG5tbS9tZW1jb250cm9sLmM6NTQxNzpcdFx0dW5jaGFyZ2VfYmF0Y2goXHUwMDI2dWcpO1xubW0vbWVtY29udHJvbC5jLTU0MTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgY29kZToKCioqVW5jaGFyZ2VfQmF0Y2ggSW52ZXN0aWdhdGlvbioqCgpIb2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nIGZlZWxzIG9mZi4gVGhlIGB1bmNoYXJnZV9iYXRjaGAgZnVuY3Rpb24sIHJpZ2h0PyBJIHdhcyAqc3VyZSogSSBzZXQgaXQgdXAgdG8gaGFuZGxlIHN0b2NrIHJlZmlsbHMgaWYgbmVjZXNzYXJ5LiBEaWQgSSBtaXNzIHNvbWV0aGluZz8gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBgdW5jaGFyZ2VfYmF0Y2hgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYHJlZmlsbF9zdG9ja2AsIGJlY2F1c2UgaWYgaXQgaXNuJiMzOTt0LCB0aGVyZSBjb3VsZCBiZSBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbnZlbnRvcnkgaW1wbGljYXRpb25zIGRvd25zdHJlYW0uIFRpbWUgdG8gZGl2ZSBiYWNrIGluIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbnMsIG9yIGFkanVzdCBteSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzMjc6XHRzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcbjUzMjg6XHR7XG41MzI5Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41MzMwOlx0XG41MzMxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG41MzMyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2codWctXHUwMDNlb2JqY2cpO1xuNTMzMzpcdFx0aWYgKHVnLVx1MDAzZW5yX21lbW9yeSkge1xuNTMzNDpcdFx0XHRtZW1jZ191bmNoYXJnZShtZW1jZywgdWctXHUwMDNlbnJfbWVtb3J5KTtcbjUzMzU6XHRcdFx0aWYgKHVnLVx1MDAzZW5yX2ttZW0pIHtcbjUzMzY6XHRcdFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX0tNRU0sIC11Zy1cdTAwM2Vucl9rbWVtKTtcbjUzMzc6XHRcdFx0XHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCAtdWctXHUwMDNlbnJfa21lbSk7XG41MzM4Olx0XHRcdH1cbjUzMzk6XHRcdFx0bWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTtcbjUzNDA6XHRcdH1cbjUzNDE6XHRcbjUzNDI6XHRcdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5LCB1Zy1cdTAwM2VuaWQpO1xuNTM0MzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG41MzQ0Olx0XG41MzQ1Olx0XHQvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovXG41MzQ2Olx0XHRvYmpfY2dyb3VwX3B1dCh1Zy1cdTAwM2VvYmpjZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVudGFsIE1hcCBvZiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIG1lbW9yeSB1bmNoYXJnaW5nIHByb2Nlc3MgaGVyZS4gSSBzZWUgdGhhdCBgdW5jaGFyZ2VfYmF0Y2hgIGRpcmVjdGx5IGludm9rZXMgYG1lbWNnX3VuY2hhcmdlYC4gVGhhdCYjMzk7cyBleHBlY3RlZC4gVGhlbiwgSSBub3RpY2UgdGhhdCBgcmVmaWxsX3N0b2NrYCwgd2hpY2ggaXMgYSByZWxhdGVkIGZ1bmN0aW9uLCBhbHNvIGNhbGxzIGBtZW1jZ191bmNoYXJnZWAg4oCTIHNwZWNpZmljYWxseSB3aGVuIHRoZSBzdG9jayBpcyBmdWxsLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgYml0IGFuZCBjb25zaWRlciB3aGVyZSBgcmVmaWxsX3N0b2NrYCBpdHNlbGYgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEkgc2VlIHRocmVlIHByaW1hcnkgY2FsbCBzaXRlczogYHRyeV9jaGFyZ2VfbWVtY2dgICh3aGVuIHRoZSBiYXRjaCBzaXplIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSBwYWdlcyksIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCwgYW5kIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYC4gU28gdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHByb2Nlc3MgYnkgaW52ZXN0aWdhdGluZyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2Agbm93LiBJIHdpbGwgc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBpdCBkb2VzLCBiZWNhdXNlIHRoYXQmIzM5O3MgYSBrZXkgc3BvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNDQ6XHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjMxNDU6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjMxNDY6XHR7XG4zMTQ3Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4zMTQ4Olx0XG4zMTQ5Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzE1MDpcdFxuMzE1MTpcdFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCAtbnJfcGFnZXMpO1xuMzE1MjpcdFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgLW5yX3BhZ2VzKTtcbjMxNTM6XHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbjMxNTQ6XHRcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XG4zMTU1Olx0XG4zMTU2Olx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4zMTU3Olx0fVxuMzE1ODpcdFxuMzE1OTpcdC8qXG4zMTYwOlx0ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xuMzE2MTpcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcbjMxNjI6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjMxNjM6XHQgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjaGFyZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgQWNjb3VudGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJJiMzOTt2ZSBoaXQgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGByZWZpbGxfc3RvY2tgIOKAkyB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IHdoYXQmIzM5O3MgKmRyaXZpbmcqIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gZnJvbSB0aGUgb3RoZXIgZW5kLiBLbm93aW5nIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyBpdCB3aWxsIHRlbGwgbWUgYSBsb3QgbW9yZSBhYm91dCB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gY2FsbGVycyBvZiBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgdG8gZ2V0IHRoZSBjb250ZXh0LiBMZXQgbWUgbWFrZSBzdXJlIEkgZmluZCBvdXQgd2hhdCYjMzk7cyBjYXVzaW5nIHRoaXMgdW5jaGFyZ2UgdG8gaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTM5LS8qXG5tbS9tZW1jb250cm9sLmM6MzE0MDogKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXG5tbS9tZW1jb250cm9sLmMtMzE0MS0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE0My0gKi9cbm1tL21lbWNvbnRyb2wuYzozMTQ0OnN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxubW0vbWVtY29udHJvbC5jLTMxNDUtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTMyMzQ9dm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMjQxLVxubW0vbWVtY29udHJvbC5jOjMyNDI6XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzI0My1cdHBhZ2UtXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTM0Njk9c3RhdGljIHZvaWQgX19yZWZpbGxfb2JqX3N0b2NrKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzMy1cdGlmIChucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYzozNTM0Olx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzUzNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBDZ3JvdXAgU3RvY2sgTG9naWMgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGByZWZpbGxfc3RvY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IHVuY2hhcmdlcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrLiBJIHNlZSB0aGF0IGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAgYW5kIGBfX3JlZmlsbF9vYmpfc3RvY2tgIGFyZSBoZWF2aWx5IGludm9sdmVkIGhlcmUsIHdoaWNoIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhpcyBpcyBpbXBhY3Rpbmcga21lbSB1bmNoYXJnaW5nLiBJbnN0ZWFkIG9mIGRyYWluaW5nIHRoZSBlbnRpcmUgc3RvY2ssIHRoZSBtb2RpZmllZCBgcmVmaWxsX3N0b2NrYCB3aWxsIG5vdyB1bmNoYXJnZSBvbmx5IGBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPV2AuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1jZyBzdG9jayBsb2dpYywgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGl0IGRlZmluaXRlbHkgZmVlbHMgbGlrZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgdGhlIGltcGxpY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgdW5jaGFyZ2luZyBwcm9jZXNzIHRvIG5hcnJvdyBkb3duIG15IGZvY3VzLiBGcm9tIHRoZSBjb2RlLCBJIGNhbiBzZWUgYSBidW5jaCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgdGhhdCBJJiMzOTtsbCBsb29rIGludG8uIFRoZXNlIGluY2x1ZGUsIGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAsIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYC4gVGhpcyBsaXN0IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBjb25maXJtIHRoYXQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyB0byBlbnN1cmUgdGhhdCBpdCBpcyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTMyMTI9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMjktLyoqXG5tbS9tZW1jb250cm9sLmM6MzIzMDogKiBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZTogdW5jaGFyZ2UgYSBrbWVtIHBhZ2Vcbm1tL21lbWNvbnRyb2wuYy0zMjMxLSAqIEBwYWdlOiBwYWdlIHRvIHVuY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMzMtICovXG5tbS9tZW1jb250cm9sLmM6MzIzNDp2b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG5tbS9tZW1jb250cm9sLmMtMzIzNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjI0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHN1YmplY3QgbWF0dGVyIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQ29uY2VybmluZyBNZW1vcnkgQWNjb3VudGluZyBpbiBjZ3JvdXBzKioKClJpZ2h0LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSYjMzk7bSB0aGlua2luZy4uLndoYXQgYWJvdXQgdGhlIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBzZXR0aW5nPyBUaGF0JiMzOTtzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBjb25zaWRlcmF0aW9uIGZvciB0aGlzIHNjZW5hcmlvLiBXZSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgaG93IG1lbW9yeSBpcyBjaGFyZ2VkIGFuZCB1bmNoYXJnZWQsIGFuZCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIHNldHRpbmcgd2lsbCBhZmZlY3QgdGhlIGJlaGF2aW91ciB0aGF0IHdlIHdhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU2MzU9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY1MS0vKipcbm1tL21lbWNvbnRyb2wuYzo1NjUyOiAqIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UgLSB1bmNoYXJnZSBzb2NrZXQgbWVtb3J5XG5tbS9tZW1jb250cm9sLmMtNTY1My0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byB1bmNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjU1LSAqL1xubW0vbWVtY29udHJvbC5jOjU2NTY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTU2NTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZzogQSBRdWljayBEaXZlKioKClllcCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyLiBNeSBmb2N1cyBpbW1lZGlhdGVseSBzaGlmdHMgdG8gdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VgIGZ1bmN0aW9uLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGNvbnNpZGVyOiBpcyB0aGlzIHRoZSAqcmlnaHQqIHNwb3QgdG8gYmUgbG9va2luZyBhdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB1bmNoYXJnaW5nIG1lbW9yeSBhdCAqdGhpcyogcG9pbnQgaW4gdGhlIHByb2Nlc3M/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHJlbGVhc2UsIG9yIGlzIHRoZXJlIGEgbW9yZSBjb21wbGV4IHNjZW5hcmlvIGludm9sdmluZyBzd2FwLW91dHMsIHJlY2xhaW0sIGFuZCBhbGwgdGhlIGFzc29jaWF0ZWQgYm9va2tlZXBpbmc/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSB3YWxraW5nIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSByZWxldmFudC4gVGltZSB0byBkcmlsbCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUzNDk9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4tLVxubW0vbWVtY29udHJvbC5jLTUzOTQtXG5tbS9tZW1jb250cm9sLmM6NTM5NTp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtY29udHJvbC5jLTUzOTYte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NDA3LVxubW0vbWVtY29udHJvbC5jOjU0MDg6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxubW0vbWVtY29udHJvbC5jLTU0MDkte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NzQ2PWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTEtLyoqXG5tbS9tZW1jb250cm9sLmM6NTc5MjogKiBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCAtIHVuY2hhcmdlIHN3YXAgc3BhY2Vcbm1tL21lbWNvbnRyb2wuYy01NzkzLSAqIEBpZDogY2dyb3VwIGlkIHRvIHVuY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTUtICovXG5tbS9tZW1jb250cm9sLmM6NTc5Njp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTc5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDkwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqCgpZZXMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgY2FzZSwgSSBhZ3JlZSB3aXRoIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcy4uLiB3aGF0JiMzOTtzIHRoZSByb2xlIGFuZCBiZWhhdmlvciBvZiBgX19tZW1fY2dyb3VwX2NoYXJnZWAgaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgdG8gdW5kZXJzdGFuZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MjE1PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzNC1cbm1tL21lbWNvbnRyb2wuYzo1MjM1OmludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTIzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zIG9uIE1lbW9yeSBBY2NvdW50aW5nKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgdGhlIHVuY2hhcmdpbmcgYW5kIGNoYXJnaW5nIGZ1bmN0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcywgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBtZWNoYW5pY3Mgb2YgYWNjb3VudGluZyBmb3IgbWVtb3J5IHVzYWdlIHdpdGhpbiBhIGNncm91cCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjoKCiogICBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYDogVGhlIGJhc2UgdW5jaGFyZ2UgZnVuY3Rpb24sIHRoZSBjb3JuZXJzdG9uZS4KKiAgIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zYDogSSBhc3N1bWUgdGhpcyBkZWFscyB3aXRoIHVuY2hhcmdpbmcgZm9saW8tYmFzZWQgbWVtb3J5LCBzbyBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGRpZmZlcnMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBiYXNlIGZ1bmN0aW9uLgoqICAgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYDogSSBhbnRpY2lwYXRlIHRoaXMgaGFuZGxlcyBrZXJuZWwgbWVtb3J5IHVuY2hhcmdpbmcgYXQgYSBwYWdlIGxldmVsLgoqICAgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgOiBUaGlzIG9uZSB3aWxsIGhhbmRsZSBzb2NrZXQtcmVsYXRlZCBtZW1vcnkgdW5jaGFyZ2luZy4KKiAgIGBfX21lbV9jZ3JvdXBfY2hhcmdlYDogVGhlIHJldmVyc2UuCiogICBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYDogVGhlIGtlcm5lbCBtZW1vcnkgY2hhcmdpbmcuCiogICBgbWVtX2Nncm91cF9za19jaGFyZ2VgOiBUaGUgc29ja2V0IG1lbW9yeSBjaGFyZ2luZy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIHRoaXMgYXMgYSBzZXQgb2YgY29ycmVzcG9uZGluZyBjaGFyZ2UgYW5kIHVuY2hhcmdlIGZ1bmN0aW9ucy4gVGhlICYjMzQ7ZG91YmxlIHVuZGVyc2NvcmUmIzM0OyBvbmVzIGFyZSBwcm9iYWJseSB0aGUgY29yZSBpbnRlcm5hbCB3b3JraW5ncywgd2hpbGUgdGhlIG90aGVycyBhcmUgcHJvYmFibHkgd3JhcHBlcnMgZm9yIHNwZWNpZmljIGNhc2VzIGxpa2Ugc29ja2V0cy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2Ugd2lsbCBiZSBrZXkuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBUaGUgb2J2aW91cyBvbmUsIG9mIGNvdXJzZSwgaXMgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gY2hlY2sgYG1tL0tjb25maWdgIG9yIGBpbml0L0tjb25maWdgIGZvciB0aGUgdmFyaW91cyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTUVNQ0dgLiBJIHdhbnQgdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ny1cbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzktXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODYtXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODgtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gYE1FTUNHYC4uLiB0aGF0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBzcGVjaWZpY3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBEb2VzIGl0IGhhdmUgYW55IGluaGVyZW50IGRlcGVuZGVuY2llcz8gRG9lcyBlbmFibGluZyBvciBkaXNhYmxpbmcgYE1FTUNHYCByZXF1aXJlIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciBtYXliZSBldmVuIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0byBiZSBpbiBwbGFjZSBmaXJzdD8gSXQmIzM5O3MgY3J1Y2lhbCB0byBrbm93IHRoaXMgdXBmcm9udC4gSnVtcGluZyBpbnRvIHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGl0cyBiZWhhdmlvciB3aXRob3V0IHVuZGVyc3RhbmRpbmcgaXRzIHByZXJlcXVpc2l0ZSBjb25kaXRpb25zIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBhbmQgcG90ZW50aWFsbHkgbGVhZCBtZSBkb3duIGEgcmFiYml0IGhvbGUgb2YgZGVidWdnaW5nLiBUaW1lIHRvIGxvb2sgaW50byB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMDQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMga25vd2xlZGdlYWJsZToKCioqTmF2aWdhdGluZyB0aGUgQ0dST1VQUyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdGhpbmcgYW5kLCB3aGlsZSBpdCBkb2VzbiYjMzk7dCAqZXhwbGljaXRseSogZGVjbGFyZSBhIGRlcGVuZGVuY3kgb24gYENHUk9VUFNgLCBpdCYjMzk7cyBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGBDR1JPVVBTYCBtZW51LiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gRXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGxpbmthZ2UgcmVzaWRlcywgZXZlbiBpZiBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpbiB0aGUgY29kZSBvciBjb25maWd1cmF0aW9uLiBTbywgbXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSB0aGF0IHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiB0aGVyZSB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSAqZXhhY3RseSogaG93IHRoaXMgY29tcG9uZW50IGludGVyYWN0cyB3aXRoIHRoZSBgQ0dST1VQU2Agc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLCBldmVuIGlmIGl0JiMzOTtzIGFuIGluZGlyZWN0IG9uZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFuZCBwZWVsIGJhY2sgdGhlIGxheWVycyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNDY9Y29uZmlnIFNMQUJfT0JKX0VYVFxuLS1cbmluaXQvS2NvbmZpZy0xMDQ4LVxuaW5pdC9LY29uZmlnOjEwNDk6bWVudWNvbmZpZyBDR1JPVVBTXG5pbml0L0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTExNDA9Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcbi0tXG5pbml0L0tjb25maWctMTE0NC1cbmluaXQvS2NvbmZpZzoxMTQ1Om1lbnVjb25maWcgQ0dST1VQX1NDSEVEXG5pbml0L0tjb25maWctMTE0Ni1cdGJvb2wgXCYjMzQ7Q1BVIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDZ3JvdXAgQ2hhcmdpbmcgTG9naWMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYENHUk9VUFNgIGlzIHRoZSB0b3AtbGV2ZWwsIGFuZCBgQ0dST1VQU2AgYW5kIGBNRU1DR2AgcmVwcmVzZW50IHRoZSBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZXNlIGNoYW5nZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGFkanVzdGluZyB0aGUgc3RvY2sgZHJhaW5pbmcgbG9naWMgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWx0ZXJlZCB0aGUgdGhyZXNob2xkcywgc28gbm93LCBpbnN0ZWFkIG9mIGEgY29tcGxldGUgZHJhaW4sIGV4Y2VzcyBwYWdlcyBhYm92ZSBhIG5ldyBgTUVNQ0dfU1RPQ0tfSElHSGAgdGhyZXNob2xkIGFyZSAqdW5jaGFyZ2VkKiBkb3duIHRvIGBNRU1DR19TVE9DS19MT1dgLCBsZWF2aW5nIGEgcmVzaWR1YWwgYW1vdW50IGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlc2UgcGFnZSB1bmNoYXJnZXMgYW5kIHJlZmlsbCBjeWNsZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlJiMzOTt2ZSBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3NgLCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLgoKSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmVzIGFyZSB0aGUgbW9zdCB2YWx1YWJsZT8gYF9fbWVtX2Nncm91cF91bmNoYXJnZWAgaXMgdW5kb3VidGVkbHkgYSBob3QgcGF0aCwgY2FsbGVkIGZvciB2aXJ0dWFsbHkgZXZlcnkgcGFnZSB1bmNoYXJnZS4gQnV0IGl0JiMzOTtzIGFsc28gKnZlcnkqIGdlbmVyaWMsIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBkb3duc2lkZSDigJMgaXQgY291bGQgbGVhZCB0byBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGUgZ29hbCBpcyB0byBmb2N1cyBvbiBlbnRyeXBvaW50cywgYW5kIGF2b2lkIHRoZSBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4KClRoaW5raW5nIGFib3V0IGl0LCB3aGlsZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyBpbXBvcnRhbnQsIGxldCYjMzk7cyBub3QgbWFrZSBpdCB0aGUgb25seSBvbmUuIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIHNwZWNpZmljIHRvIHNvY2tldCBtZW1vcnksIGFuZCB0aGF0IG1ha2VzIGl0IGxlc3MgaG90LXBhdGggdGhhbiB0aGUgZ2VuZXJpYyBwYWdlIHVuY2hhcmdpbmcsIGJ1dCBzdGlsbCBpcyBhbiBBUEkgZW50cnlwb2ludCwgd2hpY2ggaXMgZ29vZC4gV2Ugc2hvdWxkIGFsc28gaW5jbHVkZSBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgIGJlY2F1c2UgaXQgaGFuZGxlcyBrbWVtIHBhZ2VzLiBJJiMzOTtsbCBhbHNvIGFkZCBpdHMgY291bnRlcnBhcnQsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYW5kIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIGJlY2F1c2Ugd2Ugc2hvdWxkIGZ1enogYm90aCBjaGFyZ2UgYW5kIHVuY2hhcmdlLgoKQWZ0ZXIgYSBzZWNvbmQgbG9vaywgd2hpbGUgYF9fbWVtX2Nncm91cF91bmNoYXJnZWAgbG9va3MgZ29vZCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGZvbGlvX3B1dGAgb3Igb3RoZXIgcGFnZSBmcmVlaW5nIGZ1bmN0aW9ucyB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGluc2FuZWx5IGhvdCBwYXRoIGFuZCBub3QgZm9jdXNlZCBlbm91Z2guIEkmIzM5O20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIHVzaW5nIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBhcyB0aGUgcHJpbWFyeSB0YXJnZXRzIHRvIGF2b2lkIHRoZSBnZW5lcmFsIGhvdCBwYXRoLCBhbmQgZm9jdXMgb24gc29ja2V0IGFuZCBrbWVtIG1lbW9yeSB3aGljaCBhcmUgYm90aCBlbnRyeXBvaW50cy4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc3VpdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTYzND1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNS1cdFx0XHQgIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2MzY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzctXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTY5Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MDMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzA0OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MDUtXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NTEtLyoqXG5tbS9tZW1jb250cm9sLmM6NTY1MjogKiBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlIC0gdW5jaGFyZ2Ugc29ja2V0IG1lbW9yeVxubW0vbWVtY29udHJvbC5jLTU2NTMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY1NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NjU2OnZvaWQgbWVtX2Nncm91cF9za191bmNoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy01NjU3LXtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MTAzMD1zdGF0aWMgaW50IHNvY2tfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpXG4tLVxubmV0L2NvcmUvc29jay5jLTEwNjEtXHRcdHNrX21lbW9yeV9hbGxvY2F0ZWRfc3ViKHNrLCBwYWdlcyk7XG5uZXQvY29yZS9zb2NrLmM6MTA2MjpcdFx0bWVtX2Nncm91cF9za191bmNoYXJnZShzaywgcGFnZXMpO1xubmV0L2NvcmUvc29jay5jLTEwNjMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0zMzMzPWludCBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgaW50IGFtdCwgaW50IGtpbmQpXG4tLVxubmV0L2NvcmUvc29jay5jLTM0MzUtXHRpZiAoY2hhcmdlZClcbm5ldC9jb3JlL3NvY2suYzozNDM2Olx0XHRtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKHNrLCBhbXQpO1xubmV0L2NvcmUvc29jay5jLTM0MzctXG4tLVxubmV0L2NvcmUvc29jay5jPTM0NzA9dm9pZCBfX3NrX21lbV9yZWR1Y2VfYWxsb2NhdGVkKHN0cnVjdCBzb2NrICpzaywgaW50IGFtb3VudClcbi0tXG5uZXQvY29yZS9zb2NrLmMtMzQ3Mi1cdGlmIChtZW1fY2dyb3VwX3NrX2VuYWJsZWQoc2spKVxubmV0L2NvcmUvc29jay5jOjM0NzM6XHRcdG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2Uoc2ssIGFtb3VudCk7XG5uZXQvY29yZS9zb2NrLmMtMzQ3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTWVtb3J5IENncm91cCBVbmNoYXJnaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGluIGBzb2NrLmNg4oCmIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gU291bmRzIGxpa2UgYSBnb29kIGZ1bmN0aW9uIHRvIGRpZyBpbnRvLCBhcyBpdCBwcm9iYWJseSBoYW5kbGVzIHNvY2tldC1yZWxhdGVkIG1lbW9yeSBhY2NvdW50aW5nLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBub3QgaW4gdGhlIGhvdCBwYXRoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHdpdGhvdXQgcmlza2luZyBtYWpvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gTm93LCB3aGVyZSBlbHNlIGRvIHdlIHNlZSBzaW1pbGFyIHVuY2hhcmdpbmcgbWVjaGFuaXNtcyBhdCBwbGF5PyBBaCwgeWVzLi4uIEkgbmVlZCB0byBjb25zaWRlciBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgIGFzIHdlbGwuIE11c3QgZW5zdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgcmVkdW5kYW5jeSBpbiB0aGVpciBiZWhhdmlvcnMsIGFzIHRoZXNlIHR5cGVzIG9mIGludGVyYWN0aW9ucyBhbHdheXMgbWFrZSBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyMj1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzIzOnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzI0LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NzA9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzItXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzM6XHRcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzQtfVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4Mjc9c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgzMi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MzM6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODM0LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzIxMj1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIyOS0vKipcbm1tL21lbWNvbnRyb2wuYzozMjMwOiAqIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlOiB1bmNoYXJnZSBhIGttZW0gcGFnZVxubW0vbWVtY29udHJvbC5jLTMyMzEtICogQHBhZ2U6IHBhZ2UgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIzMy0gKi9cbm1tL21lbWNvbnRyb2wuYzozMjM0OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0zMjM1LXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTEzMzMtXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgUGFnZU1lbWNnS21lbShwYWdlKSlcbm1tL3BhZ2VfYWxsb2MuYzoxMzM0Olx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtMTMzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAqKgoKUmlnaHQsIHRoaXMgaXMgYSBjYWxsIGNvbWluZyBmcm9tIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSB2ZXJ5ICpob3QqIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgYmVjYXVzZSBwZXJmb3JtYW5jZSBpbiB0aGlzIGFyZWEgaXMgY3JpdGljYWwuIEFueSBzbG93ZG93biBoZXJlIHJpcHBsZXMgb3V0d2FyZCwgaW1wYWN0aW5nIG92ZXJhbGwgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKVGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZnJlZWluZyBwYWdlcywgdW5jaGFyZ2luZyBzd2FwIG1ha2VzIGNvbXBsZXRlIHNlbnNlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbWVtb3J5IGNncm91cCB1bmNoYXJnaW5nIGxvZ2ljIGlzIGludGVyYWN0aW5nIHdpdGggdGhpcyBjb3JlIGZyZWVpbmcgcHJvY2Vzcy4gQXJlIHRoZXJlIGFueSB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zPyBDb250ZW50aW9uIGlzc3Vlcz8gUG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIHRoYXQgY291bGQgYmUgb3B0aW1pemVkPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHByb2JsZW0gbWlnaHQgbGllLCBhbmQgdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgdW5jaGFyZ2luZyBsb2dpYyBpcyB3b3JraW5nIGluIGNvbmp1bmN0aW9uIHdpdGggZnJlZWluZyBtZW1vcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTQ5Nj1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwMi1cbmluY2x1ZGUvbGludXgvc3dhcC5oOjUwMzpleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNC1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVx0XHRyZXR1cm47XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDg6XHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA5LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXG5tbS9tZW1jb250cm9sLmMtNTc5My0gKiBAaWQ6IGNncm91cCBpZCB0byB1bmNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xubW0vbWVtY29udHJvbC5jOjU3OTY6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxubW0vbWVtY29udHJvbC5jLTU3OTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE1OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFN3YXAgVW5jaGFyZ2UgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgb25lLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20/IFRpbWUgdG8gdHJhY2UgaXQuIEdvdHRhIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBjYWxsIHNpdGVzIGFyZSBhbmQgd2hhdCB0aGV5JiMzOTtyZSBkb2luZyB3aGVuIHRoZXkgdHJpZ2dlciB0aGF0IHN3YXAgdW5jaGFyZ2UuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF91bmNoYXJnZV9zd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbWNnX3Rlc3QucnN0PTExPVBsZWFzZSBub3RlIHRoYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBjYW4gYmUgY2hhbmdlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1jZ190ZXN0LnJzdC00NS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbWNnX3Rlc3QucnN0OjQ2Olx0bWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKClcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbWNnX3Rlc3QucnN0LTQ3LVx0ICBDYWxsZWQgd2hlbiBzd3BfZW50cnkmIzM5O3MgcmVmY250IGdvZXMgZG93biB0byAwLiBBIGNoYXJnZSBhZ2FpbnN0IHN3YXBcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00OTY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDItXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDM6ZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDQ6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDctXHRcdHJldHVybjtcbmluY2x1ZGUvbGludXgvc3dhcC5oOjUwODpcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDktfVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTUxND1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTUxOC1cbmluY2x1ZGUvbGludXgvc3dhcC5oOjUxOTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTIwLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz02OTA9dm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTcyMy1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xubW0vbWVtY29udHJvbC12MS5jOjcyNDpcdG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC12MS5jLTcyNS19XG4tLVxubW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5MS0vKipcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy01Nzk3LXtcbi0tXG5tbS9zd2FwZmlsZS5jPTE5MTU9dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTk0Ny1cdFx0XHRpZiAoYmF0Y2hfaWQpXG5tbS9zd2FwZmlsZS5jOjE5NDg6XHRcdFx0XHRtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoYmF0Y2hfaWQsIGNpX29mZiAtIGJhdGNoX29mZik7XG5tbS9zd2FwZmlsZS5jLTE5NDktXHRcdFx0YmF0Y2hfaWQgPSBpZF9jdXI7XG4tLVxubW0vc3dhcGZpbGUuYy0xOTU0LVx0aWYgKGJhdGNoX2lkKVxubW0vc3dhcGZpbGUuYzoxOTU1Olx0XHRtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoYmF0Y2hfaWQsIGNpX29mZiAtIGJhdGNoX29mZik7XG5tbS9zd2FwZmlsZS5jLTE5NTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjI0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgTWVtb3J5IEFjY291bnRpbmcgRWZmaWNpZW5jeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYSBkZWNlbnQsIG5vbi1ob3QtcGF0aCBmdW5jdGlvbiwgYSByZWFzb25hYmx5IHdlbGwtd3JpdHRlbiBwaWVjZSBvZiBjb2RlLiBJdCYjMzk7cyBub3QgdHlwaWNhbGx5IHRoZSBib3R0bGVuZWNrIGluIG1vc3QgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGFsd2F5cyByZWFzc3VyaW5nIHRvIGtub3cgdGhhdCBzb21lIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFyZSB3b3JraW5nIGVmZmljaWVudGx5IGFuZCBub3QgY29uc3VtaW5nIGN5Y2xlcyB1bm5lY2Vzc2FyaWx5LgoKTm93LCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYD8gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoYXQgZnVuY3Rpb24uIEkgaGF2ZW4mIzM5O3Qgc3BlY2lmaWNhbGx5IGFuYWx5emVkIGl0IHJlY2VudGx5LCBzbyBpdCYjMzk7cyB3b3J0aCByZXZpc2l0aW5nIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGNncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmVjb21lIGEgaG90c3BvdCB1bmRlciBoZWF2eSBsb2FkLiBUaGUgaHVnZXRsYiBwYXRoIGlzIG9mdGVuIGEgY3JpdGljYWwgb25lIHRvIG1vbml0b3IsIHNvIEkgbmVlZCB0byBwdXQgdGhhdCBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuIEl0IGNvdWxkIGJlIHdvcnRoIGxvb2tpbmcgYXQgaG93IGl0cyBoYW5kbGluZyBvZiBsYXJnZSBwYWdlcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGNncm91cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjUyPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1OS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYxLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNDg9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUzLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1NDpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTUte1xuLS1cbm1tL2h1Z2V0bGIuYz0yODI4PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODgzLVxubW0vaHVnZXRsYi5jOjI4ODQ6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0yODg1LVx0Lypcbm1tL2h1Z2V0bGIuYy0yODg2LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4ODc6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg4OC1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjM1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNDctLyoqXG5tbS9tZW1jb250cm9sLmM6NTI0ODogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTI0OS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1OC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjU5OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MjYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDZ3JvdXAgQWNjb3VudGluZyBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9ucy4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGxvb2tzIGxpa2UgYW5vdGhlciBpbXBvcnRhbnQgb25lLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGEgZGVjZW50IGxpc3QgdG8gc3RhcnQgd2l0aDogYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHJhY2tpbmcgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gUmlnaHQgbm93LCBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYC4gSSB0aGluayB0aGUgYmVzdCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIHRvIHNlZSBleGFjdGx5ICp3aG8qIGlzIGNoYXJnaW5nIGFnYWluc3Qga2VybmVsIG1lbW9yeSBwYWdlcyBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgY2dyb3Vwcy4gVGhhdCYjMzk7bGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgbG9naWMgYXQgcGxheSwgYW5kIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHdob2xlIHN5c3RlbSBpcyBzdXBwb3NlZCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyMT1ib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MjI6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyMy12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NjI9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NjUtXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NjY6XHRcdHJldHVybiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzY3LVx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyMz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgyNi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4Mjc6c3RhdGljIGlubGluZSBpbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODI4LVx0XHRcdFx0XHQgICBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTMxOTk9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIwNC0vKipcbm1tL21lbWNvbnRyb2wuYzozMjA1OiAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcbm1tL21lbWNvbnRyb2wuYy0zMjA2LSAqIEBwYWdlOiBwYWdlIHRvIGNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMjExLSAqL1xubW0vbWVtY29udHJvbC5jOjMyMTI6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG5tbS9tZW1jb250cm9sLmMtMzIxMy17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODM9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ1Mi1cdGlmIChtZW1jZ19rbWVtX29ubGluZSgpIFx1MDAyNlx1MDAyNiAoZ2ZwIFx1MDAyNiBfX0dGUF9BQ0NPVU5UKSBcdTAwMjZcdTAwMjYgcGFnZSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2VfYWxsb2MuYzo1NDUzOlx0ICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKSAhPSAwKSkge1xubW0vcGFnZV9hbGxvYy5jLTU0NTQtXHRcdF9fZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIsXG4tLVxubW0vc2x1Yi5jPTI1NTM9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNTY5LVx0XHRvcmRlciA9IGxhcmdlX2ttYWxsb2Nfb3JkZXIocGFnZSk7XG5tbS9zbHViLmM6MjU3MDpcdFx0aWYgKF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBmbGFncywgb3JkZXIpKVxubW0vc2x1Yi5jLTI1NzEtXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMxMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcmlvcml0aXppbmcgT3B0aW1pemF0aW9uIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2hlcmUgd2UmIzM5O3JlIHNwZW5kaW5nIGEgbG90IG9mIHRpbWUuIFRoZSBwcm9maWxlciBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGFuZCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCwgbWVhbmluZyB3ZSBuZWVkIHRvIG9wdGltaXplIHRoZWlyIGJlaGF2aW9yLgoKSG93ZXZlciwgSSBzdXNwZWN0IHRoYXQgd2UgbWlnaHQgZmluZCBiZXR0ZXIgb3Bwb3J0dW5pdGllcyBlbHNld2hlcmUuIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgbWlnaHQgYmUgbW9yZSBmcnVpdGZ1bCBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4gVGhleSYjMzk7cmUgcmVsYXRlZCB0byBzb2NrZXQgbWVtb3J5IGFuZCBzd2FwcGluZywgc28gdGhlcmUmIzM5O3MgcHJvYmFibHkgbW9yZSBjb21wbGV4aXR5IHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZW0uCgpCZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRob3NlLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gU3dhcHBpbmcgYmVoYXZpb3IgaXMgdXN1YWxseSBhIGdvb2QgaW5kaWNhdG9yIG9mIG1lbW9yeSBwcmVzc3VyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBvYnZpb3VzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjYwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjI6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2My1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTQ9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTYwLVx0XHQgdW5zaWduZWQgc2hvcnQgaWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jPTUyNTk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjgxLS8qKlxubW0vbWVtY29udHJvbC5jOjUyODI6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXG5tbS9tZW1jb250cm9sLmMtNTI4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI5Mi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjkzOmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQwOT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDYxLVxubW0vc3dhcF9zdGF0ZS5jOjQ2MjpcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxubW0vc3dhcF9zdGF0ZS5jLTQ2My1cdFx0XHRcdFx0ICAgdm1mID8gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSA6IE5VTEwsIGdmcCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN3YXAgYW5kIE1lbW9yeSBDR3JvdXBzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBmdW5jdGlvbiwgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY29uc2lkZXJlZCBhIG5vbi1ob3QtcGF0aCBmdW5jdGlvbiBpcyB1c2VmdWwgY29udGV4dC4gUmlnaHQgbm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgYXJlYTogYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBvZiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY2dyb3VwcyBkdXJpbmcgc3dhcHBpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQuIGBNRU1DR2AgYW5kIGBDR1JPVVBTYCBhcmUgaW1tZWRpYXRlbHkgb2J2aW91cywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHNwZWNpZmljYWxseSB0byBzd2FwLiBBaGEhIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIHNwZWNpZmljYWxseSBmb3IgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGNvbmZpZ3MgaW4gZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL0tjb25maWc9MTI2Mj1jb25maWcgTUlQU19TUFJBTVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTEyNjQtXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY1OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY2LVx0Ym9vbFxuLS1cbmFyY2gvc2gvS2NvbmZpZz0xMjY9Y29uZmlnIElPX1RSQVBQRURcbi0tXG5hcmNoL3NoL0tjb25maWctMTI4LVxuYXJjaC9zaC9LY29uZmlnOjEyOTpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9zaC9LY29uZmlnLTEzMC1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgU1dBUGAgZGVmaW5pdGVseSBkaWN0YXRlcyB0aGUgc3lzdGVtJiMzOTtzIHN3YXAgZnVuY3Rpb25hbGl0eSwgdGhhdCYjMzk7cyBjbGVhci4gTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGF0IGFuZCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGRvZXNuJiMzOTt0IHNvbWVob3cgZ2V0IGNvbXBpbGVkIGluLCBldmVuIHdoZW4gYFNXQVBgIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQuIEl0IHdvdWxkIGJlIGEgYml0IG9mIGEgY29kZSBzbWVsbCBpZiB3ZSBzYXcgdGhhdCBoYXBwZW5pbmcuIEl0JiMzOTtzIGEga2V5IHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgZmxhZ3MgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYW5kIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgYmxvYXQgb3IgdW5pbnRlbmRlZCBiZWhhdmlvciBpbiBjb25maWd1cmF0aW9ucyB3aGVyZSBzd2FwIGlzIGludGVudGlvbmFsbHkgYWJzZW50LiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyBwYXR0ZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyNTk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjgxLS8qKlxubW0vbWVtY29udHJvbC5jOjUyODI6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXG5tbS9tZW1jb250cm9sLmMtNTI4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI5Mi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjkzOmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTd2FwIGFuZCBNZW1vcnkgQ29udHJvbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL21lbWNvbnRyb2wuY2AuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYmFzaWM6IGlzIGl0IGJlaW5nIGNvbXBpbGVkIHdpdGggYFNXQVBgIGVuYWJsZWQ/IE5vLCB3YWl0LCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodCDigJMgaXQmIzM5O3MgYmVpbmcgY29tcGlsZWQgd2l0aCBgTUVNQ0dgLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LgoKSG1tLCBidXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZCAqd2l0aGluKiBgbW0vbWVtY29udHJvbC5jYC4gIE5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1NXQVBgIHByZXByb2Nlc3NvciBkaXJlY3RpdmU/IFRoYXTigJlzIHRoZSBrZXkuIElmIGl0JiMzOTtzIG5vdCwgdGhlbiB0aGUgc3dhcC1pbiBjaGFyZ2luZyBsb2dpYyBpcyBhbHdheXMgcHJlc2VudCwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcuIElmIGl0ICppcyogZ3VhcmRlZCwgdGhlbiB0aGlzIHdob2xlIGFyZWEgaXMgb25seSBhY3RpdmUgd2hlbiBzd2FwIGlzIGVuYWJsZWQsIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI4MDpcdFxuNTI4MTpcdC8qKlxuNTI4MjpcdCAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxuNTI4MzpcdCAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuNTI4NDpcdCAqIEBpZDogbWVtb3J5IGNncm91cCBpZFxuNTI4NTpcdCAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgdmljdGltXG41Mjg2Olx0ICogQGdmcDogcmVjbGFpbSBtb2RlXG41Mjg3Olx0ICpcbjUyODg6XHQgKiBUaGlzIGZ1bmN0aW9uIGNoYXJnZXMgYSBmb2xpbyBhbGxvY2F0ZWQgZm9yIHN3YXBpbi4gUGxlYXNlIGNhbGwgdGhpcyBiZWZvcmVcbjUyODk6XHQgKiBhZGRpbmcgdGhlIGZvbGlvIHRvIHRoZSBzd2FwY2FjaGUuXG41MjkwOlx0ICpcbjUyOTE6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gT3RoZXJ3aXNlLCBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLlxuNTI5MjpcdCAqL1xuNTI5MzpcdGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG41Mjk0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuNTI5NTpcdHtcbjUyOTY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjUyOTc6XHRcdGludCByZXQ7XG41Mjk4Olx0XG41Mjk5Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBBY2NvdW50aW5nIGluIE1lbWNvbnRyb2wqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHN3YXAgdXNhZ2UgaXMgYWNjb3VudGVkIGZvciBpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBjb2RlLiBJIG5vdGljZWQgc29tZXRoaW5nIGEgbGl0dGxlIG9mZi1raWx0ZXI6IHRoZSBjb3JlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgYXJlbiYjMzk7dCAqZGlyZWN0bHkqIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfU1dBUGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgdW5jaGFyZ2VkIHdoZW4gYSBwcm9jZXNzJiMzOTtzIHBhZ2VzIGFyZSBzd2FwcGVkIG91dC4gVGhlIG1haW4gZnVuY3Rpb24gSSYjMzk7bSBjb25jZXJuZWQgd2l0aCBoZXJlIGlzIGBtZW1fY2dyb3VwX3VuY2hhcmdlYC4gVGhhdCYjMzk7cyB3aGVyZSBJICpleHBlY3QqIHRvIHNlZSB0aGUgY2hlY2suCgpIb3dldmVyLCBJIGRpZCBzZWUgdGhhdCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBzd2FwIGNvbmZpZy4gVGhhdCBzdWdnZXN0cyBzb21lIG1vZHVsYXJpdHksIGFuZCBtYXliZSBgbWVtX2Nncm91cF91bmNoYXJnZWAgbWFrZXMgc29tZSBjYWxscyB0byB0aGUgc3dhcCB1bmNoYXJnaW5nIGZ1bmN0aW9uIHdoZW4gYXBwcm9wcmlhdGUuCgpUaGlzIHJhaXNlcyBhIGZldyBxdWVzdGlvbnMgaW4gbXkgbWluZC4gSXMgdGhlIHN3YXAgYmVoYXZpb3IgZnVsbHkgaW50ZWdyYXRlZD8gUGVyaGFwcyB0aGVyZSBhcmUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIHN3YXAgaXMgZW5hYmxlZCB0aGF0IGFyZSBjb25kaXRpb25hbC4gSSB0aGluayBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBjaGFpbiB0byBzZWUgaWYgdGhlIHVuY2hhcmdlIGZ1bmN0aW9uIGlzIHN0aWxsIHVzZWQgd2hlbiBzd2FwIGlzICpub3QqIGVuYWJsZWQuIEkgc2hvdWxkIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgbWVtX2Nncm91cF91bmNoYXJnZWAgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgY29udHJvbCBmbG93IGFjdHVhbGx5IGxvb2tzIGxpa2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsIHNpdGVzIG9mIHRoYXQgc3dhcCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5MS0vKipcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wuYy01Nzk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOgoKKipDaGVja2luZyBmb3IgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGAjaWZkZWYgQ09ORklHX1NXQVBgIGFyb3VuZCBpdC4mIzM0OyBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkmIzM5O20gbG9va2luZyBmb3IgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jay4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgbGlrZWx5IG9ubHkgaW5jbHVkZWQgaWYgdGhlIGBDT05GSUdfU1dBUGAgbWFjcm8gaXMgZGVmaW5lZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgY29uZGl0aW9uYWwgZXhpc3RzLiBJcyBzd2FwIGZ1bmN0aW9uYWxpdHkgb3B0aW9uYWw/IElzIGl0IGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGAjaWZkZWZgIGlzIGNydWNpYWwgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSSB3aWxsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19TV0FQYCB0byB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nIGFuZCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTc0MDpcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxuNTc0MTpcdCAqXG41NzQyOlx0ICogVHJ5IHRvIGNoYXJnZSBAZm9saW8mIzM5O3MgbWVtY2cgZm9yIHRoZSBzd2FwIHNwYWNlIGF0IGZvbGlvLVx1MDAzZXN3YXAuXG41NzQzOlx0ICpcbjU3NDQ6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxuNTc0NTpcdCAqL1xuNTc0NjpcdGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG41NzQ3Olx0e1xuNTc0ODpcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuNTc0OTpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbjU3NTA6XHRcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG41NzUxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41NzUyOlx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG41NzUzOlx0XG41NzU0Olx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuNTc1NTpcdFx0XHRyZXR1cm4gMDtcbjU3NTY6XHRcbjU3NTc6XHRcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuNTc1ODpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xuNTc1OTpcdFx0aWYgKCFvYmpjZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IENvbnRyb2wgd2l0aCBDT05GSUdfU1dBUCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3dhcCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY29udHJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIHRhcmdldGVkIHNlYXJjaC4gSSYjMzk7bSB0aGlua2luZywgYSBsaWtlbHkgcGxhY2UgdG8gZmluZCByZWxldmFudCBjb2RlIHdvdWxkIGJlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgbWVtb3J5IGNvbnRyb2wgbG9naWMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBBbmQgc2luY2UgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBzd2FwIGZpZ3VyZXMgaW50byBhbGwgb2YgdGhpcywgbGV0JiMzOTtzIGxvb2sgZm9yIGAjaWZkZWYgQ09ORklHX1NXQVBgIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB3aWxsIGxpa2VseSBjb25kaXRpb24gY29kZSBiYXNlZCBvbiB3aGV0aGVyIHN3YXAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIHNwZWNpZmljIHNlY3Rpb25zIEkgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbGxlciBoYW5kbGVzIHN3YXAtcmVsYXRlZCBvcGVyYXRpb25zIGFuZCBhY2NvdW50aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDgtXHROUl9TV0FQQ0FDSEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjEwLVx0UEdMQVpZRlJFRUQsXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTYxMi1cdFNXUElOX1pFUk8sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYwOS1cdHsgXCYjMzQ7ZmlsZV93cml0ZWJhY2tcJiMzNDssXHRcdE5SX1dSSVRFQkFDS1x0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYxMDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy0xNjExLVx0eyBcJiMzNDtzd2FwY2FjaGVkXCYjMzQ7LFx0XHRcdE5SX1NXQVBDQUNIRVx0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTU3MDE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczNi1cbm1tL21lbWNvbnRyb2wuYzo1NzM3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTU3MzgtLyoqXG4tLVxubW0vbWVtY29udHJvbC5jPTYyMDA9c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MjAxLVxubW0vbWVtY29udHJvbC5jOjYyMDI6I2VuZGlmIC8qIENPTkZJR19TV0FQICovXG5tbS9tZW1jb250cm9sLmMtNjIwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3ODkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgZnVuY3Rpb24uIFRoZSBjb2RlIGNsZWFybHkgc2hvd3MgaXQmIzM5O3MgY29uZGl0aW9uYWwgb24gYCNpZmRlZiBDT05GSUdfU1dBUGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UsIHRoYXQgZnVuY3Rpb24gaXMgYWJvdXQgdW5jaGFyZ2luZyBzd2FwIHNwYWNlIGZyb20gbWVtb3J5IGNncm91cHMsIHNvIGl0IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGhlIHN3YXAgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLiBSaWdodCwgc28gd2UgbmVlZCBgU1dBUGAgY29uZmlnIHNldC4KCk5vdywgYSBiaXQgb2YgYW4gYW5vbWFseS4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgdGhlIHNhbWUgYFNXQVBgIGd1YXJkLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGxpbmUgbnVtYmVycyB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGRlZmluZWQgYXQgbGluZSA1MjkzLiBBbmQgdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgYXQgNTczNy4gVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb246IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGNvbXBpbGVkIGV2ZW4gaWYgd2UgZG9uJiMzOTt0IGhhdmUgc3dhcCBlbmFibGVkLiBUaGF0JiMzOTtz4oCmIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgYSBidWcgb3IgYXQgbGVhc3QgYW4gdW5uZWNlc3NhcnkgY29tcGxpY2F0aW9uLgoKVG8gYmUgY2VydGFpbiwgSSByZWFsbHkgbmVlZCB0byBjaGVjayB0aGUgZGVjbGFyYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIExldCYjMzk7cyB0YWtlIGEgbG9vayBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY29tcGlsZWQgaW4gdGhlIGFic2VuY2Ugb2YgYENPTkZJR19TV0FQYC4gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IG1lbW9yeSBhY2NvdW50aW5nIHdvcmtzIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NjA9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MjppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYzLVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE1ND1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAtXHRcdCB1bnNpZ25lZCBzaG9ydCBpZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1lbW9yeSBDZ3JvdXAgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHRoYXQgdGhlIHRoaW5nIGlzIGRlY2xhcmVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIEkmIzM5O20gbm90aW5nIHRoYXQgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgZmlsZSBoYXMgYSBjb25kaXRpb25hbCBkZWNsYXJhdGlvbiBiYXNlZCBvbiBgQ09ORklHX1NXQVBgLiBJbnRlcmVzdGluZy4gSSBoYXZlIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyByZWxhdGVkIHRvIGBIVUdFVExCX1BBR0VgLCBidXQgSSYjMzk7bSBiZWluZyB0aG9yb3VnaC4gVGltZSB0byBqdW1wIG92ZXIgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBpbiBtaW5kIGFuZCBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTIzNT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjQ3LS8qKlxubW0vbWVtY29udHJvbC5jOjUyNDg6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUyNDktICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNTgtICovXG5tbS9tZW1jb250cm9sLmM6NTI1OTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTI2MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgTWVtb3J5IENvbnRyb2wgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgY29udHJvbCBpcyBjb21waWxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE1FTUNHYCwgYENHUk9VUFNgLCBhbmQgdGhlbiBgU1dBUGAgZm9yIHRoZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGZ1bmN0aW9uLiBObyBvdGhlciBmbGFncyBqdW1wIG91dCBhdCBtZSBhcyBkaXJlY3RseSBpbmZsdWVuY2luZyB0aGlzIHNlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGxhdGVyIHdoZW4gSSYjMzk7bSBjaGVja2luZyBkZXBlbmRlbmNpZXMuCgpOb3csIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGguIEZyb20gdGhlIGNvZGUsIHRoZSBmdW5jdGlvbnMgdGhhdCBqdW1wIG91dCBhcyB2aXRhbCBhcmU6IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuCgpCZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgaW5kZWVkIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGJhc2ljLiBJJiMzOTtsbCBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhhdC4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayBhIHN1YnRsZSBjb25kaXRpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU2MTA9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjYtLyoqXG5tbS9tZW1jb250cm9sLmM6NTYyNzogKiBtZW1fY2dyb3VwX3NrX2NoYXJnZSAtIGNoYXJnZSBzb2NrZXQgbWVtb3J5XG5tbS9tZW1jb250cm9sLmMtNTYyOC0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYzNC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NjM1OmJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtNTYzNi1cdFx0XHQgIGdmcF90IGdmcF9tYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY2NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBGdXp6aW5nIENhbmRpZGF0ZXMqKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIG15IHN1c3BpY2lvbjsgaXQgbG9va3MgbGlrZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgICppcyogYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBHb29kLiBMZXQmIzM5O3Mgc2VlLi4uIHllcCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGFuZCAqdGhhdCogb25lIGlzIGNhbGxlZCBmcm9tIGJvdGggYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYW5kIGBtZW1jZzFfc3dhcGluYC4gVGhhdCYjMzk7cyBhIHNvbGlkLCByZWFjaGFibGUgcGF0aC4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBZZXMsIHJlYWNoYWJsZS4gSSYjMzk7bSBzZWVpbmcgcGF0aHMgdGhyb3VnaCBgc29ja19yZXNlcnZlX21lbW9yeWAsIGBfX3NrX21lbV9yYWlzZV9hbGxvY2F0ZWRgLCBhbmQgYF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWRgLiBUaG9zZSBhcmUgYWxsIHNvY2tldCBvcGVyYXRpb25zLCB3aGljaCBnaXZlcyB1cyBnb29kIGNvdmVyYWdlLgoKTmV4dCB1cCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBZZXAsIHJlYWNoYWJsZSB0aHJvdWdoIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IGhpdHMgdGhlIGh1Z2UgcGFnZXMgcGF0aC4KCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgcmVhY2hhYmlsaXR5IG9mIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBZZXMsIHJlYWNoYWJsZSBmcm9tIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLgoKU28sIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCByZWFjaGFibGUuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCB3aGljaCBpcyBncmVhdC4KCk9rYXksIG5vdyBsZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBjb25maWdzIGFyZSBzZXQgcHJvcGVybHkuIEkgbmVlZCB0byByZXZpZXc6IGBNRU1DR2AsIGBDR1JPVVBTYCwgYFNXQVBgLCBhbmQsIGNyaXRpY2FsbHksIGBIVUdFVExCX1BBR0VgIHNpbmNlIHdlJiMzOTtyZSBmdXp6aW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBIVUdFVExCX1BBR0VgIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjEzOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTQyLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Mzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDUtXG5hcmNoL3NoL21tL0tjb25maWc6MTQ2OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDktXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTUxLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9Njk0PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuLS1cbm1tL0tjb25maWctNjk2LVxubW0vS2NvbmZpZzo2OTc6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY5OC1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc3BlY2lhbGlzdCBpbiB0aGUgZmllbGQ6CgoqKlJlZ2FyZGluZyBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBIVUdFVExCX1BBR0VgIGhlcmUuIFRoYXQmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGZyb20gd2hhdCBJIGNhbiB0ZWxsIGZyb20gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGl0IGRlZmF1bHRzIHRvIHRoZSBgSFVHRVRMQkZTYCBzZXR0aW5nLiBTbywgbG9va2luZyBhdCB0aGUgZGVmYXVsdHMsIHRoZSB3YXkgdG8gZ28gaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIGBIVUdFVExCRlNgIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwb2ludHMuIFRoYXQmIzM5O3MgdGhlIGtleSB0aGluZyB0byBmb2N1cyBvbiBmb3Igb3VyIGN1cnJlbnQgc2V0dXAgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjEzCgkJCQkJCQlvdXRwdXQ6IDI3MAoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IOKAkyB5ZXMsIGBIVUdFVExCRlNgIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgTUVNQ0dgLCBgQ0dST1VQU2AsIGBTV0FQYCwgYW5kIGBIVUdFVExCRlNgLiBKdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrZWQsIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWdzIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIEl0JiMzOTtzIGFsdGVyaW5nIHRoZSB3YXRlcm1hcmtzLCBgTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgYE1FTUNHX1NUT0NLX0hJR0hgLCB3aXRoaW4gdGhlIGBtZW1jZ19zdG9ja19wY3BgIHN0cnVjdHVyZS4gVGhlIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gYHJlZmlsbF9zdG9ja2AuIEluc3RlYWQgb2YgY29tcGxldGVseSBkcmFpbmluZyB0aGUgY2hhcmdlIHN0b2NrIHdoZW4gaXQmIzM5O3Mgb3ZlciBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgdGhlIHBhdGNoIGlzIG5vdyB1bmNoYXJnaW5nIG9ubHkgdGhlIGV4Y2VzcywgbGVhdmluZyBhIHJlc2VydmUgb2YgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMuIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgcGFnZXMgYXJlIHVuY2hhcmdlZCBhbmQgcmVmaWxsZWQgaW4gdGhhdCBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoZWQgdmlhIHZhcmlvdXMgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgY3J1Y2lhbGx5LCBodWdldGxiIHBhZ2VzLgoKSSYjMzk7dmUgZ290IHRoZSBrZXkgc3ltYm9scyBpbiBteSBzaWdodHMgdG9vOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhvc2Ugc3ltYm9sIG5hbWVzIG9uZSBtb3JlIHRpbWUuIFllcCwgdGhleSYjMzk7cmUgY29ycmVjdC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IHRob3NlIGFyZSB0aGUgcmlnaHQgc3ltYm9scy4gVGhleSBjYXB0dXJlIHRoZSBkaWZmZXJlbnQgdW5jaGFyZ2UgcGF0aHMgdGhhdCBldmVudHVhbGx5IGhpdCBgcmVmaWxsX3N0b2NrYCBvciBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGJ1dCB3aXRob3V0IGJlaW5nIG92ZXJseSBnZW5lcmljLCBhbmQgbm90IGZvY3VzaW5nIG9uIHRoZSAqaG90dGVzdCogcGF0aHMgbGlrZSBnZW5lcmljIHBhZ2UgYWxsb2NhdGlvbi9mcmVlaW5nLiBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgcmlnaHQgdGhpbmdzIHRvIGZvY3VzIG9uLgoKT2theSwgSSYjMzk7bSBoYXBweSB3aXRoIHRoaXMgYW5hbHlzaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za191bmNoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za191bmNoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RvY2sgcmVmaWxsIGxvZ2ljIGJ5IGludHJvZHVjaW5nIG5ldyBoaWdoIGFuZCBsb3cgd2F0ZXJtYXJrcyAoYE1FTUNHX1NUT0NLX0hJR0hgIGFuZCBgTUVNQ0dfU1RPQ0tfTE9XYCkgZm9yIGNoYXJnZSBzdG9jayBzbG90cywgYW5kIGNoYW5naW5nIHRoZSB0eXBlIG9mIGBzdG9ja19wYWdlc2AgdG8gYHVuc2lnbmVkIGludGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHRoZSBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBjYWNoaW5nIG9mIG1lbW9yeSBjaGFyZ2VzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWNhbCBlcnJvcnMgaW4gbWVtb3J5IGFjY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3VlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB3YXJuaW5ncyksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxN2RhMWY0M2I3ZDNiLi5mZjdmYmNkMjc0MjJkIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yMDQ4LDYgJiM0MzsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLgogICovCiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDcKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLSZndDtoaWdoIGFuZAomIzQzOyAqIHBjcC0mZ3Q7YmF0Y2g6IE1FTUNHX1NUT0NLX0hJR0ggaXMgdGhlIGhpZ2ggd2F0ZXJtYXJrIGF0IHdoaWNoIGEgc2xvdCBpcwomIzQzOyAqIHRyaW1tZWQsIGFuZCBpdCBpcyB0cmltbWVkIGRvd24gdG8gTUVNQ0dfU1RPQ0tfTE9XIHJhdGhlciB0aGFuIGVtcHRpZWQuCiYjNDM7ICoKJiM0MzsgKiBVc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYXMgYm90aCBoaWdoIHdhdGVybWFyayBhbmQgZW1wdHlpbmcgdGFyZ2V0CiYjNDM7ICogdGhyYXNoZXM6IGNoYXJnaW5nIG9uZSBwYWdlIHN0b2NrcyA2MywgYW4gdW5jaGFyZ2Ugb2YgMiB0YWtlcyB0aGUgY291bnQKJiM0MzsgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzCiYjNDM7ICogYXJlIE1FTUNHX0NIQVJHRV9CQVRDSCBhcGFydCwgc28gYSBwYWdlX2NvdW50ZXIgdXBkYXRlIHN0aWxsIGNvdmVycyBhCiYjNDM7ICogZnVsbCBiYXRjaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1FTUNHX1NUT0NLX0xPVwkJKE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpCiYjNDM7I2RlZmluZSBNRU1DR19TVE9DS19ISUdICShNRU1DR19TVE9DS19MT1cgJiM0MzsgTUVNQ0dfQ0hBUkdFX0JBVENIKQomIzQzOwogI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFCTAKIHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgewogCWxvY2FsX3RyeWxvY2tfdCBsb2NrOwpAQCAtMjIyMywxNyAmIzQzOzIyMzgsMTggQEAgc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrOwogCXN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7Ci0JdWludDhfdCBzdG9ja19wYWdlczsKJiM0MzsJdW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzOwogCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwogCWludCBlbXB0eV9zbG90ID0gLTE7CiAJaW50IGk7CiAKIAkvKgotCSAqIEZvciBub3cgbGltaXQgTUVNQ0dfQ0hBUkdFX0JBVENIIHRvIDEyNyBhbmQgbGVzcy4gSW4gZnV0dXJlIGlmIHdlCi0JICogZGVjaWRlIHRvIGluY3JlYXNlIGl0IG1vcmUgdGhhbiAxMjcgdGhlbiB3ZSB3aWxsIG5lZWQgbW9yZSBjYXJlZnVsCi0JICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLgomIzQzOwkgKiBucl9wYWdlc1tdIGlzIGEgdWludDhfdCBhbmQgYSBzbG90JiMzOTtzIGNvdW50IGlzIGNhcHBlZCBhdAomIzQzOwkgKiBNRU1DR19TVE9DS19ISUdILiBSYWlzaW5nIE1FTUNHX0NIQVJHRV9CQVRDSCBiZXlvbmQgMTI3IHdvdWxkIG5lZWQKJiM0MzsJICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC4KIAkgKi8KIAlCVUlMRF9CVUdfT04oTUVNQ0dfQ0hBUkdFX0JBVENIICZndDsgUzhfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKE1FTUNHX1NUT0NLX0hJR0ggJmd0OyBVOF9NQVgpOwogCiAJVk1fV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpOwogCkBAIC0yMjU0LDkgJiM0MzsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAkJCWVtcHR5X3Nsb3QgPSBpOwogCQlpZiAobWVtY2cgPT0gUkVBRF9PTkNFKHN0b2NrLSZndDtjYWNoZWRbaV0pKSB7CiAJCQlzdG9ja19wYWdlcyA9IFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICYjNDM7IG5yX3BhZ2VzOwomIzQzOwkJCWlmIChzdG9ja19wYWdlcyAmZ3Q7IE1FTUNHX1NUT0NLX0hJR0gpIHsKJiM0MzsJCQkJbWVtY2dfdW5jaGFyZ2UobWVtY2csCiYjNDM7CQkJCQkgICAgICAgc3RvY2tfcGFnZXMgLSBNRU1DR19TVE9DS19MT1cpOwomIzQzOwkJCQlzdG9ja19wYWdlcyA9IE1FTUNHX1NUT0NLX0xPVzsKJiM0MzsJCQl9CiAJCQlXUklURV9PTkNFKHN0b2NrLSZndDtucl9wYWdlc1tpXSwgc3RvY2tfcGFnZXMpOwotCQkJaWYgKHN0b2NrX3BhZ2VzICZndDsgTUVNQ0dfQ0hBUkdFX0JBVENIKQotCQkJCWRyYWluX3N0b2NrKHN0b2NrLCBpKTsKIAkJCXN1Y2Nlc3MgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTIKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtY2cgU3RvY2sgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbWVtY2cgc3RvY2sgbWVjaGFuaXNtIGFuZCBjaGFyZ2UvdW5jaGFyZ2Ugd2F0ZXJtYXJrcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWZpbmluZyB0aGUgc3RvY2sgbWFuYWdlbWVudCB1c2luZyBgTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgYE1FTUNHX1NUT0NLX0hJR0hgIHZhbHVlcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBsb2dpYyBjaGFuZ2UuIGByZWZpbGxfc3RvY2tgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyB3YXRlcm1hcmtzLCBhbmQgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCBpcyBnZXR0aW5nIGJ1bXBlZCB1cCB0byBhbiBgdW5zaWduZWQgaW50YC4gVGhlIGFkZGVkIGBCVUlMRF9CVUdfT05gIGVuc3VyZXMgYE1FTUNHX1NUT0NLX0hJR0hgIGRvZXNuJiMzOTt0IGV4Y2VlZCBhIGJ5dGUsIHdoaWNoIGlzIGdvb2Qgc2FuaXR5IGNoZWNraW5nLgoKVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgbmV3IGxvZ2ljIGluIGByZWZpbGxfc3RvY2tgIHdoZW4gYHN0b2NrX3BhZ2VzYCBleGNlZWRzIGBNRU1DR19TVE9DS19ISUdIYC4gSW5zdGVhZCBvZiBkcmFpbmluZyBldmVyeXRoaW5nIGxpa2UgYmVmb3JlLCBpdCB1bmNoYXJnZXMgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgcmVzZXRzIGBzdG9ja19wYWdlc2AgdG8gYE1FTUNHX1NUT0NLX0xPV2AuIFRoaXMgc2VlbXMgZGVzaWduZWQgdG8gc21vb3RoIG91dCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb3BlcmF0aW9ucywgcHJldmVudGluZyBodWdlIHNwaWtlcy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEsIHRoaXMgaXMgbW9zdGx5IG1lbW9yeSBhY2NvdW50aW5nLCBpdCBpc24mIzM5O3QgZGlyZWN0bHkgaW52b2x2aW5nIGFueSBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBzbyBLTVNBTiBzaG91bGQgYmUgdW5uZWNlc3NhcnkuIEFueSBidWdzIGludHJvZHVjZWQgYXJlIGxpa2VseSB0byBiZSBsb2dpY2FsIGVycm9ycyBpbiB0aGUgYWNjb3VudGluZyBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcy91c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaWYgb2JqZWN0IGxpZmV0aW1lcyBnZXQgdGFuZ2xlZCwgYnV0IG5vdCBiZWNhdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4KCk9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGtleSB2YXJpYWJsZSwgYHN0b2NrX3BhZ2VzYCwgbWFraW5nIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSXQgYXBwZWFycyB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgYHJlZmlsbF9zdG9ja2AgZnVuY3Rpb246IGl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBpbml0aWFsaXplZCB1c2luZyB0aGUgY3VycmVudCBjb3VudCBwbHVzIGBucl9wYWdlc2AuIEkgc2VlIHRoYXQuIEl0IGlzIGJlaW5nIGluaXRpYWxpemVkIGNvcnJlY3RseSB0byBhbiBhcmd1bWVudCBvZiB0aGF0IGZ1bmN0aW9uLiBObyBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgc2VudCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IHJlaW5mb3JjZXMgbXkgb3JpZ2luYWwgdGhvdWdodHMuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGludHJvZHVjZXMgbG9naWMgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgd2l0aG91dCBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoZSByaXNrIGlzIGxpbWl0ZWQgdG8gbG9naWNhbCBlcnJvcnMgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrIHJlZmlsbCBsb2dpYyBieSBpbnRyb2R1Y2luZyBuZXcgaGlnaCBhbmQgbG93IHdhdGVybWFya3MgKGBNRU1DR19TVE9DS19ISUdIYCBhbmQgYE1FTUNHX1NUT0NLX0xPV2ApIGZvciBjaGFyZ2Ugc3RvY2sgc2xvdHMsIGFuZCBjaGFuZ2luZyB0aGUgdHlwZSBvZiBgc3RvY2tfcGFnZXNgIHRvIGB1bnNpZ25lZCBpbnRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgY2FjaGluZyBvZiBtZW1vcnkgY2hhcmdlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkbyBub3QgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljYWwgZXJyb3JzIGluIG1lbW9yeSBhY2NvdW50aW5nIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgd2FybmluZ3MpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MDIuMjYxNzU1NjEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMzQzMTEwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9za191bmNoYXJnZVwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzowMi4yNjE3NjExMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzA5OTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDA6Mjc6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTdkYTFmNDNiN2QzYi4uZmY3ZmJjZDI3NDIyZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjA0OCw2ICsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgKiBucl9wYWdlcyBpbiBhIHNpbmdsZSBjYWNoZWxpbmUuIFRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUuXFxuICAqL1xcbiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDdcXG4rXFxuKy8qXFxuKyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLVxcdTAwM2VoaWdoIGFuZFxcbisgKiBwY3AtXFx1MDAzZWJhdGNoOiBNRU1DR19TVE9DS19ISUdIIGlzIHRoZSBoaWdoIHdhdGVybWFyayBhdCB3aGljaCBhIHNsb3QgaXNcXG4rICogdHJpbW1lZCwgYW5kIGl0IGlzIHRyaW1tZWQgZG93biB0byBNRU1DR19TVE9DS19MT1cgcmF0aGVyIHRoYW4gZW1wdGllZC5cXG4rICpcXG4rICogVXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGFzIGJvdGggaGlnaCB3YXRlcm1hcmsgYW5kIGVtcHR5aW5nIHRhcmdldFxcbisgKiB0aHJhc2hlczogY2hhcmdpbmcgb25lIHBhZ2Ugc3RvY2tzIDYzLCBhbiB1bmNoYXJnZSBvZiAyIHRha2VzIHRoZSBjb3VudFxcbisgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzXFxuKyAqIGFyZSBNRU1DR19DSEFSR0VfQkFUQ0ggYXBhcnQsIHNvIGEgcGFnZV9jb3VudGVyIHVwZGF0ZSBzdGlsbCBjb3ZlcnMgYVxcbisgKiBmdWxsIGJhdGNoLlxcbisgKi9cXG4rI2RlZmluZSBNRU1DR19TVE9DS19MT1dcXHRcXHQoTUVNQ0dfQ0hBUkdFX0JBVENIIC8gMilcXG4rI2RlZmluZSBNRU1DR19TVE9DS19ISUdIXFx0KE1FTUNHX1NUT0NLX0xPVyArIE1FTUNHX0NIQVJHRV9CQVRDSClcXG4rXFxuICNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRVxcdDBcXG4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcCB7XFxuIFxcdGxvY2FsX3RyeWxvY2tfdCBsb2NrO1xcbkBAIC0yMjIzLDE3ICsyMjM4LDE4IEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jaztcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKmNhY2hlZDtcXG4tXFx0dWludDhfdCBzdG9ja19wYWdlcztcXG4rXFx0dW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzO1xcbiBcXHRib29sIHN1Y2Nlc3MgPSBmYWxzZTtcXG4gXFx0aW50IGVtcHR5X3Nsb3QgPSAtMTtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBGb3Igbm93IGxpbWl0IE1FTUNHX0NIQVJHRV9CQVRDSCB0byAxMjcgYW5kIGxlc3MuIEluIGZ1dHVyZSBpZiB3ZVxcbi1cXHQgKiBkZWNpZGUgdG8gaW5jcmVhc2UgaXQgbW9yZSB0aGFuIDEyNyB0aGVuIHdlIHdpbGwgbmVlZCBtb3JlIGNhcmVmdWxcXG4tXFx0ICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxcbitcXHQgKiBucl9wYWdlc1tdIGlzIGEgdWludDhfdCBhbmQgYSBzbG90J3MgY291bnQgaXMgY2FwcGVkIGF0XFxuK1xcdCAqIE1FTUNHX1NUT0NLX0hJR0guIFJhaXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGJleW9uZCAxMjcgd291bGQgbmVlZFxcbitcXHQgKiBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxcbiBcXHQgKi9cXG4gXFx0QlVJTERfQlVHX09OKE1FTUNHX0NIQVJHRV9CQVRDSCBcXHUwMDNlIFM4X01BWCk7XFxuK1xcdEJVSUxEX0JVR19PTihNRU1DR19TVE9DS19ISUdIIFxcdTAwM2UgVThfTUFYKTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcXG4gXFxuQEAgLTIyNTQsOSArMjI3MCwxMiBAQCBzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuIFxcdFxcdFxcdGVtcHR5X3Nsb3QgPSBpO1xcbiBcXHRcXHRpZiAobWVtY2cgPT0gUkVBRF9PTkNFKHN0b2NrLVxcdTAwM2VjYWNoZWRbaV0pKSB7XFxuIFxcdFxcdFxcdHN0b2NrX3BhZ2VzID0gUkVBRF9PTkNFKHN0b2NrLVxcdTAwM2Vucl9wYWdlc1tpXSkgKyBucl9wYWdlcztcXG4rXFx0XFx0XFx0aWYgKHN0b2NrX3BhZ2VzIFxcdTAwM2UgTUVNQ0dfU1RPQ0tfSElHSCkge1xcbitcXHRcXHRcXHRcXHRtZW1jZ191bmNoYXJnZShtZW1jZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XKTtcXG4rXFx0XFx0XFx0XFx0c3RvY2tfcGFnZXMgPSBNRU1DR19TVE9DS19MT1c7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShzdG9jay1cXHUwMDNlbnJfcGFnZXNbaV0sIHN0b2NrX3BhZ2VzKTtcXG4tXFx0XFx0XFx0aWYgKHN0b2NrX3BhZ2VzIFxcdTAwM2UgTUVNQ0dfQ0hBUkdFX0JBVENIKVxcbi1cXHRcXHRcXHRcXHRkcmFpbl9zdG9jayhzdG9jaywgaSk7XFxuIFxcdFxcdFxcdHN1Y2Nlc3MgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzowMi43Mjk1OTAxMzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODM1OTQ1MjU3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX3VuY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGU4NDJmZDgyM2VhYmQ4ZjBlYzZiZTgzYWFlOWI4ZjdlNDMzMjEzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI3OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi5mZjdmYmNkMjc0MjJkIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yMDQ4LDYgKzIwNDgsMjEgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogbnJfcGFnZXMgaW4gYSBzaW5nbGUgY2FjaGVsaW5lLiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlLlxuICAqL1xuICNkZWZpbmUgTlJfTUVNQ0dfU1RPQ0sgN1xuK1xuKy8qXG4rICogV2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCwgaW4gdGhlIHNwaXJpdCBvZiBwY3AtXHUwMDNlaGlnaCBhbmRcbisgKiBwY3AtXHUwMDNlYmF0Y2g6IE1FTUNHX1NUT0NLX0hJR0ggaXMgdGhlIGhpZ2ggd2F0ZXJtYXJrIGF0IHdoaWNoIGEgc2xvdCBpc1xuKyAqIHRyaW1tZWQsIGFuZCBpdCBpcyB0cmltbWVkIGRvd24gdG8gTUVNQ0dfU1RPQ0tfTE9XIHJhdGhlciB0aGFuIGVtcHRpZWQuXG4rICpcbisgKiBVc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYXMgYm90aCBoaWdoIHdhdGVybWFyayBhbmQgZW1wdHlpbmcgdGFyZ2V0XG4rICogdGhyYXNoZXM6IGNoYXJnaW5nIG9uZSBwYWdlIHN0b2NrcyA2MywgYW4gdW5jaGFyZ2Ugb2YgMiB0YWtlcyB0aGUgY291bnRcbisgKiB0byA2NSBhbmQgZW1wdGllcyB0aGUgc2xvdCwgYW5kIHRoZSBuZXh0IGNoYXJnZSBtaXNzZXMuIFRoZSB3YXRlcm1hcmtzXG4rICogYXJlIE1FTUNHX0NIQVJHRV9CQVRDSCBhcGFydCwgc28gYSBwYWdlX2NvdW50ZXIgdXBkYXRlIHN0aWxsIGNvdmVycyBhXG4rICogZnVsbCBiYXRjaC5cbisgKi9cbisjZGVmaW5lIE1FTUNHX1NUT0NLX0xPV1x0XHQoTUVNQ0dfQ0hBUkdFX0JBVENIIC8gMilcbisjZGVmaW5lIE1FTUNHX1NUT0NLX0hJR0hcdChNRU1DR19TVE9DS19MT1cgKyBNRU1DR19DSEFSR0VfQkFUQ0gpXG4rXG4gI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFXHQwXG4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcCB7XG4gXHRsb2NhbF90cnlsb2NrX3QgbG9jaztcbkBAIC0yMjIzLDE3ICsyMjM4LDE4IEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jaztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7XG4tXHR1aW50OF90IHN0b2NrX3BhZ2VzO1xuK1x0dW5zaWduZWQgaW50IHN0b2NrX3BhZ2VzO1xuIFx0Ym9vbCBzdWNjZXNzID0gZmFsc2U7XG4gXHRpbnQgZW1wdHlfc2xvdCA9IC0xO1xuIFx0aW50IGk7XG4gXG4gXHQvKlxuLVx0ICogRm9yIG5vdyBsaW1pdCBNRU1DR19DSEFSR0VfQkFUQ0ggdG8gMTI3IGFuZCBsZXNzLiBJbiBmdXR1cmUgaWYgd2Vcbi1cdCAqIGRlY2lkZSB0byBpbmNyZWFzZSBpdCBtb3JlIHRoYW4gMTI3IHRoZW4gd2Ugd2lsbCBuZWVkIG1vcmUgY2FyZWZ1bFxuLVx0ICogaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxuK1x0ICogbnJfcGFnZXNbXSBpcyBhIHVpbnQ4X3QgYW5kIGEgc2xvdCdzIGNvdW50IGlzIGNhcHBlZCBhdFxuK1x0ICogTUVNQ0dfU1RPQ0tfSElHSC4gUmFpc2luZyBNRU1DR19DSEFSR0VfQkFUQ0ggYmV5b25kIDEyNyB3b3VsZCBuZWVkXG4rXHQgKiBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgb2YgbnJfcGFnZXNbXSBpbiBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLlxuIFx0ICovXG4gXHRCVUlMRF9CVUdfT04oTUVNQ0dfQ0hBUkdFX0JBVENIIFx1MDAzZSBTOF9NQVgpO1xuK1x0QlVJTERfQlVHX09OKE1FTUNHX1NUT0NLX0hJR0ggXHUwMDNlIFU4X01BWCk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSk7XG4gXG5AQCAtMjI1NCw5ICsyMjcwLDEyIEBAIHN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcdFx0XHRlbXB0eV9zbG90ID0gaTtcbiBcdFx0aWYgKG1lbWNnID09IFJFQURfT05DRShzdG9jay1cdTAwM2VjYWNoZWRbaV0pKSB7XG4gXHRcdFx0c3RvY2tfcGFnZXMgPSBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pICsgbnJfcGFnZXM7XG4rXHRcdFx0aWYgKHN0b2NrX3BhZ2VzIFx1MDAzZSBNRU1DR19TVE9DS19ISUdIKSB7XG4rXHRcdFx0XHRtZW1jZ191bmNoYXJnZShtZW1jZyxcbitcdFx0XHRcdFx0ICAgICAgIHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XKTtcbitcdFx0XHRcdHN0b2NrX3BhZ2VzID0gTUVNQ0dfU1RPQ0tfTE9XO1xuK1x0XHRcdH1cbiBcdFx0XHRXUklURV9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldLCBzdG9ja19wYWdlcyk7XG4tXHRcdFx0aWYgKHN0b2NrX3BhZ2VzIFx1MDAzZSBNRU1DR19DSEFSR0VfQkFUQ0gpXG4tXHRcdFx0XHRkcmFpbl9zdG9jayhzdG9jaywgaSk7XG4gXHRcdFx0c3VjY2VzcyA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjAyLjcyOTU5MTQ4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDYyMzUzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2dyb3VwIENoYXJnaW5nIExvZ2ljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgd2F0ZXJtYXJrcyBpbiB0aGUgYHN0cnVjdCBtZW1jZ19zdG9ja19wY3BgIGZvciBhIGNoYXJnZSBzdG9jayBzbG90LiBUaGV5J3ZlIGludHJvZHVjZWQgYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCDigJMgdGhhdCdzIGEga2V5IGNoYW5nZSByaWdodCB0aGVyZS5cblxuVGhlIGNydWNpYWwgYml0IGlzIGluIGByZWZpbGxfc3RvY2tgLiBJdCBsb29rcyBsaWtlIHRoZSBvbGQgbG9naWMganVzdCBkcmFpbmVkIHRoZSBzdG9jayBjb21wbGV0ZWx5IGlmIGl0IHdlbnQgb3ZlciBgTUVNQ0dfQ0hBUkdFX0JBVENIYC4gTm93LCBpdCdzIGRvaW5nIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQuIElmIGBzdG9ja19wYWdlc2AgZXhjZWVkcyBgTUVNQ0dfU1RPQ0tfSElHSGAsIHRoZSBjb2RlIHVuY2hhcmdlcyB0aGUgKmV4Y2VzcyogcGFnZXMg4oCTIHNwZWNpZmljYWxseSwgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCDigJMgYW5kIHRoZW4gc2V0cyBgc3RvY2tfcGFnZXNgIHRvIGBNRU1DR19TVE9DS19MT1dgLlxuXG5Fc3NlbnRpYWxseSwgaW5zdGVhZCBvZiBhIGNvbXBsZXRlIGRyYWluLCBpdCdzIGFpbWluZyB0byBtYWludGFpbiBhIG1pbmltdW0gbGV2ZWwsIGEgc29ydCBvZiBidWZmZXIuIFRoaXMgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGhhcHBlbnMgZHVyaW5nIHBhZ2UgdW5jaGFyZ2luZywgd2hpY2ggaXMgd2hhdCBgcmVmaWxsX3N0b2NrYCBoYW5kbGVzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGxvZ2ljIGlzIGZvciBgcmVmaWxsX3N0b2NrYCBhbmQgYG1lbWNnX3VuY2hhcmdlYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gTGV0IG1lIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgcmVmaWxsX3N0b2NrYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjA3LjU3NTgzMDIyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM0MTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWZpbGxfc3RvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yMjIxPXN0YXRpYyB2b2lkIGRyYWluX2xvY2FsX29ial9zdG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmR1bW15KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIyMzYtXFxubW0vbWVtY29udHJvbC5jOjIyMzc6c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy0yMjM4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjU5PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4MDktXFx0aWYgKGJhdGNoIFxcdTAwM2UgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jOjI4MTA6XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjgxMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTQ0PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTMtXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzozMTU0OlxcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTU1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2NTY9dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NjYtXFxubW0vbWVtY29udHJvbC5jOjU2Njc6XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTU2NjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzowNy42MjAxODAwMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4NzUwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkZ1enppbmcgdGhlIGByZWZpbGxfc3RvY2tgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGByZWZpbGxfc3RvY2tgIGlzIGNhbGxlZCBmcm9tIHNvbWUgc2VyaW91c2x5IGtleSBhcmVhcyBvZiB0aGUga2VybmVsIOKAkyBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzYCwgYW5kIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKmNvcmUqIHRvIG1lbW9yeSBjb250cm9sIGxvZ2ljLiBBbnkgY2hhbmdlIGhlcmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcmlwcGxlIG91dCBhbmQgY2F1c2UgcmVhbCBwcm9ibGVtcy4gTXkgc3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nOyB3ZSBuZWVkIHRvIGZ1enogdGhpcyBhZ2dyZXNzaXZlbHkuIFRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHRvbyBoaWdoIHRvIGp1c3QgZ2xhbmNlIG92ZXIuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQncyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGU/IEkga25vdyBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUgbGlrZWx5IHNvdXJjZSwgYW5kIHRoYXQncyBvbmx5IGJ1aWx0IHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIGFuZCBnZXQgdGhvc2UgY29uZmlnIG9wdGlvbnMgbGluZWQgdXAgZm9yIHRoZSBmdXp6aW5nIGhhcm5lc3MuIFRoaXMgaXMgY3JpdGljYWw6IHdpdGhvdXQgdGhlIHJpZ2h0IGNvbmZpZywgd2UncmUgdGVzdGluZyB0aGUgd3JvbmcgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MTEuODY4OTM0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODA2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MTEuOTE1NzQ2Nzc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1Nzk3NDU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgRnVuY3Rpb25zKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBoZXJlIGlzIGBNRU1DR2AuIEdvdCBpdC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0aGUgb25seSByZWxldmFudCBjb25maWcsIGJ1dCBJJ20gYmV0dGluZyBpdCdzIHRoZSBtYWluIHBsYXllci4gTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBIbW0sIGByZWZpbGxfc3RvY2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBkaWcgZnVydGhlciB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQuXG5cbkxldCdzIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYHJlZmlsbF9zdG9ja2AuIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBzdGF0aWMgdG9vLCBhbmQgc28gaXMgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLiBPa2F5LCBzbyBgbWVtX2Nncm91cF9za191bmNoYXJnZWAgaXMgbm9uLXN0YXRpYy4gTWFrZXMgbW9yZSBzZW5zZS5cblxuVGltZSB0byBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGljaCAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGNhbGwgZWl0aGVyIGB0cnlfY2hhcmdlX21lbWNnYCBvciBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gbGlrZWx5IGlzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MTguNDczNzIzNDg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzkyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTY5PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1OC1cXG5tbS9tZW1jb250cm9sLmM6MjY1OTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY2MC1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4Njg9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NzMtXFxubW0vbWVtY29udHJvbC5jOjI4NzQ6XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4NzUtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNjc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTc0LVxcbm1tL21lbWNvbnRyb2wuYzozMTc1OlxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTc2LVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIxNT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIyMy1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUyMjQ6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MjI1LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0Mi1cXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2NDQtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjE4LjUyOTExOTg3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTUyNzc3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENHcm91cHMgYW5kIFNvY2tldCBNZW1vcnkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgKm5vdCogc3RhdGljIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBhcmVuJ3QgdGhleSBzdGF0aWM/IFdoYXQncyB0aGUgZGVzaWduIGRlY2lzaW9uIHRoZXJlPyBJdCBpbXBsaWVzIHRoYXQgdGhlaXIgYmVoYXZpb3Igb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSdyZSB1c2VkIG1pZ2h0IGNoYW5nZSBhdCBydW50aW1lLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoYXQgY2hvaWNlLlxuXG5UaGVuIHRoZSBxdWVzdGlvbiBoaXRzIG1lOiB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgY2hhcmdlX21lbWNnYD8gSG93IGRvZXMgdGhhdCBmaXQgaW50byB0aGUgd2hvbGUgcGljdHVyZSBvZiBtYW5hZ2luZyBzb2NrZXQgbWVtb3J5IHdpdGhpbiBtZW1vcnkgY2dyb3Vwcz8gQXJlIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCB1bHRpbWF0ZWx5IHdyYXBwZXJzIGZvciBgY2hhcmdlX21lbWNnYCwgb3IgZG9lcyBpdCB3b3JrIHRoZSBvdGhlciB3YXkgYXJvdW5kPyBPciBwZXJoYXBzIHRoZXkgb3BlcmF0ZSBpbmRlcGVuZGVudGx5IGJ1dCBhcmUgY29vcmRpbmF0ZWQgYXQgc29tZSBvdGhlciBsZXZlbD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBncmlwIG9uIGhvdyBzb2NrZXQgbWVtb3J5IGlzIGFjY291bnRlZCBmb3IgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBJcyB0aGVyZSBhIGNhc2Ugd2hlcmUgdGhlc2UgYXJlIG5vdCBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZWFjaCBvdGhlcj8gSWYgc28sIHdoeT8gVGhpcyBjb3VsZCBhbHNvIGJlIGEgY2x1ZSB0byBmaW5kIG90aGVyIGFyZWFzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzoyMi4wMjQ0MDA0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyOTA3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU2OT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NTgtXFxubW0vbWVtY29udHJvbC5jOjI2NTk6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NjAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODY4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODczLVxcbm1tL21lbWNvbnRyb2wuYzoyODc0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODc1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTY3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE3NC1cXG5tbS9tZW1jb250cm9sLmM6MzE3NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE3Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMDA9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMTQtXFxubW0vbWVtY29udHJvbC5jOjUyMTU6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01MjE2LVxcdFxcdFxcdGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjIzLVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIyNDpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMjUtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMzU9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQwLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jOjUyNDE6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTI0Mi1cXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjU5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjcyLVxcbm1tL21lbWNvbnRyb2wuYzo1MjczOlxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbm1tL21lbWNvbnRyb2wuYy01Mjc0LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI5Mz1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMDctXFxubW0vbWVtY29udHJvbC5jOjUzMDg6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTMwOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjM1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0Mi1cXG5tbS9tZW1jb250cm9sLmM6NTY0MzpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2NDQtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjIyLjA3MTY5NjQ1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2Mjg4NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBmdW5jdGlvbnMuIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBpcyBhIGNvcmUgZnVuY3Rpb24sIHNvIHRoYXQncyBkZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIGF0IGl0cyBiYXNlIGxldmVsLiBUaGVuIEkgc2VlIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCAtIHRoYXQncyBpbnRlcmVzdGluZzsgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEh1Z2VUTEIgcGFnZXMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5LiBUaGVuLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCAtIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBvbmUsIHN3YXBwaW5nIGlzIGEgY3J1Y2lhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gc2VlaW5nIGEgcGF0dGVybiBoZXJlIG9mIGNoYXJnZSBhbmQgdW5jaGFyZ2UgZm9yIHRoZSBmb2xpbywgc28gSSBiZXQgdGhleSB3b3JrIGluIHRhbmRlbS5cblxuQW5kIHRoZW4gd2UgaGF2ZSB0aGVzZSBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFRoZXNlIGFyZSByZWxhdGVkIHRvIHNvY2tldCBtZW1vcnksIHdoaWNoIGlzIGEga2V5IGFzcGVjdCwgb2J2aW91c2x5LCBmb3IgbmV0d29yay1ib3VuZCB3b3JrbG9hZHMsIHNvIGl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoZXkgYXJlIHRyYWNrZWQgY29ycmVjdGx5LiBGaW5hbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1fY2dyb3VwX3VuY2hhcmdlYC4gTGV0J3MgZGlnIGludG8gdGhhdCBvbmUgZmlyc3Q7IHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBpcyAqdW4qY2hhcmdlZCB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgY2hhcmdlIHByb2Nlc3Mgb3ZlcmFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjI2LjMwNzk4OTI4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzMzMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF91bmNoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUzNDk9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM5NC1cXG5tbS9tZW1jb250cm9sLmM6NTM5NTp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01Mzk2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDA3LVxcbm1tL21lbWNvbnRyb2wuYzo1NDA4OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcXG5tbS9tZW1jb250cm9sLmMtNTQwOS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3OTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXFxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTc5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjI2LjM1NjQyODE5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAwODAwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGByZWZpbGxfc3RvY2tgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGByZWZpbGxfc3RvY2tgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgcmVmaWxsX3N0b2NrYC4gSSBrbm93IGl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQuIE15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyB0aGF0IGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyB0aGUgY2FsbGVyLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGl0IGEgZGlyZWN0IGNhbGw/IExldCBtZSBkb3VibGUtY2hlY2suIEkgcmVjYWxsIGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBtaWdodCBjYWxsIGB1bmNoYXJnZV9iYXRjaGAsIHdoaWNoICp0aGVuKiBjYWxscyBgcmVmaWxsX3N0b2NrYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpbmRpcmVjdCByZWxhdGlvbnNoaXAuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gbWFrZSBzdXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRob3NlIHRocmVlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjI5LjY1NzIzMjM5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMTg2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVmaWxsX3N0b2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjIyMT1zdGF0aWMgdm9pZCBkcmFpbl9sb2NhbF9vYmpfc3RvY2soc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjM2LVxcbm1tL21lbWNvbnRyb2wuYzoyMjM3OnN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtMjIzOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjY1OT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODA5LVxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYzoyODEwOlxcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgYmF0Y2ggLSBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4MTEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE0ND1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTUzLVxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG5tbS9tZW1jb250cm9sLmM6MzE1NDpcXHRcXHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjU2PXZvaWQgbWVtX2Nncm91cF9za191bmNoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjY2LVxcbm1tL21lbWNvbnRyb2wuYzo1NjY3OlxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy01NjY4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MjkuNzA0NDU1ODI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDAxNzI0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcmVmaWxsX3N0b2NrYCdzIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIG15IG1lbnRhbCBtb2RlbCBzaG93cyB0aGF0IGByZWZpbGxfc3RvY2tgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHRyeV9jaGFyZ2VfbWVtY2dgIOKAkyBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYmF0Y2hlcyBleGNlZWRpbmcgdGhlIG51bWJlciBvZiBwYWdlcy4gTWFrZXMgc2Vuc2UsIHRoYXQncyBsaWtlbHkgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gcmVwbGVuaXNoIHRoZSBzdG9jayBmb3IgYSBsYXJnZXIgYWxsb2NhdGlvbi4gVGhlbiwgdGhlcmUncyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdCBmb3IgdW5jaGFyZ2luZyBiYXNlZCBvbiBvYmplY3QgYWNjb3VudGluZy4gQW5kLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIG9rYXksIGRlYWxpbmcgd2l0aCBzb2NrZXQgbWVtb3J5IHVuY2hhcmdpbmcuIFN0YW5kYXJkIHN0dWZmIHRoZXJlLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBgdW5jaGFyZ2VfYmF0Y2hgPyBJIGRvbid0IGltbWVkaWF0ZWx5IHNlZSBpdCBvbiB0aGUgY2FsbCBncmFwaCBpbiBteSBoZWFkLiBUaGF0IG9uZSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoYXQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3RvY2sgcmVmaWxscy4gSXMgYHVuY2hhcmdlX2JhdGNoYCBzb21laG93IGluZGlyZWN0bHkgb3IgZGlyZWN0bHkgdHJpZ2dlcmluZyB0aGUgcmVmaWxsIHByb2Nlc3M/IEknbSBnb25uYSBqb3QgdGhhdCBkb3duLCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgb2YgdGhlIGZsb3cuIFRoYXQncyBhIHBvdGVudGlhbCBibGluZCBzcG90LCBnb3R0YSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzozMy4yMDQ2MzE5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5jaGFyZ2VfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MzIyPXN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTMyNi1cXG5tbS9tZW1jb250cm9sLmM6NTMyNzpzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG5tbS9tZW1jb250cm9sLmMtNTMyOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM0MS1cXG5tbS9tZW1jb250cm9sLmM6NTM0MjpcXHRtZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLVxcdTAwM2VwZ3Bnb3V0LCB1Zy1cXHUwMDNlbnJfbWVtb3J5LCB1Zy1cXHUwMDNlbmlkKTtcXG5tbS9tZW1jb250cm9sLmMtNTM0My1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzQ5PXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzNjYtXFx0XFx0aWYgKHVnLVxcdTAwM2VvYmpjZykge1xcbm1tL21lbWNvbnRyb2wuYzo1MzY3OlxcdFxcdFxcdHVuY2hhcmdlX2JhdGNoKHVnKTtcXG5tbS9tZW1jb250cm9sLmMtNTM2OC1cXHRcXHRcXHR1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzNzItXFxubW0vbWVtY29udHJvbC5jOjUzNzM6XFx0XFx0LyogcGFpcnMgd2l0aCBvYmpfY2dyb3VwX3B1dCBpbiB1bmNoYXJnZV9iYXRjaCAqL1xcbm1tL21lbWNvbnRyb2wuYy01Mzc0LVxcdFxcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01Mzk1PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQwNC1cXHR1bmNoYXJnZV9mb2xpbyhmb2xpbywgXFx1MDAyNnVnKTtcXG5tbS9tZW1jb250cm9sLmM6NTQwNTpcXHR1bmNoYXJnZV9iYXRjaChcXHUwMDI2dWcpO1xcbm1tL21lbWNvbnRyb2wuYy01NDA2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDA4PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDE2LVxcdGlmICh1Zy5vYmpjZylcXG5tbS9tZW1jb250cm9sLmM6NTQxNzpcXHRcXHR1bmNoYXJnZV9iYXRjaChcXHUwMDI2dWcpO1xcbm1tL21lbWNvbnRyb2wuYy01NDE4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MzMuMjUwNTM0NDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTI4NjY2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIGNvZGU6XG5cbioqVW5jaGFyZ2VfQmF0Y2ggSW52ZXN0aWdhdGlvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBUaGUgYHVuY2hhcmdlX2JhdGNoYCBmdW5jdGlvbiwgcmlnaHQ/IEkgd2FzICpzdXJlKiBJIHNldCBpdCB1cCB0byBoYW5kbGUgc3RvY2sgcmVmaWxscyBpZiBuZWNlc3NhcnkuIERpZCBJIG1pc3Mgc29tZXRoaW5nPyBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgZm9yIGB1bmNoYXJnZV9iYXRjaGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBjYWxsaW5nIGByZWZpbGxfc3RvY2tgLCBiZWNhdXNlIGlmIGl0IGlzbid0LCB0aGVyZSBjb3VsZCBiZSBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbnZlbnRvcnkgaW1wbGljYXRpb25zIGRvd25zdHJlYW0uIFRpbWUgdG8gZGl2ZSBiYWNrIGluIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbnMsIG9yIGFkanVzdCBteSB1bmRlcnN0YW5kaW5nLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MzYuMjAzNDA0NDE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMyNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTMyNzpcXHRzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG41MzI4OlxcdHtcXG41MzI5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41MzMwOlxcdFxcbjUzMzE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjUzMzI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKHVnLVxcdTAwM2VvYmpjZyk7XFxuNTMzMzpcXHRcXHRpZiAodWctXFx1MDAzZW5yX21lbW9yeSkge1xcbjUzMzQ6XFx0XFx0XFx0bWVtY2dfdW5jaGFyZ2UobWVtY2csIHVnLVxcdTAwM2Vucl9tZW1vcnkpO1xcbjUzMzU6XFx0XFx0XFx0aWYgKHVnLVxcdTAwM2Vucl9rbWVtKSB7XFxuNTMzNjpcXHRcXHRcXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX0tNRU0sIC11Zy1cXHUwMDNlbnJfa21lbSk7XFxuNTMzNzpcXHRcXHRcXHRcXHRtZW1jZzFfYWNjb3VudF9rbWVtKG1lbWNnLCAtdWctXFx1MDAzZW5yX2ttZW0pO1xcbjUzMzg6XFx0XFx0XFx0fVxcbjUzMzk6XFx0XFx0XFx0bWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTtcXG41MzQwOlxcdFxcdH1cXG41MzQxOlxcdFxcbjUzNDI6XFx0XFx0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cXHUwMDNlcGdwZ291dCwgdWctXFx1MDAzZW5yX21lbW9yeSwgdWctXFx1MDAzZW5pZCk7XFxuNTM0MzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG41MzQ0OlxcdFxcbjUzNDU6XFx0XFx0LyogZHJvcCByZWZlcmVuY2UgZnJvbSB1bmNoYXJnZV9mb2xpbyAqL1xcbjUzNDY6XFx0XFx0b2JqX2Nncm91cF9wdXQodWctXFx1MDAzZW9iamNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6MzYuMjAzNjI1MTU4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODgyMjI2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIE1hcCBvZiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBtZW1vcnkgdW5jaGFyZ2luZyBwcm9jZXNzIGhlcmUuIEkgc2VlIHRoYXQgYHVuY2hhcmdlX2JhdGNoYCBkaXJlY3RseSBpbnZva2VzIGBtZW1jZ191bmNoYXJnZWAuIFRoYXQncyBleHBlY3RlZC4gVGhlbiwgSSBub3RpY2UgdGhhdCBgcmVmaWxsX3N0b2NrYCwgd2hpY2ggaXMgYSByZWxhdGVkIGZ1bmN0aW9uLCBhbHNvIGNhbGxzIGBtZW1jZ191bmNoYXJnZWAg4oCTIHNwZWNpZmljYWxseSB3aGVuIHRoZSBzdG9jayBpcyBmdWxsLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIHN0ZXAgYmFjayBhIGJpdCBhbmQgY29uc2lkZXIgd2hlcmUgYHJlZmlsbF9zdG9ja2AgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJIHNlZSB0aHJlZSBwcmltYXJ5IGNhbGwgc2l0ZXM6IGB0cnlfY2hhcmdlX21lbWNnYCAod2hlbiB0aGUgYmF0Y2ggc2l6ZSBleGNlZWRzIHRoZSBhdmFpbGFibGUgcGFnZXMpLCBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AsIGFuZCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAuIFNvIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHByb2Nlc3MgYnkgaW52ZXN0aWdhdGluZyBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2Agbm93LiBJIHdpbGwgc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCBpdCBkb2VzLCBiZWNhdXNlIHRoYXQncyBhIGtleSBzcG90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NDAuMTkxODUxNDU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE0NDpcXHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4zMTQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4zMTQ2OlxcdHtcXG4zMTQ3OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4zMTQ4OlxcdFxcbjMxNDk6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4zMTUwOlxcdFxcbjMxNTE6XFx0XFx0YWNjb3VudF9rbWVtX25taV9zYWZlKG1lbWNnLCAtbnJfcGFnZXMpO1xcbjMxNTI6XFx0XFx0bWVtY2cxX2FjY291bnRfa21lbShtZW1jZywgLW5yX3BhZ2VzKTtcXG4zMTUzOlxcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4zMTU0OlxcdFxcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbjMxNTU6XFx0XFxuMzE1NjpcXHRcXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4zMTU3OlxcdH1cXG4zMTU4OlxcdFxcbjMxNTk6XFx0LypcXG4zMTYwOlxcdCAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcXG4zMTYxOlxcdCAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4zMTYyOlxcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbjMxNjM6XFx0ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjQwLjE5MjA4MDI4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQxMTY1ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBNZW1vcnkgQWNjb3VudGluZyoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSd2ZSBoaXQgYG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGByZWZpbGxfc3RvY2tgIOKAkyB0aGF0J3MgZ29vZCB0byBrbm93LiBCdXQgd2hhdCdzICpkcml2aW5nKiBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgaW4gdGhlIGZpcnN0IHBsYWNlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGZyb20gdGhlIG90aGVyIGVuZC4gS25vd2luZyB3aGF0J3MgdHJpZ2dlcmluZyBpdCB3aWxsIHRlbGwgbWUgYSBsb3QgbW9yZSBhYm91dCB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gY2FsbGVycyBvZiBgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlc2AgdG8gZ2V0IHRoZSBjb250ZXh0LiBMZXQgbWUgbWFrZSBzdXJlIEkgZmluZCBvdXQgd2hhdCdzIGNhdXNpbmcgdGhpcyB1bmNoYXJnZSB0byBoYXBwZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzo0My4yMzMyNDk4MjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTM2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMzktLypcXG5tbS9tZW1jb250cm9sLmM6MzE0MDogKiBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgZnJvbSBhIG9iamNnXFxubW0vbWVtY29udHJvbC5jLTMxNDEtICogQG9iamNnOiBvYmplY3QgY2dyb3VwIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE0My0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzE0NDpzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG5tbS9tZW1jb250cm9sLmMtMzE0NS1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzIzND12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzI0MS1cXG5tbS9tZW1jb250cm9sLmM6MzI0MjpcXHRvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKG9iamNnLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMyNDMtXFx0cGFnZS1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzQ2OT1zdGF0aWMgdm9pZCBfX3JlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1MzMtXFx0aWYgKG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYzozNTM0OlxcdFxcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMob2JqY2csIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzUzNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjQzLjI4MTE5MTc0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg2MTQxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBDZ3JvdXAgU3RvY2sgTG9naWMgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgdGhlIGByZWZpbGxfc3RvY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IHVuY2hhcmdlcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrLiBJIHNlZSB0aGF0IGBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZWAgYW5kIGBfX3JlZmlsbF9vYmpfc3RvY2tgIGFyZSBoZWF2aWx5IGludm9sdmVkIGhlcmUsIHdoaWNoIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhpcyBpcyBpbXBhY3Rpbmcga21lbSB1bmNoYXJnaW5nLiBJbnN0ZWFkIG9mIGRyYWluaW5nIHRoZSBlbnRpcmUgc3RvY2ssIHRoZSBtb2RpZmllZCBgcmVmaWxsX3N0b2NrYCB3aWxsIG5vdyB1bmNoYXJnZSBvbmx5IGBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPV2AuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbWNnIHN0b2NrIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgaXQgZGVmaW5pdGVseSBmZWVscyBsaWtlIGl0J3Mgd29ydGggZnV6emluZyB0byBleHBsb3JlIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB1bmNoYXJnaW5nIHByb2Nlc3MgdG8gbmFycm93IGRvd24gbXkgZm9jdXMuIEZyb20gdGhlIGNvZGUsIEkgY2FuIHNlZSBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIGZ1bmN0aW9ucyB0aGF0IEknbGwgbG9vayBpbnRvLiBUaGVzZSBpbmNsdWRlLCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvc2AsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAuIFRoaXMgbGlzdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGNvbmZpcm0gdGhhdCBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgIGlzIGluZGVlZCBub24tc3RhdGljIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc2OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzo0OC4yNjczMzU3MTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzMxMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzIxMj1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjI5LS8qKlxcbm1tL21lbWNvbnRyb2wuYzozMjMwOiAqIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlOiB1bmNoYXJnZSBhIGttZW0gcGFnZVxcbm1tL21lbWNvbnRyb2wuYy0zMjMxLSAqIEBwYWdlOiBwYWdlIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzIzMy0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzIzNDp2b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxubW0vbWVtY29udHJvbC5jLTMyMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyNzo0OC4zMTM2NzMyNTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwOTQ1MDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBzdWJqZWN0IG1hdHRlciBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipDb25jZXJuaW5nIE1lbW9yeSBBY2NvdW50aW5nIGluIGNncm91cHMqKlxuXG5SaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSdtIHRoaW5raW5nLi4ud2hhdCBhYm91dCB0aGUgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIHNldHRpbmc/IFRoYXQncyB0aGUgcGFydCB0aGF0IG5lZWRzIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiBmb3IgdGhpcyBzY2VuYXJpby4gV2UgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IGhvdyBtZW1vcnkgaXMgY2hhcmdlZCBhbmQgdW5jaGFyZ2VkLCBhbmQgSSdtIHdvbmRlcmluZyBpZiB0aGlzIHNldHRpbmcgd2lsbCBhZmZlY3QgdGhlIGJlaGF2aW91ciB0aGF0IHdlIHdhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NTEuMTIzMTI2MTU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ2OTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX3VuY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTYzNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU2NTI6ICogbWVtX2Nncm91cF9za191bmNoYXJnZSAtIHVuY2hhcmdlIHNvY2tldCBtZW1vcnlcXG5tbS9tZW1jb250cm9sLmMtNTY1My0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byB1bmNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTUtICovXFxubW0vbWVtY29udHJvbC5jOjU2NTY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy01NjU3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NTEuMTcxNjAwNjc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODcyNDU0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWNjb3VudGluZzogQSBRdWljayBEaXZlKipcblxuWWVwLCBpdCdzIHByZXR0eSBjbGVhci4gTXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHRoZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBmdW5jdGlvbi4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBjb25zaWRlcjogaXMgdGhpcyB0aGUgKnJpZ2h0KiBzcG90IHRvIGJlIGxvb2tpbmcgYXQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdW5jaGFyZ2luZyBtZW1vcnkgYXQgKnRoaXMqIHBvaW50IGluIHRoZSBwcm9jZXNzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSByZWxlYXNlLCBvciBpcyB0aGVyZSBhIG1vcmUgY29tcGxleCBzY2VuYXJpbyBpbnZvbHZpbmcgc3dhcC1vdXRzLCByZWNsYWltLCBhbmQgYWxsIHRoZSBhc3NvY2lhdGVkIGJvb2trZWVwaW5nPyBJJ20gYWxyZWFkeSBtZW50YWxseSB3YWxraW5nIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSByZWxldmFudC4gVGltZSB0byBkcmlsbCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjUzLjk1ODg0OTQ2OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNDEzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTM0OT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Mzk0LVxcbm1tL21lbWNvbnRyb2wuYzo1Mzk1OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTUzOTYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0MDctXFxubW0vbWVtY29udHJvbC5jOjU0MDg6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbm1tL21lbWNvbnRyb2wuYy01NDA5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzQ2PWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5MS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTc5MjogKiBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCAtIHVuY2hhcmdlIHN3YXAgc3BhY2VcXG5tbS9tZW1jb250cm9sLmMtNTc5My0gKiBAaWQ6IGNncm91cCBpZCB0byB1bmNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3OTUtICovXFxubW0vbWVtY29udHJvbC5jOjU3OTY6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy01Nzk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjc6NTQuMDA0OTk1NjE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzkyMjY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5ZZXMsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBjYXNlLCBJIGFncmVlIHdpdGggdGhlIGluaXRpYWwgYXNzZXNzbWVudC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLi4uIHdoYXQncyB0aGUgcm9sZSBhbmQgYmVoYXZpb3Igb2YgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbz8gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgdG8gdW5kZXJzdGFuZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjU2LjU0NDIyNjQyMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMTIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUyMTU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzQtXFxubW0vbWVtY29udHJvbC5jOjUyMzU6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTIzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI3OjU2LjU4OTM0NjA2OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA0Mzg5NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBDb25zaWRlcmF0aW9ucyBvbiBNZW1vcnkgQWNjb3VudGluZyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHNwZWNpZmljYWxseSB0aGUgdW5jaGFyZ2luZyBhbmQgY2hhcmdpbmcgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gdGhlIG1lY2hhbmljcyBvZiBhY2NvdW50aW5nIGZvciBtZW1vcnkgdXNhZ2Ugd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uOlxuXG4qICAgYF9fbWVtX2Nncm91cF91bmNoYXJnZWA6IFRoZSBiYXNlIHVuY2hhcmdlIGZ1bmN0aW9uLCB0aGUgY29ybmVyc3RvbmUuXG4qICAgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3NgOiBJIGFzc3VtZSB0aGlzIGRlYWxzIHdpdGggdW5jaGFyZ2luZyBmb2xpby1iYXNlZCBtZW1vcnksIHNvIEknbGwgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkaWZmZXJzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgYmFzZSBmdW5jdGlvbi5cbiogICBgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VgOiBJIGFudGljaXBhdGUgdGhpcyBoYW5kbGVzIGtlcm5lbCBtZW1vcnkgdW5jaGFyZ2luZyBhdCBhIHBhZ2UgbGV2ZWwuXG4qICAgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgOiBUaGlzIG9uZSB3aWxsIGhhbmRsZSBzb2NrZXQtcmVsYXRlZCBtZW1vcnkgdW5jaGFyZ2luZy5cbiogICBgX19tZW1fY2dyb3VwX2NoYXJnZWA6IFRoZSByZXZlcnNlLlxuKiAgIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgOiBUaGUga2VybmVsIG1lbW9yeSBjaGFyZ2luZy5cbiogICBgbWVtX2Nncm91cF9za19jaGFyZ2VgOiBUaGUgc29ja2V0IG1lbW9yeSBjaGFyZ2luZy5cblxuRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBvZiB0aGlzIGFzIGEgc2V0IG9mIGNvcnJlc3BvbmRpbmcgY2hhcmdlIGFuZCB1bmNoYXJnZSBmdW5jdGlvbnMuIFRoZSBcImRvdWJsZSB1bmRlcnNjb3JlXCIgb25lcyBhcmUgcHJvYmFibHkgdGhlIGNvcmUgaW50ZXJuYWwgd29ya2luZ3MsIHdoaWxlIHRoZSBvdGhlcnMgYXJlIHByb2JhYmx5IHdyYXBwZXJzIGZvciBzcGVjaWZpYyBjYXNlcyBsaWtlIHNvY2tldHMuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHdpbGwgYmUga2V5LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBvYnZpb3VzIG9uZSwgb2YgY291cnNlLCBpcyBgQ09ORklHX01FTUNHYC4gVGltZSB0byBjaGVjayBgbW0vS2NvbmZpZ2Agb3IgYGluaXQvS2NvbmZpZ2AgZm9yIHRoZSB2YXJpb3VzIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1DR2AuIEkgd2FudCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MDQuNTkzNzM4OTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ0MjEzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MDYuNzM3OTYwODVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxODQ4Mjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNRU1DRyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYE1FTUNHYC4uLiB0aGF0J3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJIG5lZWQgdG8gZm9jdXMgb24uIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIERvZXMgaXQgaGF2ZSBhbnkgaW5oZXJlbnQgZGVwZW5kZW5jaWVzPyBEb2VzIGVuYWJsaW5nIG9yIGRpc2FibGluZyBgTUVNQ0dgIHJlcXVpcmUgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzIHRvIGJlIGluIHBsYWNlIGZpcnN0PyBJdCdzIGNydWNpYWwgdG8ga25vdyB0aGlzIHVwZnJvbnQuIEp1bXBpbmcgaW50byB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBpdHMgYmVoYXZpb3Igd2l0aG91dCB1bmRlcnN0YW5kaW5nIGl0cyBwcmVyZXF1aXNpdGUgY29uZGl0aW9ucyB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgYW5kIHBvdGVudGlhbGx5IGxlYWQgbWUgZG93biBhIHJhYmJpdCBob2xlIG9mIGRlYnVnZ2luZy4gVGltZSB0byBsb29rIGludG8gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODowOS42NTY0NDcyNTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA4NDpcXHRcXHRoZWxwXFxuMTA4NTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDg2OlxcdFxcbjEwODc6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDg4OlxcdFxcdGJvb2xcXG4xMDg5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDkwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDkxOlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDkyOlxcdFxcdGRlZmF1bHQgeVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MDkuNjU2NTk4NTk5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODc0OTQ2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMga25vd2xlZGdlYWJsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBDR1JPVVBTIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgdGhpbmcgYW5kLCB3aGlsZSBpdCBkb2Vzbid0ICpleHBsaWNpdGx5KiBkZWNsYXJlIGEgZGVwZW5kZW5jeSBvbiBgQ0dST1VQU2AsIGl0J3MgbmVzdGVkIGRlZXAgd2l0aGluIHRoZSBgQ0dST1VQU2AgbWVudS4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gRXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbGlua2FnZSByZXNpZGVzLCBldmVuIGlmIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gdGhlIGNvZGUgb3IgY29uZmlndXJhdGlvbi4gU28sIG15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGVyZSdzIGEgY29ubmVjdGlvbiB0aGVyZSB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlICpleGFjdGx5KiBob3cgdGhpcyBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhlIGBDR1JPVVBTYCBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAsIGV2ZW4gaWYgaXQncyBhbiBpbmRpcmVjdCBvbmUuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhbmQgcGVlbCBiYWNrIHRoZSBsYXllcnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDA0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODoxMy4xNDQwOTU4ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQ0MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA0Nj1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA0OC1cXG5pbml0L0tjb25maWc6MTA0OTptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA1MC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuLS1cXG5pbml0L0tjb25maWc9MTE0MD1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbi0tXFxuaW5pdC9LY29uZmlnLTExNDQtXFxuaW5pdC9LY29uZmlnOjExNDU6bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE0Ni1cXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MTMuMTkzMTQ0OTYyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzI3NDU1MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIENoYXJnaW5nIExvZ2ljIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYENHUk9VUFNgIGlzIHRoZSB0b3AtbGV2ZWwsIGFuZCBgQ0dST1VQU2AgYW5kIGBNRU1DR2AgcmVwcmVzZW50IHRoZSBjb25maWd1cmF0aW9ucy4gTGV0J3MgZGlnIGludG8gdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYWRqdXN0aW5nIHRoZSBzdG9jayBkcmFpbmluZyBsb2dpYyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFsdGVyZWQgdGhlIHRocmVzaG9sZHMsIHNvIG5vdywgaW5zdGVhZCBvZiBhIGNvbXBsZXRlIGRyYWluLCBleGNlc3MgcGFnZXMgYWJvdmUgYSBuZXcgYE1FTUNHX1NUT0NLX0hJR0hgIHRocmVzaG9sZCBhcmUgKnVuY2hhcmdlZCogZG93biB0byBgTUVNQ0dfU1RPQ0tfTE9XYCwgbGVhdmluZyBhIHJlc2lkdWFsIGFtb3VudCBpbiB0aGUgc3RvY2suIFRoaXMgaXMgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHRoZXNlIHBhZ2UgdW5jaGFyZ2VzIGFuZCByZWZpbGwgY3ljbGVzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZy4gV2UndmUgZ290IHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgYF9fbWVtX2Nncm91cF91bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zYCwgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCwgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYC5cblxuSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmVzIGFyZSB0aGUgbW9zdCB2YWx1YWJsZT8gYF9fbWVtX2Nncm91cF91bmNoYXJnZWAgaXMgdW5kb3VidGVkbHkgYSBob3QgcGF0aCwgY2FsbGVkIGZvciB2aXJ0dWFsbHkgZXZlcnkgcGFnZSB1bmNoYXJnZS4gQnV0IGl0J3MgYWxzbyAqdmVyeSogZ2VuZXJpYywgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBUaGF0J3MgYSBwb3RlbnRpYWwgZG93bnNpZGUg4oCTIGl0IGNvdWxkIGxlYWQgdG8gc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gZW50cnlwb2ludHMsIGFuZCBhdm9pZCB0aGUgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXG5cblRoaW5raW5nIGFib3V0IGl0LCB3aGlsZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBpcyBpbXBvcnRhbnQsIGxldCdzIG5vdCBtYWtlIGl0IHRoZSBvbmx5IG9uZS4gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGxvb2tzIHByb21pc2luZy4gSXQncyBzcGVjaWZpYyB0byBzb2NrZXQgbWVtb3J5LCBhbmQgdGhhdCBtYWtlcyBpdCBsZXNzIGhvdC1wYXRoIHRoYW4gdGhlIGdlbmVyaWMgcGFnZSB1bmNoYXJnaW5nLCBidXQgc3RpbGwgaXMgYW4gQVBJIGVudHJ5cG9pbnQsIHdoaWNoIGlzIGdvb2QuIFdlIHNob3VsZCBhbHNvIGluY2x1ZGUgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBiZWNhdXNlIGl0IGhhbmRsZXMga21lbSBwYWdlcy4gSSdsbCBhbHNvIGFkZCBpdHMgY291bnRlcnBhcnQsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYW5kIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgIGJlY2F1c2Ugd2Ugc2hvdWxkIGZ1enogYm90aCBjaGFyZ2UgYW5kIHVuY2hhcmdlLlxuXG5BZnRlciBhIHNlY29uZCBsb29rLCB3aGlsZSBgX19tZW1fY2dyb3VwX3VuY2hhcmdlYCBsb29rcyBnb29kLCBpdCdzIGNhbGxlZCBmcm9tIGBmb2xpb19wdXRgIG9yIG90aGVyIHBhZ2UgZnJlZWluZyBmdW5jdGlvbnMgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBpbnNhbmVseSBob3QgcGF0aCBhbmQgbm90IGZvY3VzZWQgZW5vdWdoLiBJJ20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIHVzaW5nIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBhcyB0aGUgcHJpbWFyeSB0YXJnZXRzIHRvIGF2b2lkIHRoZSBnZW5lcmFsIGhvdCBwYXRoLCBhbmQgZm9jdXMgb24gc29ja2V0IGFuZCBrbWVtIG1lbW9yeSB3aGljaCBhcmUgYm90aCBlbnRyeXBvaW50cy4gSSdsbCBkb3VibGUgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIHRvIG1ha2Ugc3VyZSBpdCdzIHN1aXRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODoyMy41MjA2MDM1MDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjM3MDgxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9za191bmNoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTYzND1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzUtXFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNjp2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjk3PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzAzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MDQ6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MDUtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYzNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU2NTI6ICogbWVtX2Nncm91cF9za191bmNoYXJnZSAtIHVuY2hhcmdlIHNvY2tldCBtZW1vcnlcXG5tbS9tZW1jb250cm9sLmMtNTY1My0gKiBAc2s6IHNvY2tldCBpbiBtZW1jZyB0byB1bmNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NTUtICovXFxubW0vbWVtY29udHJvbC5jOjU2NTY6dm9pZCBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbm1tL21lbWNvbnRyb2wuYy01NjU3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0xMDMwPXN0YXRpYyBpbnQgc29ja19yZXNlcnZlX21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0xMDYxLVxcdFxcdHNrX21lbW9yeV9hbGxvY2F0ZWRfc3ViKHNrLCBwYWdlcyk7XFxubmV0L2NvcmUvc29jay5jOjEwNjI6XFx0XFx0bWVtX2Nncm91cF9za191bmNoYXJnZShzaywgcGFnZXMpO1xcbm5ldC9jb3JlL3NvY2suYy0xMDYzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTMzMzM9aW50IF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgYW10LCBpbnQga2luZClcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0zNDM1LVxcdGlmIChjaGFyZ2VkKVxcbm5ldC9jb3JlL3NvY2suYzozNDM2OlxcdFxcdG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2Uoc2ssIGFtdCk7XFxubmV0L2NvcmUvc29jay5jLTM0MzctXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MzQ3MD12b2lkIF9fc2tfbWVtX3JlZHVjZV9hbGxvY2F0ZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgYW1vdW50KVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTM0NzItXFx0aWYgKG1lbV9jZ3JvdXBfc2tfZW5hYmxlZChzaykpXFxubmV0L2NvcmUvc29jay5jOjM0NzM6XFx0XFx0bWVtX2Nncm91cF9za191bmNoYXJnZShzaywgYW1vdW50KTtcXG5uZXQvY29yZS9zb2NrLmMtMzQ3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MjUuMjQ0MzE3Mzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDE1NDA1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIFVuY2hhcmdpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgIGluIGBzb2NrLmNg4oCmIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBTb3VuZHMgbGlrZSBhIGdvb2QgZnVuY3Rpb24gdG8gZGlnIGludG8sIGFzIGl0IHByb2JhYmx5IGhhbmRsZXMgc29ja2V0LXJlbGF0ZWQgbWVtb3J5IGFjY291bnRpbmcsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3Mgbm90IGluIHRoZSBob3QgcGF0aCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBhbmFseXNpcyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbiB3aXRob3V0IHJpc2tpbmcgbWFqb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIE5vdywgd2hlcmUgZWxzZSBkbyB3ZSBzZWUgc2ltaWxhciB1bmNoYXJnaW5nIG1lY2hhbmlzbXMgYXQgcGxheT8gQWgsIHllcy4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYCBhcyB3ZWxsLiBNdXN0IGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgaWYgdGhlcmUncyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgcmVkdW5kYW5jeSBpbiB0aGVpciBiZWhhdmlvcnMsIGFzIHRoZXNlIHR5cGVzIG9mIGludGVyYWN0aW9ucyBhbHdheXMgbWFrZSBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODozMC42ODU4NjAzMTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE4NTMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3MjI9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MjM6dm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc3MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzcyLVxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3NzM6XFx0XFx0X19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2UocGFnZSwgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NzQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgyNz1zdGF0aWMgaW5saW5lIGludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MzItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTgzMzpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODM0LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMjEyPWludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMyMjktLyoqXFxubW0vbWVtY29udHJvbC5jOjMyMzA6ICogX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2U6IHVuY2hhcmdlIGEga21lbSBwYWdlXFxubW0vbWVtY29udHJvbC5jLTMyMzEtICogQHBhZ2U6IHBhZ2UgdG8gdW5jaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjMzLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMjM0OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcXG5tbS9tZW1jb250cm9sLmMtMzIzNS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTMxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTMzMy1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiBQYWdlTWVtY2dLbWVtKHBhZ2UpKVxcbm1tL3BhZ2VfYWxsb2MuYzoxMzM0OlxcdFxcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtMTMzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6MzIuMjk3NzE4ODcxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjM4MDgxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCoqXG5cblJpZ2h0LCB0aGlzIGlzIGEgY2FsbCBjb21pbmcgZnJvbSBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLiBUaGF0J3MgYSByZWQgZmxhZyDigJMgYSB2ZXJ5ICpob3QqIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaGVyZSBiZWNhdXNlIHBlcmZvcm1hbmNlIGluIHRoaXMgYXJlYSBpcyBjcml0aWNhbC4gQW55IHNsb3dkb3duIGhlcmUgcmlwcGxlcyBvdXR3YXJkLCBpbXBhY3Rpbmcgb3ZlcmFsbCBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi5cblxuVGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzLCB1bmNoYXJnaW5nIHN3YXAgbWFrZXMgY29tcGxldGUgc2Vuc2UuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHVuY2hhcmdpbmcgbG9naWMgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGNvcmUgZnJlZWluZyBwcm9jZXNzLiBBcmUgdGhlcmUgYW55IHVubmVjZXNzYXJ5IG9wZXJhdGlvbnM/IENvbnRlbnRpb24gaXNzdWVzPyBQb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQ/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgcHJvYmxlbSBtaWdodCBsaWUsIGFuZCB0aGlzIGlzIHdoZXJlIEknbGwgc3RhcnQgbG9va2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHVuY2hhcmdpbmcgbG9naWMgaXMgd29ya2luZyBpbiBjb25qdW5jdGlvbiB3aXRoIGZyZWVpbmcgbWVtb3J5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjM3LjAyMTUyOTU1OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTE2MjcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9NDk2PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDItXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTAzOmV4dGVybiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNC1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDctXFx0XFx0cmV0dXJuO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjUwODpcXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwOS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1pbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3OTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU3OTI6ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXFxubW0vbWVtY29udHJvbC5jLTU3OTMtICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Nzk1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1Nzk2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTc5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjM4LjYwMjY5ODU2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTk2OTEwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgU3dhcCBVbmNoYXJnZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgb25lLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20/IFRpbWUgdG8gdHJhY2UgaXQuIEdvdHRhIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBMZXQncyBzZWUgd2hlcmUgdGhlIGNhbGwgc2l0ZXMgYXJlIGFuZCB3aGF0IHRoZXkncmUgZG9pbmcgd2hlbiB0aGV5IHRyaWdnZXIgdGhhdCBzd2FwIHVuY2hhcmdlLiBLbm93aW5nIHRoZSBjYWxsIGhpZXJhcmNoeSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTU4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6NDEuMTYyMzk5NDQzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcwMzQxMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtY2dfdGVzdC5yc3Q9MTE9UGxlYXNlIG5vdGUgdGhhdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGNhbiBiZSBjaGFuZ2VkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtY2dfdGVzdC5yc3QtNDUtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtY2dfdGVzdC5yc3Q6NDY6XFx0bWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKClcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1jZ190ZXN0LnJzdC00Ny1cXHQgIENhbGxlZCB3aGVuIHN3cF9lbnRyeSdzIHJlZmNudCBnb2VzIGRvd24gdG8gMC4gQSBjaGFyZ2UgYWdhaW5zdCBzd2FwXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00OTY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwMi1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDM6ZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTA0OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVxcdFxcdHJldHVybjtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDg6XFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTE0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MTgtXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTE5OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTIwLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NjkwPXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTcyMy1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG5tbS9tZW1jb250cm9sLXYxLmM6NzI0OlxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy03MjUtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxcbm1tL21lbWNvbnRyb2wuYy01NzkzLSAqIEBpZDogY2dyb3VwIGlkIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTc5Njp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jLTU3OTcte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xOTE1PXZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTk0Ny1cXHRcXHRcXHRpZiAoYmF0Y2hfaWQpXFxubW0vc3dhcGZpbGUuYzoxOTQ4OlxcdFxcdFxcdFxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChiYXRjaF9pZCwgY2lfb2ZmIC0gYmF0Y2hfb2ZmKTtcXG5tbS9zd2FwZmlsZS5jLTE5NDktXFx0XFx0XFx0YmF0Y2hfaWQgPSBpZF9jdXI7XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5NTQtXFx0aWYgKGJhdGNoX2lkKVxcbm1tL3N3YXBmaWxlLmM6MTk1NTpcXHRcXHRtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoYmF0Y2hfaWQsIGNpX29mZiAtIGJhdGNoX29mZik7XFxubW0vc3dhcGZpbGUuYy0xOTU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODo0Mi44MzI3NDYyNjFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5ODI3NTkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgTWVtb3J5IEFjY291bnRpbmcgRWZmaWNpZW5jeSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGEgZGVjZW50LCBub24taG90LXBhdGggZnVuY3Rpb24sIGEgcmVhc29uYWJseSB3ZWxsLXdyaXR0ZW4gcGllY2Ugb2YgY29kZS4gSXQncyBub3QgdHlwaWNhbGx5IHRoZSBib3R0bGVuZWNrIGluIG1vc3QgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLiBUaGF0J3MgZ29vZDsgaXQncyBhbHdheXMgcmVhc3N1cmluZyB0byBrbm93IHRoYXQgc29tZSBvZiB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgd29ya2luZyBlZmZpY2llbnRseSBhbmQgbm90IGNvbnN1bWluZyBjeWNsZXMgdW5uZWNlc3NhcmlseS5cblxuTm93LCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYD8gSSdtIGN1cmlvdXMgYWJvdXQgdGhhdCBmdW5jdGlvbi4gSSBoYXZlbid0IHNwZWNpZmljYWxseSBhbmFseXplZCBpdCByZWNlbnRseSwgc28gaXQncyB3b3J0aCByZXZpc2l0aW5nIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGNncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmVjb21lIGEgaG90c3BvdCB1bmRlciBoZWF2eSBsb2FkLiBUaGUgaHVnZXRsYiBwYXRoIGlzIG9mdGVuIGEgY3JpdGljYWwgb25lIHRvIG1vbml0b3IsIHNvIEkgbmVlZCB0byBwdXQgdGhhdCBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuIEl0IGNvdWxkIGJlIHdvcnRoIGxvb2tpbmcgYXQgaG93IGl0cyBoYW5kbGluZyBvZiBsYXJnZSBwYWdlcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGNncm91cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6NDYuMDMxMDI1MTU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYwMjI0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Mj1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1OS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjA6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTQ4PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTQ6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1NS17XFxuLS1cXG5tbS9odWdldGxiLmM9MjgyOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODgzLVxcbm1tL2h1Z2V0bGIuYzoyODg0OlxcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbm1tL2h1Z2V0bGIuYy0yODg1LVxcdC8qXFxubW0vaHVnZXRsYi5jLTI4ODYtXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbm1tL2h1Z2V0bGIuYzoyODg3OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcXG5tbS9odWdldGxiLmMtMjg4OC1cXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjM1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0Ny0vKipcXG5tbS9tZW1jb250cm9sLmM6NTI0ODogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUyNDktICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1OC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1OTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODo0Ny43OTEyNTkzOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5MTA5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25zLiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgbG9va3MgbGlrZSBhbm90aGVyIGltcG9ydGFudCBvbmUsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGEgZGVjZW50IGxpc3QgdG8gc3RhcnQgd2l0aDogYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBhbmQgYF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHJhY2tpbmcgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gUmlnaHQgbm93LCBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLiBJIHRoaW5rIHRoZSBiZXN0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAgdG8gc2VlIGV4YWN0bHkgKndobyogaXMgY2hhcmdpbmcgYWdhaW5zdCBrZXJuZWwgbWVtb3J5IHBhZ2VzIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXBzLiBUaGF0J2xsIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBzcGVjaWZpYyB1c2UgY2FzZXMgYW5kIGxvZ2ljIGF0IHBsYXksIGFuZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB3aG9sZSBzeXN0ZW0gaXMgc3VwcG9zZWQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjg6NTEuMzkwMzczNzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzIxMTc0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNzIxPWJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MjI6aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MjMtdm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3NjI9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2NS1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY2OlxcdFxcdHJldHVybiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4MjM9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgyNi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODI3OnN0YXRpYyBpbmxpbmUgaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MjgtXFx0XFx0XFx0XFx0XFx0ICAgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxOTk9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjA0LS8qKlxcbm1tL21lbWNvbnRyb2wuYzozMjA1OiAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcXG5tbS9tZW1jb250cm9sLmMtMzIwNi0gKiBAcGFnZTogcGFnZSB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMjExLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMjEyOmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbm1tL21lbWNvbnRyb2wuYy0zMjEzLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzgzPXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ1Mi1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiAoZ2ZwIFxcdTAwMjYgX19HRlBfQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjYgcGFnZSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2VfYWxsb2MuYzo1NDUzOlxcdCAgICB1bmxpa2VseShfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcikgIT0gMCkpIHtcXG5tbS9wYWdlX2FsbG9jLmMtNTQ1NC1cXHRcXHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLFxcbi0tXFxubW0vc2x1Yi5jPTI1NTM9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1NjktXFx0XFx0b3JkZXIgPSBsYXJnZV9rbWFsbG9jX29yZGVyKHBhZ2UpO1xcbm1tL3NsdWIuYzoyNTcwOlxcdFxcdGlmIChfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZmxhZ3MsIG9yZGVyKSlcXG5tbS9zbHViLmMtMjU3MS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjUzLjEyMjQ5Nzk4N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkxNTc0OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlByaW9yaXRpemluZyBPcHRpbWl6YXRpb24gT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2hlcmUgd2UncmUgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZS4gVGhlIHByb2ZpbGVyIGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhhdCdzIGludGVyZXN0aW5nLCB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgaG90LXBhdGgsIG1lYW5pbmcgd2UgbmVlZCB0byBvcHRpbWl6ZSB0aGVpciBiZWhhdmlvci5cblxuSG93ZXZlciwgSSBzdXNwZWN0IHRoYXQgd2UgbWlnaHQgZmluZCBiZXR0ZXIgb3Bwb3J0dW5pdGllcyBlbHNld2hlcmUuIEknbSB0aGlua2luZyB0aGF0IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBtZW1fY2dyb3VwX3NrX3VuY2hhcmdlYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYW5kIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBtaWdodCBiZSBtb3JlIGZydWl0ZnVsIGFyZWFzIHRvIGludmVzdGlnYXRlLiBUaGV5J3JlIHJlbGF0ZWQgdG8gc29ja2V0IG1lbW9yeSBhbmQgc3dhcHBpbmcsIHNvIHRoZXJlJ3MgcHJvYmFibHkgbW9yZSBjb21wbGV4aXR5IHRoZXJlLiBMZXQncyBzZWUgaWYgd2UgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlbS5cblxuQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aG9zZSwgSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIFN3YXBwaW5nIGJlaGF2aW9yIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiBtZW1vcnkgcHJlc3N1cmUuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIG9idmlvdXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI4OjU2LjYxNDA3NjgyMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTM5MTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2MD1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjI6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTU5OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAtXFx0XFx0IHVuc2lnbmVkIHNob3J0IGlkLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyNTk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyODEtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyODI6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxubW0vbWVtY29udHJvbC5jLTUyODMtICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI5Mi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI5MzppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbm1tL21lbWNvbnRyb2wuYy01Mjk0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQ2MS1cXG5tbS9zd2FwX3N0YXRlLmM6NDYyOlxcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxcbm1tL3N3YXBfc3RhdGUuYy00NjMtXFx0XFx0XFx0XFx0XFx0ICAgdm1mID8gdm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tIDogTlVMTCwgZ2ZwKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyODo1OC4xOTM0NzQwMjNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTI1NTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBmdW5jdGlvbiwgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBjb25zaWRlcmVkIGEgbm9uLWhvdC1wYXRoIGZ1bmN0aW9uIGlzIHVzZWZ1bCBjb250ZXh0LiBSaWdodCBub3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBjZ3JvdXBzIGR1cmluZyBzd2FwcGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIHJlbGV2YW50LiBgTUVNQ0dgIGFuZCBgQ0dST1VQU2AgYXJlIGltbWVkaWF0ZWx5IG9idmlvdXMsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHNwZWNpZmljYWxseSB0byBzd2FwLiBBaGEhIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIHNwZWNpZmljYWxseSBmb3IgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgY29uZmlncyBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjU0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjAyLjU5ODczMjg0OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzM3ODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL0tjb25maWc9MTI2Mj1jb25maWcgTUlQU19TUFJBTVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMTI2NC1cXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY1OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9taXBzL0tjb25maWctMTI2Ni1cXHRib29sXFxuLS1cXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXFxuLS1cXG5hcmNoL3NoL0tjb25maWctMTI4LVxcbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL3NoL0tjb25maWctMTMwLVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjA0LjE5MjExNzEyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjU3ODMxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgU1dBUGAgZGVmaW5pdGVseSBkaWN0YXRlcyB0aGUgc3lzdGVtJ3Mgc3dhcCBmdW5jdGlvbmFsaXR5LCB0aGF0J3MgY2xlYXIuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhhdCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBkb2Vzbid0IHNvbWVob3cgZ2V0IGNvbXBpbGVkIGluLCBldmVuIHdoZW4gYFNXQVBgIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQuIEl0IHdvdWxkIGJlIGEgYml0IG9mIGEgY29kZSBzbWVsbCBpZiB3ZSBzYXcgdGhhdCBoYXBwZW5pbmcuIEl0J3MgYSBrZXkgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBmbGFncyBhcmUgd29ya2luZyBhcyBleHBlY3RlZCBhbmQgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBibG9hdCBvciB1bmludGVuZGVkIGJlaGF2aW9yIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIHN3YXAgaXMgaW50ZW50aW9uYWxseSBhYnNlbnQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHBhdHRlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MDguNzE3OTAyNzI0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk0ODUyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTI1OT1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI4MS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTI4MjogKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cXG5tbS9tZW1jb250cm9sLmMtNTI4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjkyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjkzOmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxubW0vbWVtY29udHJvbC5jLTUyOTQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MDkuMTQ3Mzk1NDRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyNzQ3NTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFN3YXAgYW5kIE1lbW9yeSBDb250cm9sKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1tL21lbWNvbnRyb2wuY2AuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYmFzaWM6IGlzIGl0IGJlaW5nIGNvbXBpbGVkIHdpdGggYFNXQVBgIGVuYWJsZWQ/IE5vLCB3YWl0LCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0IOKAkyBpdCdzIGJlaW5nIGNvbXBpbGVkIHdpdGggYE1FTUNHYCwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudC5cblxuSG1tLCBidXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZCAqd2l0aGluKiBgbW0vbWVtY29udHJvbC5jYC4gIE5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1NXQVBgIHByZXByb2Nlc3NvciBkaXJlY3RpdmU/IFRoYXTigJlzIHRoZSBrZXkuIElmIGl0J3Mgbm90LCB0aGVuIHRoZSBzd2FwLWluIGNoYXJnaW5nIGxvZ2ljIGlzIGFsd2F5cyBwcmVzZW50LCB3aGljaCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gSWYgaXQgKmlzKiBndWFyZGVkLCB0aGVuIHRoaXMgd2hvbGUgYXJlYSBpcyBvbmx5IGFjdGl2ZSB3aGVuIHN3YXAgaXMgZW5hYmxlZCwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjE3LjQ3NDg3NDQ3OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyODA6XFx0XFxuNTI4MTpcXHQvKipcXG41MjgyOlxcdCAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxcbjUyODM6XFx0ICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuNTI4NDpcXHQgKiBAaWQ6IG1lbW9yeSBjZ3JvdXAgaWRcXG41Mjg1OlxcdCAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgdmljdGltXFxuNTI4NjpcXHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcXG41Mjg3OlxcdCAqXFxuNTI4ODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNoYXJnZXMgYSBmb2xpbyBhbGxvY2F0ZWQgZm9yIHN3YXBpbi4gUGxlYXNlIGNhbGwgdGhpcyBiZWZvcmVcXG41Mjg5OlxcdCAqIGFkZGluZyB0aGUgZm9saW8gdG8gdGhlIHN3YXBjYWNoZS5cXG41MjkwOlxcdCAqXFxuNTI5MTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gT3RoZXJ3aXNlLCBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLlxcbjUyOTI6XFx0ICovXFxuNTI5MzpcXHRpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbjUyOTQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG41Mjk1OlxcdHtcXG41Mjk2OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41Mjk3OlxcdFxcdGludCByZXQ7XFxuNTI5ODpcXHRcXG41Mjk5OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjE3LjQ3NTEyMzQwOFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc2MjYxNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQWNjb3VudGluZyBpbiBNZW1jb250cm9sKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBob3cgc3dhcCB1c2FnZSBpcyBhY2NvdW50ZWQgZm9yIGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIGNvZGUuIEkgbm90aWNlZCBzb21ldGhpbmcgYSBsaXR0bGUgb2ZmLWtpbHRlcjogdGhlIGNvcmUgc3dhcC1yZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmVuJ3QgKmRpcmVjdGx5KiBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NXQVBgLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgdW5jaGFyZ2VkIHdoZW4gYSBwcm9jZXNzJ3MgcGFnZXMgYXJlIHN3YXBwZWQgb3V0LiBUaGUgbWFpbiBmdW5jdGlvbiBJJ20gY29uY2VybmVkIHdpdGggaGVyZSBpcyBgbWVtX2Nncm91cF91bmNoYXJnZWAuIFRoYXQncyB3aGVyZSBJICpleHBlY3QqIHRvIHNlZSB0aGUgY2hlY2suXG5cbkhvd2V2ZXIsIEkgZGlkIHNlZSB0aGF0IGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgY29uZGl0aW9uYWwgb24gdGhlIHN3YXAgY29uZmlnLiBUaGF0IHN1Z2dlc3RzIHNvbWUgbW9kdWxhcml0eSwgYW5kIG1heWJlIGBtZW1fY2dyb3VwX3VuY2hhcmdlYCBtYWtlcyBzb21lIGNhbGxzIHRvIHRoZSBzd2FwIHVuY2hhcmdpbmcgZnVuY3Rpb24gd2hlbiBhcHByb3ByaWF0ZS5cblxuVGhpcyByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIElzIHRoZSBzd2FwIGJlaGF2aW9yIGZ1bGx5IGludGVncmF0ZWQ/IFBlcmhhcHMgdGhlcmUgYXJlIG90aGVyIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBzd2FwIGlzIGVuYWJsZWQgdGhhdCBhcmUgY29uZGl0aW9uYWwuIEkgdGhpbmsgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGwgY2hhaW4gdG8gc2VlIGlmIHRoZSB1bmNoYXJnZSBmdW5jdGlvbiBpcyBzdGlsbCB1c2VkIHdoZW4gc3dhcCBpcyAqbm90KiBlbmFibGVkLiBJIHNob3VsZCBsb29rIHNwZWNpZmljYWxseSBhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG1lbV9jZ3JvdXBfdW5jaGFyZ2VgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgY29udHJvbCBmbG93IGFjdHVhbGx5IGxvb2tzIGxpa2UuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBzd2FwIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MjIuNDUxMzg5MDY4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0NjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU3NDY9aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzkxLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzkyOiAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxcbm1tL21lbWNvbnRyb2wuYy01NzkzLSAqIEBpZDogY2dyb3VwIGlkIHRvIHVuY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTc5Njp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jLTU3OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToyMi40OTkzNDE3MjdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MDU4NjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6XG5cbioqQ2hlY2tpbmcgZm9yIFByZXByb2Nlc3NvciBEaXJlY3RpdmVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMsIFwiTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgYXJvdW5kIGl0LlwiIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSdtIGxvb2tpbmcgZm9yIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2suIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGxpa2VseSBvbmx5IGluY2x1ZGVkIGlmIHRoZSBgQ09ORklHX1NXQVBgIG1hY3JvIGlzIGRlZmluZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIGNvbmRpdGlvbmFsIGV4aXN0cy4gSXMgc3dhcCBmdW5jdGlvbmFsaXR5IG9wdGlvbmFsPyBJcyBpdCBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBgI2lmZGVmYCBpcyBjcnVjaWFsIHRvIGNvcnJlY3RseSBpbnRlcnByZXQgdGhlIGNvZGUncyBiZWhhdmlvci4gSSB3aWxsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19TV0FQYCB0byB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nIGFuZCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjI2LjQ0OTkzMTM5NloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3NDA6XFx0ICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXFxuNTc0MTpcXHQgKlxcbjU3NDI6XFx0ICogVHJ5IHRvIGNoYXJnZSBAZm9saW8ncyBtZW1jZyBmb3IgdGhlIHN3YXAgc3BhY2UgYXQgZm9saW8tXFx1MDAzZXN3YXAuXFxuNTc0MzpcXHQgKlxcbjU3NDQ6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cXG41NzQ1OlxcdCAqL1xcbjU3NDY6XFx0aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG41NzQ3OlxcdHtcXG41NzQ4OlxcdFxcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG41NzQ5OlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuNTc1MDpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjU3NTE6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjU3NTI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbjU3NTM6XFx0XFxuNTc1NDpcXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbjU3NTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbjU3NTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbjU3NTk6XFx0XFx0aWYgKCFvYmpjZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MjYuNDUwMTYzODg2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQyOTEyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBNZW1vcnkgQ29udHJvbCB3aXRoIENPTkZJR19TV0FQKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN3YXAgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGNvbnRyb2wgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgYSB0YXJnZXRlZCBzZWFyY2guIEknbSB0aGlua2luZywgYSBsaWtlbHkgcGxhY2UgdG8gZmluZCByZWxldmFudCBjb2RlIHdvdWxkIGJlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgbWVtb3J5IGNvbnRyb2wgbG9naWMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBBbmQgc2luY2UgSSdtIGludGVyZXN0ZWQgaW4gaG93IHN3YXAgZmlndXJlcyBpbnRvIGFsbCBvZiB0aGlzLCBsZXQncyBsb29rIGZvciBgI2lmZGVmIENPTkZJR19TV0FQYCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgd2lsbCBsaWtlbHkgY29uZGl0aW9uIGNvZGUgYmFzZWQgb24gd2hldGhlciBzd2FwIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoYXQgc2hvdWxkIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBzZWN0aW9ucyBJIG5lZWQgdG8gZXhhbWluZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaGFuZGxlcyBzd2FwLXJlbGF0ZWQgb3BlcmF0aW9ucyBhbmQgYWNjb3VudGluZy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjI5LjUwNDQ1ODcyNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3MTg1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zNzg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MDYtXFx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRSxcXG5tbS9tZW1jb250cm9sLmM6NDA3OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MDgtXFx0TlJfU1dBUENBQ0hFLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTAtXFx0UEdMQVpZRlJFRUQsXFxubW0vbWVtY29udHJvbC5jOjYxMTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNjEyLVxcdFNXUElOX1pFUk8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTU5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTE2MDktXFx0eyBcXFwiZmlsZV93cml0ZWJhY2tcXFwiLFxcdFxcdE5SX1dSSVRFQkFDS1xcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MTA6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTE2MTEtXFx0eyBcXFwic3dhcGNhY2hlZFxcXCIsXFx0XFx0XFx0TlJfU1dBUENBQ0hFXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzAxPWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczNi1cXG5tbS9tZW1jb250cm9sLmM6NTczNzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNTczOC0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MjAwPXN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XFxubW0vbWVtY29udHJvbC5jLTYyMDEtXFxubW0vbWVtY29udHJvbC5jOjYyMDI6I2VuZGlmIC8qIENPTkZJR19TV0FQICovXFxubW0vbWVtY29udHJvbC5jLTYyMDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjI5LjU1OTE4Mjg3M1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTAzMzgwMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCBmdW5jdGlvbi4gVGhlIGNvZGUgY2xlYXJseSBzaG93cyBpdCdzIGNvbmRpdGlvbmFsIG9uIGAjaWZkZWYgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZSwgb2YgY291cnNlLCB0aGF0IGZ1bmN0aW9uIGlzIGFib3V0IHVuY2hhcmdpbmcgc3dhcCBzcGFjZSBmcm9tIG1lbW9yeSBjZ3JvdXBzLCBzbyBpdCBzaG91bGQgYmUgZW5hYmxlZCB3aGVuIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZC4gUmlnaHQsIHNvIHdlIG5lZWQgYFNXQVBgIGNvbmZpZyBzZXQuXG5cbk5vdywgYSBiaXQgb2YgYW4gYW5vbWFseS4gSSdtIHNlZWluZyB0aGF0IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIHRoZSBzYW1lIGBTV0FQYCBndWFyZC4gVGhhdCdzIHVuZXhwZWN0ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGxpbmUgbnVtYmVycyB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGRlZmluZWQgYXQgbGluZSA1MjkzLiBBbmQgdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgYXQgNTczNy4gVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb246IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGNvbXBpbGVkIGV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSBzd2FwIGVuYWJsZWQuIFRoYXQnc+KApiBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGEgYnVnIG9yIGF0IGxlYXN0IGFuIHVubmVjZXNzYXJ5IGNvbXBsaWNhdGlvbi5cblxuVG8gYmUgY2VydGFpbiwgSSByZWFsbHkgbmVlZCB0byBjaGVjayB0aGUgZGVjbGFyYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIExldCdzIHRha2UgYSBsb29rIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNvbXBpbGVkIGluIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfU1dBUGAuIFRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBtZW1vcnkgYWNjb3VudGluZyB3b3JrcyBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MzQuNjYyNTY1NjYxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwMTQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjYwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MjppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTQ9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MC1cXHRcXHQgdW5zaWduZWQgc2hvcnQgaWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjM0LjcxMTE3MDY3OVoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk0NDkyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IENncm91cCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdGhhdCB0aGUgdGhpbmcgaXMgZGVjbGFyZWQgdW5jb25kaXRpb25hbGx5LCB3aGljaCBpcyBhcyBleHBlY3RlZC4gSG93ZXZlciwgSSdtIG5vdGluZyB0aGF0IGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0IGZpbGUgaGFzIGEgY29uZGl0aW9uYWwgZGVjbGFyYXRpb24gYmFzZWQgb24gYENPTkZJR19TV0FQYC4gSW50ZXJlc3RpbmcuIEkgaGF2ZSB0byBtYWtlIGEgbm90ZSBvZiB0aGlzLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gSSdtIHByZXR0eSBzdXJlIGl0J3MgcmVsYXRlZCB0byBgSFVHRVRMQl9QQUdFYCwgYnV0IEknbSBiZWluZyB0aG9yb3VnaC4gVGltZSB0byBqdW1wIG92ZXIgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBpbiBtaW5kIGFuZCBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTozOC4wMDU2Njc2MThaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjk3MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MjM1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0Ny0vKipcXG5tbS9tZW1jb250cm9sLmM6NTI0ODogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUyNDktICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1OC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1OTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTozOC4wNTE5Njk1NjZaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NTYzODg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIE1lbW9yeSBDb250cm9sIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBjb250cm9sIGlzIGNvbXBpbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb2RlIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTUVNQ0dgLCBgQ0dST1VQU2AsIGFuZCB0aGVuIGBTV0FQYCBmb3IgdGhlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgZnVuY3Rpb24uIE5vIG90aGVyIGZsYWdzIGp1bXAgb3V0IGF0IG1lIGFzIGRpcmVjdGx5IGluZmx1ZW5jaW5nIHRoaXMgc2VjdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIGZvciBsYXRlciB3aGVuIEknbSBjaGVja2luZyBkZXBlbmRlbmNpZXMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB3aGF0J3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoLiBGcm9tIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb25zIHRoYXQganVtcCBvdXQgYXMgdml0YWwgYXJlOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgaW5kZWVkIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgYmFzaWMuIEknbGwgZ28gYmFjayBhbmQgZG91YmxlIGNoZWNrIHRoYXQuIEl0J3MgZWFzeSB0byBvdmVybG9vayBhIHN1YnRsZSBjb25kaXRpb25hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NDMuMTQ3NjExNDIyWiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcwMjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU2MTA9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyNi0vKipcXG5tbS9tZW1jb250cm9sLmM6NTYyNzogKiBtZW1fY2dyb3VwX3NrX2NoYXJnZSAtIGNoYXJnZSBzb2NrZXQgbWVtb3J5XFxubW0vbWVtY29udHJvbC5jLTU2MjgtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYzNC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTYzNTpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy01NjM2LVxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjQzLjE5MzMxODkyWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTU0Njk5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgRnV6emluZyBDYW5kaWRhdGVzKipcblxuT2theSwgc28gSSdtIGNvbmZpcm1pbmcgbXkgc3VzcGljaW9uOyBpdCBsb29rcyBsaWtlIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAgKmlzKiBhY3R1YWxseSBiZWluZyBjYWxsZWQuIEdvb2QuIExldCdzIHNlZS4uLiB5ZXAsIGl0J3MgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGFuZCAqdGhhdCogb25lIGlzIGNhbGxlZCBmcm9tIGJvdGggYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYW5kIGBtZW1jZzFfc3dhcGluYC4gVGhhdCdzIGEgc29saWQsIHJlYWNoYWJsZSBwYXRoLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gYG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VgLiBZZXMsIHJlYWNoYWJsZS4gSSdtIHNlZWluZyBwYXRocyB0aHJvdWdoIGBzb2NrX3Jlc2VydmVfbWVtb3J5YCwgYF9fc2tfbWVtX3JhaXNlX2FsbG9jYXRlZGAsIGFuZCBgX19za19tZW1fcmVkdWNlX2FsbG9jYXRlZGAuIFRob3NlIGFyZSBhbGwgc29ja2V0IG9wZXJhdGlvbnMsIHdoaWNoIGdpdmVzIHVzIGdvb2QgY292ZXJhZ2UuXG5cbk5leHQgdXAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gWWVwLCByZWFjaGFibGUgdGhyb3VnaCBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIFRoYXQncyBnb29kLCB0aGF0IGhpdHMgdGhlIGh1Z2UgcGFnZXMgcGF0aC5cblxuRmluYWxseSwgbGV0J3MgdmVyaWZ5IHJlYWNoYWJpbGl0eSBvZiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gWWVzLCByZWFjaGFibGUgZnJvbSBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS5cblxuU28sIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCByZWFjaGFibGUuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCB3aGljaCBpcyBncmVhdC5cblxuT2theSwgbm93IGxldCdzIG1ha2Ugc3VyZSBvdXIgY29uZmlncyBhcmUgc2V0IHByb3Blcmx5LiBJIG5lZWQgdG8gcmV2aWV3OiBgTUVNQ0dgLCBgQ0dST1VQU2AsIGBTV0FQYCwgYW5kLCBjcml0aWNhbGx5LCBgSFVHRVRMQl9QQUdFYCBzaW5jZSB3ZSdyZSBmdXp6aW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gTGV0J3MganVzdCBtYWtlIHN1cmUgYEhVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgYSBjb25maWd1cmFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY2NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo0OC44ODg4MDI1NTZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDE5NzQ5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTEyOT1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjEzNTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNi1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzOC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTM5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0MC1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDItXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Mzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0NS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTQ2OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ3LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDktXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE1MDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNTEtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4tLVxcbm1tL0tjb25maWctNjk2LVxcbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNjk4LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NTAuNDkwNzgyNDM3WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzgyMjUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc3BlY2lhbGlzdCBpbiB0aGUgZmllbGQ6XG5cbioqUmVnYXJkaW5nIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBIVUdFVExCX1BBR0VgIGhlcmUuIFRoYXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHRlbGwgZnJvbSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgaXQgZGVmYXVsdHMgdG8gdGhlIGBIVUdFVExCRlNgIHNldHRpbmcuIFNvLCBsb29raW5nIGF0IHRoZSBkZWZhdWx0cywgdGhlIHdheSB0byBnbyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB3ZSBlbmFibGUgYEhVR0VUTEJGU2Agc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcG9pbnRzLiBUaGF0J3MgdGhlIGtleSB0aGluZyB0byBmb2N1cyBvbiBmb3Igb3VyIGN1cnJlbnQgc2V0dXAgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo1NS42MjkwMTExMTRaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjY5MDY3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NTcuMjk1OTIzOTczWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NTIzMjU4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyBteSBpbml0aWFsIGFzc2Vzc21lbnQg4oCTIHllcywgYEhVR0VUTEJGU2AgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYE1FTUNHYCwgYENHUk9VUFNgLCBgU1dBUGAsIGFuZCBgSFVHRVRMQkZTYC4gSnVzdCBxdWlja2x5IGRvdWJsZS1jaGVja2VkLCBhbmQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWdzIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIHRoZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCdzIGFsdGVyaW5nIHRoZSB3YXRlcm1hcmtzLCBgTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgYE1FTUNHX1NUT0NLX0hJR0hgLCB3aXRoaW4gdGhlIGBtZW1jZ19zdG9ja19wY3BgIHN0cnVjdHVyZS4gVGhlIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gYHJlZmlsbF9zdG9ja2AuIEluc3RlYWQgb2YgY29tcGxldGVseSBkcmFpbmluZyB0aGUgY2hhcmdlIHN0b2NrIHdoZW4gaXQncyBvdmVyIGBNRU1DR19DSEFSR0VfQkFUQ0hgLCB0aGUgcGF0Y2ggaXMgbm93IHVuY2hhcmdpbmcgb25seSB0aGUgZXhjZXNzLCBsZWF2aW5nIGEgcmVzZXJ2ZSBvZiBgTUVNQ0dfU1RPQ0tfTE9XYCBwYWdlcy4gVGhpcyBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbiB0aGF0IHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hlZCB2aWEgdmFyaW91cyBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBjcnVjaWFsbHksIGh1Z2V0bGIgcGFnZXMuXG5cbkkndmUgZ290IHRoZSBrZXkgc3ltYm9scyBpbiBteSBzaWdodHMgdG9vOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgbWVtX2Nncm91cF9za191bmNoYXJnZWAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhvc2Ugc3ltYm9sIG5hbWVzIG9uZSBtb3JlIHRpbWUuIFllcCwgdGhleSdyZSBjb3JyZWN0LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IHRob3NlIGFyZSB0aGUgcmlnaHQgc3ltYm9scy4gVGhleSBjYXB0dXJlIHRoZSBkaWZmZXJlbnQgdW5jaGFyZ2UgcGF0aHMgdGhhdCBldmVudHVhbGx5IGhpdCBgcmVmaWxsX3N0b2NrYCBvciBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGJ1dCB3aXRob3V0IGJlaW5nIG92ZXJseSBnZW5lcmljLCBhbmQgbm90IGZvY3VzaW5nIG9uIHRoZSAqaG90dGVzdCogcGF0aHMgbGlrZSBnZW5lcmljIHBhZ2UgYWxsb2NhdGlvbi9mcmVlaW5nLiBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgcmlnaHQgdGhpbmdzIHRvIGZvY3VzIG9uLlxuXG5Pa2F5LCBJJ20gaGFwcHkgd2l0aCB0aGlzIGFuYWx5c2lzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjEzLCJPdXRwdXRUb2tlbnMiOjI3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDowNi4yNDgyNjA0OTNaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg1MTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX3VuY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcFwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgd2F0ZXJtYXJrcyBmb3IgYSBjaGFyZ2Ugc3RvY2sgc2xvdCBpbiBgc3RydWN0IG1lbWNnX3N0b2NrX3BjcGAgKGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGApLiBJbiBgcmVmaWxsX3N0b2NrYCwgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRyYWluaW5nIHRoZSBzdG9jayB3aGVuIGl0IGV4Y2VlZHMgYE1FTUNHX0NIQVJHRV9CQVRDSGAsIGl0IG5vdyB1bmNoYXJnZXMgdGhlIGV4Y2VzcyBhbmQgbGVhdmVzIGBNRU1DR19TVE9DS19MT1dgIHBhZ2VzIGluIHRoZSBzdG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RvY2sgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgdW5jaGFyZ2VkIGFuZCByZWZpbGxlZCBpbnRvIHRoZSBwZXItY3B1IHN0b2NrLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHZhcmlvdXMgdW5jaGFyZ2UgcGF0aHMsIGluY2x1ZGluZyBzb2NrZXQgbWVtb3J5LCBzd2FwLCBhbmQgaHVnZXRsYiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2VcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSB3YXRlcm1hcmtzIGZvciBhIGNoYXJnZSBzdG9jayBzbG90IGluIGBzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwYCAoYE1FTUNHX1NUT0NLX0xPV2AgYW5kIGBNRU1DR19TVE9DS19ISUdIYCkuIEluIGByZWZpbGxfc3RvY2tgLCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZHJhaW5pbmcgdGhlIHN0b2NrIHdoZW4gaXQgZXhjZWVkcyBgTUVNQ0dfQ0hBUkdFX0JBVENIYCwgaXQgbm93IHVuY2hhcmdlcyB0aGUgZXhjZXNzIGFuZCBsZWF2ZXMgYE1FTUNHX1NUT0NLX0xPV2AgcGFnZXMgaW4gdGhlIHN0b2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IGNncm91cCBzdG9jayBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSB1bmNoYXJnZWQgYW5kIHJlZmlsbGVkIGludG8gdGhlIHBlci1jcHUgc3RvY2suIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGZyb20gdmFyaW91cyB1bmNoYXJnZSBwYXRocywgaW5jbHVkaW5nIHNvY2tldCBtZW1vcnksIHN3YXAsIGFuZCBodWdldGxiIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDowNi4zMjQxMjAxM1oiLCJTZXEiOjc1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4MDczNjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjMwOjA2LjMyNDY2ODQwMVoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjgwMTg0OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHN0b2NrIHJlZmlsbCBsb2dpYyBieSBpbnRyb2R1Y2luZyBuZXcgaGlnaCBhbmQgbG93IHdhdGVybWFya3MgKGBNRU1DR19TVE9DS19ISUdIYCBhbmQgYE1FTUNHX1NUT0NLX0xPV2ApIGZvciBjaGFyZ2Ugc3RvY2sgc2xvdHMsIGFuZCBjaGFuZ2luZyB0aGUgdHlwZSBvZiBgc3RvY2tfcGFnZXNgIHRvIGB1bnNpZ25lZCBpbnRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgY2FjaGluZyBvZiBtZW1vcnkgY2hhcmdlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkbyBub3QgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljYWwgZXJyb3JzIGluIG1lbW9yeSBhY2NvdW50aW5nIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgd2FybmluZ3MpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBlODQyZmQ4MjNlYWJkOGYwZWM2YmU4M2FhZTliOGY3ZTQzMzIxMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyNzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTdkYTFmNDNiN2QzYi4uZmY3ZmJjZDI3NDIyZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjA0OCw2ICsyMDQ4LDIxIEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqIG5yX3BhZ2VzIGluIGEgc2luZ2xlIGNhY2hlbGluZS4gVGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZS5cbiAgKi9cbiAjZGVmaW5lIE5SX01FTUNHX1NUT0NLIDdcbitcbisvKlxuKyAqIFdhdGVybWFya3MgZm9yIGEgY2hhcmdlIHN0b2NrIHNsb3QsIGluIHRoZSBzcGlyaXQgb2YgcGNwLVx1MDAzZWhpZ2ggYW5kXG4rICogcGNwLVx1MDAzZWJhdGNoOiBNRU1DR19TVE9DS19ISUdIIGlzIHRoZSBoaWdoIHdhdGVybWFyayBhdCB3aGljaCBhIHNsb3QgaXNcbisgKiB0cmltbWVkLCBhbmQgaXQgaXMgdHJpbW1lZCBkb3duIHRvIE1FTUNHX1NUT0NLX0xPVyByYXRoZXIgdGhhbiBlbXB0aWVkLlxuKyAqXG4rICogVXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGFzIGJvdGggaGlnaCB3YXRlcm1hcmsgYW5kIGVtcHR5aW5nIHRhcmdldFxuKyAqIHRocmFzaGVzOiBjaGFyZ2luZyBvbmUgcGFnZSBzdG9ja3MgNjMsIGFuIHVuY2hhcmdlIG9mIDIgdGFrZXMgdGhlIGNvdW50XG4rICogdG8gNjUgYW5kIGVtcHRpZXMgdGhlIHNsb3QsIGFuZCB0aGUgbmV4dCBjaGFyZ2UgbWlzc2VzLiBUaGUgd2F0ZXJtYXJrc1xuKyAqIGFyZSBNRU1DR19DSEFSR0VfQkFUQ0ggYXBhcnQsIHNvIGEgcGFnZV9jb3VudGVyIHVwZGF0ZSBzdGlsbCBjb3ZlcnMgYVxuKyAqIGZ1bGwgYmF0Y2guXG4rICovXG4rI2RlZmluZSBNRU1DR19TVE9DS19MT1dcdFx0KE1FTUNHX0NIQVJHRV9CQVRDSCAvIDIpXG4rI2RlZmluZSBNRU1DR19TVE9DS19ISUdIXHQoTUVNQ0dfU1RPQ0tfTE9XICsgTUVNQ0dfQ0hBUkdFX0JBVENIKVxuK1xuICNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRVx0MFxuIHN0cnVjdCBtZW1jZ19zdG9ja19wY3Age1xuIFx0bG9jYWxfdHJ5bG9ja190IGxvY2s7XG5AQCAtMjIyMywxNyArMjIzOCwxOCBAQCBzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2s7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqY2FjaGVkO1xuLVx0dWludDhfdCBzdG9ja19wYWdlcztcbitcdHVuc2lnbmVkIGludCBzdG9ja19wYWdlcztcbiBcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuIFx0aW50IGVtcHR5X3Nsb3QgPSAtMTtcbiBcdGludCBpO1xuIFxuIFx0Lypcbi1cdCAqIEZvciBub3cgbGltaXQgTUVNQ0dfQ0hBUkdFX0JBVENIIHRvIDEyNyBhbmQgbGVzcy4gSW4gZnV0dXJlIGlmIHdlXG4tXHQgKiBkZWNpZGUgdG8gaW5jcmVhc2UgaXQgbW9yZSB0aGFuIDEyNyB0aGVuIHdlIHdpbGwgbmVlZCBtb3JlIGNhcmVmdWxcbi1cdCAqIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC5cbitcdCAqIG5yX3BhZ2VzW10gaXMgYSB1aW50OF90IGFuZCBhIHNsb3QncyBjb3VudCBpcyBjYXBwZWQgYXRcbitcdCAqIE1FTUNHX1NUT0NLX0hJR0guIFJhaXNpbmcgTUVNQ0dfQ0hBUkdFX0JBVENIIGJleW9uZCAxMjcgd291bGQgbmVlZFxuK1x0ICogbW9yZSBjYXJlZnVsIGhhbmRsaW5nIG9mIG5yX3BhZ2VzW10gaW4gc3RydWN0IG1lbWNnX3N0b2NrX3BjcC5cbiBcdCAqL1xuIFx0QlVJTERfQlVHX09OKE1FTUNHX0NIQVJHRV9CQVRDSCBcdTAwM2UgUzhfTUFYKTtcbitcdEJVSUxEX0JVR19PTihNRU1DR19TVE9DS19ISUdIIFx1MDAzZSBVOF9NQVgpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpO1xuIFxuQEAgLTIyNTQsOSArMjI3MCwxMiBAQCBzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRcdFx0ZW1wdHlfc2xvdCA9IGk7XG4gXHRcdGlmIChtZW1jZyA9PSBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlY2FjaGVkW2ldKSkge1xuIFx0XHRcdHN0b2NrX3BhZ2VzID0gUkVBRF9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldKSArIG5yX3BhZ2VzO1xuK1x0XHRcdGlmIChzdG9ja19wYWdlcyBcdTAwM2UgTUVNQ0dfU1RPQ0tfSElHSCkge1xuK1x0XHRcdFx0bWVtY2dfdW5jaGFyZ2UobWVtY2csXG4rXHRcdFx0XHRcdCAgICAgICBzdG9ja19wYWdlcyAtIE1FTUNHX1NUT0NLX0xPVyk7XG4rXHRcdFx0XHRzdG9ja19wYWdlcyA9IE1FTUNHX1NUT0NLX0xPVztcbitcdFx0XHR9XG4gXHRcdFx0V1JJVEVfT05DRShzdG9jay1cdTAwM2Vucl9wYWdlc1tpXSwgc3RvY2tfcGFnZXMpO1xuLVx0XHRcdGlmIChzdG9ja19wYWdlcyBcdTAwM2UgTUVNQ0dfQ0hBUkdFX0JBVENIKVxuLVx0XHRcdFx0ZHJhaW5fc3RvY2soc3RvY2ssIGkpO1xuIFx0XHRcdHN1Y2Nlc3MgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDowNi4zMjQ2NzAyNDFaIiwiU2VxIjo3NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI4MDE1OTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIFN0b2NrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbWVtY2cgc3RvY2sgbWVjaGFuaXNtIGFuZCBjaGFyZ2UvdW5jaGFyZ2Ugd2F0ZXJtYXJrcy4gSXQgbG9va3MgbGlrZSBpdCdzIHJlZmluaW5nIHRoZSBzdG9jayBtYW5hZ2VtZW50IHVzaW5nIGBNRU1DR19TVE9DS19MT1dgIGFuZCBgTUVNQ0dfU1RPQ0tfSElHSGAgdmFsdWVzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIGxvZ2ljIGNoYW5nZS4gYHJlZmlsbF9zdG9ja2AgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlc2UgbmV3IHdhdGVybWFya3MsIGFuZCB0aGUgdHlwZSBvZiBgc3RvY2tfcGFnZXNgIGlzIGdldHRpbmcgYnVtcGVkIHVwIHRvIGFuIGB1bnNpZ25lZCBpbnRgLiBUaGUgYWRkZWQgYEJVSUxEX0JVR19PTmAgZW5zdXJlcyBgTUVNQ0dfU1RPQ0tfSElHSGAgZG9lc24ndCBleGNlZWQgYSBieXRlLCB3aGljaCBpcyBnb29kIHNhbml0eSBjaGVja2luZy5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgbmV3IGxvZ2ljIGluIGByZWZpbGxfc3RvY2tgIHdoZW4gYHN0b2NrX3BhZ2VzYCBleGNlZWRzIGBNRU1DR19TVE9DS19ISUdIYC4gSW5zdGVhZCBvZiBkcmFpbmluZyBldmVyeXRoaW5nIGxpa2UgYmVmb3JlLCBpdCB1bmNoYXJnZXMgYHN0b2NrX3BhZ2VzIC0gTUVNQ0dfU1RPQ0tfTE9XYCBhbmQgcmVzZXRzIGBzdG9ja19wYWdlc2AgdG8gYE1FTUNHX1NUT0NLX0xPV2AuIFRoaXMgc2VlbXMgZGVzaWduZWQgdG8gc21vb3RoIG91dCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb3BlcmF0aW9ucywgcHJldmVudGluZyBodWdlIHNwaWtlcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXJlYSwgdGhpcyBpcyBtb3N0bHkgbWVtb3J5IGFjY291bnRpbmcsIGl0IGlzbid0IGRpcmVjdGx5IGludm9sdmluZyBhbnkgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgc28gS01TQU4gc2hvdWxkIGJlIHVubmVjZXNzYXJ5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGFyZSBsaWtlbHkgdG8gYmUgbG9naWNhbCBlcnJvcnMgaW4gdGhlIGFjY291bnRpbmcgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGlmIG9iamVjdCBsaWZldGltZXMgZ2V0IHRhbmdsZWQsIGJ1dCBub3QgYmVjYXVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LCBidXQgbGV0J3MgZG91YmxlLWNoZWNrLlxuXG5Pa2F5LCBsZXQncyBzdGVwIHRocm91Z2ggdGhlIGtleSB2YXJpYWJsZSwgYHN0b2NrX3BhZ2VzYCwgbWFraW5nIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSXQgYXBwZWFycyB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgYHJlZmlsbF9zdG9ja2AgZnVuY3Rpb246IGl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBpbml0aWFsaXplZCB1c2luZyB0aGUgY3VycmVudCBjb3VudCBwbHVzIGBucl9wYWdlc2AuIEkgc2VlIHRoYXQuIEl0IGlzIGJlaW5nIGluaXRpYWxpemVkIGNvcnJlY3RseSB0byBhbiBhcmd1bWVudCBvZiB0aGF0IGZ1bmN0aW9uLiBObyBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgc2VudCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IHJlaW5mb3JjZXMgbXkgb3JpZ2luYWwgdGhvdWdodHMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHdpdGhvdXQgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgcmlzayBpcyBsaW1pdGVkIHRvIGxvZ2ljYWwgZXJyb3JzIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDoxNC42MDQ4MzI4NDJaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RvY2sgcmVmaWxsIGxvZ2ljIGJ5IGludHJvZHVjaW5nIG5ldyBoaWdoIGFuZCBsb3cgd2F0ZXJtYXJrcyAoYE1FTUNHX1NUT0NLX0hJR0hgIGFuZCBgTUVNQ0dfU1RPQ0tfTE9XYCkgZm9yIGNoYXJnZSBzdG9jayBzbG90cywgYW5kIGNoYW5naW5nIHRoZSB0eXBlIG9mIGBzdG9ja19wYWdlc2AgdG8gYHVuc2lnbmVkIGludGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHRoZSBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBjYWNoaW5nIG9mIG1lbW9yeSBjaGFyZ2VzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWNhbCBlcnJvcnMgaW4gbWVtb3J5IGFjY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3VlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB3YXJuaW5ncyksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzdG9jayByZWZpbGwgbG9naWMgYnkgaW50cm9kdWNpbmcgbmV3IGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzIChgTUVNQ0dfU1RPQ0tfSElHSGAgYW5kIGBNRU1DR19TVE9DS19MT1dgKSBmb3IgY2hhcmdlIHN0b2NrIHNsb3RzLCBhbmQgY2hhbmdpbmcgdGhlIHR5cGUgb2YgYHN0b2NrX3BhZ2VzYCB0byBgdW5zaWduZWQgaW50YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIGFjY291bnRpbmcgYW5kIGNhY2hpbmcgb2YgbWVtb3J5IGNoYXJnZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyBpbiBtZW1vcnkgYWNjb3VudGluZyBvciBvYmplY3QgbGlmZXRpbWUgaXNzdWVzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHdhcm5pbmdzKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[1] Phase: Succeeded StartedAt: 2026-08-18 00:30:25 +0000 UTC FinishedAt: 2026-08-18 00:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 00:30:25 +0000 UTC FinishedAt: 2026-08-18 00:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2] Phase: Succeeded StartedAt: 2026-08-18 00:30:25 +0000 UTC FinishedAt: 2026-08-18 04:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 00:30:25 +0000 UTC FinishedAt: 2026-08-18 04:15:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 00:30:25 +0000 UTC FinishedAt: 2026-08-18 00:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 00:30:25 +0000 UTC FinishedAt: 2026-08-18 00:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5njgg/series-workflow5njgg-convert-artifact-580323891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 00:30:35 +0000 UTC FinishedAt: 2026-08-18 00:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 00:30:35 +0000 UTC FinishedAt: 2026-08-18 00:47:43 +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:*0e84445e-2d24-44f6-9cc7-832352262b98,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-workflow5njgg/series-workflow5njgg-convert-artifact-580323891/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": "f9d09459-bad2-4603-85de-9565751d0ade", "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-workflow5njgg/series-workflow5njgg-build-action-3724358881/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 00:30:35 +0000 UTC FinishedAt: 2026-08-18 00:47:33 +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:*0e84445e-2d24-44f6-9cc7-832352262b98,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-workflow5njgg/series-workflow5njgg-convert-artifact-580323891/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": "f9d09459-bad2-4603-85de-9565751d0ade", "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-workflow5njgg/series-workflow5njgg-build-action-3724358881/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 00:47:43 +0000 UTC FinishedAt: 2026-08-18 00:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 00:47:43 +0000 UTC FinishedAt: 2026-08-18 00:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 00:47:43 +0000 UTC FinishedAt: 2026-08-18 00:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 00:47:43 +0000 UTC FinishedAt: 2026-08-18 00:47:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5njgg/series-workflow5njgg-convert-artifact-1831993130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 00:47:53 +0000 UTC FinishedAt: 2026-08-18 00:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 00:47:53 +0000 UTC FinishedAt: 2026-08-18 00:49:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9d09459-bad2-4603-85de-9565751d0ade,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-workflow5njgg/series-workflow5njgg-build-action-3724358881/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-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 00:50:07 +0000 UTC FinishedAt: 2026-08-18 00:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 00:50:07 +0000 UTC FinishedAt: 2026-08-18 00:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 00:50:07 +0000 UTC FinishedAt: 2026-08-18 01:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 00:50:07 +0000 UTC FinishedAt: 2026-08-18 01:07:46 +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:*0e84445e-2d24-44f6-9cc7-832352262b98,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-workflow5njgg/series-workflow5njgg-convert-artifact-1831993130/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": "fa7e42a6-4759-4e3c-99d0-849d3ff4a390", "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-workflow5njgg/series-workflow5njgg-build-action-4147582542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 00:50:07 +0000 UTC FinishedAt: 2026-08-18 01:07:36 +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:*0e84445e-2d24-44f6-9cc7-832352262b98,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-workflow5njgg/series-workflow5njgg-convert-artifact-1831993130/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": "fa7e42a6-4759-4e3c-99d0-849d3ff4a390", "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-workflow5njgg/series-workflow5njgg-build-action-4147582542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 01:07:46 +0000 UTC FinishedAt: 2026-08-18 01:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 01:07:46 +0000 UTC FinishedAt: 2026-08-18 01:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 01:07:46 +0000 UTC FinishedAt: 2026-08-18 01:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 01:07:46 +0000 UTC FinishedAt: 2026-08-18 01:09:31 +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:*fa7e42a6-4759-4e3c-99d0-849d3ff4a390,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-workflow5njgg/series-workflow5njgg-build-action-4147582542/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-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 01:09:41 +0000 UTC FinishedAt: 2026-08-18 04:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 01:09:41 +0000 UTC FinishedAt: 2026-08-18 04:15:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},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:*f9d09459-bad2-4603-85de-9565751d0ade,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa7e42a6-4759-4e3c-99d0-849d3ff4a390,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-workflow5njgg/series-workflow5njgg-build-action-3724358881/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-workflow5njgg/series-workflow5njgg-build-action-4147582542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 01:09:41 +0000 UTC FinishedAt: 2026-08-18 01:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 01:09:41 +0000 UTC FinishedAt: 2026-08-18 01:09:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},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-workflow5njgg/series-workflow5njgg-convert-artifact-2814416831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 01:09:41 +0000 UTC FinishedAt: 2026-08-18 01:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 01:09:41 +0000 UTC FinishedAt: 2026-08-18 01:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 01:09:42 +0000 UTC FinishedAt: 2026-08-18 01:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 01:09:52 +0000 UTC FinishedAt: 2026-08-18 04:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5njgg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_sk_charge","mem_cgroup_sk_uncharge","__mem_cgroup_uncharge_swap","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS","SWAP","HUGETLBFS"],"series_id":"5d78b56c-d47f-44b4-b359-4f9843fd1190","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 01:09:52 +0000 UTC FinishedAt: 2026-08-18 04:14:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9d09459-bad2-4603-85de-9565751d0ade,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa7e42a6-4759-4e3c-99d0-849d3ff4a390,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-workflow5njgg/series-workflow5njgg-build-action-3724358881/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-workflow5njgg/series-workflow5njgg-build-action-4147582542/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-workflow5njgg/series-workflow5njgg-convert-artifact-2814416831/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,}