Name: series-workflowdwhgc Phase: Succeeded StartedAt: 2026-07-13 14:25:21 +0000 UTC FinishedAt: 2026-07-13 19:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[0] Phase: Succeeded StartedAt: 2026-07-13 14:25:21 +0000 UTC FinishedAt: 2026-07-13 14:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 14:25:21 +0000 UTC FinishedAt: 2026-07-13 14:46:13 +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": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "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": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "series_id": "ec802087-8acd-4231-9537-d69f08031643" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__kmemleak_scan", "confirm_leak", "kmemleak_scan" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rbWVtbGVha19zY2FuJiMzNDssCiAgICAmIzM0O2NvbmZpcm1fbGVhayYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkMGY4NTdiNTEzZWI5OGJkYzljMjQxYWFjNTAzODI4NjAwYWM1MmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAxNDo0NToxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG5AQCAtMTk4LDYgJiM0MzsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvclxuIHN0YWNrcy4gS21lbWxlYWsgZGVmaW5lcyBNU0VDU19NSU5fQUdFIChkZWZhdWx0aW5nIHRvIDEwMDApIHJlcHJlc2VudGluZ1xuIHRoZSBtaW5pbXVtIGFnZSBvZiBhbiBvYmplY3QgdG8gYmUgcmVwb3J0ZWQgYXMgYSBtZW1vcnkgbGVhay5cbiBcbiYjNDM7VGhlIGBgbWluX3VucmVmX3NjYW5zYGAgbW9kdWxlIHBhcmFtZXRlciAoZGVmYXVsdCAxKSByZXF1aXJlcyBhbiBvYmplY3QgdG9cbiYjNDM7YmUgc2VlbiB1bnJlZmVyZW5jZWQgaW4gdGhhdCBtYW55IGNvbnNlY3V0aXZlIHNjYW5zIGJlZm9yZSBpdCBpcyByZXBvcnRlZC5cbiYjNDM7S2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyXG4mIzQzO3RoZSB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmVzIGRlc2NyaWJlZCBhYm92ZSwgYXQgdGhlIGNvc3Qgb2YgZGVsYXlpbmdcbiYjNDM7Z2VudWluZSByZXBvcnRzIGJ5IHVwIHRvIHRoYXQgbWFueSBzY2Fucy4gSXQgY2FuIGJlIHNldCBhdCBib290IHdpdGhcbiYjNDM7YGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9XHUwMDNjblx1MDAzZWBgIG9yIGF0IHJ1bi10aW1lIHZpYVxuJiM0MztgYC9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zYGAuXG4mIzQzO1xuIExpbWl0YXRpb25zIGFuZCBEcmF3YmFja3NcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcbmluZGV4IGU5NmU5ZWZkMTliMGQ5Li44NWYxOGIxN2U3OWM0ZSAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xNTEsNiAmIzQzOzE1MSw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xuIFx0aW50IG1pbl9jb3VudDtcbiBcdC8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi9cbiBcdGludCBjb3VudDtcbiYjNDM7XHQvKiBjb25zZWN1dGl2ZSBzY2FucyB0aGUgb2JqZWN0IGhhcyBiZWVuIHNlZW4gdW5yZWZlcmVuY2VkICovXG4mIzQzO1x0dW5zaWduZWQgaW50IHVucmVmX3NjYW5zO1xuIFx0LyogY2hlY2tzdW0gZm9yIGRldGVjdGluZyBtb2RpZmllZCBvYmplY3RzICovXG4gXHR1MzIgY2hlY2tzdW07XG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7XG5AQCAtMTc1LDYgJiM0MzsxNzcsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHtcbiAjZGVmaW5lIE9CSkVDVF9QSFlTXHRcdCgxIFx1MDAzY1x1MDAzYyA0KVxuIC8qIGZsYWcgc2V0IGZvciBwZXItQ1BVIHBvaW50ZXJzICovXG4gI2RlZmluZSBPQkpFQ1RfUEVSQ1BVXHRcdCgxIFx1MDAzY1x1MDAzYyA1KVxuJiM0MzsvKiBmbGFnIHNldCBvbiBhbiBvYmplY3QgbGVmdCB1bnJlZmVyZW5jZWQgYnkgdGhlIGZ1bGwgc2NhbiwgcGVuZGluZyBjb25maXJtYXRpb24gKi9cbiYjNDM7I2RlZmluZSBPQkpFQ1RfU1VTUEVDVFx0XHQoMSBcdTAwM2NcdTAwM2MgNilcbiBcbiAvKiBzZXQgd2hlbiBfX3JlbW92ZV9vYmplY3QoKSBjYWxsZWQgKi9cbiAjZGVmaW5lIERFTFNUQVRFX1JFTU9WRURcdCgxIFx1MDAzY1x1MDAzYyAwKVxuQEAgLTIzMiw5ICYjNDM7MjM2LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjtcbiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzY2FuX3RocmVhZDtcbiAvKiB1c2VkIHRvIGF2b2lkIHJlcG9ydGluZyBvZiByZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTtcbiYjNDM7LyogY29uc2VjdXRpdmUgc2NhbnMgYW4gb2JqZWN0IG11c3Qgc3RheSB1bnJlZmVyZW5jZWQgYmVmb3JlIHJlcG9ydGluZyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4mIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xuIC8qIGRlbGF5IGJldHdlZW4gYXV0b21hdGljIG1lbW9yeSBzY2FubmluZ3MgKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDtcbiYjNDM7LyogbnVtYmVyIG9mIG9iamVjdHMgZmxhZ2dlZCBPQkpFQ1RfU1VTUEVDVCBkdXJpbmcgdGhlIGN1cnJlbnQgc2NhbiAqL1xuJiM0MztzdGF0aWMgaW50IG5yX3N1c3BlY3RzO1xuIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovXG4gc3RhdGljIGludCBrbWVtbGVha19zdGFja19zY2FuID0gMTtcbiAvKiBwcm90ZWN0cyB0aGUgbWVtb3J5IHNjYW5uaW5nLCBwYXJhbWV0ZXJzIGFuZCBkZWJ1Zy9rbWVtbGVhayBmaWxlIGFjY2VzcyAqL1xuQEAgLTY4OCw2ICYjNDM7Njk3LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcClcbiBcdG9iamVjdC1cdTAwM2VleGNlc3NfcmVmID0gMDtcbiBcdG9iamVjdC1cdTAwM2Vjb3VudCA9IDA7XHRcdFx0Lyogd2hpdGUgY29sb3IgaW5pdGlhbGx5ICovXG4gXHRvYmplY3QtXHUwMDNlY2hlY2tzdW0gPSB+MDtcbiYjNDM7XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWRlbF9zdGF0ZSA9IDA7XG4gXG4gXHQvKiB0YXNrIGluZm9ybWF0aW9uICovXG5AQCAtMTQ0MCw2ICYjNDM7MTQ1MCwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXG4gXHQgKi9cbiBcdG9iamVjdC1cdTAwM2Vjb3VudCYjNDM7JiM0Mzs7XG4gXHRpZiAoY29sb3JfZ3JheShvYmplY3QpKSB7XG4mIzQzO1x0XHQvKiByZWZlcmVuY2VkIGFmdGVyIGFsbCwgbm8gbG9uZ2VyIGEgc3VzcGVjdCAqL1xuJiM0MztcdFx0aWYgKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1NVU1BFQ1QpIHtcbiYjNDM7XHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9CSkVDVF9TVVNQRUNUO1xuJiM0MztcdFx0XHRucl9zdXNwZWN0cy0tO1xuJiM0MztcdFx0fVxuIFx0XHQvKiBwdXRfb2JqZWN0KCkgY2FsbGVkIHdoZW4gcmVtb3ZpbmcgZnJvbSBncmF5X2xpc3QgKi9cbiBcdFx0V0FSTl9PTighZ2V0X29iamVjdChvYmplY3QpKTtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZvYmplY3QtXHUwMDNlZ3JheV9saXN0LCBcdTAwMjZncmF5X2xpc3QpO1xuQEAgLTE4NDQsMTYgJiM0MzsxODU5LDE2IEBAIHN0YXRpYyB2b2lkIGRlZHVwX2ZsdXNoKHN0cnVjdCB4YXJyYXkgKmRlZHVwKVxuICAqIGtlcm5lbCYjMzk7cyBzdGFuZGFyZCBhbGxvY2F0b3JzLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlXG4gICogc2Nhbl9tdXRleCBoZWxkLlxuICAqL1xuLXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiYjNDM7c3RhdGljIGludCBfX2ttZW1sZWFrX3NjYW4oYm9vbCBmdWxsKVxuIHtcbiBcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcbiBcdHN0cnVjdCB6b25lICp6b25lO1xuIFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XG4tXHRzdHJ1Y3QgeGFycmF5IGRlZHVwO1xuLVx0aW50IG5ld19sZWFrcyA9IDA7XG4gXHRpbnQgc3RvcCA9IDA7XG4gXG4gXHRqaWZmaWVzX2xhc3Rfc2NhbiA9IGppZmZpZXM7XG4mIzQzO1x0aWYgKGZ1bGwpXG4mIzQzO1x0XHRucl9zdXNwZWN0cyA9IDA7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBrbWVtbGVha19vYmplY3QmIzM5O3MgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbkBAIC0xODgxLDggJiM0MzsxODk2LDEzIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBcdFx0XHRcdF9fcGFpbnRfaXQob2JqZWN0LCBLTUVNTEVBS19CTEFDSyk7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qIHJlZmVyZW5jZWQgbGFzdCBzY2FuOiByZXN0YXJ0IHRoZSB1bnJlZmVyZW5jZWQgcnVuICovXG4mIzQzO1x0XHRpZiAoIWNvbG9yX3doaXRlKG9iamVjdCkpXG4mIzQzO1x0XHRcdG9iamVjdC1cdTAwM2V1bnJlZl9zY2FucyA9IDA7XG4gXHRcdC8qIHJlc2V0IHRoZSByZWZlcmVuY2UgY291bnQgKHdoaXRlbiB0aGUgb2JqZWN0KSAqL1xuIFx0XHRvYmplY3QtXHUwMDNlY291bnQgPSAwO1xuJiM0MztcdFx0aWYgKGZ1bGwpXG4mIzQzO1x0XHRcdG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5PQkpFQ1RfU1VTUEVDVDtcbiBcdFx0aWYgKGNvbG9yX2dyYXkob2JqZWN0KSBcdTAwMjZcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxuIFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2b2JqZWN0LVx1MDAzZWdyYXlfbGlzdCwgXHUwMDI2Z3JheV9saXN0KTtcbiBcbkBAIC0xOTUwLDYgJiM0MzsxOTcwLDEwIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBzY2FuX2dyYXk6XG4gXHRzY2FuX2dyYXlfbGlzdCgpO1xuIFxuJiM0MztcdC8qIGEgY29uZmlybWF0aW9uIHNjYW4gZG9lcyBub3QgbG9vayBmb3IgbW9kaWZpZWQgb2JqZWN0cyAqL1xuJiM0MztcdGlmICghZnVsbClcbiYjNDM7XHRcdHJldHVybiBucl9zdXNwZWN0cztcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ2hlY2sgZm9yIG5ldyBvciB1bnJlZmVyZW5jZWQgb2JqZWN0cyBtb2RpZmllZCBzaW5jZSB0aGUgcHJldmlvdXNcbiBcdCAqIHNjYW4gYW5kIGNvbG9yIHRoZW0gZ3JheSB1bnRpbCB0aGUgbmV4dCBzY2FuLlxuQEAgLTE5NzIsNiAmIzQzOzE5OTYsMTEgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxuIFx0XHRcdC8qIGNvbG9yIGl0IGdyYXkgdGVtcG9yYXJpbHkgKi9cbiBcdFx0XHRvYmplY3QtXHUwMDNlY291bnQgPSBvYmplY3QtXHUwMDNlbWluX2NvdW50O1xuIFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2b2JqZWN0LVx1MDAzZWdyYXlfbGlzdCwgXHUwMDI2Z3JheV9saXN0KTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAodW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAhKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xuJiM0MztcdFx0XHQvKiBmbGFnIHRoZSBvYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoaXMgc2NhbiAqL1xuJiM0MztcdFx0XHRvYmplY3QtXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1NVU1BFQ1Q7XG4mIzQzO1x0XHRcdG5yX3N1c3BlY3RzJiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNm9iamVjdC1cdTAwM2Vsb2NrKTtcbiBcdH1cbkBAIC0xOTgyLDEyICYjNDM7MjAxMSw2MiBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHQgKi9cbiBcdHNjYW5fZ3JheV9saXN0KCk7XG4gXG4mIzQzO1x0cmV0dXJuIG5yX3N1c3BlY3RzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9tb3RlIGEgc3VzcGVjdGVkIG9iamVjdCB0byBhIHJlcG9ydGVkIGxlYWsgb25jZSBpdCBoYXMgc3RheWVkXG4mIzQzOyAqIHVucmVmZXJlbmNlZCBmb3IgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBDYWxsZWQgd2l0aFxuJiM0MzsgKiBvYmplY3QtXHUwMDNlbG9jayBoZWxkOyByZXR1cm5zIHRydWUgd2hlbiB0aGUgb2JqZWN0IGlzIG5ld2x5IHJlcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgY29uZmlybV9sZWFrKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdClcbiYjNDM7e1xuJiM0MztcdGlmICghdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIHx8XG4mIzQzO1x0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfU1VTUEVDVCkgfHxcbiYjNDM7XHQgICAgKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zICYjNDM7PSAxO1xuJiM0MztcdGlmIChvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgXHUwMDNjIG1pbl91bnJlZl9zY2FucylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2NhbiB0aGUgbWVtb3J5IGFuZCByZXBvcnQgdGhlIHVucmVmZXJlbmNlZCBvYmplY3RzIGFzIGxlYWtzLiBNdXN0IGJlXG4mIzQzOyAqIGNhbGxlZCB3aXRoIHRoZSBzY2FuX211dGV4IGhlbGQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7XG4mIzQzO1x0c3RydWN0IHhhcnJheSBkZWR1cDtcbiYjNDM7XHRpbnQgbmV3X2xlYWtzID0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGdWxsIHNjYW4uIE9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYXJlIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgYW5kXG4mIzQzO1x0ICogY291bnRlZCBpbiB0aGUgcmV0dXJuIHZhbHVlOyBub3RoaW5nIHRvIGNvbmZpcm0gb3IgcmVwb3J0IG90aGVyd2lzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgc2Nhbm5pbmcgd2FzIHN0b3BwZWQgZG8gbm90IHJlcG9ydCBhbnkgbmV3IHVucmVmZXJlbmNlZCBvYmplY3RzLlxuIFx0ICovXG4gXHRpZiAoc2Nhbl9zaG91bGRfc3RvcCgpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGxpdmUgb2JqZWN0IHdob3NlIG9ubHkgcmVmZXJlbmNlIGlzIG1vdmVkIGJ5LCBmb3IgZXhhbXBsZSwgYVxuJiM0MztcdCAqIGNvbmN1cnJlbnQgUkNVIHVwZGF0ZSBjYW4gYmUgbWlzc2VkIGZvciBvbmUgc2NhbiBhbmQgcmVwb3J0ZWQgYXMgYVxuJiM0MztcdCAqIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZS4gU2NhbiBhZ2FpbiBhbmQgb25seSByZXBvcnQgdGhlIG9iamVjdHNcbiYjNDM7XHQgKiBsZWZ0IHVucmVmZXJlbmNlZCAoc3RpbGwgZmxhZ2dlZCBPQkpFQ1RfU1VTUEVDVCkgYnkgYm90aCBzY2Fucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX2ttZW1sZWFrX3NjYW4oZmFsc2UpO1xuJiM0MztcdGlmIChzY2FuX3Nob3VsZF9zdG9wKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LypcbiBcdCAqIFNjYW5uaW5nIHJlc3VsdCByZXBvcnRpbmcuIFdoZW4gdmVyYm9zZSBwcmludGluZyBpcyBlbmFibGVkLCBkZWR1cGVcbiBcdCAqIGJ5IHN0YWNrZGVwb3QgdHJhY2VfaGFuZGxlIHNvIGVhY2ggdW5pcXVlIGJhY2t0cmFjZSBpcyBsb2dnZWQgb25jZVxuQEAgLTIwMTQsOSAmIzQzOzIwOTMsOCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdHJhd19zcGluX2xvY2tfaXJxKFx1MDAyNm9iamVjdC1cdTAwM2Vsb2NrKTtcbiBcdFx0dHJhY2VfaGFuZGxlID0gMDtcbiBcdFx0ZGVkdXBfcHJpbnQgPSBmYWxzZTtcbi1cdFx0aWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKSB7XG4tXHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29uZmlybV9sZWFrKG9iamVjdCkpIHtcbiBcdFx0XHRpZiAoa21lbWxlYWtfdmVyYm9zZSkge1xuIFx0XHRcdFx0dHJhY2VfaGFuZGxlID0gb2JqZWN0LVx1MDAzZXRyYWNlX2hhbmRsZTtcbiBcdFx0XHRcdGRlZHVwX3ByaW50ID0gdHJ1ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfZ3VwX3Rlc3Quc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2htbS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXRsYi5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXZtLnNoXG4mIzQzO1RFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa21lbWxlYWtfZGVkdXAuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2tzbS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa3NtX251bWEuc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2E4NTc2ZTgzNWM4ZDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuQEAgLTAsMCAmIzQzOzEsMTMyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIEZ1bmN0aW9uYWwgdGVzdCBmb3Iga21lbWxlYWsmIzM5O3MgTi1jb25zZWN1dGl2ZS1zY2FuIGxlYWsgY29uZmlybWF0aW9uXG4mIzQzOyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuXG4mIzQzOyNcbiYjNDM7IyBrbWVtbGVhayBvbmx5IHJlcG9ydHMgYW4gb2JqZWN0IG9uY2UgaXQgaGFzIHN0YXllZCB1bnJlZmVyZW5jZWQgZm9yXG4mIzQzOyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0XG4mIzQzOyMgc2NhbiAoaGlzdG9yaWNhbCBiZWhhdmlvdXIpOyBoaWdoZXIgdmFsdWVzIGZpbHRlciB0cmFuc2llbnQgZmFsc2VcbiYjNDM7IyBwb3NpdGl2ZXMgd2hlcmUgYSBsaXZlIG9iamVjdCYjMzk7cyBvbmx5IHJlZmVyZW5jZSBpcyBicmllZmx5IGludmlzaWJsZSB0byBhXG4mIzQzOyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlXG4mIzQzOyMgdGVzdCBsb2FkcyBzYW1wbGVzL2ttZW1sZWFrJiMzOTtzIGhlbHBlciBtb2R1bGUgdG8gY3JlYXRlIG9ycGhhbiBhbGxvY2F0aW9uc1xuJiM0MzsjIGFuZCwgY291bnRpbmcgb25seSB0aG9zZSBvcnBoYW5zIChtYXRjaGVkIGJ5IHRoZWlyIFtrbWVtbGVha190ZXN0XVxuJiM0MzsjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLFxuJiM0MzsjIGNoZWNrcyB0aGF0OlxuJiM0MzsjICAgLSBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdCBpcyBncmV5ZWQgb24gaXRzIGZpcnN0IHNjYW4gKGl0cyBjaGVja3N1bVxuJiM0MzsjICAgICBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCBiZWZvcmUgdGhhdCBwcmltaW5nIHNjYW47XG4mIzQzOyMgICAgIGVhY2ggY2FzZSBiZWxvdyBwcmltZXMgb25jZSBmaXJzdCxcbiYjNDM7IyAgIC0gd2l0aCB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgKG1pbl91bnJlZl9zY2Fucz0xKSBvbmUgc2NhbiBhZnRlciBwcmltaW5nXG4mIzQzOyMgICAgIHJlcG9ydHMgdGhlIG9ycGhhbnMsXG4mIzQzOyMgICAtIHJhaXNpbmcgdGhlIHRocmVzaG9sZCB0byAyIG5lZWRzIHR3byBzY2FucyBhZnRlciBwcmltaW5nOiBvbmUgaXMgbm90XG4mIzQzOyMgICAgIGVub3VnaCwgdGhlIHNlY29uZCByZXBvcnRzLFxuJiM0MzsjICAgLSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbiYjNDM7I1xuJiM0MzsjIFRoZSBcJiMzNDtvbmUgcG9zdC1wcmltZSBzY2FuIGlzIG5vdCBlbm91Z2ggYXQgbWluX3VucmVmX3NjYW5zPTJcJiMzNDsgY2hlY2sgaXMgdGhlXG4mIzQzOyMgY29yZSByZWdyZXNzaW9uIHRlc3Q6IHJhaXNpbmcgbWluX3VucmVmX3NjYW5zIG11c3QgcHVzaCB0aGUgcmVwb3J0XG4mIzQzOyMgc3RyaWN0bHkgbGF0ZXIuIExpa2Uga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm9cbiYjNDM7IyBkZXRlY3RhYmxlIG9ycGhhbiBhdCBhbGwgaW4gdGhlIHJ1bm5pbmcgZW52aXJvbm1lbnQgdGhlIHRlc3Qgc2tpcHMgcmF0aGVyXG4mIzQzOyMgdGhhbiBmYWlsaW5nLlxuJiM0MzsjXG4mIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7XG4mIzQzOyMgS1RBUCBvdXRwdXQgaGVscGVycyAoa3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCBrdGFwX3Rlc3RfcGFzcywgLi4uKS5cbiYjNDM7RElSPVwmIzM0OyQoZGlybmFtZSBcJiMzNDskKHJlYWRsaW5rIC1mIFwmIzM0OyQwXCYjMzQ7KVwmIzM0OylcJiMzNDtcbiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4mIzQzO3NvdXJjZSBcJiMzNDske0RJUn1cJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7S01FTUxFQUs9L3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtcbiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcbiYjNDM7TU9EVUxFPWttZW1sZWFrLXRlc3RcbiYjNDM7QUdFPTZcdFx0IyBzZWNvbmRzOyBtdXN0IGV4Y2VlZCBrbWVtbGVhayYjMzk7cyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcbiYjNDM7XG4mIzQzO2t0YXBfcHJpbnRfaGVhZGVyXG4mIzQzO1xuJiM0MztbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1lcSAwIF0gfHwgeyBrdGFwX3NraXBfYWxsIFwmIzM0O211c3QgcnVuIGFzIHJvb3RcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztbIC1yIFwmIzM0OyRLTUVNTEVBS1wmIzM0OyBdIHx8XG4mIzQzO1x0eyBrdGFwX3NraXBfYWxsIFwmIzM0O25vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztbIC13IFwmIzM0OyRQQVJBTVwmIzM0OyBdIHx8XG4mIzQzO1x0eyBrdGFwX3NraXBfYWxsIFwmIzM0O21pbl91bnJlZl9zY2FucyBtb2R1bGUgcGFyYW1ldGVyIG5vdCBwcmVzZW50XCYjMzQ7OyBleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDs7IH1cbiYjNDM7bW9kaW5mbyBcJiMzNDskTU9EVUxFXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fFxuJiM0MztcdHsga3RhcF9za2lwX2FsbCBcJiMzNDskTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7IyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLFxuJiM0MzsjIG9yIGl0IHNlbGYtZGlzYWJsZWQgYWZ0ZXIgYW4gaW50ZXJuYWwgZXJyb3IpOyBhIFwmIzM0O3NjYW5cJiMzNDsgdGhlbiByZXR1cm5zXG4mIzQzOyMgRVBFUk0uIFByb2JlIG9uY2UgYW5kIHNraXAgaWYgc28uXG4mIzQzO2VjaG8gc2NhbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHxcbiYjNDM7XHR7IGt0YXBfc2tpcF9hbGwgXCYjMzQ7a21lbWxlYWsgaXMgZGlzYWJsZWQgKGNoZWNrIGRtZXNnIG9yIGttZW1sZWFrPSBib290IGFyZylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7cHJldj0kKGNhdCBcJiMzNDskUEFSQU1cJiMzNDspXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyAgIyBpbnZva2VkIGluZGlyZWN0bHkgdmlhIHRyYXBcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRlY2hvIFwmIzM0OyRwcmV2XCYjMzQ7IFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFx0XHQjIHJlc3RvcmUgdGhlIHBhcmFtZXRlclxuJiM0MztcdGVjaG8gc2Nhbj1vbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcdFx0IyByZS1lbmFibGUgYXV0byBzY2FuXG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7fVxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxuJiM0MzsjIG9iamVjdCYjMzk7cyBjb25zZWN1dGl2ZS11bnJlZmVyZW5jZWQgcnVuLiBBbiBhdXRvIHNjYW4gbGFuZGluZyBiZXR3ZWVuIHR3b1xuJiM0MzsjIG1hbnVhbCBzY2FucyB3b3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBhbmQgbWFrZSB0aGUgdGVzdCBmbGFreS5cbiYjNDM7ZWNobyBzY2FuPW9mZiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzOyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUmIzM5O3MgaW5pdFxuJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLlxuJiM0MzsjIFByZS1leGlzdGluZyByZXBvcnRlZCBsZWFrcyBhcmUgZ3JleWVkIGZpcnN0IChcJiMzNDtjbGVhclwmIzM0Oykgc28gb25seSBvdXJcbiYjNDM7IyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcbiYjNDM7IyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXG4mIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy5cbiYjNDM7Z2VuX29ycGhhbnMoKSB7XG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7XG4mIzQzO1x0bW9kcHJvYmUgXCYjMzQ7JE1PRFVMRVwmIzM0OyB8fFxuJiM0MztcdFx0eyBrdGFwX3NraXBfYWxsIFwmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEVcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcdHNsZWVwIFwmIzM0OyRBR0VcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2NhbigpIHsgZWNobyBzY2FuIFx1MDAzZSBcJiMzNDskS01FTUxFQUtcJiMzNDs7IH1cbiYjNDM7XG4mIzQzOyMgTnVtYmVyIG9mIGhlbHBlci1tb2R1bGUgb3JwaGFucyBjdXJyZW50bHkgcmVwb3J0ZWQgYnkga21lbWxlYWsuIE1hdGNoaW5nXG4mIzQzOyMgdGhlIG1vZHVsZSYjMzk7cyBvd24gYmFja3RyYWNlIChba21lbWxlYWtfdGVzdF0pIGtlZXBzIHRoZSBjb3VudCBpbW11bmUgdG9cbiYjNDM7IyB1bnJlbGF0ZWQgbGVha3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLiBrbWVtbGVhayBvbmx5IGxpc3RzIGFuIG9iamVjdCBoZXJlXG4mIzQzOyMgb25jZSBpdCBoYXMgYmVlbiByZXBvcnRlZCwgc28gdGhpcyByZWZsZWN0cyB0aGUgY29uZmlybWF0aW9uIGdhdGluZy5cbiYjNDM7Y291bnRfb3JwaGFucygpIHtcbiYjNDM7XHRjPSQoZ3JlcCAtYyAmIzM5O1xcW2ttZW1sZWFrX3Rlc3RcXF0mIzM5OyBcJiMzNDskS01FTUxFQUtcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7XHRlY2hvIFwmIzM0OyR7YzotMH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyAwKSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbiYjNDM7ZWNobyAzIFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDtcbiYjNDM7WyBcJiMzNDskKGNhdCBcJiMzNDskUEFSQU1cJiMzNDspXCYjMzQ7ID0gXCYjMzQ7M1wmIzM0OyBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttaW5fdW5yZWZfc2NhbnMgZGlkIG5vdCByZWFkIGJhY2sgYXMgM1wmIzM0O1xuJiM0MztcbiYjNDM7IyBQcmltaW5nIHNjYW46IGttZW1sZWFrIGdyZXlzIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IG9uIGl0cyBmaXJzdCBzY2FuXG4mIzQzOyMgKGl0cyBjaGVja3N1bSBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCB1bnRpbCBhIHNlY29uZFxuJiM0MzsjIHNjYW4uIEV2ZXJ5IGNhc2UgYmVsb3cgcnVucyB0aGlzIHByaW1pbmcgc2NhbiBiZWZvcmUgY291bnRpbmcuXG4mIzQzO3ByaW1lKCkgeyBzY2FuOyB9XG4mIzQzO1xuJiM0MzsjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb25lIHNjYW4gYWZ0ZXIgcHJpbWluZyByZXBvcnRzIHRoZVxuJiM0MzsjICAgIG9ycGhhbnMuIFRoaXMgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZVxuJiM0MzsjICAgIG9ycGhhbnMgaGVyZS5cbiYjNDM7ZWNobyAxIFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDtcbiYjNDM7Z2VuX29ycGhhbnNcbiYjNDM7cHJpbWVcbiYjNDM7c2NhblxuJiM0MztmaXJzdD0kKGNvdW50X29ycGhhbnMpXG4mIzQzO1sgXCYjMzQ7JGZpcnN0XCYjMzQ7IC1ndCAwIF0gfHxcbiYjNDM7XHR7IGt0YXBfc2tpcF9hbGwgXCYjMzQ7JE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7IyAyKSBtaW5fdW5yZWZfc2NhbnM9MjogYWZ0ZXIgcHJpbWluZywgb25lIHNjYW4gaXMgbm90IGVub3VnaCAoc3RpbGxcbiYjNDM7IyAgICBnYXRlZCksIHRoZSBzZWNvbmQgcmVwb3J0cy4gVGhlIGdhdGVkLXNjYW4temVybyBjaGVjayBpcyB0aGUgY29yZVxuJiM0MzsjICAgIHJlZ3Jlc3Npb24uXG4mIzQzO2VjaG8gMiBcdTAwM2UgXCYjMzQ7JFBBUkFNXCYjMzQ7XG4mIzQzO2dlbl9vcnBoYW5zXG4mIzQzO3ByaW1lXG4mIzQzO3NjYW47IHMxPSQoY291bnRfb3JwaGFucylcbiYjNDM7c2NhbjsgczI9JChjb3VudF9vcnBoYW5zKVxuJiM0MztbIFwmIzM0OyRzMVwmIzM0OyAtZXEgMCBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSBhZnRlciAxIHBvc3QtcHJpbWUgc2NhbiAobXVzdCBiZSAwKVwmIzM0O1xuJiM0MztbIFwmIzM0OyRzMlwmIzM0OyAtZ3QgMCBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttaW5fdW5yZWZfc2NhbnM9Mjogbm8gcmVwb3J0IGFmdGVyIDIgcG9zdC1wcmltZSBzY2FucyAoZmFsc2UgbmVnYXRpdmUpXCYjMzQ7XG4mIzQzO1xuJiM0MztrdGFwX3NldF9wbGFuIDFcbiYjNDM7a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7bWluX3VucmVmX3NjYW5zPTEgcmVwb3J0ZWQgJGZpcnN0IG9ycGhhbihzKSBvbmUgc2NhbiBhZnRlciBwcmltaW5nOyA9MiBoZWxkIHRoZW0gb25lIHNjYW4gbG9uZ2VyICgkczEgYWZ0ZXIgb25lIHNjYW4sICRzMiBhZnRlciB0d28pOyBwYXJhbSByZWFkLWJhY2sgb2tcJiMzNDtcbiYjNDM7a3RhcF9maW5pc2hlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rbWVtbGVha19zY2FuJiMzNDssCiAgICAmIzM0O2NvbmZpcm1fbGVhayYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQwZjg1N2I1MTNlYjk4YmRjOWMyNDFhYWM1MDM4Mjg2MDBhYzUyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDEzIDE0OjQ1OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdApAQCAtMTk4LDYgJiM0MzsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvcgogc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nCiB0aGUgbWluaW11bSBhZ2Ugb2YgYW4gb2JqZWN0IHRvIGJlIHJlcG9ydGVkIGFzIGEgbWVtb3J5IGxlYWsuCiAKJiM0MztUaGUgYGBtaW5fdW5yZWZfc2NhbnNgYCBtb2R1bGUgcGFyYW1ldGVyIChkZWZhdWx0IDEpIHJlcXVpcmVzIGFuIG9iamVjdCB0bwomIzQzO2JlIHNlZW4gdW5yZWZlcmVuY2VkIGluIHRoYXQgbWFueSBjb25zZWN1dGl2ZSBzY2FucyBiZWZvcmUgaXQgaXMgcmVwb3J0ZWQuCiYjNDM7S2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyCiYjNDM7dGhlIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZXMgZGVzY3JpYmVkIGFib3ZlLCBhdCB0aGUgY29zdCBvZiBkZWxheWluZwomIzQzO2dlbnVpbmUgcmVwb3J0cyBieSB1cCB0byB0aGF0IG1hbnkgc2NhbnMuIEl0IGNhbiBiZSBzZXQgYXQgYm9vdCB3aXRoCiYjNDM7YGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9Jmx0O24mZ3Q7YGAgb3IgYXQgcnVuLXRpbWUgdmlhCiYjNDM7YGAvc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc2BgLgomIzQzOwogTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCBlOTZlOWVmZDE5YjBkOS4uODVmMThiMTdlNzljNGUgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuYwpAQCAtMTUxLDYgJiM0MzsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHsKIAlpbnQgbWluX2NvdW50OwogCS8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi8KIAlpbnQgY291bnQ7CiYjNDM7CS8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi8KJiM0MzsJdW5zaWduZWQgaW50IHVucmVmX3NjYW5zOwogCS8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqLwogCXUzMiBjaGVja3N1bTsKIAlkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7CkBAIC0xNzUsNiAmIzQzOzE3Nyw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3QgewogI2RlZmluZSBPQkpFQ1RfUEhZUwkJKDEgJmx0OyZsdDsgNCkKIC8qIGZsYWcgc2V0IGZvciBwZXItQ1BVIHBvaW50ZXJzICovCiAjZGVmaW5lIE9CSkVDVF9QRVJDUFUJCSgxICZsdDsmbHQ7IDUpCiYjNDM7LyogZmxhZyBzZXQgb24gYW4gb2JqZWN0IGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoZSBmdWxsIHNjYW4sIHBlbmRpbmcgY29uZmlybWF0aW9uICovCiYjNDM7I2RlZmluZSBPQkpFQ1RfU1VTUEVDVAkJKDEgJmx0OyZsdDsgNikKIAogLyogc2V0IHdoZW4gX19yZW1vdmVfb2JqZWN0KCkgY2FsbGVkICovCiAjZGVmaW5lIERFTFNUQVRFX1JFTU9WRUQJKDEgJmx0OyZsdDsgMCkKQEAgLTIzMiw5ICYjNDM7MjM2LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkOwogLyogdXNlZCB0byBhdm9pZCByZXBvcnRpbmcgb2YgcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTsKJiM0MzsvKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxOwomIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47CiAvKiBkZWxheSBiZXR3ZWVuIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmdzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDsKJiM0MzsvKiBudW1iZXIgb2Ygb2JqZWN0cyBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUIGR1cmluZyB0aGUgY3VycmVudCBzY2FuICovCiYjNDM7c3RhdGljIGludCBucl9zdXNwZWN0czsKIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovCiBzdGF0aWMgaW50IGttZW1sZWFrX3N0YWNrX3NjYW4gPSAxOwogLyogcHJvdGVjdHMgdGhlIG1lbW9yeSBzY2FubmluZywgcGFyYW1ldGVycyBhbmQgZGVidWcva21lbWxlYWsgZmlsZSBhY2Nlc3MgKi8KQEAgLTY4OCw2ICYjNDM7Njk3LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcCkKIAlvYmplY3QtJmd0O2V4Y2Vzc19yZWYgPSAwOwogCW9iamVjdC0mZ3Q7Y291bnQgPSAwOwkJCS8qIHdoaXRlIGNvbG9yIGluaXRpYWxseSAqLwogCW9iamVjdC0mZ3Q7Y2hlY2tzdW0gPSB+MDsKJiM0MzsJb2JqZWN0LSZndDt1bnJlZl9zY2FucyA9IDA7CiAJb2JqZWN0LSZndDtkZWxfc3RhdGUgPSAwOwogCiAJLyogdGFzayBpbmZvcm1hdGlvbiAqLwpAQCAtMTQ0MCw2ICYjNDM7MTQ1MCwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCiAJICovCiAJb2JqZWN0LSZndDtjb3VudCYjNDM7JiM0Mzs7CiAJaWYgKGNvbG9yX2dyYXkob2JqZWN0KSkgewomIzQzOwkJLyogcmVmZXJlbmNlZCBhZnRlciBhbGwsIG5vIGxvbmdlciBhIHN1c3BlY3QgKi8KJiM0MzsJCWlmIChvYmplY3QtJmd0O2ZsYWdzICZhbXA7IE9CSkVDVF9TVVNQRUNUKSB7CiYjNDM7CQkJb2JqZWN0LSZndDtmbGFncyAmYW1wOz0gfk9CSkVDVF9TVVNQRUNUOwomIzQzOwkJCW5yX3N1c3BlY3RzLS07CiYjNDM7CQl9CiAJCS8qIHB1dF9vYmplY3QoKSBjYWxsZWQgd2hlbiByZW1vdmluZyBmcm9tIGdyYXlfbGlzdCAqLwogCQlXQVJOX09OKCFnZXRfb2JqZWN0KG9iamVjdCkpOwogCQlsaXN0X2FkZF90YWlsKCZhbXA7b2JqZWN0LSZndDtncmF5X2xpc3QsICZhbXA7Z3JheV9saXN0KTsKQEAgLTE4NDQsMTYgJiM0MzsxODU5LDE2IEBAIHN0YXRpYyB2b2lkIGRlZHVwX2ZsdXNoKHN0cnVjdCB4YXJyYXkgKmRlZHVwKQogICoga2VybmVsJiMzOTtzIHN0YW5kYXJkIGFsbG9jYXRvcnMuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUKICAqIHNjYW5fbXV0ZXggaGVsZC4KICAqLwotc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKQomIzQzO3N0YXRpYyBpbnQgX19rbWVtbGVha19zY2FuKGJvb2wgZnVsbCkKIHsKIAlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJaW50IF9fbWF5YmVfdW51c2VkIGk7Ci0Jc3RydWN0IHhhcnJheSBkZWR1cDsKLQlpbnQgbmV3X2xlYWtzID0gMDsKIAlpbnQgc3RvcCA9IDA7CiAKIAlqaWZmaWVzX2xhc3Rfc2NhbiA9IGppZmZpZXM7CiYjNDM7CWlmIChmdWxsKQomIzQzOwkJbnJfc3VzcGVjdHMgPSAwOwogCiAJLyogcHJlcGFyZSB0aGUga21lbWxlYWtfb2JqZWN0JiMzOTtzICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTg4MSw4ICYjNDM7MTg5NiwxMyBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiAJCQkJX19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTsKIAkJfQogCiYjNDM7CQkvKiByZWZlcmVuY2VkIGxhc3Qgc2NhbjogcmVzdGFydCB0aGUgdW5yZWZlcmVuY2VkIHJ1biAqLwomIzQzOwkJaWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKQomIzQzOwkJCW9iamVjdC0mZ3Q7dW5yZWZfc2NhbnMgPSAwOwogCQkvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi8KIAkJb2JqZWN0LSZndDtjb3VudCA9IDA7CiYjNDM7CQlpZiAoZnVsbCkKJiM0MzsJCQlvYmplY3QtJmd0O2ZsYWdzICZhbXA7PSB+T0JKRUNUX1NVU1BFQ1Q7CiAJCWlmIChjb2xvcl9ncmF5KG9iamVjdCkgJmFtcDsmYW1wOyBnZXRfb2JqZWN0KG9iamVjdCkpCiAJCQlsaXN0X2FkZF90YWlsKCZhbXA7b2JqZWN0LSZndDtncmF5X2xpc3QsICZhbXA7Z3JheV9saXN0KTsKIApAQCAtMTk1MCw2ICYjNDM7MTk3MCwxMCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiBzY2FuX2dyYXk6CiAJc2Nhbl9ncmF5X2xpc3QoKTsKIAomIzQzOwkvKiBhIGNvbmZpcm1hdGlvbiBzY2FuIGRvZXMgbm90IGxvb2sgZm9yIG1vZGlmaWVkIG9iamVjdHMgKi8KJiM0MzsJaWYgKCFmdWxsKQomIzQzOwkJcmV0dXJuIG5yX3N1c3BlY3RzOwomIzQzOwogCS8qCiAJICogQ2hlY2sgZm9yIG5ldyBvciB1bnJlZmVyZW5jZWQgb2JqZWN0cyBtb2RpZmllZCBzaW5jZSB0aGUgcHJldmlvdXMKIAkgKiBzY2FuIGFuZCBjb2xvciB0aGVtIGdyYXkgdW50aWwgdGhlIG5leHQgc2Nhbi4KQEAgLTE5NzIsNiAmIzQzOzE5OTYsMTEgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKQogCQkJLyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqLwogCQkJb2JqZWN0LSZndDtjb3VudCA9IG9iamVjdC0mZ3Q7bWluX2NvdW50OwogCQkJbGlzdF9hZGRfdGFpbCgmYW1wO29iamVjdC0mZ3Q7Z3JheV9saXN0LCAmYW1wO2dyYXlfbGlzdCk7CiYjNDM7CQl9IGVsc2UgaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIShvYmplY3QtJmd0O2ZsYWdzICZhbXA7IE9CSkVDVF9SRVBPUlRFRCkpIHsKJiM0MzsJCQkvKiBmbGFnIHRoZSBvYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoaXMgc2NhbiAqLwomIzQzOwkJCW9iamVjdC0mZ3Q7ZmxhZ3MgfD0gT0JKRUNUX1NVU1BFQ1Q7CiYjNDM7CQkJbnJfc3VzcGVjdHMmIzQzOyYjNDM7OwogCQl9CiAJCXJhd19zcGluX3VubG9ja19pcnEoJmFtcDtvYmplY3QtJmd0O2xvY2spOwogCX0KQEAgLTE5ODIsMTIgJiM0MzsyMDExLDYyIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZCkKIAkgKi8KIAlzY2FuX2dyYXlfbGlzdCgpOwogCiYjNDM7CXJldHVybiBucl9zdXNwZWN0czsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9tb3RlIGEgc3VzcGVjdGVkIG9iamVjdCB0byBhIHJlcG9ydGVkIGxlYWsgb25jZSBpdCBoYXMgc3RheWVkCiYjNDM7ICogdW5yZWZlcmVuY2VkIGZvciBtaW5fdW5yZWZfc2NhbnMgY29uc2VjdXRpdmUgc2NhbnMuIENhbGxlZCB3aXRoCiYjNDM7ICogb2JqZWN0LSZndDtsb2NrIGhlbGQ7IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBvYmplY3QgaXMgbmV3bHkgcmVwb3J0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgY29uZmlybV9sZWFrKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKJiM0Mzt7CiYjNDM7CWlmICghdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIHx8CiYjNDM7CSAgICAhKG9iamVjdC0mZ3Q7ZmxhZ3MgJmFtcDsgT0JKRUNUX1NVU1BFQ1QpIHx8CiYjNDM7CSAgICAob2JqZWN0LSZndDtmbGFncyAmYW1wOyBPQkpFQ1RfUkVQT1JURUQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvYmplY3QtJmd0O3VucmVmX3NjYW5zICYjNDM7PSAxOwomIzQzOwlpZiAob2JqZWN0LSZndDt1bnJlZl9zY2FucyAmbHQ7IG1pbl91bnJlZl9zY2FucykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJb2JqZWN0LSZndDtmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNjYW4gdGhlIG1lbW9yeSBhbmQgcmVwb3J0IHRoZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyBhcyBsZWFrcy4gTXVzdCBiZQomIzQzOyAqIGNhbGxlZCB3aXRoIHRoZSBzY2FuX211dGV4IGhlbGQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwomIzQzOwlzdHJ1Y3QgeGFycmF5IGRlZHVwOwomIzQzOwlpbnQgbmV3X2xlYWtzID0gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRnVsbCBzY2FuLiBPYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGFyZSBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUIGFuZAomIzQzOwkgKiBjb3VudGVkIGluIHRoZSByZXR1cm4gdmFsdWU7IG5vdGhpbmcgdG8gY29uZmlybSBvciByZXBvcnQgb3RoZXJ3aXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFfX2ttZW1sZWFrX3NjYW4odHJ1ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyoKIAkgKiBJZiBzY2FubmluZyB3YXMgc3RvcHBlZCBkbyBub3QgcmVwb3J0IGFueSBuZXcgdW5yZWZlcmVuY2VkIG9iamVjdHMuCiAJICovCiAJaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSkKIAkJcmV0dXJuOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgbGl2ZSBvYmplY3Qgd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgbW92ZWQgYnksIGZvciBleGFtcGxlLCBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgUkNVIHVwZGF0ZSBjYW4gYmUgbWlzc2VkIGZvciBvbmUgc2NhbiBhbmQgcmVwb3J0ZWQgYXMgYQomIzQzOwkgKiB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmUuIFNjYW4gYWdhaW4gYW5kIG9ubHkgcmVwb3J0IHRoZSBvYmplY3RzCiYjNDM7CSAqIGxlZnQgdW5yZWZlcmVuY2VkIChzdGlsbCBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUKSBieSBib3RoIHNjYW5zLgomIzQzOwkgKi8KJiM0MzsJX19rbWVtbGVha19zY2FuKGZhbHNlKTsKJiM0MzsJaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKgogCSAqIFNjYW5uaW5nIHJlc3VsdCByZXBvcnRpbmcuIFdoZW4gdmVyYm9zZSBwcmludGluZyBpcyBlbmFibGVkLCBkZWR1cGUKIAkgKiBieSBzdGFja2RlcG90IHRyYWNlX2hhbmRsZSBzbyBlYWNoIHVuaXF1ZSBiYWNrdHJhY2UgaXMgbG9nZ2VkIG9uY2UKQEAgLTIwMTQsOSAmIzQzOzIwOTMsOCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiAJCXJhd19zcGluX2xvY2tfaXJxKCZhbXA7b2JqZWN0LSZndDtsb2NrKTsKIAkJdHJhY2VfaGFuZGxlID0gMDsKIAkJZGVkdXBfcHJpbnQgPSBmYWxzZTsKLQkJaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSAmYW1wOyZhbXA7Ci0JCSAgICAhKG9iamVjdC0mZ3Q7ZmxhZ3MgJmFtcDsgT0JKRUNUX1JFUE9SVEVEKSkgewotCQkJb2JqZWN0LSZndDtmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7CiYjNDM7CiYjNDM7CQlpZiAoY29uZmlybV9sZWFrKG9iamVjdCkpIHsKIAkJCWlmIChrbWVtbGVha192ZXJib3NlKSB7CiAJCQkJdHJhY2VfaGFuZGxlID0gb2JqZWN0LSZndDt0cmFjZV9oYW5kbGU7CiAJCQkJZGVkdXBfcHJpbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfZ3VwX3Rlc3Quc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaG1tLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2h1Z2V0bGIuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXZtLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2tzbS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rc21fbnVtYS5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYTg1NzZlODM1YzhkMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaApAQCAtMCwwICYjNDM7MSwxMzIgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJiMzOTtzIE4tY29uc2VjdXRpdmUtc2NhbiBsZWFrIGNvbmZpcm1hdGlvbgomIzQzOyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuCiYjNDM7IwomIzQzOyMga21lbWxlYWsgb25seSByZXBvcnRzIGFuIG9iamVjdCBvbmNlIGl0IGhhcyBzdGF5ZWQgdW5yZWZlcmVuY2VkIGZvcgomIzQzOyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0CiYjNDM7IyBzY2FuIChoaXN0b3JpY2FsIGJlaGF2aW91cik7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyIHRyYW5zaWVudCBmYWxzZQomIzQzOyMgcG9zaXRpdmVzIHdoZXJlIGEgbGl2ZSBvYmplY3QmIzM5O3Mgb25seSByZWZlcmVuY2UgaXMgYnJpZWZseSBpbnZpc2libGUgdG8gYQomIzQzOyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlCiYjNDM7IyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsmIzM5O3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zCiYjNDM7IyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF0KJiM0MzsjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLAomIzQzOyMgY2hlY2tzIHRoYXQ6CiYjNDM7IyAgIC0gYSBmcmVzaGx5IGFsbG9jYXRlZCBvYmplY3QgaXMgZ3JleWVkIG9uIGl0cyBmaXJzdCBzY2FuIChpdHMgY2hlY2tzdW0KJiM0MzsjICAgICBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCBiZWZvcmUgdGhhdCBwcmltaW5nIHNjYW47CiYjNDM7IyAgICAgZWFjaCBjYXNlIGJlbG93IHByaW1lcyBvbmNlIGZpcnN0LAomIzQzOyMgICAtIHdpdGggdGhlIGRlZmF1bHQgdGhyZXNob2xkIChtaW5fdW5yZWZfc2NhbnM9MSkgb25lIHNjYW4gYWZ0ZXIgcHJpbWluZwomIzQzOyMgICAgIHJlcG9ydHMgdGhlIG9ycGhhbnMsCiYjNDM7IyAgIC0gcmFpc2luZyB0aGUgdGhyZXNob2xkIHRvIDIgbmVlZHMgdHdvIHNjYW5zIGFmdGVyIHByaW1pbmc6IG9uZSBpcyBub3QKJiM0MzsjICAgICBlbm91Z2gsIHRoZSBzZWNvbmQgcmVwb3J0cywKJiM0MzsjICAgLSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi4KJiM0MzsjCiYjNDM7IyBUaGUgJiMzNDtvbmUgcG9zdC1wcmltZSBzY2FuIGlzIG5vdCBlbm91Z2ggYXQgbWluX3VucmVmX3NjYW5zPTImIzM0OyBjaGVjayBpcyB0aGUKJiM0MzsjIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiByYWlzaW5nIG1pbl91bnJlZl9zY2FucyBtdXN0IHB1c2ggdGhlIHJlcG9ydAomIzQzOyMgc3RyaWN0bHkgbGF0ZXIuIExpa2Uga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm8KJiM0MzsjIGRldGVjdGFibGUgb3JwaGFuIGF0IGFsbCBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIKJiM0MzsjIHRoYW4gZmFpbGluZy4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7IyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3NraXBfYWxsLCBrdGFwX2V4aXRfZmFpbF9tc2csIGt0YXBfdGVzdF9wYXNzLCAuLi4pLgomIzQzO0RJUj0mIzM0OyQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWYgJiMzNDskMCYjMzQ7KSYjMzQ7KSYjMzQ7CiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7c291cmNlICYjMzQ7JHtESVJ9JiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzOwomIzQzO0tNRU1MRUFLPS9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrCiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnMKJiM0MztNT0RVTEU9a21lbWxlYWstdGVzdAomIzQzO0FHRT02CQkjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJiMzOTtzIDVzIG1pbmltdW0gb2JqZWN0IGFnZQomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7CiYjNDM7WyAmIzM0OyQoaWQgLXUpJiMzNDsgLWVxIDAgXSB8fCB7IGt0YXBfc2tpcF9hbGwgJiMzNDttdXN0IHJ1biBhcyByb290JiMzNDs7IGV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDs7IH0KJiM0MztbIC1yICYjMzQ7JEtNRU1MRUFLJiMzNDsgXSB8fAomIzQzOwl7IGt0YXBfc2tpcF9hbGwgJiMzNDtubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspJiMzNDs7IGV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDs7IH0KJiM0MztbIC13ICYjMzQ7JFBBUkFNJiMzNDsgXSB8fAomIzQzOwl7IGt0YXBfc2tpcF9hbGwgJiMzNDttaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudCYjMzQ7OyBleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7OyB9CiYjNDM7bW9kaW5mbyAmIzM0OyRNT0RVTEUmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8CiYjNDM7CXsga3RhcF9za2lwX2FsbCAmIzM0OyRNT0RVTEUgbm90IGJ1aWx0IChDT05GSUdfU0FNUExFX0tNRU1MRUFLKSYjMzQ7OyBleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7OyB9CiYjNDM7CiYjNDM7IyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLAomIzQzOyMgb3IgaXQgc2VsZi1kaXNhYmxlZCBhZnRlciBhbiBpbnRlcm5hbCBlcnJvcik7IGEgJiMzNDtzY2FuJiMzNDsgdGhlbiByZXR1cm5zCiYjNDM7IyBFUEVSTS4gUHJvYmUgb25jZSBhbmQgc2tpcCBpZiBzby4KJiM0MztlY2hvIHNjYW4gJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8CiYjNDM7CXsga3RhcF9za2lwX2FsbCAmIzM0O2ttZW1sZWFrIGlzIGRpc2FibGVkIChjaGVjayBkbWVzZyBvciBrbWVtbGVhaz0gYm9vdCBhcmcpJiMzNDs7IGV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDs7IH0KJiM0MzsKJiM0MztwcmV2PSQoY2F0ICYjMzQ7JFBBUkFNJiMzNDspCiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3ICAjIGludm9rZWQgaW5kaXJlY3RseSB2aWEgdHJhcAomIzQzO2NsZWFudXAoKSB7CiYjNDM7CWVjaG8gJiMzNDskcHJldiYjMzQ7ICZndDsgJiMzNDskUEFSQU0mIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZXN0b3JlIHRoZSBwYXJhbWV0ZXIKJiM0MzsJZWNobyBzY2FuPW9uICZndDsgJiMzNDskS01FTUxFQUsmIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZS1lbmFibGUgYXV0byBzY2FuCiYjNDM7CXJtbW9kICYjMzQ7JE1PRFVMRSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gY2xlYXIgJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhbgomIzQzOyMgb2JqZWN0JiMzOTtzIGNvbnNlY3V0aXZlLXVucmVmZXJlbmNlZCBydW4uIEFuIGF1dG8gc2NhbiBsYW5kaW5nIGJldHdlZW4gdHdvCiYjNDM7IyBtYW51YWwgc2NhbnMgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgYW5kIG1ha2UgdGhlIHRlc3QgZmxha3kuCiYjNDM7ZWNobyBzY2FuPW9mZiAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsjIENyZWF0ZSBhIGZyZXNoLCBhZ2VkIHNldCBvZiBvcnBoYW4gb2JqZWN0cyBmcm9tIHRoZSBoZWxwZXIgbW9kdWxlJiMzOTtzIGluaXQKJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLgomIzQzOyMgUHJlLWV4aXN0aW5nIHJlcG9ydGVkIGxlYWtzIGFyZSBncmV5ZWQgZmlyc3QgKCYjMzQ7Y2xlYXImIzM0Oykgc28gb25seSBvdXIKJiM0MzsjIG9ycGhhbnMgYXJlIGNvdW50ZWQuIFRoZSBtb2R1bGUgaXMgbGVmdCBsb2FkZWQgb24gcHVycG9zZTogb25jZSBpdCBpcwomIzQzOyMgdW5sb2FkZWQgaXRzIHN5bWJvbHMgYXJlIGdvbmUsIHNvIHRoZSBvcnBoYW4gYmFja3RyYWNlcyBubyBsb25nZXIgcmVzb2x2ZQomIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy4KJiM0MztnZW5fb3JwaGFucygpIHsKJiM0MzsJcm1tb2QgJiMzNDskTU9EVUxFJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBjbGVhciAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsKJiM0MzsJbW9kcHJvYmUgJiMzNDskTU9EVUxFJiMzNDsgfHwKJiM0MzsJCXsga3RhcF9za2lwX2FsbCAmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEUmIzM0OzsgZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OzsgfQomIzQzOwlzbGVlcCAmIzM0OyRBR0UmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzY2FuKCkgeyBlY2hvIHNjYW4gJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7OyB9CiYjNDM7CiYjNDM7IyBOdW1iZXIgb2YgaGVscGVyLW1vZHVsZSBvcnBoYW5zIGN1cnJlbnRseSByZXBvcnRlZCBieSBrbWVtbGVhay4gTWF0Y2hpbmcKJiM0MzsjIHRoZSBtb2R1bGUmIzM5O3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvCiYjNDM7IyB1bnJlbGF0ZWQgbGVha3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLiBrbWVtbGVhayBvbmx5IGxpc3RzIGFuIG9iamVjdCBoZXJlCiYjNDM7IyBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIHJlZmxlY3RzIHRoZSBjb25maXJtYXRpb24gZ2F0aW5nLgomIzQzO2NvdW50X29ycGhhbnMoKSB7CiYjNDM7CWM9JChncmVwIC1jICYjMzk7XFtrbWVtbGVha190ZXN0XF0mIzM5OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsKQomIzQzOwllY2hvICYjMzQ7JHtjOi0wfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uCiYjNDM7ZWNobyAzICZndDsgJiMzNDskUEFSQU0mIzM0OwomIzQzO1sgJiMzNDskKGNhdCAmIzM0OyRQQVJBTSYjMzQ7KSYjMzQ7ID0gJiMzNDszJiMzNDsgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDttaW5fdW5yZWZfc2NhbnMgZGlkIG5vdCByZWFkIGJhY2sgYXMgMyYjMzQ7CiYjNDM7CiYjNDM7IyBQcmltaW5nIHNjYW46IGttZW1sZWFrIGdyZXlzIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IG9uIGl0cyBmaXJzdCBzY2FuCiYjNDM7IyAoaXRzIGNoZWNrc3VtIHNldHRsZXMgdGhlbiksIHNvIG5vdGhpbmcgY2FuIGJlIHJlcG9ydGVkIHVudGlsIGEgc2Vjb25kCiYjNDM7IyBzY2FuLiBFdmVyeSBjYXNlIGJlbG93IHJ1bnMgdGhpcyBwcmltaW5nIHNjYW4gYmVmb3JlIGNvdW50aW5nLgomIzQzO3ByaW1lKCkgeyBzY2FuOyB9CiYjNDM7CiYjNDM7IyAxKSBtaW5fdW5yZWZfc2NhbnM9MSAoZGVmYXVsdCk6IG9uZSBzY2FuIGFmdGVyIHByaW1pbmcgcmVwb3J0cyB0aGUKJiM0MzsjICAgIG9ycGhhbnMuIFRoaXMgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZQomIzQzOyMgICAgb3JwaGFucyBoZXJlLgomIzQzO2VjaG8gMSAmZ3Q7ICYjMzQ7JFBBUkFNJiMzNDsKJiM0MztnZW5fb3JwaGFucwomIzQzO3ByaW1lCiYjNDM7c2NhbgomIzQzO2ZpcnN0PSQoY291bnRfb3JwaGFucykKJiM0MztbICYjMzQ7JGZpcnN0JiMzNDsgLWd0IDAgXSB8fAomIzQzOwl7IGt0YXBfc2tpcF9hbGwgJiMzNDskTU9EVUxFIHByb2R1Y2VkIG5vIGRldGVjdGFibGUgb3JwaGFucyAoY2Fubm90IHRlc3QgbWluX3VucmVmX3NjYW5zKSYjMzQ7OyBleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7OyB9CiYjNDM7CiYjNDM7IyAyKSBtaW5fdW5yZWZfc2NhbnM9MjogYWZ0ZXIgcHJpbWluZywgb25lIHNjYW4gaXMgbm90IGVub3VnaCAoc3RpbGwKJiM0MzsjICAgIGdhdGVkKSwgdGhlIHNlY29uZCByZXBvcnRzLiBUaGUgZ2F0ZWQtc2Nhbi16ZXJvIGNoZWNrIGlzIHRoZSBjb3JlCiYjNDM7IyAgICByZWdyZXNzaW9uLgomIzQzO2VjaG8gMiAmZ3Q7ICYjMzQ7JFBBUkFNJiMzNDsKJiM0MztnZW5fb3JwaGFucwomIzQzO3ByaW1lCiYjNDM7c2NhbjsgczE9JChjb3VudF9vcnBoYW5zKQomIzQzO3NjYW47IHMyPSQoY291bnRfb3JwaGFucykKJiM0MztbICYjMzQ7JHMxJiMzNDsgLWVxIDAgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDttaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSBhZnRlciAxIHBvc3QtcHJpbWUgc2NhbiAobXVzdCBiZSAwKSYjMzQ7CiYjNDM7WyAmIzM0OyRzMiYjMzQ7IC1ndCAwIF0gfHwga3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7bWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBhZnRlciAyIHBvc3QtcHJpbWUgc2NhbnMgKGZhbHNlIG5lZ2F0aXZlKSYjMzQ7CiYjNDM7CiYjNDM7a3RhcF9zZXRfcGxhbiAxCiYjNDM7a3RhcF90ZXN0X3Bhc3MgJiMzNDttaW5fdW5yZWZfc2NhbnM9MSByZXBvcnRlZCAkZmlyc3Qgb3JwaGFuKHMpIG9uZSBzY2FuIGFmdGVyIHByaW1pbmc7ID0yIGhlbGQgdGhlbSBvbmUgc2NhbiBsb25nZXIgKCRzMSBhZnRlciBvbmUgc2NhbiwgJHMyIGFmdGVyIHR3byk7IHBhcmFtIHJlYWQtYmFjayBvayYjMzQ7CiYjNDM7a3RhcF9maW5pc2hlZAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgS21lbWxlYWs6IEEgRGVsaWJlcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9rbWVtbGVhay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBpbml0aWFsIHRob3VnaHQ/IElzIHRoaXMgd29ydGggZnV6emluZz8gS21lbWxlYWsgaXMgYSBkZWJ1Z2dpbmcgdG9vbCwgYSBiYWNrZ3JvdW5kIHNjYW5uZXIgZm9yIG1lbW9yeSBsZWFrcywgc28gaXQmIzM5O3Mgbm90IGxpa2UgaXQmIzM5O3MgZGlyZWN0bHkgaGFuZGxpbmcgdXNlciBpbnB1dCBvciBuZXR3b3JraW5nIHRyYWZmaWMuIFVzdWFsbHksIHN5emthbGxlciBmb2N1c2VzIG9uIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gQnV0LCBoYW5nIG9uLi4uIGl0ICppcyogYSBrZXJuZWwgZmVhdHVyZSB0aGF0IGNhbiBiZSBlbmFibGVkIGFuZCBjb25maWd1cmVkLgoKSSBuZWVkIHRvIHN0ZXAgYmFjay4gV2hhdCBhcmUgdGhlIGNyaXRlcmlhPyBUaGlzIHByb21wdCBsaXN0cyBleGNlcHRpb25zIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhvc2UuIERvZXMgdGhlIHBhdGNoIGNoYW5nZSAqcmVhY2hhYmxlKiBjb3JlIGtlcm5lbCBsb2dpYz8gWWVzLCBpdCBtb2RpZmllcyBgbW0va21lbWxlYWsuY2AuIElzIGttZW1sZWFrIGNvbnNpZGVyZWQgY29yZSBrZXJuZWw/IEl0JiMzOTtzIGEgbWVtb3J5IGxlYWsgKmRldGVjdG9yKi4gQ2FuIGl0IHJ1biBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFllcy4gRG9lcyBpdCBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyBBYnNvbHV0ZWx5IOKAkyBpdCBhbHRlcnMgdGhlIHNjYW5uaW5nIGxvZ2ljIHdpdGggdGhpcyBuZXcgYG1pbl91bnJlZl9zY2Fuc2AgcGFyYW1ldGVyIGFuZCB0aGUgbG9naWMgYXJvdW5kIGl0LCBpbmNsdWRpbmcgYGttZW1sZWFrX3NjYW5gLCBgX19rbWVtbGVha19zY2FuYCwgYW5kIGBjb25maXJtX2xlYWtgLgoKU28sIHRoZSBxdWVzdGlvbiBzaGlmdHM6IGlzIGl0IHdvcnRoICpmdXp6aW5nKiBrbWVtbGVhayYjMzk7cyBpbnRlcm5hbCBsb2dpYyAqZGlyZWN0bHkqPyBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtgIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgLi4uIHRoYXQmIzM5O3MgYSB2ZWN0b3IgZm9yIGZ1enppbmcsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyB3b3J0aCBleHBsb3JpbmcsIGFuZCB0aGF0IHRoZSBzeXprYWxsZXIgc2V0dXAgY291bGQgYmUgbW9kaWZpZWQgdG8gdGVzdCBrbWVtbGVhayBpdHNlbGYuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgYXBwcm9hY2ggZm9yIHRoaXMgcGF0Y2guIEkgY291bGQgdGFyZ2V0IHRoZSBmdW5jdGlvbnMgYWx0ZXJlZCBsaWtlIGBfX2ttZW1sZWFrX3NjYW5gLCBgY29uZmlybV9sZWFrYCwgYW5kIGBrbWVtbGVha19zY2FuYC4gQW5kIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyB0b29sIGlzIGFjdHVhbGx5IHRhcmdldGVkIGJ5IHN5emthbGxlci4KCkFoLCBrbWVtbGVhayBpcyBhIGJhY2tncm91bmQgdGhyZWFkIG9yIHRyaWdnZXJlZCB2aWEgZGVidWdmcy4uLiBhbmQgc3l6a2FsbGVyIGRvZXMgdGFyZ2V0IGRlYnVnZnMgc29tZXRpbWVzISBJbnRlcmVzdGluZy4uLiBldmVuIGlmIHRoZSBwcmltYXJ5IGZvY3VzIGlzbiYjMzk7dCBrbWVtbGVhayBpdHNlbGYsIGl0JiMzOTtzICpzdGlsbCoga2VybmVsIGNvZGUuIFJhY2UgY29uZGl0aW9ucyBvciBldmVuIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2l0aGluIGttZW1sZWFrIGFyZSBjb25jZWl2YWJsZS4KCkkgdGhpbmsgdGhpcyBpcyB3b3J0aCBwdXJzdWluZywgZXZlbiBpZiBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgdGFyZ2V0LiBXZSYjMzk7cmUgY2hhbmdpbmcgY29yZSBjb2RlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBzbyB0aGVyZSYjMzk7cyBwb3RlbnRpYWwgdG8gZGlzY292ZXIgbmV3IGJ1Z3MuCgpJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGVuYWJsZWQ6IGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBMZXQmIzM5O3MgZ3JlcCBmb3IgdGhhdCBhbmQgc2VlIGhvdyB3aWRlbHkgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfS01FTUxFQUsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yMzc9Y29uZmlnIEhBVkVfREVCVUdfS01FTUxFQUtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIzOS1cbm1tL0tjb25maWcuZGVidWc6MjQwOmNvbmZpZyBERUJVR19LTUVNTEVBS1xubW0vS2NvbmZpZy5kZWJ1Zy0yNDEtXHRib29sIFwmIzM0O0tlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvclwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjY0LVxubW0vS2NvbmZpZy5kZWJ1ZzoyNjU6Y29uZmlnIERFQlVHX0tNRU1MRUFLX01FTV9QT09MX1NJWkVcbm1tL0tjb25maWcuZGVidWctMjY2LVx0aW50IFwmIzM0O0ttZW1sZWFrIG1lbW9yeSBwb29sIHNpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTI3Ny1cbm1tL0tjb25maWcuZGVidWc6Mjc4OmNvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRlxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gb2ZmXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yODQtXG5tbS9LY29uZmlnLmRlYnVnOjI4NTpjb25maWcgREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXG5tbS9LY29uZmlnLmRlYnVnLTI4Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIGttZW1sZWFrIGF1dG8gc2NhbiB0aHJlYWQgb24gYm9vdCB1cFwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjk5LVxubW0vS2NvbmZpZy5kZWJ1ZzozMDA6Y29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0Vcbm1tL0tjb25maWcuZGVidWctMzAxLVx0Ym9vbCBcJiMzNDtEZWZhdWx0IGttZW1sZWFrIHRvIHZlcmJvc2UgbW9kZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IExlYWsgRGV0ZWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwYXJhbWV0ZXIsIGBtaW5fdW5yZWZfc2NhbnNgLCBhbmQgaXQgYWRkcyB0aGUgYGNvbmZpcm1fbGVha2AgZnVuY3Rpb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYm90aCBgX19rbWVtbGVha19zY2FuYCBhbmQgYGttZW1sZWFrX3NjYW5gLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIGRlcGVuZGVuY2llcyBhZmZlY3RlZCBoZXJlLi4uIG5vLCBqdXN0IGBERUJVR19LTUVNTEVBS2AuCgpIbW0sIG5vdyB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gTGV0IG1lIHJldmlldyB0aGUgY3JpdGVyaWEuLi4gQWgsIHRoZSBndWlkZWxpbmVzIHNheSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIGl0JiMzOTtzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGV4ZWN1dGlvbi4gQWxzbywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXJlIG5vdCB3b3J0aCBmdXp6aW5nLgoKQnV0IHRoaXMgaXMgdG91Y2hpbmcgYG1tL2ttZW1sZWFrLmNgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGNvcmUga2VybmVsIGxvZ2ljLCBpZiBlbmFibGVkLCB3aGljaCBpdCBsaWtlbHkgaXMgaW4gYSBsb3Qgb2YgYnVpbGRzLiBBbmQgdGhlIGNoYW5nZXMgc2VlbSBmdW5jdGlvbmFsOyBpdCYjMzk7cyBhbHRlcmluZyBob3cgbGVhayBjb25maXJtYXRpb24gd29ya3MuIFNvLCB5ZXAsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nOiBgY29uZmlybV9sZWFrYCwgYF9fa21lbWxlYWtfc2NhbmAsIGFuZCBga21lbWxlYWtfc2NhbmAuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zOiBhcmUgdGhleSBzdGF0aWM/IFllcCwgYF9fa21lbWxlYWtfc2NhbmAsIGBjb25maXJtX2xlYWtgLCBhbmQgYGttZW1sZWFrX3NjYW5gIGFyZSBhbGwgc3RhdGljIHdpdGhpbiBgbW0va21lbWxlYWsuY2AuIEdvb2QgdG8ga25vdyBmb3Igc3ltYm9sIHZpc2liaWxpdHkgZHVyaW5nIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiBvZiBgbW0va21lbWxlYWsuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBtb2RpZmllZC4gTWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa21lbWxlYWtfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYz0xODM3PXN0YXRpYyB2b2lkIGRlZHVwX2ZsdXNoKHN0cnVjdCB4YXJyYXkgKmRlZHVwKVxuLS1cbm1tL2ttZW1sZWFrLmMtMTg2MS0gKi9cbm1tL2ttZW1sZWFrLmM6MTg2MjpzdGF0aWMgaW50IF9fa21lbWxlYWtfc2Nhbihib29sIGZ1bGwpXG5tbS9rbWVtbGVhay5jLTE4NjMte1xuLS1cbm1tL2ttZW1sZWFrLmM9MjA0MT1zdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4tLVxubW0va21lbWxlYWsuYy0yMDUwLVx0ICovXG5tbS9rbWVtbGVhay5jOjIwNTE6XHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcbm1tL2ttZW1sZWFrLmMtMjA1Mi1cdFx0cmV0dXJuO1xuLS1cbm1tL2ttZW1sZWFrLmMtMjA2NS1cdCAqL1xubW0va21lbWxlYWsuYzoyMDY2Olx0X19rbWVtbGVha19zY2FuKGZhbHNlKTtcbm1tL2ttZW1sZWFrLmMtMjA2Ny1cdGlmIChzY2FuX3Nob3VsZF9zdG9wKCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGB1cGRhdGVfcmVmc2AgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBgdXBkYXRlX3JlZnNgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZ2l2ZW4gaXRzIG5hbWUsIHRoaXMgZnVuY3Rpb24gaXMgKnByb2JhYmx5KiByZWxhdGVkIHRvIHVwZGF0aW5nIHJlZmVyZW5jZXMgd2l0aGluIHRoaXMgc3lzdGVtIOKAkyBsaWtlbHkgcG9pbnRlcnMsIGluZGljZXMsIG9yIGlkZW50aWZpZXJzIG9mIHNvbWUga2luZC4gTm93IHRoYXQgaXQgaXMgbW9kaWZpZWQgSSBuZWVkIHRvIGV4YW1pbmUgdGhpcyBmdW5jdGlvbiYjMzk7cyBzY29wZS4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgY2hhbmdlIGlzIHRvdWNoaW5nIHRoaXMgcGllY2Ugb2YgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgbW9kdWxlcy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBzZWUgd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkIHdpdGhpbiBgdXBkYXRlX3JlZnNgIGl0c2VsZiwgYmVjYXVzZSBhbnkgY2hhbmdlIHRoZXJlIGhhcyBwb3RlbnRpYWwgZm9yIGRvd25zdHJlYW0gZWZmZWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHdpbGwgaW1wYWN0LiBBIGNoYW5nZSBoZXJlIGNvdWxkIGNhc2NhZGUgdGhyb3VnaCB2YXJpb3VzIGRhdGEgc3RydWN0dXJlcyBvciBjb250cm9sIGZsb3dzLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGxvb2sgYXQgdGhpcyBmdW5jdGlvbiBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfcmVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYz0xNDA3PXN0YXRpYyBib29sIHVwZGF0ZV9jaGVja3N1bShzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXG4tLVxubW0va21lbWxlYWsuYy0xNDM3LSAqL1xubW0va21lbWxlYWsuYzoxNDM4OnN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZzKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdClcbm1tL2ttZW1sZWFrLmMtMTQzOS17XG4tLVxubW0va21lbWxlYWsuYy0xNDYzLVxubW0va21lbWxlYWsuYzoxNDY0OnN0YXRpYyB2b2lkIHBvaW50ZXJfdXBkYXRlX3JlZnMoc3RydWN0IGttZW1sZWFrX29iamVjdCAqc2Nhbm5lZCxcbm1tL2ttZW1sZWFrLmMtMTQ2NS1cdFx0XHQgdW5zaWduZWQgbG9uZyBwb2ludGVyLCB1bnNpZ25lZCBpbnQgb2JqZmxhZ3MpXG4tLVxubW0va21lbWxlYWsuYy0xNTAxLVx0XHRleGNlc3NfcmVmID0gb2JqZWN0LVx1MDAzZWV4Y2Vzc19yZWY7XG5tbS9rbWVtbGVhay5jOjE1MDI6XHRcdC8qIG5vIG5lZWQgZm9yIHVwZGF0ZV9yZWZzKCkgaWYgb2JqZWN0IGFscmVhZHkgZ3JheSAqL1xubW0va21lbWxlYWsuYy0xNTAzLVx0fSBlbHNlIHtcbm1tL2ttZW1sZWFrLmMtMTUwNC1cdFx0ZXhjZXNzX3JlZiA9IDA7XG5tbS9rbWVtbGVhay5jOjE1MDU6XHRcdHVwZGF0ZV9yZWZzKG9iamVjdCk7XG5tbS9rbWVtbGVhay5jLTE1MDYtXHR9XG4tLVxubW0va21lbWxlYWsuYy0xNTE2LVx0XHRyYXdfc3Bpbl9sb2NrX25lc3RlZChcdTAwMjZvYmplY3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xubW0va21lbWxlYWsuYzoxNTE3Olx0XHR1cGRhdGVfcmVmcyhvYmplY3QpO1xubW0va21lbWxlYWsuYy0xNTE4LVx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2b2JqZWN0LVx1MDAzZWxvY2spO1xuLS1cbm1tL2ttZW1sZWFrLmM9MTU0NT1zdGF0aWMgaW50IHNjYW5fYmxvY2sodm9pZCAqX3N0YXJ0LCB2b2lkICpfZW5kLFxuLS1cbm1tL2ttZW1sZWFrLmMtMTU2Ni1cbm1tL2ttZW1sZWFrLmM6MTU2NzpcdFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCAwKTtcbm1tL2ttZW1sZWFrLmM6MTU2ODpcdFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCBPQkpFQ1RfUEVSQ1BVKTtcbm1tL2ttZW1sZWFrLmMtMTU2OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMwCgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDY4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLbWVtbGVhayBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlICpzcGVjaWZpYyoga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBtb2RpZmllZCBrbWVtbGVhayBjb2RlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgX19hbGxvY19vYmplY3RgLCBgdXBkYXRlX3JlZnNgLCBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlLiBgX19hbGxvY19vYmplY3RgIGFuZCBgdXBkYXRlX3JlZnNgIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIGlkZWFsbHksIEkgd291bGQgYXZvaWQgdGhlbSBhcyBmdXp6aW5nIHRhcmdldHMgc2luY2UgZnV6emluZyBpbiBob3QgcGF0aHMgY2FuIGxlYWQgdG8gcGVyZm9ybWFuY2UgaXNzdWVzLiAgYF9fa21lbWxlYWtfc2NhbmAsIGBjb25maXJtX2xlYWtgLCBhbmQgYGttZW1sZWFrX3NjYW5gIGFyZSBtb3JlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgc2NhbiBwcm9jZXNzLCB0cmlnZ2VyZWQgcGVyaW9kaWNhbGx5IG9yIG1hbnVhbGx5LiAgVGhlc2UgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlbS4KCk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdGVsbHMgbWUgbm90IHRvIGxpc3QgZ2VuZXJpYyBjb25maWdzLiAgQnV0IGlzIGBERUJVR19LTUVNTEVBS2AgdG9vIGdlbmVyaWM/ICBObywgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIGttZW1sZWFrICpkZWJ1ZyogZmVhdHVyZSBpdHNlbGYuICBXaGlsZSBpdCAqbWlnaHQqIGJlIGVuYWJsZWQgaW4gc29tZSBpbnN0YW5jZXMsIEkgdGhpbmsgaXQmIzM5O3MgY3J1Y2lhbCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCBmb3IgbXkgZnV6emluZy4gVGhpcyBzZWVtcyBsaWtlIHRoZSAqbWFpbiogY29uZmlnLiBJIGFtIGdvaW5nIHRvIGxpc3QgYERFQlVHX0tNRU1MRUFLYC4KCkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhvc2Ugc2NhbiBmdW5jdGlvbnMuICBga21lbWxlYWtfc2NhbmAgaXMgdGhlIG1haW4gc2NhbiBmdW5jdGlvbi4gSXMgaXQgaG90LXBhdGg/IE5vLCBpdCYjMzk7cyBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IGBrbWVtbGVha19zY2FuX3RocmVhZGAgb3IgbWFudWFsbHkgdGhyb3VnaCBkZWJ1Z2ZzLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKnB1cnBvc2UqIG9mIHRoZXNlIGNoYW5nZXMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgdW5yZWZlcmVuY2VkIHNjYW4gdGhyZXNob2xkIGFuZCBob3cgb2JqZWN0cyBhcmUgY29uZmlybWVkIGFzIGxlYWtzLiAgVGhpcyBkaXJlY3RseSBhZmZlY3RzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGttZW1sZWFrIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcy4KCkZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbiBzeW1ib2xzOiBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGV5JiMzOTtyZSB0aGVyZS4gIGBjb25maXJtX2xlYWtgIGlzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiBhZGRlZCBpbiB0aGlzIHBhdGNoLiBBbmQgeWVzLCBgX19rbWVtbGVha19zY2FuYCBpcyBwcmVzZW50LCBpdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGluIHRoZSBwYXRjaCAocG9zc2libHkgcmVuYW1lZCBvciBjaGFuZ2VkKS4gQW5kIGBrbWVtbGVha19zY2FuYCBhbHNvIGV4aXN0cy4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncz8gVGhlIHRlc3QgdXNlcyBgQ09ORklHX1NBTVBMRV9LTUVNTEVBS2AsIGJ1dCB0aGF0JiMzOTtzIGZvciBhIHNlbGZ0ZXN0LiBJIGRvbiYjMzk7dCBuZWVkIHRvIGVuYWJsZSB0aGF0IHNwZWNpZmljIG1vZHVsZSB0byBmdXp6IHRoZSBjb3JlIGttZW1sZWFrIGxvZ2ljIGl0c2VsZi4gVGhhdCBhcHBlYXJzIHRvIGJlIGl0LgoKVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpcyBqdXN0IGBERUJVR19LTUVNTEVBS2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19LTUVNTEVBSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbWxlYWtfc2NhbiYjMzQ7LAogICAgJiMzNDtjb25maXJtX2xlYWsmIzM0OywKICAgICYjMzQ7a21lbWxlYWtfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIGxvZ2ljIGluIGttZW1sZWFrLCBpbnRyb2R1Y2luZyBhIG5ldyBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rbWVtbGVha19zY2FuJiMzNDssCiAgICAmIzM0O2NvbmZpcm1fbGVhayYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjIwLjU5MzE2OTM3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTQ2OTM3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rbWVtbGVha19zY2FuXCIsXG4gICAgXCJjb25maXJtX2xlYWtcIixcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIGxvZ2ljIGluIGttZW1sZWFrLCBpbnRyb2R1Y2luZyBhIG5ldyBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjIwLjU5MzE4NTkwMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMjI5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmQwZjg1N2I1MTNlYjk4YmRjOWMyNDFhYWM1MDM4Mjg2MDBhYzUyYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAxNDo0NToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcXG5pbmRleCA3ZDc4NGUwM2YzZjlkNS4uYThhODNiYzY5Y2ViODggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XFxuQEAgLTE5OCw2ICsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvclxcbiBzdGFja3MuIEttZW1sZWFrIGRlZmluZXMgTVNFQ1NfTUlOX0FHRSAoZGVmYXVsdGluZyB0byAxMDAwKSByZXByZXNlbnRpbmdcXG4gdGhlIG1pbmltdW0gYWdlIG9mIGFuIG9iamVjdCB0byBiZSByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrLlxcbiBcXG4rVGhlIGBgbWluX3VucmVmX3NjYW5zYGAgbW9kdWxlIHBhcmFtZXRlciAoZGVmYXVsdCAxKSByZXF1aXJlcyBhbiBvYmplY3QgdG9cXG4rYmUgc2VlbiB1bnJlZmVyZW5jZWQgaW4gdGhhdCBtYW55IGNvbnNlY3V0aXZlIHNjYW5zIGJlZm9yZSBpdCBpcyByZXBvcnRlZC5cXG4rS2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyXFxuK3RoZSB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmVzIGRlc2NyaWJlZCBhYm92ZSwgYXQgdGhlIGNvc3Qgb2YgZGVsYXlpbmdcXG4rZ2VudWluZSByZXBvcnRzIGJ5IHVwIHRvIHRoYXQgbWFueSBzY2Fucy4gSXQgY2FuIGJlIHNldCBhdCBib290IHdpdGhcXG4rYGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9XFx1MDAzY25cXHUwMDNlYGAgb3IgYXQgcnVuLXRpbWUgdmlhXFxuK2BgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgYC5cXG4rXFxuIExpbWl0YXRpb25zIGFuZCBEcmF3YmFja3NcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcXG5pbmRleCBlOTZlOWVmZDE5YjBkOS4uODVmMThiMTdlNzljNGUgMTAwNjQ0XFxuLS0tIGEvbW0va21lbWxlYWsuY1xcbisrKyBiL21tL2ttZW1sZWFrLmNcXG5AQCAtMTUxLDYgKzE1MSw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xcbiBcXHRpbnQgbWluX2NvdW50O1xcbiBcXHQvKiB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50ZXJzIGZvdW5kIHBvaW50aW5nIHRvIHRoaXMgb2JqZWN0ICovXFxuIFxcdGludCBjb3VudDtcXG4rXFx0LyogY29uc2VjdXRpdmUgc2NhbnMgdGhlIG9iamVjdCBoYXMgYmVlbiBzZWVuIHVucmVmZXJlbmNlZCAqL1xcbitcXHR1bnNpZ25lZCBpbnQgdW5yZWZfc2NhbnM7XFxuIFxcdC8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqL1xcbiBcXHR1MzIgY2hlY2tzdW07XFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IHRyYWNlX2hhbmRsZTtcXG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xcbiAjZGVmaW5lIE9CSkVDVF9QSFlTXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gLyogZmxhZyBzZXQgZm9yIHBlci1DUFUgcG9pbnRlcnMgKi9cXG4gI2RlZmluZSBPQkpFQ1RfUEVSQ1BVXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4rLyogZmxhZyBzZXQgb24gYW4gb2JqZWN0IGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoZSBmdWxsIHNjYW4sIHBlbmRpbmcgY29uZmlybWF0aW9uICovXFxuKyNkZWZpbmUgT0JKRUNUX1NVU1BFQ1RcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiBcXG4gLyogc2V0IHdoZW4gX19yZW1vdmVfb2JqZWN0KCkgY2FsbGVkICovXFxuICNkZWZpbmUgREVMU1RBVEVfUkVNT1ZFRFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuQEAgLTIzMiw5ICsyMzYsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3BlcmNwdV9hZGRyO1xcbiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzY2FuX3RocmVhZDtcXG4gLyogdXNlZCB0byBhdm9pZCByZXBvcnRpbmcgb2YgcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKi9cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19taW5fYWdlO1xcbisvKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluX3VucmVmX3NjYW5zID0gMTtcXG4rbW9kdWxlX3BhcmFtKG1pbl91bnJlZl9zY2FucywgdWludCwgMDY0NCk7XFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xcbiAvKiBkZWxheSBiZXR3ZWVuIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmdzICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfc2Nhbl93YWl0O1xcbisvKiBudW1iZXIgb2Ygb2JqZWN0cyBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUIGR1cmluZyB0aGUgY3VycmVudCBzY2FuICovXFxuK3N0YXRpYyBpbnQgbnJfc3VzcGVjdHM7XFxuIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovXFxuIHN0YXRpYyBpbnQga21lbWxlYWtfc3RhY2tfc2NhbiA9IDE7XFxuIC8qIHByb3RlY3RzIHRoZSBtZW1vcnkgc2Nhbm5pbmcsIHBhcmFtZXRlcnMgYW5kIGRlYnVnL2ttZW1sZWFrIGZpbGUgYWNjZXNzICovXFxuQEAgLTY4OCw2ICs2OTcsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxcbiBcXHRvYmplY3QtXFx1MDAzZWV4Y2Vzc19yZWYgPSAwO1xcbiBcXHRvYmplY3QtXFx1MDAzZWNvdW50ID0gMDtcXHRcXHRcXHQvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi9cXG4gXFx0b2JqZWN0LVxcdTAwM2VjaGVja3N1bSA9IH4wO1xcbitcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0b2JqZWN0LVxcdTAwM2VkZWxfc3RhdGUgPSAwO1xcbiBcXG4gXFx0LyogdGFzayBpbmZvcm1hdGlvbiAqL1xcbkBAIC0xNDQwLDYgKzE0NTAsMTEgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3JlZnMoc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KVxcbiBcXHQgKi9cXG4gXFx0b2JqZWN0LVxcdTAwM2Vjb3VudCsrO1xcbiBcXHRpZiAoY29sb3JfZ3JheShvYmplY3QpKSB7XFxuK1xcdFxcdC8qIHJlZmVyZW5jZWQgYWZ0ZXIgYWxsLCBubyBsb25nZXIgYSBzdXNwZWN0ICovXFxuK1xcdFxcdGlmIChvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1NVU1BFQ1QpIHtcXG4rXFx0XFx0XFx0b2JqZWN0LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T0JKRUNUX1NVU1BFQ1Q7XFxuK1xcdFxcdFxcdG5yX3N1c3BlY3RzLS07XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogcHV0X29iamVjdCgpIGNhbGxlZCB3aGVuIHJlbW92aW5nIGZyb20gZ3JheV9saXN0ICovXFxuIFxcdFxcdFdBUk5fT04oIWdldF9vYmplY3Qob2JqZWN0KSk7XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm9iamVjdC1cXHUwMDNlZ3JheV9saXN0LCBcXHUwMDI2Z3JheV9saXN0KTtcXG5AQCAtMTg0NCwxNiArMTg1OSwxNiBAQCBzdGF0aWMgdm9pZCBkZWR1cF9mbHVzaChzdHJ1Y3QgeGFycmF5ICpkZWR1cClcXG4gICoga2VybmVsJ3Mgc3RhbmRhcmQgYWxsb2NhdG9ycy4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZVxcbiAgKiBzY2FuX211dGV4IGhlbGQuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXFxuK3N0YXRpYyBpbnQgX19rbWVtbGVha19zY2FuKGJvb2wgZnVsbClcXG4ge1xcbiBcXHRzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7XFxuIFxcdHN0cnVjdCB6b25lICp6b25lO1xcbiBcXHRpbnQgX19tYXliZV91bnVzZWQgaTtcXG4tXFx0c3RydWN0IHhhcnJheSBkZWR1cDtcXG4tXFx0aW50IG5ld19sZWFrcyA9IDA7XFxuIFxcdGludCBzdG9wID0gMDtcXG4gXFxuIFxcdGppZmZpZXNfbGFzdF9zY2FuID0gamlmZmllcztcXG4rXFx0aWYgKGZ1bGwpXFxuK1xcdFxcdG5yX3N1c3BlY3RzID0gMDtcXG4gXFxuIFxcdC8qIHByZXBhcmUgdGhlIGttZW1sZWFrX29iamVjdCdzICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG5AQCAtMTg4MSw4ICsxODk2LDEzIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4gXFx0XFx0XFx0XFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cXG4rXFx0XFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxcbitcXHRcXHRcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0XFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXFxuIFxcdFxcdG9iamVjdC1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHRpZiAoZnVsbClcXG4rXFx0XFx0XFx0b2JqZWN0LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T0JKRUNUX1NVU1BFQ1Q7XFxuIFxcdFxcdGlmIChjb2xvcl9ncmF5KG9iamVjdCkgXFx1MDAyNlxcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxcbiBcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZvYmplY3QtXFx1MDAzZWdyYXlfbGlzdCwgXFx1MDAyNmdyYXlfbGlzdCk7XFxuIFxcbkBAIC0xOTUwLDYgKzE5NzAsMTAgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxcbiBzY2FuX2dyYXk6XFxuIFxcdHNjYW5fZ3JheV9saXN0KCk7XFxuIFxcbitcXHQvKiBhIGNvbmZpcm1hdGlvbiBzY2FuIGRvZXMgbm90IGxvb2sgZm9yIG1vZGlmaWVkIG9iamVjdHMgKi9cXG4rXFx0aWYgKCFmdWxsKVxcbitcXHRcXHRyZXR1cm4gbnJfc3VzcGVjdHM7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayBmb3IgbmV3IG9yIHVucmVmZXJlbmNlZCBvYmplY3RzIG1vZGlmaWVkIHNpbmNlIHRoZSBwcmV2aW91c1xcbiBcXHQgKiBzY2FuIGFuZCBjb2xvciB0aGVtIGdyYXkgdW50aWwgdGhlIG5leHQgc2Nhbi5cXG5AQCAtMTk3Miw2ICsxOTk2LDExIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4gXFx0XFx0XFx0LyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqL1xcbiBcXHRcXHRcXHRvYmplY3QtXFx1MDAzZWNvdW50ID0gb2JqZWN0LVxcdTAwM2VtaW5fY291bnQ7XFxuIFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm9iamVjdC1cXHUwMDNlZ3JheV9saXN0LCBcXHUwMDI2Z3JheV9saXN0KTtcXG4rXFx0XFx0fSBlbHNlIGlmICh1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIShvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xcbitcXHRcXHRcXHQvKiBmbGFnIHRoZSBvYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoaXMgc2NhbiAqL1xcbitcXHRcXHRcXHRvYmplY3QtXFx1MDAzZWZsYWdzIHw9IE9CSkVDVF9TVVNQRUNUO1xcbitcXHRcXHRcXHRucl9zdXNwZWN0cysrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJhd19zcGluX3VubG9ja19pcnEoXFx1MDAyNm9iamVjdC1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG5AQCAtMTk4MiwxMiArMjAxMSw2MiBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXFxuIFxcdCAqL1xcbiBcXHRzY2FuX2dyYXlfbGlzdCgpO1xcbiBcXG4rXFx0cmV0dXJuIG5yX3N1c3BlY3RzO1xcbit9XFxuK1xcbisvKlxcbisgKiBQcm9tb3RlIGEgc3VzcGVjdGVkIG9iamVjdCB0byBhIHJlcG9ydGVkIGxlYWsgb25jZSBpdCBoYXMgc3RheWVkXFxuKyAqIHVucmVmZXJlbmNlZCBmb3IgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBDYWxsZWQgd2l0aFxcbisgKiBvYmplY3QtXFx1MDAzZWxvY2sgaGVsZDsgcmV0dXJucyB0cnVlIHdoZW4gdGhlIG9iamVjdCBpcyBuZXdseSByZXBvcnRlZC5cXG4rICovXFxuK3N0YXRpYyBib29sIGNvbmZpcm1fbGVhayhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXFxuK3tcXG4rXFx0aWYgKCF1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgfHxcXG4rXFx0ICAgICEob2JqZWN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE9CSkVDVF9TVVNQRUNUKSB8fFxcbitcXHQgICAgKG9iamVjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zICs9IDE7XFxuK1xcdGlmIChvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zIFxcdTAwM2MgbWluX3VucmVmX3NjYW5zKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvYmplY3QtXFx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNjYW4gdGhlIG1lbW9yeSBhbmQgcmVwb3J0IHRoZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyBhcyBsZWFrcy4gTXVzdCBiZVxcbisgKiBjYWxsZWQgd2l0aCB0aGUgc2Nhbl9tdXRleCBoZWxkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcXG4rXFx0c3RydWN0IHhhcnJheSBkZWR1cDtcXG4rXFx0aW50IG5ld19sZWFrcyA9IDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGdWxsIHNjYW4uIE9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYXJlIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgYW5kXFxuK1xcdCAqIGNvdW50ZWQgaW4gdGhlIHJldHVybiB2YWx1ZTsgbm90aGluZyB0byBjb25maXJtIG9yIHJlcG9ydCBvdGhlcndpc2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgc2Nhbm5pbmcgd2FzIHN0b3BwZWQgZG8gbm90IHJlcG9ydCBhbnkgbmV3IHVucmVmZXJlbmNlZCBvYmplY3RzLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSBsaXZlIG9iamVjdCB3aG9zZSBvbmx5IHJlZmVyZW5jZSBpcyBtb3ZlZCBieSwgZm9yIGV4YW1wbGUsIGFcXG4rXFx0ICogY29uY3VycmVudCBSQ1UgdXBkYXRlIGNhbiBiZSBtaXNzZWQgZm9yIG9uZSBzY2FuIGFuZCByZXBvcnRlZCBhcyBhXFxuK1xcdCAqIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZS4gU2NhbiBhZ2FpbiBhbmQgb25seSByZXBvcnQgdGhlIG9iamVjdHNcXG4rXFx0ICogbGVmdCB1bnJlZmVyZW5jZWQgKHN0aWxsIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QpIGJ5IGJvdGggc2NhbnMuXFxuK1xcdCAqL1xcbitcXHRfX2ttZW1sZWFrX3NjYW4oZmFsc2UpO1xcbitcXHRpZiAoc2Nhbl9zaG91bGRfc3RvcCgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBTY2FubmluZyByZXN1bHQgcmVwb3J0aW5nLiBXaGVuIHZlcmJvc2UgcHJpbnRpbmcgaXMgZW5hYmxlZCwgZGVkdXBlXFxuIFxcdCAqIGJ5IHN0YWNrZGVwb3QgdHJhY2VfaGFuZGxlIHNvIGVhY2ggdW5pcXVlIGJhY2t0cmFjZSBpcyBsb2dnZWQgb25jZVxcbkBAIC0yMDE0LDkgKzIwOTMsOCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXFxuIFxcdFxcdHJhd19zcGluX2xvY2tfaXJxKFxcdTAwMjZvYmplY3QtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHR0cmFjZV9oYW5kbGUgPSAwO1xcbiBcXHRcXHRkZWR1cF9wcmludCA9IGZhbHNlO1xcbi1cXHRcXHRpZiAodW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhKG9iamVjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKSB7XFxuLVxcdFxcdFxcdG9iamVjdC1cXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xcbitcXG4rXFx0XFx0aWYgKGNvbmZpcm1fbGVhayhvYmplY3QpKSB7XFxuIFxcdFxcdFxcdGlmIChrbWVtbGVha192ZXJib3NlKSB7XFxuIFxcdFxcdFxcdFxcdHRyYWNlX2hhbmRsZSA9IG9iamVjdC1cXHUwMDNldHJhY2VfaGFuZGxlO1xcbiBcXHRcXHRcXHRcXHRkZWR1cF9wcmludCA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0xNTAsNiArMTUwLDcgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X2d1cF90ZXN0LnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9obW0uc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2h1Z2V0bGIuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2h1Z2V2bS5zaFxcbitURVNUX1BST0dTICs9IGtzZnRfa21lbWxlYWtfY29uZmlybS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfa21lbWxlYWtfZGVkdXAuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2tzbS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfa3NtX251bWEuc2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2E4NTc2ZTgzNWM4ZDFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXFxuQEAgLTAsMCArMSwxMzIgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjXFxuKyMgRnVuY3Rpb25hbCB0ZXN0IGZvciBrbWVtbGVhaydzIE4tY29uc2VjdXRpdmUtc2NhbiBsZWFrIGNvbmZpcm1hdGlvblxcbisjICh0aGUgbWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIpLlxcbisjXFxuKyMga21lbWxlYWsgb25seSByZXBvcnRzIGFuIG9iamVjdCBvbmNlIGl0IGhhcyBzdGF5ZWQgdW5yZWZlcmVuY2VkIGZvclxcbisjIG1pbl91bnJlZl9zY2FucyBjb25zZWN1dGl2ZSBzY2Fucy4gVGhlIGRlZmF1bHQgb2YgMSByZXBvcnRzIG9uIHRoZSBmaXJzdFxcbisjIHNjYW4gKGhpc3RvcmljYWwgYmVoYXZpb3VyKTsgaGlnaGVyIHZhbHVlcyBmaWx0ZXIgdHJhbnNpZW50IGZhbHNlXFxuKyMgcG9zaXRpdmVzIHdoZXJlIGEgbGl2ZSBvYmplY3QncyBvbmx5IHJlZmVyZW5jZSBpcyBicmllZmx5IGludmlzaWJsZSB0byBhXFxuKyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlXFxuKyMgdGVzdCBsb2FkcyBzYW1wbGVzL2ttZW1sZWFrJ3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zXFxuKyMgYW5kLCBjb3VudGluZyBvbmx5IHRob3NlIG9ycGhhbnMgKG1hdGNoZWQgYnkgdGhlaXIgW2ttZW1sZWFrX3Rlc3RdXFxuKyMgYmFja3RyYWNlIHNvIHVucmVsYXRlZCBsZWFrcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSBhcmUgaWdub3JlZCksXFxuKyMgY2hlY2tzIHRoYXQ6XFxuKyMgICAtIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IGlzIGdyZXllZCBvbiBpdHMgZmlyc3Qgc2NhbiAoaXRzIGNoZWNrc3VtXFxuKyMgICAgIHNldHRsZXMgdGhlbiksIHNvIG5vdGhpbmcgY2FuIGJlIHJlcG9ydGVkIGJlZm9yZSB0aGF0IHByaW1pbmcgc2NhbjtcXG4rIyAgICAgZWFjaCBjYXNlIGJlbG93IHByaW1lcyBvbmNlIGZpcnN0LFxcbisjICAgLSB3aXRoIHRoZSBkZWZhdWx0IHRocmVzaG9sZCAobWluX3VucmVmX3NjYW5zPTEpIG9uZSBzY2FuIGFmdGVyIHByaW1pbmdcXG4rIyAgICAgcmVwb3J0cyB0aGUgb3JwaGFucyxcXG4rIyAgIC0gcmFpc2luZyB0aGUgdGhyZXNob2xkIHRvIDIgbmVlZHMgdHdvIHNjYW5zIGFmdGVyIHByaW1pbmc6IG9uZSBpcyBub3RcXG4rIyAgICAgZW5vdWdoLCB0aGUgc2Vjb25kIHJlcG9ydHMsXFxuKyMgICAtIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxcbisjXFxuKyMgVGhlIFxcXCJvbmUgcG9zdC1wcmltZSBzY2FuIGlzIG5vdCBlbm91Z2ggYXQgbWluX3VucmVmX3NjYW5zPTJcXFwiIGNoZWNrIGlzIHRoZVxcbisjIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiByYWlzaW5nIG1pbl91bnJlZl9zY2FucyBtdXN0IHB1c2ggdGhlIHJlcG9ydFxcbisjIHN0cmljdGx5IGxhdGVyLiBMaWtlIGtzZnRfa21lbWxlYWtfZGVkdXAuc2gsIGlmIHRoZSBtb2R1bGUgeWllbGRzIG5vXFxuKyMgZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsIGluIHRoZSBydW5uaW5nIGVudmlyb25tZW50IHRoZSB0ZXN0IHNraXBzIHJhdGhlclxcbisjIHRoYW4gZmFpbGluZy5cXG4rI1xcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rXFxuKyMgS1RBUCBvdXRwdXQgaGVscGVycyAoa3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCBrdGFwX3Rlc3RfcGFzcywgLi4uKS5cXG4rRElSPVxcXCIkKGRpcm5hbWUgXFxcIiQocmVhZGxpbmsgLWYgXFxcIiQwXFxcIilcXFwiKVxcXCJcXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXFxuK3NvdXJjZSBcXFwiJHtESVJ9XFxcIi8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXFxuK1xcbitLTUVNTEVBSz0vc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha1xcbitQQVJBTT0vc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc1xcbitNT0RVTEU9a21lbWxlYWstdGVzdFxcbitBR0U9NlxcdFxcdCMgc2Vjb25kczsgbXVzdCBleGNlZWQga21lbWxlYWsncyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcXG4rXFxuK2t0YXBfcHJpbnRfaGVhZGVyXFxuK1xcbitbIFxcXCIkKGlkIC11KVxcXCIgLWVxIDAgXSB8fCB7IGt0YXBfc2tpcF9hbGwgXFxcIm11c3QgcnVuIGFzIHJvb3RcXFwiOyBleGl0IFxcXCIkS1NGVF9TS0lQXFxcIjsgfVxcbitbIC1yIFxcXCIkS01FTUxFQUtcXFwiIF0gfHxcXG4rXFx0eyBrdGFwX3NraXBfYWxsIFxcXCJubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspXFxcIjsgZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCI7IH1cXG4rWyAtdyBcXFwiJFBBUkFNXFxcIiBdIHx8XFxuK1xcdHsga3RhcF9za2lwX2FsbCBcXFwibWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIgbm90IHByZXNlbnRcXFwiOyBleGl0IFxcXCIkS1NGVF9TS0lQXFxcIjsgfVxcbittb2RpbmZvIFxcXCIkTU9EVUxFXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHxcXG4rXFx0eyBrdGFwX3NraXBfYWxsIFxcXCIkTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcXFwiOyBleGl0IFxcXCIkS1NGVF9TS0lQXFxcIjsgfVxcbitcXG4rIyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLFxcbisjIG9yIGl0IHNlbGYtZGlzYWJsZWQgYWZ0ZXIgYW4gaW50ZXJuYWwgZXJyb3IpOyBhIFxcXCJzY2FuXFxcIiB0aGVuIHJldHVybnNcXG4rIyBFUEVSTS4gUHJvYmUgb25jZSBhbmQgc2tpcCBpZiBzby5cXG4rZWNobyBzY2FuIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGwgfHxcXG4rXFx0eyBrdGFwX3NraXBfYWxsIFxcXCJrbWVtbGVhayBpcyBkaXNhYmxlZCAoY2hlY2sgZG1lc2cgb3Iga21lbWxlYWs9IGJvb3QgYXJnKVxcXCI7IGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiOyB9XFxuK1xcbitwcmV2PSQoY2F0IFxcXCIkUEFSQU1cXFwiKVxcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcgICMgaW52b2tlZCBpbmRpcmVjdGx5IHZpYSB0cmFwXFxuK2NsZWFudXAoKSB7XFxuK1xcdGVjaG8gXFxcIiRwcmV2XFxcIiBcXHUwMDNlIFxcXCIkUEFSQU1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFx0XFx0IyByZXN0b3JlIHRoZSBwYXJhbWV0ZXJcXG4rXFx0ZWNobyBzY2FuPW9uIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXHRcXHQjIHJlLWVuYWJsZSBhdXRvIHNjYW5cXG4rXFx0cm1tb2QgXFxcIiRNT0RVTEVcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gY2xlYXIgXFx1MDAzZSBcXFwiJEtNRU1MRUFLXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbit9XFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbisjIFN0b3AgdGhlIGF1dG9tYXRpYyBzY2FuIHRocmVhZDogb25seSBvdXIgbWFudWFsIHNjYW5zIHNob3VsZCBhZHZhbmNlIGFuXFxuKyMgb2JqZWN0J3MgY29uc2VjdXRpdmUtdW5yZWZlcmVuY2VkIHJ1bi4gQW4gYXV0byBzY2FuIGxhbmRpbmcgYmV0d2VlbiB0d29cXG4rIyBtYW51YWwgc2NhbnMgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgYW5kIG1ha2UgdGhlIHRlc3QgZmxha3kuXFxuK2VjaG8gc2Nhbj1vZmYgXFx1MDAzZSBcXFwiJEtNRU1MRUFLXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rIyBDcmVhdGUgYSBmcmVzaCwgYWdlZCBzZXQgb2Ygb3JwaGFuIG9iamVjdHMgZnJvbSB0aGUgaGVscGVyIG1vZHVsZSdzIGluaXRcXG4rIyBwYXRoIChpdHMga21hbGxvYy92bWFsbG9jL3BlcmNwdSBhbGxvY2F0aW9ucyBhcmUgZHJvcHBlZCByaWdodCBhd2F5KS5cXG4rIyBQcmUtZXhpc3RpbmcgcmVwb3J0ZWQgbGVha3MgYXJlIGdyZXllZCBmaXJzdCAoXFxcImNsZWFyXFxcIikgc28gb25seSBvdXJcXG4rIyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcXG4rIyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXFxuKyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy5cXG4rZ2VuX29ycGhhbnMoKSB7XFxuK1xcdHJtbW9kIFxcXCIkTU9EVUxFXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIGNsZWFyIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCJcXG4rXFx0bW9kcHJvYmUgXFxcIiRNT0RVTEVcXFwiIHx8XFxuK1xcdFxcdHsga3RhcF9za2lwX2FsbCBcXFwiZmFpbGVkIHRvIGxvYWQgJE1PRFVMRVxcXCI7IGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiOyB9XFxuK1xcdHNsZWVwIFxcXCIkQUdFXFxcIlxcbit9XFxuK1xcbitzY2FuKCkgeyBlY2hvIHNjYW4gXFx1MDAzZSBcXFwiJEtNRU1MRUFLXFxcIjsgfVxcbitcXG4rIyBOdW1iZXIgb2YgaGVscGVyLW1vZHVsZSBvcnBoYW5zIGN1cnJlbnRseSByZXBvcnRlZCBieSBrbWVtbGVhay4gTWF0Y2hpbmdcXG4rIyB0aGUgbW9kdWxlJ3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvXFxuKyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxcbisjIG9uY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQsIHNvIHRoaXMgcmVmbGVjdHMgdGhlIGNvbmZpcm1hdGlvbiBnYXRpbmcuXFxuK2NvdW50X29ycGhhbnMoKSB7XFxuK1xcdGM9JChncmVwIC1jICdcXFxcW2ttZW1sZWFrX3Rlc3RcXFxcXScgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGwpXFxuK1xcdGVjaG8gXFxcIiR7YzotMH1cXFwiXFxuK31cXG4rXFxuKyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXFxuK2VjaG8gMyBcXHUwMDNlIFxcXCIkUEFSQU1cXFwiXFxuK1sgXFxcIiQoY2F0IFxcXCIkUEFSQU1cXFwiKVxcXCIgPSBcXFwiM1xcXCIgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXFxcIm1pbl91bnJlZl9zY2FucyBkaWQgbm90IHJlYWQgYmFjayBhcyAzXFxcIlxcbitcXG4rIyBQcmltaW5nIHNjYW46IGttZW1sZWFrIGdyZXlzIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IG9uIGl0cyBmaXJzdCBzY2FuXFxuKyMgKGl0cyBjaGVja3N1bSBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCB1bnRpbCBhIHNlY29uZFxcbisjIHNjYW4uIEV2ZXJ5IGNhc2UgYmVsb3cgcnVucyB0aGlzIHByaW1pbmcgc2NhbiBiZWZvcmUgY291bnRpbmcuXFxuK3ByaW1lKCkgeyBzY2FuOyB9XFxuK1xcbisjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb25lIHNjYW4gYWZ0ZXIgcHJpbWluZyByZXBvcnRzIHRoZVxcbisjICAgIG9ycGhhbnMuIFRoaXMgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZVxcbisjICAgIG9ycGhhbnMgaGVyZS5cXG4rZWNobyAxIFxcdTAwM2UgXFxcIiRQQVJBTVxcXCJcXG4rZ2VuX29ycGhhbnNcXG4rcHJpbWVcXG4rc2NhblxcbitmaXJzdD0kKGNvdW50X29ycGhhbnMpXFxuK1sgXFxcIiRmaXJzdFxcXCIgLWd0IDAgXSB8fFxcbitcXHR7IGt0YXBfc2tpcF9hbGwgXFxcIiRNT0RVTEUgcHJvZHVjZWQgbm8gZGV0ZWN0YWJsZSBvcnBoYW5zIChjYW5ub3QgdGVzdCBtaW5fdW5yZWZfc2NhbnMpXFxcIjsgZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCI7IH1cXG4rXFxuKyMgMikgbWluX3VucmVmX3NjYW5zPTI6IGFmdGVyIHByaW1pbmcsIG9uZSBzY2FuIGlzIG5vdCBlbm91Z2ggKHN0aWxsXFxuKyMgICAgZ2F0ZWQpLCB0aGUgc2Vjb25kIHJlcG9ydHMuIFRoZSBnYXRlZC1zY2FuLXplcm8gY2hlY2sgaXMgdGhlIGNvcmVcXG4rIyAgICByZWdyZXNzaW9uLlxcbitlY2hvIDIgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIlxcbitnZW5fb3JwaGFuc1xcbitwcmltZVxcbitzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpXFxuK3NjYW47IHMyPSQoY291bnRfb3JwaGFucylcXG4rWyBcXFwiJHMxXFxcIiAtZXEgMCBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcXFwibWluX3VucmVmX3NjYW5zPTI6ICRzMSBvcnBoYW4ocykgYWZ0ZXIgMSBwb3N0LXByaW1lIHNjYW4gKG11c3QgYmUgMClcXFwiXFxuK1sgXFxcIiRzMlxcXCIgLWd0IDAgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXFxcIm1pbl91bnJlZl9zY2Fucz0yOiBubyByZXBvcnQgYWZ0ZXIgMiBwb3N0LXByaW1lIHNjYW5zIChmYWxzZSBuZWdhdGl2ZSlcXFwiXFxuK1xcbitrdGFwX3NldF9wbGFuIDFcXG4ra3RhcF90ZXN0X3Bhc3MgXFxcIm1pbl91bnJlZl9zY2Fucz0xIHJlcG9ydGVkICRmaXJzdCBvcnBoYW4ocykgb25lIHNjYW4gYWZ0ZXIgcHJpbWluZzsgPTIgaGVsZCB0aGVtIG9uZSBzY2FuIGxvbmdlciAoJHMxIGFmdGVyIG9uZSBzY2FuLCAkczIgYWZ0ZXIgdHdvKTsgcGFyYW0gcmVhZC1iYWNrIG9rXFxcIlxcbitrdGFwX2ZpbmlzaGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjIxLjMyNjY1MjA1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MTM0NDE1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfS01FTUxFQUtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ttZW1sZWFrX3NjYW5cIixcbiAgICBcImNvbmZpcm1fbGVha1wiLFxuICAgIFwia21lbWxlYWtfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDBmODU3YjUxM2ViOThiZGM5YzI0MWFhYzUwMzgyODYwMGFjNTJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTQ6NDU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG5AQCAtMTk4LDYgKzE5OCwxNCBAQCBzeXN0ZW1zLCBiZWNhdXNlIG9mIHBvaW50ZXJzIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiBDUFUgcmVnaXN0ZXJzIG9yXG4gc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nXG4gdGhlIG1pbmltdW0gYWdlIG9mIGFuIG9iamVjdCB0byBiZSByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrLlxuIFxuK1RoZSBgYG1pbl91bnJlZl9zY2Fuc2BgIG1vZHVsZSBwYXJhbWV0ZXIgKGRlZmF1bHQgMSkgcmVxdWlyZXMgYW4gb2JqZWN0IHRvXG4rYmUgc2VlbiB1bnJlZmVyZW5jZWQgaW4gdGhhdCBtYW55IGNvbnNlY3V0aXZlIHNjYW5zIGJlZm9yZSBpdCBpcyByZXBvcnRlZC5cbitLZWVwaW5nIGl0IGF0IDEgcHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW91cjsgaGlnaGVyIHZhbHVlcyBmaWx0ZXJcbit0aGUgdHJhbnNpZW50IGZhbHNlIHBvc2l0aXZlcyBkZXNjcmliZWQgYWJvdmUsIGF0IHRoZSBjb3N0IG9mIGRlbGF5aW5nXG4rZ2VudWluZSByZXBvcnRzIGJ5IHVwIHRvIHRoYXQgbWFueSBzY2Fucy4gSXQgY2FuIGJlIHNldCBhdCBib290IHdpdGhcbitgYGttZW1sZWFrLm1pbl91bnJlZl9zY2Fucz1cdTAwM2NuXHUwMDNlYGAgb3IgYXQgcnVuLXRpbWUgdmlhXG4rYGAvc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc2BgLlxuK1xuIExpbWl0YXRpb25zIGFuZCBEcmF3YmFja3NcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcbmluZGV4IGU5NmU5ZWZkMTliMGQ5Li44NWYxOGIxN2U3OWM0ZSAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbisrKyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xNTEsNiArMTUxLDggQEAgc3RydWN0IGttZW1sZWFrX29iamVjdCB7XG4gXHRpbnQgbWluX2NvdW50O1xuIFx0LyogdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludGVycyBmb3VuZCBwb2ludGluZyB0byB0aGlzIG9iamVjdCAqL1xuIFx0aW50IGNvdW50O1xuK1x0LyogY29uc2VjdXRpdmUgc2NhbnMgdGhlIG9iamVjdCBoYXMgYmVlbiBzZWVuIHVucmVmZXJlbmNlZCAqL1xuK1x0dW5zaWduZWQgaW50IHVucmVmX3NjYW5zO1xuIFx0LyogY2hlY2tzdW0gZm9yIGRldGVjdGluZyBtb2RpZmllZCBvYmplY3RzICovXG4gXHR1MzIgY2hlY2tzdW07XG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7XG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xuICNkZWZpbmUgT0JKRUNUX1BIWVNcdFx0KDEgXHUwMDNjXHUwMDNjIDQpXG4gLyogZmxhZyBzZXQgZm9yIHBlci1DUFUgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIE9CSkVDVF9QRVJDUFVcdFx0KDEgXHUwMDNjXHUwMDNjIDUpXG4rLyogZmxhZyBzZXQgb24gYW4gb2JqZWN0IGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoZSBmdWxsIHNjYW4sIHBlbmRpbmcgY29uZmlybWF0aW9uICovXG4rI2RlZmluZSBPQkpFQ1RfU1VTUEVDVFx0XHQoMSBcdTAwM2NcdTAwM2MgNilcbiBcbiAvKiBzZXQgd2hlbiBfX3JlbW92ZV9vYmplY3QoKSBjYWxsZWQgKi9cbiAjZGVmaW5lIERFTFNUQVRFX1JFTU9WRURcdCgxIFx1MDAzY1x1MDAzYyAwKVxuQEAgLTIzMiw5ICsyMzYsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3BlcmNwdV9hZGRyO1xuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkO1xuIC8qIHVzZWQgdG8gYXZvaWQgcmVwb3J0aW5nIG9mIHJlY2VudGx5IGFsbG9jYXRlZCBvYmplY3RzICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19taW5fYWdlO1xuKy8qIGNvbnNlY3V0aXZlIHNjYW5zIGFuIG9iamVjdCBtdXN0IHN0YXkgdW5yZWZlcmVuY2VkIGJlZm9yZSByZXBvcnRpbmcgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4rbW9kdWxlX3BhcmFtKG1pbl91bnJlZl9zY2FucywgdWludCwgMDY0NCk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47XG4gLyogZGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgbWVtb3J5IHNjYW5uaW5ncyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfc2Nhbl93YWl0O1xuKy8qIG51bWJlciBvZiBvYmplY3RzIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgZHVyaW5nIHRoZSBjdXJyZW50IHNjYW4gKi9cbitzdGF0aWMgaW50IG5yX3N1c3BlY3RzO1xuIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovXG4gc3RhdGljIGludCBrbWVtbGVha19zdGFja19zY2FuID0gMTtcbiAvKiBwcm90ZWN0cyB0aGUgbWVtb3J5IHNjYW5uaW5nLCBwYXJhbWV0ZXJzIGFuZCBkZWJ1Zy9rbWVtbGVhayBmaWxlIGFjY2VzcyAqL1xuQEAgLTY4OCw2ICs2OTcsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxuIFx0b2JqZWN0LVx1MDAzZWV4Y2Vzc19yZWYgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcdFx0XHQvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi9cbiBcdG9iamVjdC1cdTAwM2VjaGVja3N1bSA9IH4wO1xuK1x0b2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zID0gMDtcbiBcdG9iamVjdC1cdTAwM2VkZWxfc3RhdGUgPSAwO1xuIFxuIFx0LyogdGFzayBpbmZvcm1hdGlvbiAqL1xuQEAgLTE0NDAsNiArMTQ1MCwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXG4gXHQgKi9cbiBcdG9iamVjdC1cdTAwM2Vjb3VudCsrO1xuIFx0aWYgKGNvbG9yX2dyYXkob2JqZWN0KSkge1xuK1x0XHQvKiByZWZlcmVuY2VkIGFmdGVyIGFsbCwgbm8gbG9uZ2VyIGEgc3VzcGVjdCAqL1xuK1x0XHRpZiAob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfU1VTUEVDVCkge1xuK1x0XHRcdG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5PQkpFQ1RfU1VTUEVDVDtcbitcdFx0XHRucl9zdXNwZWN0cy0tO1xuK1x0XHR9XG4gXHRcdC8qIHB1dF9vYmplY3QoKSBjYWxsZWQgd2hlbiByZW1vdmluZyBmcm9tIGdyYXlfbGlzdCAqL1xuIFx0XHRXQVJOX09OKCFnZXRfb2JqZWN0KG9iamVjdCkpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9iamVjdC1cdTAwM2VncmF5X2xpc3QsIFx1MDAyNmdyYXlfbGlzdCk7XG5AQCAtMTg0NCwxNiArMTg1OSwxNiBAQCBzdGF0aWMgdm9pZCBkZWR1cF9mbHVzaChzdHJ1Y3QgeGFycmF5ICpkZWR1cClcbiAgKiBrZXJuZWwncyBzdGFuZGFyZCBhbGxvY2F0b3JzLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlXG4gICogc2Nhbl9tdXRleCBoZWxkLlxuICAqL1xuLXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbitzdGF0aWMgaW50IF9fa21lbWxlYWtfc2Nhbihib29sIGZ1bGwpXG4ge1xuIFx0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG4gXHRpbnQgX19tYXliZV91bnVzZWQgaTtcbi1cdHN0cnVjdCB4YXJyYXkgZGVkdXA7XG4tXHRpbnQgbmV3X2xlYWtzID0gMDtcbiBcdGludCBzdG9wID0gMDtcbiBcbiBcdGppZmZpZXNfbGFzdF9zY2FuID0gamlmZmllcztcbitcdGlmIChmdWxsKVxuK1x0XHRucl9zdXNwZWN0cyA9IDA7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBrbWVtbGVha19vYmplY3QncyAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTE4ODEsOCArMTg5NiwxMyBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdFx0XHRfX3BhaW50X2l0KG9iamVjdCwgS01FTUxFQUtfQkxBQ0spO1xuIFx0XHR9XG4gXG4rXHRcdC8qIHJlZmVyZW5jZWQgbGFzdCBzY2FuOiByZXN0YXJ0IHRoZSB1bnJlZmVyZW5jZWQgcnVuICovXG4rXHRcdGlmICghY29sb3Jfd2hpdGUob2JqZWN0KSlcbitcdFx0XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0XHQvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi9cbiBcdFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcbitcdFx0aWYgKGZ1bGwpXG4rXHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9CSkVDVF9TVVNQRUNUO1xuIFx0XHRpZiAoY29sb3JfZ3JheShvYmplY3QpIFx1MDAyNlx1MDAyNiBnZXRfb2JqZWN0KG9iamVjdCkpXG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZvYmplY3QtXHUwMDNlZ3JheV9saXN0LCBcdTAwMjZncmF5X2xpc3QpO1xuIFxuQEAgLTE5NTAsNiArMTk3MCwxMCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gc2Nhbl9ncmF5OlxuIFx0c2Nhbl9ncmF5X2xpc3QoKTtcbiBcbitcdC8qIGEgY29uZmlybWF0aW9uIHNjYW4gZG9lcyBub3QgbG9vayBmb3IgbW9kaWZpZWQgb2JqZWN0cyAqL1xuK1x0aWYgKCFmdWxsKVxuK1x0XHRyZXR1cm4gbnJfc3VzcGVjdHM7XG4rXG4gXHQvKlxuIFx0ICogQ2hlY2sgZm9yIG5ldyBvciB1bnJlZmVyZW5jZWQgb2JqZWN0cyBtb2RpZmllZCBzaW5jZSB0aGUgcHJldmlvdXNcbiBcdCAqIHNjYW4gYW5kIGNvbG9yIHRoZW0gZ3JheSB1bnRpbCB0aGUgbmV4dCBzY2FuLlxuQEAgLTE5NzIsNiArMTk5NiwxMSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdFx0LyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqL1xuIFx0XHRcdG9iamVjdC1cdTAwM2Vjb3VudCA9IG9iamVjdC1cdTAwM2VtaW5fY291bnQ7XG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZvYmplY3QtXHUwMDNlZ3JheV9saXN0LCBcdTAwMjZncmF5X2xpc3QpO1xuK1x0XHR9IGVsc2UgaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAhKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xuK1x0XHRcdC8qIGZsYWcgdGhlIG9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYnkgdGhpcyBzY2FuICovXG4rXHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9TVVNQRUNUO1xuK1x0XHRcdG5yX3N1c3BlY3RzKys7XG4gXHRcdH1cbiBcdFx0cmF3X3NwaW5fdW5sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jayk7XG4gXHR9XG5AQCAtMTk4MiwxMiArMjAxMSw2MiBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHQgKi9cbiBcdHNjYW5fZ3JheV9saXN0KCk7XG4gXG4rXHRyZXR1cm4gbnJfc3VzcGVjdHM7XG4rfVxuK1xuKy8qXG4rICogUHJvbW90ZSBhIHN1c3BlY3RlZCBvYmplY3QgdG8gYSByZXBvcnRlZCBsZWFrIG9uY2UgaXQgaGFzIHN0YXllZFxuKyAqIHVucmVmZXJlbmNlZCBmb3IgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBDYWxsZWQgd2l0aFxuKyAqIG9iamVjdC1cdTAwM2Vsb2NrIGhlbGQ7IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBvYmplY3QgaXMgbmV3bHkgcmVwb3J0ZWQuXG4rICovXG4rc3RhdGljIGJvb2wgY29uZmlybV9sZWFrKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdClcbit7XG4rXHRpZiAoIXVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSB8fFxuK1x0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfU1VTUEVDVCkgfHxcbitcdCAgICAob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgKz0gMTtcbitcdGlmIChvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgXHUwMDNjIG1pbl91bnJlZl9zY2FucylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIFNjYW4gdGhlIG1lbW9yeSBhbmQgcmVwb3J0IHRoZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyBhcyBsZWFrcy4gTXVzdCBiZVxuKyAqIGNhbGxlZCB3aXRoIHRoZSBzY2FuX211dGV4IGhlbGQuXG4rICovXG4rc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxuK3tcbitcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcbitcdHN0cnVjdCB4YXJyYXkgZGVkdXA7XG4rXHRpbnQgbmV3X2xlYWtzID0gMDtcbitcbitcdC8qXG4rXHQgKiBGdWxsIHNjYW4uIE9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYXJlIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgYW5kXG4rXHQgKiBjb3VudGVkIGluIHRoZSByZXR1cm4gdmFsdWU7IG5vdGhpbmcgdG8gY29uZmlybSBvciByZXBvcnQgb3RoZXJ3aXNlLlxuK1x0ICovXG4rXHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIElmIHNjYW5uaW5nIHdhcyBzdG9wcGVkIGRvIG5vdCByZXBvcnQgYW55IG5ldyB1bnJlZmVyZW5jZWQgb2JqZWN0cy5cbiBcdCAqL1xuIFx0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LypcbitcdCAqIEEgbGl2ZSBvYmplY3Qgd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgbW92ZWQgYnksIGZvciBleGFtcGxlLCBhXG4rXHQgKiBjb25jdXJyZW50IFJDVSB1cGRhdGUgY2FuIGJlIG1pc3NlZCBmb3Igb25lIHNjYW4gYW5kIHJlcG9ydGVkIGFzIGFcbitcdCAqIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZS4gU2NhbiBhZ2FpbiBhbmQgb25seSByZXBvcnQgdGhlIG9iamVjdHNcbitcdCAqIGxlZnQgdW5yZWZlcmVuY2VkIChzdGlsbCBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUKSBieSBib3RoIHNjYW5zLlxuK1x0ICovXG4rXHRfX2ttZW1sZWFrX3NjYW4oZmFsc2UpO1xuK1x0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIFNjYW5uaW5nIHJlc3VsdCByZXBvcnRpbmcuIFdoZW4gdmVyYm9zZSBwcmludGluZyBpcyBlbmFibGVkLCBkZWR1cGVcbiBcdCAqIGJ5IHN0YWNrZGVwb3QgdHJhY2VfaGFuZGxlIHNvIGVhY2ggdW5pcXVlIGJhY2t0cmFjZSBpcyBsb2dnZWQgb25jZVxuQEAgLTIwMTQsOSArMjA5Myw4IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBcdFx0cmF3X3NwaW5fbG9ja19pcnEoXHUwMDI2b2JqZWN0LVx1MDAzZWxvY2spO1xuIFx0XHR0cmFjZV9oYW5kbGUgPSAwO1xuIFx0XHRkZWR1cF9wcmludCA9IGZhbHNlO1xuLVx0XHRpZiAodW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9SRVBPUlRFRCkpIHtcbi1cdFx0XHRvYmplY3QtXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xuK1xuK1x0XHRpZiAoY29uZmlybV9sZWFrKG9iamVjdCkpIHtcbiBcdFx0XHRpZiAoa21lbWxlYWtfdmVyYm9zZSkge1xuIFx0XHRcdFx0dHJhY2VfaGFuZGxlID0gb2JqZWN0LVx1MDAzZXRyYWNlX2hhbmRsZTtcbiBcdFx0XHRcdGRlZHVwX3ByaW50ID0gdHJ1ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNTAsNiArMTUwLDcgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X2d1cF90ZXN0LnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2htbS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9odWdldGxiLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2h1Z2V2bS5zaFxuK1RFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2tzbS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rc21fbnVtYS5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYTg1NzZlODM1YzhkMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXG5AQCAtMCwwICsxLDEzMiBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIEZ1bmN0aW9uYWwgdGVzdCBmb3Iga21lbWxlYWsncyBOLWNvbnNlY3V0aXZlLXNjYW4gbGVhayBjb25maXJtYXRpb25cbisjICh0aGUgbWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIpLlxuKyNcbisjIGttZW1sZWFrIG9ubHkgcmVwb3J0cyBhbiBvYmplY3Qgb25jZSBpdCBoYXMgc3RheWVkIHVucmVmZXJlbmNlZCBmb3JcbisjIG1pbl91bnJlZl9zY2FucyBjb25zZWN1dGl2ZSBzY2Fucy4gVGhlIGRlZmF1bHQgb2YgMSByZXBvcnRzIG9uIHRoZSBmaXJzdFxuKyMgc2NhbiAoaGlzdG9yaWNhbCBiZWhhdmlvdXIpOyBoaWdoZXIgdmFsdWVzIGZpbHRlciB0cmFuc2llbnQgZmFsc2VcbisjIHBvc2l0aXZlcyB3aGVyZSBhIGxpdmUgb2JqZWN0J3Mgb25seSByZWZlcmVuY2UgaXMgYnJpZWZseSBpbnZpc2libGUgdG8gYVxuKyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlXG4rIyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsncyBoZWxwZXIgbW9kdWxlIHRvIGNyZWF0ZSBvcnBoYW4gYWxsb2NhdGlvbnNcbisjIGFuZCwgY291bnRpbmcgb25seSB0aG9zZSBvcnBoYW5zIChtYXRjaGVkIGJ5IHRoZWlyIFtrbWVtbGVha190ZXN0XVxuKyMgYmFja3RyYWNlIHNvIHVucmVsYXRlZCBsZWFrcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSBhcmUgaWdub3JlZCksXG4rIyBjaGVja3MgdGhhdDpcbisjICAgLSBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdCBpcyBncmV5ZWQgb24gaXRzIGZpcnN0IHNjYW4gKGl0cyBjaGVja3N1bVxuKyMgICAgIHNldHRsZXMgdGhlbiksIHNvIG5vdGhpbmcgY2FuIGJlIHJlcG9ydGVkIGJlZm9yZSB0aGF0IHByaW1pbmcgc2NhbjtcbisjICAgICBlYWNoIGNhc2UgYmVsb3cgcHJpbWVzIG9uY2UgZmlyc3QsXG4rIyAgIC0gd2l0aCB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgKG1pbl91bnJlZl9zY2Fucz0xKSBvbmUgc2NhbiBhZnRlciBwcmltaW5nXG4rIyAgICAgcmVwb3J0cyB0aGUgb3JwaGFucyxcbisjICAgLSByYWlzaW5nIHRoZSB0aHJlc2hvbGQgdG8gMiBuZWVkcyB0d28gc2NhbnMgYWZ0ZXIgcHJpbWluZzogb25lIGlzIG5vdFxuKyMgICAgIGVub3VnaCwgdGhlIHNlY29uZCByZXBvcnRzLFxuKyMgICAtIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxuKyNcbisjIFRoZSBcIm9uZSBwb3N0LXByaW1lIHNjYW4gaXMgbm90IGVub3VnaCBhdCBtaW5fdW5yZWZfc2NhbnM9MlwiIGNoZWNrIGlzIHRoZVxuKyMgY29yZSByZWdyZXNzaW9uIHRlc3Q6IHJhaXNpbmcgbWluX3VucmVmX3NjYW5zIG11c3QgcHVzaCB0aGUgcmVwb3J0XG4rIyBzdHJpY3RseSBsYXRlci4gTGlrZSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoLCBpZiB0aGUgbW9kdWxlIHlpZWxkcyBub1xuKyMgZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsIGluIHRoZSBydW5uaW5nIGVudmlyb25tZW50IHRoZSB0ZXN0IHNraXBzIHJhdGhlclxuKyMgdGhhbiBmYWlsaW5nLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4rIyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3NraXBfYWxsLCBrdGFwX2V4aXRfZmFpbF9tc2csIGt0YXBfdGVzdF9wYXNzLCAuLi4pLlxuK0RJUj1cIiQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWYgXCIkMFwiKVwiKVwiXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rc291cmNlIFwiJHtESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK0tNRU1MRUFLPS9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrXG4rUEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcbitNT0RVTEU9a21lbWxlYWstdGVzdFxuK0FHRT02XHRcdCMgc2Vjb25kczsgbXVzdCBleGNlZWQga21lbWxlYWsncyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcbitcbitrdGFwX3ByaW50X2hlYWRlclxuK1xuK1sgXCIkKGlkIC11KVwiIC1lcSAwIF0gfHwgeyBrdGFwX3NraXBfYWxsIFwibXVzdCBydW4gYXMgcm9vdFwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rWyAtciBcIiRLTUVNTEVBS1wiIF0gfHxcbitcdHsga3RhcF9za2lwX2FsbCBcIm5vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcIjsgZXhpdCBcIiRLU0ZUX1NLSVBcIjsgfVxuK1sgLXcgXCIkUEFSQU1cIiBdIHx8XG4rXHR7IGt0YXBfc2tpcF9hbGwgXCJtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rbW9kaW5mbyBcIiRNT0RVTEVcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbitcdHsga3RhcF9za2lwX2FsbCBcIiRNT0RVTEUgbm90IGJ1aWx0IChDT05GSUdfU0FNUExFX0tNRU1MRUFLKVwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rXG4rIyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLFxuKyMgb3IgaXQgc2VsZi1kaXNhYmxlZCBhZnRlciBhbiBpbnRlcm5hbCBlcnJvcik7IGEgXCJzY2FuXCIgdGhlbiByZXR1cm5zXG4rIyBFUEVSTS4gUHJvYmUgb25jZSBhbmQgc2tpcCBpZiBzby5cbitlY2hvIHNjYW4gXHUwMDNlIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbCB8fFxuK1x0eyBrdGFwX3NraXBfYWxsIFwia21lbWxlYWsgaXMgZGlzYWJsZWQgKGNoZWNrIGRtZXNnIG9yIGttZW1sZWFrPSBib290IGFyZylcIjsgZXhpdCBcIiRLU0ZUX1NLSVBcIjsgfVxuK1xuK3ByZXY9JChjYXQgXCIkUEFSQU1cIilcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcgICMgaW52b2tlZCBpbmRpcmVjdGx5IHZpYSB0cmFwXG4rY2xlYW51cCgpIHtcbitcdGVjaG8gXCIkcHJldlwiIFx1MDAzZSBcIiRQQVJBTVwiIDJcdTAwM2UvZGV2L251bGxcdFx0IyByZXN0b3JlIHRoZSBwYXJhbWV0ZXJcbitcdGVjaG8gc2Nhbj1vbiBcdTAwM2UgXCIkS01FTUxFQUtcIiAyXHUwMDNlL2Rldi9udWxsXHRcdCMgcmUtZW5hYmxlIGF1dG8gc2NhblxuK1x0cm1tb2QgXCIkTU9EVUxFXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBjbGVhciBcdTAwM2UgXCIkS01FTUxFQUtcIiAyXHUwMDNlL2Rldi9udWxsXG4rfVxuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rIyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxuKyMgb2JqZWN0J3MgY29uc2VjdXRpdmUtdW5yZWZlcmVuY2VkIHJ1bi4gQW4gYXV0byBzY2FuIGxhbmRpbmcgYmV0d2VlbiB0d29cbisjIG1hbnVhbCBzY2FucyB3b3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBhbmQgbWFrZSB0aGUgdGVzdCBmbGFreS5cbitlY2hvIHNjYW49b2ZmIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGxcbitcbisjIENyZWF0ZSBhIGZyZXNoLCBhZ2VkIHNldCBvZiBvcnBoYW4gb2JqZWN0cyBmcm9tIHRoZSBoZWxwZXIgbW9kdWxlJ3MgaW5pdFxuKyMgcGF0aCAoaXRzIGttYWxsb2Mvdm1hbGxvYy9wZXJjcHUgYWxsb2NhdGlvbnMgYXJlIGRyb3BwZWQgcmlnaHQgYXdheSkuXG4rIyBQcmUtZXhpc3RpbmcgcmVwb3J0ZWQgbGVha3MgYXJlIGdyZXllZCBmaXJzdCAoXCJjbGVhclwiKSBzbyBvbmx5IG91clxuKyMgb3JwaGFucyBhcmUgY291bnRlZC4gVGhlIG1vZHVsZSBpcyBsZWZ0IGxvYWRlZCBvbiBwdXJwb3NlOiBvbmNlIGl0IGlzXG4rIyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXG4rIyB0byBba21lbWxlYWtfdGVzdF0gYW5kIGNvdWxkIG5vdCBiZSBtYXRjaGVkIGJlbG93LlxuK2dlbl9vcnBoYW5zKCkge1xuK1x0cm1tb2QgXCIkTU9EVUxFXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBjbGVhciBcdTAwM2UgXCIkS01FTUxFQUtcIlxuK1x0bW9kcHJvYmUgXCIkTU9EVUxFXCIgfHxcbitcdFx0eyBrdGFwX3NraXBfYWxsIFwiZmFpbGVkIHRvIGxvYWQgJE1PRFVMRVwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rXHRzbGVlcCBcIiRBR0VcIlxuK31cbitcbitzY2FuKCkgeyBlY2hvIHNjYW4gXHUwMDNlIFwiJEtNRU1MRUFLXCI7IH1cbitcbisjIE51bWJlciBvZiBoZWxwZXItbW9kdWxlIG9ycGhhbnMgY3VycmVudGx5IHJlcG9ydGVkIGJ5IGttZW1sZWFrLiBNYXRjaGluZ1xuKyMgdGhlIG1vZHVsZSdzIG93biBiYWNrdHJhY2UgKFtrbWVtbGVha190ZXN0XSkga2VlcHMgdGhlIGNvdW50IGltbXVuZSB0b1xuKyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxuKyMgb25jZSBpdCBoYXMgYmVlbiByZXBvcnRlZCwgc28gdGhpcyByZWZsZWN0cyB0aGUgY29uZmlybWF0aW9uIGdhdGluZy5cbitjb3VudF9vcnBoYW5zKCkge1xuK1x0Yz0kKGdyZXAgLWMgJ1xcW2ttZW1sZWFrX3Rlc3RcXF0nIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbClcbitcdGVjaG8gXCIke2M6LTB9XCJcbit9XG4rXG4rIyAwKSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbitlY2hvIDMgXHUwMDNlIFwiJFBBUkFNXCJcbitbIFwiJChjYXQgXCIkUEFSQU1cIilcIiA9IFwiM1wiIF0gfHwga3RhcF9leGl0X2ZhaWxfbXNnIFwibWluX3VucmVmX3NjYW5zIGRpZCBub3QgcmVhZCBiYWNrIGFzIDNcIlxuK1xuKyMgUHJpbWluZyBzY2FuOiBrbWVtbGVhayBncmV5cyBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdCBvbiBpdHMgZmlyc3Qgc2NhblxuKyMgKGl0cyBjaGVja3N1bSBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCB1bnRpbCBhIHNlY29uZFxuKyMgc2Nhbi4gRXZlcnkgY2FzZSBiZWxvdyBydW5zIHRoaXMgcHJpbWluZyBzY2FuIGJlZm9yZSBjb3VudGluZy5cbitwcmltZSgpIHsgc2NhbjsgfVxuK1xuKyMgMSkgbWluX3VucmVmX3NjYW5zPTEgKGRlZmF1bHQpOiBvbmUgc2NhbiBhZnRlciBwcmltaW5nIHJlcG9ydHMgdGhlXG4rIyAgICBvcnBoYW5zLiBUaGlzIGFsc28gZXN0YWJsaXNoZXMgdGhhdCB0aGUgaGVscGVyIHByb2R1Y2VzIGRldGVjdGFibGVcbisjICAgIG9ycGhhbnMgaGVyZS5cbitlY2hvIDEgXHUwMDNlIFwiJFBBUkFNXCJcbitnZW5fb3JwaGFuc1xuK3ByaW1lXG4rc2NhblxuK2ZpcnN0PSQoY291bnRfb3JwaGFucylcbitbIFwiJGZpcnN0XCIgLWd0IDAgXSB8fFxuK1x0eyBrdGFwX3NraXBfYWxsIFwiJE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcIjsgZXhpdCBcIiRLU0ZUX1NLSVBcIjsgfVxuK1xuKyMgMikgbWluX3VucmVmX3NjYW5zPTI6IGFmdGVyIHByaW1pbmcsIG9uZSBzY2FuIGlzIG5vdCBlbm91Z2ggKHN0aWxsXG4rIyAgICBnYXRlZCksIHRoZSBzZWNvbmQgcmVwb3J0cy4gVGhlIGdhdGVkLXNjYW4temVybyBjaGVjayBpcyB0aGUgY29yZVxuKyMgICAgcmVncmVzc2lvbi5cbitlY2hvIDIgXHUwMDNlIFwiJFBBUkFNXCJcbitnZW5fb3JwaGFuc1xuK3ByaW1lXG4rc2NhbjsgczE9JChjb3VudF9vcnBoYW5zKVxuK3NjYW47IHMyPSQoY291bnRfb3JwaGFucylcbitbIFwiJHMxXCIgLWVxIDAgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXCJtaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSBhZnRlciAxIHBvc3QtcHJpbWUgc2NhbiAobXVzdCBiZSAwKVwiXG4rWyBcIiRzMlwiIC1ndCAwIF0gfHwga3RhcF9leGl0X2ZhaWxfbXNnIFwibWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBhZnRlciAyIHBvc3QtcHJpbWUgc2NhbnMgKGZhbHNlIG5lZ2F0aXZlKVwiXG4rXG4ra3RhcF9zZXRfcGxhbiAxXG4ra3RhcF90ZXN0X3Bhc3MgXCJtaW5fdW5yZWZfc2NhbnM9MSByZXBvcnRlZCAkZmlyc3Qgb3JwaGFuKHMpIG9uZSBzY2FuIGFmdGVyIHByaW1pbmc7ID0yIGhlbGQgdGhlbSBvbmUgc2NhbiBsb25nZXIgKCRzMSBhZnRlciBvbmUgc2NhbiwgJHMyIGFmdGVyIHR3byk7IHBhcmFtIHJlYWQtYmFjayBva1wiXG4ra3RhcF9maW5pc2hlZFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6MjEuMzI2NjU1NjI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0OTk2NzkyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLbWVtbGVhazogQSBEZWxpYmVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9rbWVtbGVhay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBpbml0aWFsIHRob3VnaHQ/IElzIHRoaXMgd29ydGggZnV6emluZz8gS21lbWxlYWsgaXMgYSBkZWJ1Z2dpbmcgdG9vbCwgYSBiYWNrZ3JvdW5kIHNjYW5uZXIgZm9yIG1lbW9yeSBsZWFrcywgc28gaXQncyBub3QgbGlrZSBpdCdzIGRpcmVjdGx5IGhhbmRsaW5nIHVzZXIgaW5wdXQgb3IgbmV0d29ya2luZyB0cmFmZmljLiBVc3VhbGx5LCBzeXprYWxsZXIgZm9jdXNlcyBvbiB0aGUgY29yZSBrZXJuZWwgbG9naWMuIEJ1dCwgaGFuZyBvbi4uLiBpdCAqaXMqIGEga2VybmVsIGZlYXR1cmUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZC5cblxuSSBuZWVkIHRvIHN0ZXAgYmFjay4gV2hhdCBhcmUgdGhlIGNyaXRlcmlhPyBUaGlzIHByb21wdCBsaXN0cyBleGNlcHRpb25zIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhvc2UuIERvZXMgdGhlIHBhdGNoIGNoYW5nZSAqcmVhY2hhYmxlKiBjb3JlIGtlcm5lbCBsb2dpYz8gWWVzLCBpdCBtb2RpZmllcyBgbW0va21lbWxlYWsuY2AuIElzIGttZW1sZWFrIGNvbnNpZGVyZWQgY29yZSBrZXJuZWw/IEl0J3MgYSBtZW1vcnkgbGVhayAqZGV0ZWN0b3IqLiBDYW4gaXQgcnVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gWWVzLiBEb2VzIGl0IGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXM/IEFic29sdXRlbHkg4oCTIGl0IGFsdGVycyB0aGUgc2Nhbm5pbmcgbG9naWMgd2l0aCB0aGlzIG5ldyBgbWluX3VucmVmX3NjYW5zYCBwYXJhbWV0ZXIgYW5kIHRoZSBsb2dpYyBhcm91bmQgaXQsIGluY2x1ZGluZyBga21lbWxlYWtfc2NhbmAsIGBfX2ttZW1sZWFrX3NjYW5gLCBhbmQgYGNvbmZpcm1fbGVha2AuXG5cblNvLCB0aGUgcXVlc3Rpb24gc2hpZnRzOiBpcyBpdCB3b3J0aCAqZnV6emluZyoga21lbWxlYWsncyBpbnRlcm5hbCBsb2dpYyAqZGlyZWN0bHkqPyBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtgIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgLi4uIHRoYXQncyBhIHZlY3RvciBmb3IgZnV6emluZywgd2hpY2ggc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIHdvcnRoIGV4cGxvcmluZywgYW5kIHRoYXQgdGhlIHN5emthbGxlciBzZXR1cCBjb3VsZCBiZSBtb2RpZmllZCB0byB0ZXN0IGttZW1sZWFrIGl0c2VsZi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGFwcHJvYWNoIGZvciB0aGlzIHBhdGNoLiBJIGNvdWxkIHRhcmdldCB0aGUgZnVuY3Rpb25zIGFsdGVyZWQgbGlrZSBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAuIEFuZCBjb25zaWRlciB3aGV0aGVyIHRoaXMgdG9vbCBpcyBhY3R1YWxseSB0YXJnZXRlZCBieSBzeXprYWxsZXIuXG5cbkFoLCBrbWVtbGVhayBpcyBhIGJhY2tncm91bmQgdGhyZWFkIG9yIHRyaWdnZXJlZCB2aWEgZGVidWdmcy4uLiBhbmQgc3l6a2FsbGVyIGRvZXMgdGFyZ2V0IGRlYnVnZnMgc29tZXRpbWVzISBJbnRlcmVzdGluZy4uLiBldmVuIGlmIHRoZSBwcmltYXJ5IGZvY3VzIGlzbid0IGttZW1sZWFrIGl0c2VsZiwgaXQncyAqc3RpbGwqIGtlcm5lbCBjb2RlLiBSYWNlIGNvbmRpdGlvbnMgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSBidWdzIHdpdGhpbiBrbWVtbGVhayBhcmUgY29uY2VpdmFibGUuXG5cbkkgdGhpbmsgdGhpcyBpcyB3b3J0aCBwdXJzdWluZywgZXZlbiBpZiBpdCdzIG5vdCB0aGUgcHJpbWFyeSB0YXJnZXQuIFdlJ3JlIGNoYW5naW5nIGNvcmUgY29kZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHksIGFuZCBpdCdzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBzbyB0aGVyZSdzIHBvdGVudGlhbCB0byBkaXNjb3ZlciBuZXcgYnVncy5cblxuSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGVuYWJsZWQ6IGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBMZXQncyBncmVwIGZvciB0aGF0IGFuZCBzZWUgaG93IHdpZGVseSBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNDo0NTozMS44MjYzMzc1MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMjYxODczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfS01FTUxFQUtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0yMzc9Y29uZmlnIEhBVkVfREVCVUdfS01FTUxFQUtcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjM5LVxcbm1tL0tjb25maWcuZGVidWc6MjQwOmNvbmZpZyBERUJVR19LTUVNTEVBS1xcbm1tL0tjb25maWcuZGVidWctMjQxLVxcdGJvb2wgXFxcIktlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvclxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjY0LVxcbm1tL0tjb25maWcuZGVidWc6MjY1OmNvbmZpZyBERUJVR19LTUVNTEVBS19NRU1fUE9PTF9TSVpFXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNjYtXFx0aW50IFxcXCJLbWVtbGVhayBtZW1vcnkgcG9vbCBzaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNzctXFxubW0vS2NvbmZpZy5kZWJ1ZzoyNzg6Y29uZmlnIERFQlVHX0tNRU1MRUFLX0RFRkFVTFRfT0ZGXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXFx0Ym9vbCBcXFwiRGVmYXVsdCBrbWVtbGVhayB0byBvZmZcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTI4NC1cXG5tbS9LY29uZmlnLmRlYnVnOjI4NTpjb25maWcgREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXFxubW0vS2NvbmZpZy5kZWJ1Zy0yODYtXFx0Ym9vbCBcXFwiRW5hYmxlIGttZW1sZWFrIGF1dG8gc2NhbiB0aHJlYWQgb24gYm9vdCB1cFxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjk5LVxcbm1tL0tjb25maWcuZGVidWc6MzAwOmNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMDEtXFx0Ym9vbCBcXFwiRGVmYXVsdCBrbWVtbGVhayB0byB2ZXJib3NlIG1vZGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjM3LjI1ODk2Mzk1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzEwNTg4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IExlYWsgRGV0ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHBhcmFtZXRlciwgYG1pbl91bnJlZl9zY2Fuc2AsIGFuZCBpdCBhZGRzIHRoZSBgY29uZmlybV9sZWFrYCBmdW5jdGlvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBib3RoIGBfX2ttZW1sZWFrX3NjYW5gIGFuZCBga21lbWxlYWtfc2NhbmAuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgZGVwZW5kZW5jaWVzIGFmZmVjdGVkIGhlcmUuLi4gbm8sIGp1c3QgYERFQlVHX0tNRU1MRUFLYC5cblxuSG1tLCBub3cgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IExldCBtZSByZXZpZXcgdGhlIGNyaXRlcmlhLi4uIEFoLCB0aGUgZ3VpZGVsaW5lcyBzYXkgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCdzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uLiBBbHNvLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcmUgbm90IHdvcnRoIGZ1enppbmcuXG5cbkJ1dCB0aGlzIGlzIHRvdWNoaW5nIGBtbS9rbWVtbGVhay5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBsb2dpYywgaWYgZW5hYmxlZCwgd2hpY2ggaXQgbGlrZWx5IGlzIGluIGEgbG90IG9mIGJ1aWxkcy4gQW5kIHRoZSBjaGFuZ2VzIHNlZW0gZnVuY3Rpb25hbDsgaXQncyBhbHRlcmluZyBob3cgbGVhayBjb25maXJtYXRpb24gd29ya3MuIFNvLCB5ZXAsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzogYGNvbmZpcm1fbGVha2AsIGBfX2ttZW1sZWFrX3NjYW5gLCBhbmQgYGttZW1sZWFrX3NjYW5gLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGVzZSBmdW5jdGlvbnM6IGFyZSB0aGV5IHN0YXRpYz8gWWVwLCBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGBtbS9rbWVtbGVhay5jYC4gR29vZCB0byBrbm93IGZvciBzeW1ib2wgdmlzaWJpbGl0eSBkdXJpbmcgZnV6emluZy5cblxuTm93LCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2NhbiBvZiBgbW0va21lbWxlYWsuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBtb2RpZmllZC4gTWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6NDMuODkwMDI1NDIzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTI3NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttZW1sZWFrX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va21lbWxlYWsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rbWVtbGVhay5jPTE4Mzc9c3RhdGljIHZvaWQgZGVkdXBfZmx1c2goc3RydWN0IHhhcnJheSAqZGVkdXApXFxuLS1cXG5tbS9rbWVtbGVhay5jLTE4NjEtICovXFxubW0va21lbWxlYWsuYzoxODYyOnN0YXRpYyBpbnQgX19rbWVtbGVha19zY2FuKGJvb2wgZnVsbClcXG5tbS9rbWVtbGVhay5jLTE4NjMte1xcbi0tXFxubW0va21lbWxlYWsuYz0yMDQxPXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMjA1MC1cXHQgKi9cXG5tbS9rbWVtbGVhay5jOjIwNTE6XFx0aWYgKCFfX2ttZW1sZWFrX3NjYW4odHJ1ZSkpXFxubW0va21lbWxlYWsuYy0yMDUyLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMjA2NS1cXHQgKi9cXG5tbS9rbWVtbGVhay5jOjIwNjY6XFx0X19rbWVtbGVha19zY2FuKGZhbHNlKTtcXG5tbS9rbWVtbGVhay5jLTIwNjctXFx0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6NDQuMTQxMzA5NDA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1NDY3NTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHVwZGF0ZV9yZWZzYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHVwZGF0ZV9yZWZzYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIGl0cyBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzICpwcm9iYWJseSogcmVsYXRlZCB0byB1cGRhdGluZyByZWZlcmVuY2VzIHdpdGhpbiB0aGlzIHN5c3RlbSDigJMgbGlrZWx5IHBvaW50ZXJzLCBpbmRpY2VzLCBvciBpZGVudGlmaWVycyBvZiBzb21lIGtpbmQuIE5vdyB0aGF0IGl0IGlzIG1vZGlmaWVkIEkgbmVlZCB0byBleGFtaW5lIHRoaXMgZnVuY3Rpb24ncyBzY29wZS4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgY2hhbmdlIGlzIHRvdWNoaW5nIHRoaXMgcGllY2Ugb2YgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgbW9kdWxlcy4gTGV0J3MgZGVsdmUgaW4gYW5kIHNlZSB3aGF0IGV4YWN0bHkgaGFzIGNoYW5nZWQgd2l0aGluIGB1cGRhdGVfcmVmc2AgaXRzZWxmLCBiZWNhdXNlIGFueSBjaGFuZ2UgdGhlcmUgaGFzIHBvdGVudGlhbCBmb3IgZG93bnN0cmVhbSBlZmZlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgd2lsbCBpbXBhY3QuIEEgY2hhbmdlIGhlcmUgY291bGQgY2FzY2FkZSB0aHJvdWdoIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnRyb2wgZmxvd3MsIG1ha2luZyBpdCBpbXBvcnRhbnQgdG8gbG9vayBhdCB0aGlzIGZ1bmN0aW9uIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6NDkuNjk1OTg3NzM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ4Nzk0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfcmVmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rbWVtbGVhay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttZW1sZWFrLmM9MTQwNz1zdGF0aWMgYm9vbCB1cGRhdGVfY2hlY2tzdW0oc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KVxcbi0tXFxubW0va21lbWxlYWsuYy0xNDM3LSAqL1xcbm1tL2ttZW1sZWFrLmM6MTQzODpzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXFxubW0va21lbWxlYWsuYy0xNDM5LXtcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMTQ2My1cXG5tbS9rbWVtbGVhay5jOjE0NjQ6c3RhdGljIHZvaWQgcG9pbnRlcl91cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpzY2FubmVkLFxcbm1tL2ttZW1sZWFrLmMtMTQ2NS1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBwb2ludGVyLCB1bnNpZ25lZCBpbnQgb2JqZmxhZ3MpXFxuLS1cXG5tbS9rbWVtbGVhay5jLTE1MDEtXFx0XFx0ZXhjZXNzX3JlZiA9IG9iamVjdC1cXHUwMDNlZXhjZXNzX3JlZjtcXG5tbS9rbWVtbGVhay5jOjE1MDI6XFx0XFx0Lyogbm8gbmVlZCBmb3IgdXBkYXRlX3JlZnMoKSBpZiBvYmplY3QgYWxyZWFkeSBncmF5ICovXFxubW0va21lbWxlYWsuYy0xNTAzLVxcdH0gZWxzZSB7XFxubW0va21lbWxlYWsuYy0xNTA0LVxcdFxcdGV4Y2Vzc19yZWYgPSAwO1xcbm1tL2ttZW1sZWFrLmM6MTUwNTpcXHRcXHR1cGRhdGVfcmVmcyhvYmplY3QpO1xcbm1tL2ttZW1sZWFrLmMtMTUwNi1cXHR9XFxuLS1cXG5tbS9rbWVtbGVhay5jLTE1MTYtXFx0XFx0cmF3X3NwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm9iamVjdC1cXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbm1tL2ttZW1sZWFrLmM6MTUxNzpcXHRcXHR1cGRhdGVfcmVmcyhvYmplY3QpO1xcbm1tL2ttZW1sZWFrLmMtMTUxOC1cXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNm9iamVjdC1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9rbWVtbGVhay5jPTE1NDU9c3RhdGljIGludCBzY2FuX2Jsb2NrKHZvaWQgKl9zdGFydCwgdm9pZCAqX2VuZCxcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMTU2Ni1cXG5tbS9rbWVtbGVhay5jOjE1Njc6XFx0XFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCAwKTtcXG5tbS9rbWVtbGVhay5jOjE1Njg6XFx0XFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCBPQkpFQ1RfUEVSQ1BVKTtcXG5tbS9rbWVtbGVhay5jLTE1NjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNDo0NTo0OS44MTE0ODIyMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4NzY5MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLbWVtbGVhayBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSAqc3BlY2lmaWMqIGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgbW9kaWZpZWQga21lbWxlYWsgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgX19hbGxvY19vYmplY3RgLCBgdXBkYXRlX3JlZnNgLCBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgcGVyZm9ybWFuY2UuIGBfX2FsbG9jX29iamVjdGAgYW5kIGB1cGRhdGVfcmVmc2AgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gaWRlYWxseSwgSSB3b3VsZCBhdm9pZCB0aGVtIGFzIGZ1enppbmcgdGFyZ2V0cyBzaW5jZSBmdXp6aW5nIGluIGhvdCBwYXRocyBjYW4gbGVhZCB0byBwZXJmb3JtYW5jZSBpc3N1ZXMuICBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAgYXJlIG1vcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGV5J3JlIHBhcnQgb2YgdGhlIHNjYW4gcHJvY2VzcywgdHJpZ2dlcmVkIHBlcmlvZGljYWxseSBvciBtYW51YWxseS4gIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZW0uXG5cbk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdGVsbHMgbWUgbm90IHRvIGxpc3QgZ2VuZXJpYyBjb25maWdzLiAgQnV0IGlzIGBERUJVR19LTUVNTEVBS2AgdG9vIGdlbmVyaWM/ICBObywgaXQncyBzcGVjaWZpYyB0byB0aGUga21lbWxlYWsgKmRlYnVnKiBmZWF0dXJlIGl0c2VsZi4gIFdoaWxlIGl0ICptaWdodCogYmUgZW5hYmxlZCBpbiBzb21lIGluc3RhbmNlcywgSSB0aGluayBpdCdzIGNydWNpYWwgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgZm9yIG15IGZ1enppbmcuIFRoaXMgc2VlbXMgbGlrZSB0aGUgKm1haW4qIGNvbmZpZy4gSSBhbSBnb2luZyB0byBsaXN0IGBERUJVR19LTUVNTEVBS2AuXG5cbkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhvc2Ugc2NhbiBmdW5jdGlvbnMuICBga21lbWxlYWtfc2NhbmAgaXMgdGhlIG1haW4gc2NhbiBmdW5jdGlvbi4gSXMgaXQgaG90LXBhdGg/IE5vLCBpdCdzIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgYGttZW1sZWFrX3NjYW5fdGhyZWFkYCBvciBtYW51YWxseSB0aHJvdWdoIGRlYnVnZnMsIHNvIHRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSAqcHVycG9zZSogb2YgdGhlc2UgY2hhbmdlcy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIG1lbW9yeSBsZWFrIGRldGVjdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSB1bnJlZmVyZW5jZWQgc2NhbiB0aHJlc2hvbGQgYW5kIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuICBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yga21lbWxlYWsgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzLlxuXG5Gb2N1c2luZyBvbiB0aGUgZnVuY3Rpb24gc3ltYm9sczogYF9fa21lbWxlYWtfc2NhbmAsIGBjb25maXJtX2xlYWtgLCBhbmQgYGttZW1sZWFrX3NjYW5gLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGV5J3JlIHRoZXJlLiAgYGNvbmZpcm1fbGVha2AgaXMgYSBuZXcgc3RhdGljIGZ1bmN0aW9uIGFkZGVkIGluIHRoaXMgcGF0Y2guIEFuZCB5ZXMsIGBfX2ttZW1sZWFrX3NjYW5gIGlzIHByZXNlbnQsIGl0J3MgYmVlbiBtb2RpZmllZCBpbiB0aGUgcGF0Y2ggKHBvc3NpYmx5IHJlbmFtZWQgb3IgY2hhbmdlZCkuIEFuZCBga21lbWxlYWtfc2NhbmAgYWxzbyBleGlzdHMuXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncz8gVGhlIHRlc3QgdXNlcyBgQ09ORklHX1NBTVBMRV9LTUVNTEVBS2AsIGJ1dCB0aGF0J3MgZm9yIGEgc2VsZnRlc3QuIEkgZG9uJ3QgbmVlZCB0byBlbmFibGUgdGhhdCBzcGVjaWZpYyBtb2R1bGUgdG8gZnV6eiB0aGUgY29yZSBrbWVtbGVhayBsb2dpYyBpdHNlbGYuIFRoYXQgYXBwZWFycyB0byBiZSBpdC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGlzIGp1c3QgYERFQlVHX0tNRU1MRUFLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczMCwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDY6MDAuODk5MTc1OTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwOTA4NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa21lbWxlYWtfc2NhblwiLFxuICAgIFwiY29uZmlybV9sZWFrXCIsXG4gICAgXCJrbWVtbGVha19zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsZWFrIGRldGVjdGlvbiBsb2dpYyBpbiBrbWVtbGVhaywgaW50cm9kdWNpbmcgYSBuZXcgcGFyYW1ldGVyIGBtaW5fdW5yZWZfc2NhbnNgIGFuZCBjaGFuZ2luZyBob3cgb2JqZWN0cyBhcmUgY29uZmlybWVkIGFzIGxlYWtzLiBUaGlzIGlzIGZ1bmN0aW9uYWwga2VybmVsIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGttZW1sZWFrIHNjYW4gdGhyZWFkIG9yIGRlYnVnZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rbWVtbGVha19zY2FuXCIsXG4gICAgXCJjb25maXJtX2xlYWtcIixcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIGxvZ2ljIGluIGttZW1sZWFrLCBpbnRyb2R1Y2luZyBhIG5ldyBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 14:25:21 +0000 UTC FinishedAt: 2026-07-13 14:46:03 +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": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "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": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "series_id": "ec802087-8acd-4231-9537-d69f08031643" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__kmemleak_scan", "confirm_leak", "kmemleak_scan" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rbWVtbGVha19zY2FuJiMzNDssCiAgICAmIzM0O2NvbmZpcm1fbGVhayYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkMGY4NTdiNTEzZWI5OGJkYzljMjQxYWFjNTAzODI4NjAwYWM1MmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAxNDo0NToxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG5AQCAtMTk4LDYgJiM0MzsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvclxuIHN0YWNrcy4gS21lbWxlYWsgZGVmaW5lcyBNU0VDU19NSU5fQUdFIChkZWZhdWx0aW5nIHRvIDEwMDApIHJlcHJlc2VudGluZ1xuIHRoZSBtaW5pbXVtIGFnZSBvZiBhbiBvYmplY3QgdG8gYmUgcmVwb3J0ZWQgYXMgYSBtZW1vcnkgbGVhay5cbiBcbiYjNDM7VGhlIGBgbWluX3VucmVmX3NjYW5zYGAgbW9kdWxlIHBhcmFtZXRlciAoZGVmYXVsdCAxKSByZXF1aXJlcyBhbiBvYmplY3QgdG9cbiYjNDM7YmUgc2VlbiB1bnJlZmVyZW5jZWQgaW4gdGhhdCBtYW55IGNvbnNlY3V0aXZlIHNjYW5zIGJlZm9yZSBpdCBpcyByZXBvcnRlZC5cbiYjNDM7S2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyXG4mIzQzO3RoZSB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmVzIGRlc2NyaWJlZCBhYm92ZSwgYXQgdGhlIGNvc3Qgb2YgZGVsYXlpbmdcbiYjNDM7Z2VudWluZSByZXBvcnRzIGJ5IHVwIHRvIHRoYXQgbWFueSBzY2Fucy4gSXQgY2FuIGJlIHNldCBhdCBib290IHdpdGhcbiYjNDM7YGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9XHUwMDNjblx1MDAzZWBgIG9yIGF0IHJ1bi10aW1lIHZpYVxuJiM0MztgYC9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zYGAuXG4mIzQzO1xuIExpbWl0YXRpb25zIGFuZCBEcmF3YmFja3NcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcbmluZGV4IGU5NmU5ZWZkMTliMGQ5Li44NWYxOGIxN2U3OWM0ZSAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xNTEsNiAmIzQzOzE1MSw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xuIFx0aW50IG1pbl9jb3VudDtcbiBcdC8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi9cbiBcdGludCBjb3VudDtcbiYjNDM7XHQvKiBjb25zZWN1dGl2ZSBzY2FucyB0aGUgb2JqZWN0IGhhcyBiZWVuIHNlZW4gdW5yZWZlcmVuY2VkICovXG4mIzQzO1x0dW5zaWduZWQgaW50IHVucmVmX3NjYW5zO1xuIFx0LyogY2hlY2tzdW0gZm9yIGRldGVjdGluZyBtb2RpZmllZCBvYmplY3RzICovXG4gXHR1MzIgY2hlY2tzdW07XG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7XG5AQCAtMTc1LDYgJiM0MzsxNzcsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHtcbiAjZGVmaW5lIE9CSkVDVF9QSFlTXHRcdCgxIFx1MDAzY1x1MDAzYyA0KVxuIC8qIGZsYWcgc2V0IGZvciBwZXItQ1BVIHBvaW50ZXJzICovXG4gI2RlZmluZSBPQkpFQ1RfUEVSQ1BVXHRcdCgxIFx1MDAzY1x1MDAzYyA1KVxuJiM0MzsvKiBmbGFnIHNldCBvbiBhbiBvYmplY3QgbGVmdCB1bnJlZmVyZW5jZWQgYnkgdGhlIGZ1bGwgc2NhbiwgcGVuZGluZyBjb25maXJtYXRpb24gKi9cbiYjNDM7I2RlZmluZSBPQkpFQ1RfU1VTUEVDVFx0XHQoMSBcdTAwM2NcdTAwM2MgNilcbiBcbiAvKiBzZXQgd2hlbiBfX3JlbW92ZV9vYmplY3QoKSBjYWxsZWQgKi9cbiAjZGVmaW5lIERFTFNUQVRFX1JFTU9WRURcdCgxIFx1MDAzY1x1MDAzYyAwKVxuQEAgLTIzMiw5ICYjNDM7MjM2LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjtcbiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzY2FuX3RocmVhZDtcbiAvKiB1c2VkIHRvIGF2b2lkIHJlcG9ydGluZyBvZiByZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTtcbiYjNDM7LyogY29uc2VjdXRpdmUgc2NhbnMgYW4gb2JqZWN0IG11c3Qgc3RheSB1bnJlZmVyZW5jZWQgYmVmb3JlIHJlcG9ydGluZyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4mIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xuIC8qIGRlbGF5IGJldHdlZW4gYXV0b21hdGljIG1lbW9yeSBzY2FubmluZ3MgKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDtcbiYjNDM7LyogbnVtYmVyIG9mIG9iamVjdHMgZmxhZ2dlZCBPQkpFQ1RfU1VTUEVDVCBkdXJpbmcgdGhlIGN1cnJlbnQgc2NhbiAqL1xuJiM0MztzdGF0aWMgaW50IG5yX3N1c3BlY3RzO1xuIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovXG4gc3RhdGljIGludCBrbWVtbGVha19zdGFja19zY2FuID0gMTtcbiAvKiBwcm90ZWN0cyB0aGUgbWVtb3J5IHNjYW5uaW5nLCBwYXJhbWV0ZXJzIGFuZCBkZWJ1Zy9rbWVtbGVhayBmaWxlIGFjY2VzcyAqL1xuQEAgLTY4OCw2ICYjNDM7Njk3LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcClcbiBcdG9iamVjdC1cdTAwM2VleGNlc3NfcmVmID0gMDtcbiBcdG9iamVjdC1cdTAwM2Vjb3VudCA9IDA7XHRcdFx0Lyogd2hpdGUgY29sb3IgaW5pdGlhbGx5ICovXG4gXHRvYmplY3QtXHUwMDNlY2hlY2tzdW0gPSB+MDtcbiYjNDM7XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWRlbF9zdGF0ZSA9IDA7XG4gXG4gXHQvKiB0YXNrIGluZm9ybWF0aW9uICovXG5AQCAtMTQ0MCw2ICYjNDM7MTQ1MCwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXG4gXHQgKi9cbiBcdG9iamVjdC1cdTAwM2Vjb3VudCYjNDM7JiM0Mzs7XG4gXHRpZiAoY29sb3JfZ3JheShvYmplY3QpKSB7XG4mIzQzO1x0XHQvKiByZWZlcmVuY2VkIGFmdGVyIGFsbCwgbm8gbG9uZ2VyIGEgc3VzcGVjdCAqL1xuJiM0MztcdFx0aWYgKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1NVU1BFQ1QpIHtcbiYjNDM7XHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9CSkVDVF9TVVNQRUNUO1xuJiM0MztcdFx0XHRucl9zdXNwZWN0cy0tO1xuJiM0MztcdFx0fVxuIFx0XHQvKiBwdXRfb2JqZWN0KCkgY2FsbGVkIHdoZW4gcmVtb3ZpbmcgZnJvbSBncmF5X2xpc3QgKi9cbiBcdFx0V0FSTl9PTighZ2V0X29iamVjdChvYmplY3QpKTtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZvYmplY3QtXHUwMDNlZ3JheV9saXN0LCBcdTAwMjZncmF5X2xpc3QpO1xuQEAgLTE4NDQsMTYgJiM0MzsxODU5LDE2IEBAIHN0YXRpYyB2b2lkIGRlZHVwX2ZsdXNoKHN0cnVjdCB4YXJyYXkgKmRlZHVwKVxuICAqIGtlcm5lbCYjMzk7cyBzdGFuZGFyZCBhbGxvY2F0b3JzLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlXG4gICogc2Nhbl9tdXRleCBoZWxkLlxuICAqL1xuLXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiYjNDM7c3RhdGljIGludCBfX2ttZW1sZWFrX3NjYW4oYm9vbCBmdWxsKVxuIHtcbiBcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcbiBcdHN0cnVjdCB6b25lICp6b25lO1xuIFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XG4tXHRzdHJ1Y3QgeGFycmF5IGRlZHVwO1xuLVx0aW50IG5ld19sZWFrcyA9IDA7XG4gXHRpbnQgc3RvcCA9IDA7XG4gXG4gXHRqaWZmaWVzX2xhc3Rfc2NhbiA9IGppZmZpZXM7XG4mIzQzO1x0aWYgKGZ1bGwpXG4mIzQzO1x0XHRucl9zdXNwZWN0cyA9IDA7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBrbWVtbGVha19vYmplY3QmIzM5O3MgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbkBAIC0xODgxLDggJiM0MzsxODk2LDEzIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBcdFx0XHRcdF9fcGFpbnRfaXQob2JqZWN0LCBLTUVNTEVBS19CTEFDSyk7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qIHJlZmVyZW5jZWQgbGFzdCBzY2FuOiByZXN0YXJ0IHRoZSB1bnJlZmVyZW5jZWQgcnVuICovXG4mIzQzO1x0XHRpZiAoIWNvbG9yX3doaXRlKG9iamVjdCkpXG4mIzQzO1x0XHRcdG9iamVjdC1cdTAwM2V1bnJlZl9zY2FucyA9IDA7XG4gXHRcdC8qIHJlc2V0IHRoZSByZWZlcmVuY2UgY291bnQgKHdoaXRlbiB0aGUgb2JqZWN0KSAqL1xuIFx0XHRvYmplY3QtXHUwMDNlY291bnQgPSAwO1xuJiM0MztcdFx0aWYgKGZ1bGwpXG4mIzQzO1x0XHRcdG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5PQkpFQ1RfU1VTUEVDVDtcbiBcdFx0aWYgKGNvbG9yX2dyYXkob2JqZWN0KSBcdTAwMjZcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxuIFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2b2JqZWN0LVx1MDAzZWdyYXlfbGlzdCwgXHUwMDI2Z3JheV9saXN0KTtcbiBcbkBAIC0xOTUwLDYgJiM0MzsxOTcwLDEwIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBzY2FuX2dyYXk6XG4gXHRzY2FuX2dyYXlfbGlzdCgpO1xuIFxuJiM0MztcdC8qIGEgY29uZmlybWF0aW9uIHNjYW4gZG9lcyBub3QgbG9vayBmb3IgbW9kaWZpZWQgb2JqZWN0cyAqL1xuJiM0MztcdGlmICghZnVsbClcbiYjNDM7XHRcdHJldHVybiBucl9zdXNwZWN0cztcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ2hlY2sgZm9yIG5ldyBvciB1bnJlZmVyZW5jZWQgb2JqZWN0cyBtb2RpZmllZCBzaW5jZSB0aGUgcHJldmlvdXNcbiBcdCAqIHNjYW4gYW5kIGNvbG9yIHRoZW0gZ3JheSB1bnRpbCB0aGUgbmV4dCBzY2FuLlxuQEAgLTE5NzIsNiAmIzQzOzE5OTYsMTEgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxuIFx0XHRcdC8qIGNvbG9yIGl0IGdyYXkgdGVtcG9yYXJpbHkgKi9cbiBcdFx0XHRvYmplY3QtXHUwMDNlY291bnQgPSBvYmplY3QtXHUwMDNlbWluX2NvdW50O1xuIFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2b2JqZWN0LVx1MDAzZWdyYXlfbGlzdCwgXHUwMDI2Z3JheV9saXN0KTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAodW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAhKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xuJiM0MztcdFx0XHQvKiBmbGFnIHRoZSBvYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoaXMgc2NhbiAqL1xuJiM0MztcdFx0XHRvYmplY3QtXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1NVU1BFQ1Q7XG4mIzQzO1x0XHRcdG5yX3N1c3BlY3RzJiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNm9iamVjdC1cdTAwM2Vsb2NrKTtcbiBcdH1cbkBAIC0xOTgyLDEyICYjNDM7MjAxMSw2MiBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHQgKi9cbiBcdHNjYW5fZ3JheV9saXN0KCk7XG4gXG4mIzQzO1x0cmV0dXJuIG5yX3N1c3BlY3RzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9tb3RlIGEgc3VzcGVjdGVkIG9iamVjdCB0byBhIHJlcG9ydGVkIGxlYWsgb25jZSBpdCBoYXMgc3RheWVkXG4mIzQzOyAqIHVucmVmZXJlbmNlZCBmb3IgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBDYWxsZWQgd2l0aFxuJiM0MzsgKiBvYmplY3QtXHUwMDNlbG9jayBoZWxkOyByZXR1cm5zIHRydWUgd2hlbiB0aGUgb2JqZWN0IGlzIG5ld2x5IHJlcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgY29uZmlybV9sZWFrKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdClcbiYjNDM7e1xuJiM0MztcdGlmICghdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIHx8XG4mIzQzO1x0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfU1VTUEVDVCkgfHxcbiYjNDM7XHQgICAgKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zICYjNDM7PSAxO1xuJiM0MztcdGlmIChvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgXHUwMDNjIG1pbl91bnJlZl9zY2FucylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2NhbiB0aGUgbWVtb3J5IGFuZCByZXBvcnQgdGhlIHVucmVmZXJlbmNlZCBvYmplY3RzIGFzIGxlYWtzLiBNdXN0IGJlXG4mIzQzOyAqIGNhbGxlZCB3aXRoIHRoZSBzY2FuX211dGV4IGhlbGQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7XG4mIzQzO1x0c3RydWN0IHhhcnJheSBkZWR1cDtcbiYjNDM7XHRpbnQgbmV3X2xlYWtzID0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGdWxsIHNjYW4uIE9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYXJlIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgYW5kXG4mIzQzO1x0ICogY291bnRlZCBpbiB0aGUgcmV0dXJuIHZhbHVlOyBub3RoaW5nIHRvIGNvbmZpcm0gb3IgcmVwb3J0IG90aGVyd2lzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgc2Nhbm5pbmcgd2FzIHN0b3BwZWQgZG8gbm90IHJlcG9ydCBhbnkgbmV3IHVucmVmZXJlbmNlZCBvYmplY3RzLlxuIFx0ICovXG4gXHRpZiAoc2Nhbl9zaG91bGRfc3RvcCgpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGxpdmUgb2JqZWN0IHdob3NlIG9ubHkgcmVmZXJlbmNlIGlzIG1vdmVkIGJ5LCBmb3IgZXhhbXBsZSwgYVxuJiM0MztcdCAqIGNvbmN1cnJlbnQgUkNVIHVwZGF0ZSBjYW4gYmUgbWlzc2VkIGZvciBvbmUgc2NhbiBhbmQgcmVwb3J0ZWQgYXMgYVxuJiM0MztcdCAqIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZS4gU2NhbiBhZ2FpbiBhbmQgb25seSByZXBvcnQgdGhlIG9iamVjdHNcbiYjNDM7XHQgKiBsZWZ0IHVucmVmZXJlbmNlZCAoc3RpbGwgZmxhZ2dlZCBPQkpFQ1RfU1VTUEVDVCkgYnkgYm90aCBzY2Fucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX2ttZW1sZWFrX3NjYW4oZmFsc2UpO1xuJiM0MztcdGlmIChzY2FuX3Nob3VsZF9zdG9wKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LypcbiBcdCAqIFNjYW5uaW5nIHJlc3VsdCByZXBvcnRpbmcuIFdoZW4gdmVyYm9zZSBwcmludGluZyBpcyBlbmFibGVkLCBkZWR1cGVcbiBcdCAqIGJ5IHN0YWNrZGVwb3QgdHJhY2VfaGFuZGxlIHNvIGVhY2ggdW5pcXVlIGJhY2t0cmFjZSBpcyBsb2dnZWQgb25jZVxuQEAgLTIwMTQsOSAmIzQzOzIwOTMsOCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdHJhd19zcGluX2xvY2tfaXJxKFx1MDAyNm9iamVjdC1cdTAwM2Vsb2NrKTtcbiBcdFx0dHJhY2VfaGFuZGxlID0gMDtcbiBcdFx0ZGVkdXBfcHJpbnQgPSBmYWxzZTtcbi1cdFx0aWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKSB7XG4tXHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29uZmlybV9sZWFrKG9iamVjdCkpIHtcbiBcdFx0XHRpZiAoa21lbWxlYWtfdmVyYm9zZSkge1xuIFx0XHRcdFx0dHJhY2VfaGFuZGxlID0gb2JqZWN0LVx1MDAzZXRyYWNlX2hhbmRsZTtcbiBcdFx0XHRcdGRlZHVwX3ByaW50ID0gdHJ1ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfZ3VwX3Rlc3Quc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2htbS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXRsYi5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXZtLnNoXG4mIzQzO1RFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa21lbWxlYWtfZGVkdXAuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2tzbS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa3NtX251bWEuc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2E4NTc2ZTgzNWM4ZDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuQEAgLTAsMCAmIzQzOzEsMTMyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIEZ1bmN0aW9uYWwgdGVzdCBmb3Iga21lbWxlYWsmIzM5O3MgTi1jb25zZWN1dGl2ZS1zY2FuIGxlYWsgY29uZmlybWF0aW9uXG4mIzQzOyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuXG4mIzQzOyNcbiYjNDM7IyBrbWVtbGVhayBvbmx5IHJlcG9ydHMgYW4gb2JqZWN0IG9uY2UgaXQgaGFzIHN0YXllZCB1bnJlZmVyZW5jZWQgZm9yXG4mIzQzOyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0XG4mIzQzOyMgc2NhbiAoaGlzdG9yaWNhbCBiZWhhdmlvdXIpOyBoaWdoZXIgdmFsdWVzIGZpbHRlciB0cmFuc2llbnQgZmFsc2VcbiYjNDM7IyBwb3NpdGl2ZXMgd2hlcmUgYSBsaXZlIG9iamVjdCYjMzk7cyBvbmx5IHJlZmVyZW5jZSBpcyBicmllZmx5IGludmlzaWJsZSB0byBhXG4mIzQzOyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlXG4mIzQzOyMgdGVzdCBsb2FkcyBzYW1wbGVzL2ttZW1sZWFrJiMzOTtzIGhlbHBlciBtb2R1bGUgdG8gY3JlYXRlIG9ycGhhbiBhbGxvY2F0aW9uc1xuJiM0MzsjIGFuZCwgY291bnRpbmcgb25seSB0aG9zZSBvcnBoYW5zIChtYXRjaGVkIGJ5IHRoZWlyIFtrbWVtbGVha190ZXN0XVxuJiM0MzsjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLFxuJiM0MzsjIGNoZWNrcyB0aGF0OlxuJiM0MzsjICAgLSBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdCBpcyBncmV5ZWQgb24gaXRzIGZpcnN0IHNjYW4gKGl0cyBjaGVja3N1bVxuJiM0MzsjICAgICBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCBiZWZvcmUgdGhhdCBwcmltaW5nIHNjYW47XG4mIzQzOyMgICAgIGVhY2ggY2FzZSBiZWxvdyBwcmltZXMgb25jZSBmaXJzdCxcbiYjNDM7IyAgIC0gd2l0aCB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgKG1pbl91bnJlZl9zY2Fucz0xKSBvbmUgc2NhbiBhZnRlciBwcmltaW5nXG4mIzQzOyMgICAgIHJlcG9ydHMgdGhlIG9ycGhhbnMsXG4mIzQzOyMgICAtIHJhaXNpbmcgdGhlIHRocmVzaG9sZCB0byAyIG5lZWRzIHR3byBzY2FucyBhZnRlciBwcmltaW5nOiBvbmUgaXMgbm90XG4mIzQzOyMgICAgIGVub3VnaCwgdGhlIHNlY29uZCByZXBvcnRzLFxuJiM0MzsjICAgLSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbiYjNDM7I1xuJiM0MzsjIFRoZSBcJiMzNDtvbmUgcG9zdC1wcmltZSBzY2FuIGlzIG5vdCBlbm91Z2ggYXQgbWluX3VucmVmX3NjYW5zPTJcJiMzNDsgY2hlY2sgaXMgdGhlXG4mIzQzOyMgY29yZSByZWdyZXNzaW9uIHRlc3Q6IHJhaXNpbmcgbWluX3VucmVmX3NjYW5zIG11c3QgcHVzaCB0aGUgcmVwb3J0XG4mIzQzOyMgc3RyaWN0bHkgbGF0ZXIuIExpa2Uga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm9cbiYjNDM7IyBkZXRlY3RhYmxlIG9ycGhhbiBhdCBhbGwgaW4gdGhlIHJ1bm5pbmcgZW52aXJvbm1lbnQgdGhlIHRlc3Qgc2tpcHMgcmF0aGVyXG4mIzQzOyMgdGhhbiBmYWlsaW5nLlxuJiM0MzsjXG4mIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7XG4mIzQzOyMgS1RBUCBvdXRwdXQgaGVscGVycyAoa3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCBrdGFwX3Rlc3RfcGFzcywgLi4uKS5cbiYjNDM7RElSPVwmIzM0OyQoZGlybmFtZSBcJiMzNDskKHJlYWRsaW5rIC1mIFwmIzM0OyQwXCYjMzQ7KVwmIzM0OylcJiMzNDtcbiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4mIzQzO3NvdXJjZSBcJiMzNDske0RJUn1cJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7S01FTUxFQUs9L3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtcbiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcbiYjNDM7TU9EVUxFPWttZW1sZWFrLXRlc3RcbiYjNDM7QUdFPTZcdFx0IyBzZWNvbmRzOyBtdXN0IGV4Y2VlZCBrbWVtbGVhayYjMzk7cyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcbiYjNDM7XG4mIzQzO2t0YXBfcHJpbnRfaGVhZGVyXG4mIzQzO1xuJiM0MztbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1lcSAwIF0gfHwgeyBrdGFwX3NraXBfYWxsIFwmIzM0O211c3QgcnVuIGFzIHJvb3RcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztbIC1yIFwmIzM0OyRLTUVNTEVBS1wmIzM0OyBdIHx8XG4mIzQzO1x0eyBrdGFwX3NraXBfYWxsIFwmIzM0O25vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztbIC13IFwmIzM0OyRQQVJBTVwmIzM0OyBdIHx8XG4mIzQzO1x0eyBrdGFwX3NraXBfYWxsIFwmIzM0O21pbl91bnJlZl9zY2FucyBtb2R1bGUgcGFyYW1ldGVyIG5vdCBwcmVzZW50XCYjMzQ7OyBleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDs7IH1cbiYjNDM7bW9kaW5mbyBcJiMzNDskTU9EVUxFXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fFxuJiM0MztcdHsga3RhcF9za2lwX2FsbCBcJiMzNDskTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7IyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLFxuJiM0MzsjIG9yIGl0IHNlbGYtZGlzYWJsZWQgYWZ0ZXIgYW4gaW50ZXJuYWwgZXJyb3IpOyBhIFwmIzM0O3NjYW5cJiMzNDsgdGhlbiByZXR1cm5zXG4mIzQzOyMgRVBFUk0uIFByb2JlIG9uY2UgYW5kIHNraXAgaWYgc28uXG4mIzQzO2VjaG8gc2NhbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHxcbiYjNDM7XHR7IGt0YXBfc2tpcF9hbGwgXCYjMzQ7a21lbWxlYWsgaXMgZGlzYWJsZWQgKGNoZWNrIGRtZXNnIG9yIGttZW1sZWFrPSBib290IGFyZylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7cHJldj0kKGNhdCBcJiMzNDskUEFSQU1cJiMzNDspXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyAgIyBpbnZva2VkIGluZGlyZWN0bHkgdmlhIHRyYXBcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRlY2hvIFwmIzM0OyRwcmV2XCYjMzQ7IFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFx0XHQjIHJlc3RvcmUgdGhlIHBhcmFtZXRlclxuJiM0MztcdGVjaG8gc2Nhbj1vbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcdFx0IyByZS1lbmFibGUgYXV0byBzY2FuXG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7fVxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxuJiM0MzsjIG9iamVjdCYjMzk7cyBjb25zZWN1dGl2ZS11bnJlZmVyZW5jZWQgcnVuLiBBbiBhdXRvIHNjYW4gbGFuZGluZyBiZXR3ZWVuIHR3b1xuJiM0MzsjIG1hbnVhbCBzY2FucyB3b3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBhbmQgbWFrZSB0aGUgdGVzdCBmbGFreS5cbiYjNDM7ZWNobyBzY2FuPW9mZiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzOyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUmIzM5O3MgaW5pdFxuJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLlxuJiM0MzsjIFByZS1leGlzdGluZyByZXBvcnRlZCBsZWFrcyBhcmUgZ3JleWVkIGZpcnN0IChcJiMzNDtjbGVhclwmIzM0Oykgc28gb25seSBvdXJcbiYjNDM7IyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcbiYjNDM7IyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXG4mIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy5cbiYjNDM7Z2VuX29ycGhhbnMoKSB7XG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7XG4mIzQzO1x0bW9kcHJvYmUgXCYjMzQ7JE1PRFVMRVwmIzM0OyB8fFxuJiM0MztcdFx0eyBrdGFwX3NraXBfYWxsIFwmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEVcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcdHNsZWVwIFwmIzM0OyRBR0VcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2NhbigpIHsgZWNobyBzY2FuIFx1MDAzZSBcJiMzNDskS01FTUxFQUtcJiMzNDs7IH1cbiYjNDM7XG4mIzQzOyMgTnVtYmVyIG9mIGhlbHBlci1tb2R1bGUgb3JwaGFucyBjdXJyZW50bHkgcmVwb3J0ZWQgYnkga21lbWxlYWsuIE1hdGNoaW5nXG4mIzQzOyMgdGhlIG1vZHVsZSYjMzk7cyBvd24gYmFja3RyYWNlIChba21lbWxlYWtfdGVzdF0pIGtlZXBzIHRoZSBjb3VudCBpbW11bmUgdG9cbiYjNDM7IyB1bnJlbGF0ZWQgbGVha3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLiBrbWVtbGVhayBvbmx5IGxpc3RzIGFuIG9iamVjdCBoZXJlXG4mIzQzOyMgb25jZSBpdCBoYXMgYmVlbiByZXBvcnRlZCwgc28gdGhpcyByZWZsZWN0cyB0aGUgY29uZmlybWF0aW9uIGdhdGluZy5cbiYjNDM7Y291bnRfb3JwaGFucygpIHtcbiYjNDM7XHRjPSQoZ3JlcCAtYyAmIzM5O1xcW2ttZW1sZWFrX3Rlc3RcXF0mIzM5OyBcJiMzNDskS01FTUxFQUtcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7XHRlY2hvIFwmIzM0OyR7YzotMH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyAwKSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbiYjNDM7ZWNobyAzIFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDtcbiYjNDM7WyBcJiMzNDskKGNhdCBcJiMzNDskUEFSQU1cJiMzNDspXCYjMzQ7ID0gXCYjMzQ7M1wmIzM0OyBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttaW5fdW5yZWZfc2NhbnMgZGlkIG5vdCByZWFkIGJhY2sgYXMgM1wmIzM0O1xuJiM0MztcbiYjNDM7IyBQcmltaW5nIHNjYW46IGttZW1sZWFrIGdyZXlzIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IG9uIGl0cyBmaXJzdCBzY2FuXG4mIzQzOyMgKGl0cyBjaGVja3N1bSBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCB1bnRpbCBhIHNlY29uZFxuJiM0MzsjIHNjYW4uIEV2ZXJ5IGNhc2UgYmVsb3cgcnVucyB0aGlzIHByaW1pbmcgc2NhbiBiZWZvcmUgY291bnRpbmcuXG4mIzQzO3ByaW1lKCkgeyBzY2FuOyB9XG4mIzQzO1xuJiM0MzsjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb25lIHNjYW4gYWZ0ZXIgcHJpbWluZyByZXBvcnRzIHRoZVxuJiM0MzsjICAgIG9ycGhhbnMuIFRoaXMgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZVxuJiM0MzsjICAgIG9ycGhhbnMgaGVyZS5cbiYjNDM7ZWNobyAxIFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDtcbiYjNDM7Z2VuX29ycGhhbnNcbiYjNDM7cHJpbWVcbiYjNDM7c2NhblxuJiM0MztmaXJzdD0kKGNvdW50X29ycGhhbnMpXG4mIzQzO1sgXCYjMzQ7JGZpcnN0XCYjMzQ7IC1ndCAwIF0gfHxcbiYjNDM7XHR7IGt0YXBfc2tpcF9hbGwgXCYjMzQ7JE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcJiMzNDs7IGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0OzsgfVxuJiM0MztcbiYjNDM7IyAyKSBtaW5fdW5yZWZfc2NhbnM9MjogYWZ0ZXIgcHJpbWluZywgb25lIHNjYW4gaXMgbm90IGVub3VnaCAoc3RpbGxcbiYjNDM7IyAgICBnYXRlZCksIHRoZSBzZWNvbmQgcmVwb3J0cy4gVGhlIGdhdGVkLXNjYW4temVybyBjaGVjayBpcyB0aGUgY29yZVxuJiM0MzsjICAgIHJlZ3Jlc3Npb24uXG4mIzQzO2VjaG8gMiBcdTAwM2UgXCYjMzQ7JFBBUkFNXCYjMzQ7XG4mIzQzO2dlbl9vcnBoYW5zXG4mIzQzO3ByaW1lXG4mIzQzO3NjYW47IHMxPSQoY291bnRfb3JwaGFucylcbiYjNDM7c2NhbjsgczI9JChjb3VudF9vcnBoYW5zKVxuJiM0MztbIFwmIzM0OyRzMVwmIzM0OyAtZXEgMCBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSBhZnRlciAxIHBvc3QtcHJpbWUgc2NhbiAobXVzdCBiZSAwKVwmIzM0O1xuJiM0MztbIFwmIzM0OyRzMlwmIzM0OyAtZ3QgMCBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttaW5fdW5yZWZfc2NhbnM9Mjogbm8gcmVwb3J0IGFmdGVyIDIgcG9zdC1wcmltZSBzY2FucyAoZmFsc2UgbmVnYXRpdmUpXCYjMzQ7XG4mIzQzO1xuJiM0MztrdGFwX3NldF9wbGFuIDFcbiYjNDM7a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7bWluX3VucmVmX3NjYW5zPTEgcmVwb3J0ZWQgJGZpcnN0IG9ycGhhbihzKSBvbmUgc2NhbiBhZnRlciBwcmltaW5nOyA9MiBoZWxkIHRoZW0gb25lIHNjYW4gbG9uZ2VyICgkczEgYWZ0ZXIgb25lIHNjYW4sICRzMiBhZnRlciB0d28pOyBwYXJhbSByZWFkLWJhY2sgb2tcJiMzNDtcbiYjNDM7a3RhcF9maW5pc2hlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rbWVtbGVha19zY2FuJiMzNDssCiAgICAmIzM0O2NvbmZpcm1fbGVhayYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQwZjg1N2I1MTNlYjk4YmRjOWMyNDFhYWM1MDM4Mjg2MDBhYzUyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDEzIDE0OjQ1OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdApAQCAtMTk4LDYgJiM0MzsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvcgogc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nCiB0aGUgbWluaW11bSBhZ2Ugb2YgYW4gb2JqZWN0IHRvIGJlIHJlcG9ydGVkIGFzIGEgbWVtb3J5IGxlYWsuCiAKJiM0MztUaGUgYGBtaW5fdW5yZWZfc2NhbnNgYCBtb2R1bGUgcGFyYW1ldGVyIChkZWZhdWx0IDEpIHJlcXVpcmVzIGFuIG9iamVjdCB0bwomIzQzO2JlIHNlZW4gdW5yZWZlcmVuY2VkIGluIHRoYXQgbWFueSBjb25zZWN1dGl2ZSBzY2FucyBiZWZvcmUgaXQgaXMgcmVwb3J0ZWQuCiYjNDM7S2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyCiYjNDM7dGhlIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZXMgZGVzY3JpYmVkIGFib3ZlLCBhdCB0aGUgY29zdCBvZiBkZWxheWluZwomIzQzO2dlbnVpbmUgcmVwb3J0cyBieSB1cCB0byB0aGF0IG1hbnkgc2NhbnMuIEl0IGNhbiBiZSBzZXQgYXQgYm9vdCB3aXRoCiYjNDM7YGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9Jmx0O24mZ3Q7YGAgb3IgYXQgcnVuLXRpbWUgdmlhCiYjNDM7YGAvc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc2BgLgomIzQzOwogTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCBlOTZlOWVmZDE5YjBkOS4uODVmMThiMTdlNzljNGUgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuYwpAQCAtMTUxLDYgJiM0MzsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHsKIAlpbnQgbWluX2NvdW50OwogCS8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi8KIAlpbnQgY291bnQ7CiYjNDM7CS8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi8KJiM0MzsJdW5zaWduZWQgaW50IHVucmVmX3NjYW5zOwogCS8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqLwogCXUzMiBjaGVja3N1bTsKIAlkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7CkBAIC0xNzUsNiAmIzQzOzE3Nyw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3QgewogI2RlZmluZSBPQkpFQ1RfUEhZUwkJKDEgJmx0OyZsdDsgNCkKIC8qIGZsYWcgc2V0IGZvciBwZXItQ1BVIHBvaW50ZXJzICovCiAjZGVmaW5lIE9CSkVDVF9QRVJDUFUJCSgxICZsdDsmbHQ7IDUpCiYjNDM7LyogZmxhZyBzZXQgb24gYW4gb2JqZWN0IGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoZSBmdWxsIHNjYW4sIHBlbmRpbmcgY29uZmlybWF0aW9uICovCiYjNDM7I2RlZmluZSBPQkpFQ1RfU1VTUEVDVAkJKDEgJmx0OyZsdDsgNikKIAogLyogc2V0IHdoZW4gX19yZW1vdmVfb2JqZWN0KCkgY2FsbGVkICovCiAjZGVmaW5lIERFTFNUQVRFX1JFTU9WRUQJKDEgJmx0OyZsdDsgMCkKQEAgLTIzMiw5ICYjNDM7MjM2LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkOwogLyogdXNlZCB0byBhdm9pZCByZXBvcnRpbmcgb2YgcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTsKJiM0MzsvKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxOwomIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47CiAvKiBkZWxheSBiZXR3ZWVuIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmdzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDsKJiM0MzsvKiBudW1iZXIgb2Ygb2JqZWN0cyBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUIGR1cmluZyB0aGUgY3VycmVudCBzY2FuICovCiYjNDM7c3RhdGljIGludCBucl9zdXNwZWN0czsKIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovCiBzdGF0aWMgaW50IGttZW1sZWFrX3N0YWNrX3NjYW4gPSAxOwogLyogcHJvdGVjdHMgdGhlIG1lbW9yeSBzY2FubmluZywgcGFyYW1ldGVycyBhbmQgZGVidWcva21lbWxlYWsgZmlsZSBhY2Nlc3MgKi8KQEAgLTY4OCw2ICYjNDM7Njk3LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcCkKIAlvYmplY3QtJmd0O2V4Y2Vzc19yZWYgPSAwOwogCW9iamVjdC0mZ3Q7Y291bnQgPSAwOwkJCS8qIHdoaXRlIGNvbG9yIGluaXRpYWxseSAqLwogCW9iamVjdC0mZ3Q7Y2hlY2tzdW0gPSB+MDsKJiM0MzsJb2JqZWN0LSZndDt1bnJlZl9zY2FucyA9IDA7CiAJb2JqZWN0LSZndDtkZWxfc3RhdGUgPSAwOwogCiAJLyogdGFzayBpbmZvcm1hdGlvbiAqLwpAQCAtMTQ0MCw2ICYjNDM7MTQ1MCwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCiAJICovCiAJb2JqZWN0LSZndDtjb3VudCYjNDM7JiM0Mzs7CiAJaWYgKGNvbG9yX2dyYXkob2JqZWN0KSkgewomIzQzOwkJLyogcmVmZXJlbmNlZCBhZnRlciBhbGwsIG5vIGxvbmdlciBhIHN1c3BlY3QgKi8KJiM0MzsJCWlmIChvYmplY3QtJmd0O2ZsYWdzICZhbXA7IE9CSkVDVF9TVVNQRUNUKSB7CiYjNDM7CQkJb2JqZWN0LSZndDtmbGFncyAmYW1wOz0gfk9CSkVDVF9TVVNQRUNUOwomIzQzOwkJCW5yX3N1c3BlY3RzLS07CiYjNDM7CQl9CiAJCS8qIHB1dF9vYmplY3QoKSBjYWxsZWQgd2hlbiByZW1vdmluZyBmcm9tIGdyYXlfbGlzdCAqLwogCQlXQVJOX09OKCFnZXRfb2JqZWN0KG9iamVjdCkpOwogCQlsaXN0X2FkZF90YWlsKCZhbXA7b2JqZWN0LSZndDtncmF5X2xpc3QsICZhbXA7Z3JheV9saXN0KTsKQEAgLTE4NDQsMTYgJiM0MzsxODU5LDE2IEBAIHN0YXRpYyB2b2lkIGRlZHVwX2ZsdXNoKHN0cnVjdCB4YXJyYXkgKmRlZHVwKQogICoga2VybmVsJiMzOTtzIHN0YW5kYXJkIGFsbG9jYXRvcnMuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUKICAqIHNjYW5fbXV0ZXggaGVsZC4KICAqLwotc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKQomIzQzO3N0YXRpYyBpbnQgX19rbWVtbGVha19zY2FuKGJvb2wgZnVsbCkKIHsKIAlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJaW50IF9fbWF5YmVfdW51c2VkIGk7Ci0Jc3RydWN0IHhhcnJheSBkZWR1cDsKLQlpbnQgbmV3X2xlYWtzID0gMDsKIAlpbnQgc3RvcCA9IDA7CiAKIAlqaWZmaWVzX2xhc3Rfc2NhbiA9IGppZmZpZXM7CiYjNDM7CWlmIChmdWxsKQomIzQzOwkJbnJfc3VzcGVjdHMgPSAwOwogCiAJLyogcHJlcGFyZSB0aGUga21lbWxlYWtfb2JqZWN0JiMzOTtzICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTg4MSw4ICYjNDM7MTg5NiwxMyBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiAJCQkJX19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTsKIAkJfQogCiYjNDM7CQkvKiByZWZlcmVuY2VkIGxhc3Qgc2NhbjogcmVzdGFydCB0aGUgdW5yZWZlcmVuY2VkIHJ1biAqLwomIzQzOwkJaWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKQomIzQzOwkJCW9iamVjdC0mZ3Q7dW5yZWZfc2NhbnMgPSAwOwogCQkvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi8KIAkJb2JqZWN0LSZndDtjb3VudCA9IDA7CiYjNDM7CQlpZiAoZnVsbCkKJiM0MzsJCQlvYmplY3QtJmd0O2ZsYWdzICZhbXA7PSB+T0JKRUNUX1NVU1BFQ1Q7CiAJCWlmIChjb2xvcl9ncmF5KG9iamVjdCkgJmFtcDsmYW1wOyBnZXRfb2JqZWN0KG9iamVjdCkpCiAJCQlsaXN0X2FkZF90YWlsKCZhbXA7b2JqZWN0LSZndDtncmF5X2xpc3QsICZhbXA7Z3JheV9saXN0KTsKIApAQCAtMTk1MCw2ICYjNDM7MTk3MCwxMCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiBzY2FuX2dyYXk6CiAJc2Nhbl9ncmF5X2xpc3QoKTsKIAomIzQzOwkvKiBhIGNvbmZpcm1hdGlvbiBzY2FuIGRvZXMgbm90IGxvb2sgZm9yIG1vZGlmaWVkIG9iamVjdHMgKi8KJiM0MzsJaWYgKCFmdWxsKQomIzQzOwkJcmV0dXJuIG5yX3N1c3BlY3RzOwomIzQzOwogCS8qCiAJICogQ2hlY2sgZm9yIG5ldyBvciB1bnJlZmVyZW5jZWQgb2JqZWN0cyBtb2RpZmllZCBzaW5jZSB0aGUgcHJldmlvdXMKIAkgKiBzY2FuIGFuZCBjb2xvciB0aGVtIGdyYXkgdW50aWwgdGhlIG5leHQgc2Nhbi4KQEAgLTE5NzIsNiAmIzQzOzE5OTYsMTEgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKQogCQkJLyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqLwogCQkJb2JqZWN0LSZndDtjb3VudCA9IG9iamVjdC0mZ3Q7bWluX2NvdW50OwogCQkJbGlzdF9hZGRfdGFpbCgmYW1wO29iamVjdC0mZ3Q7Z3JheV9saXN0LCAmYW1wO2dyYXlfbGlzdCk7CiYjNDM7CQl9IGVsc2UgaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIShvYmplY3QtJmd0O2ZsYWdzICZhbXA7IE9CSkVDVF9SRVBPUlRFRCkpIHsKJiM0MzsJCQkvKiBmbGFnIHRoZSBvYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoaXMgc2NhbiAqLwomIzQzOwkJCW9iamVjdC0mZ3Q7ZmxhZ3MgfD0gT0JKRUNUX1NVU1BFQ1Q7CiYjNDM7CQkJbnJfc3VzcGVjdHMmIzQzOyYjNDM7OwogCQl9CiAJCXJhd19zcGluX3VubG9ja19pcnEoJmFtcDtvYmplY3QtJmd0O2xvY2spOwogCX0KQEAgLTE5ODIsMTIgJiM0MzsyMDExLDYyIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZCkKIAkgKi8KIAlzY2FuX2dyYXlfbGlzdCgpOwogCiYjNDM7CXJldHVybiBucl9zdXNwZWN0czsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9tb3RlIGEgc3VzcGVjdGVkIG9iamVjdCB0byBhIHJlcG9ydGVkIGxlYWsgb25jZSBpdCBoYXMgc3RheWVkCiYjNDM7ICogdW5yZWZlcmVuY2VkIGZvciBtaW5fdW5yZWZfc2NhbnMgY29uc2VjdXRpdmUgc2NhbnMuIENhbGxlZCB3aXRoCiYjNDM7ICogb2JqZWN0LSZndDtsb2NrIGhlbGQ7IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBvYmplY3QgaXMgbmV3bHkgcmVwb3J0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgY29uZmlybV9sZWFrKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKJiM0Mzt7CiYjNDM7CWlmICghdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIHx8CiYjNDM7CSAgICAhKG9iamVjdC0mZ3Q7ZmxhZ3MgJmFtcDsgT0JKRUNUX1NVU1BFQ1QpIHx8CiYjNDM7CSAgICAob2JqZWN0LSZndDtmbGFncyAmYW1wOyBPQkpFQ1RfUkVQT1JURUQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvYmplY3QtJmd0O3VucmVmX3NjYW5zICYjNDM7PSAxOwomIzQzOwlpZiAob2JqZWN0LSZndDt1bnJlZl9zY2FucyAmbHQ7IG1pbl91bnJlZl9zY2FucykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJb2JqZWN0LSZndDtmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNjYW4gdGhlIG1lbW9yeSBhbmQgcmVwb3J0IHRoZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyBhcyBsZWFrcy4gTXVzdCBiZQomIzQzOyAqIGNhbGxlZCB3aXRoIHRoZSBzY2FuX211dGV4IGhlbGQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwomIzQzOwlzdHJ1Y3QgeGFycmF5IGRlZHVwOwomIzQzOwlpbnQgbmV3X2xlYWtzID0gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRnVsbCBzY2FuLiBPYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGFyZSBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUIGFuZAomIzQzOwkgKiBjb3VudGVkIGluIHRoZSByZXR1cm4gdmFsdWU7IG5vdGhpbmcgdG8gY29uZmlybSBvciByZXBvcnQgb3RoZXJ3aXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFfX2ttZW1sZWFrX3NjYW4odHJ1ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyoKIAkgKiBJZiBzY2FubmluZyB3YXMgc3RvcHBlZCBkbyBub3QgcmVwb3J0IGFueSBuZXcgdW5yZWZlcmVuY2VkIG9iamVjdHMuCiAJICovCiAJaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSkKIAkJcmV0dXJuOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgbGl2ZSBvYmplY3Qgd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgbW92ZWQgYnksIGZvciBleGFtcGxlLCBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgUkNVIHVwZGF0ZSBjYW4gYmUgbWlzc2VkIGZvciBvbmUgc2NhbiBhbmQgcmVwb3J0ZWQgYXMgYQomIzQzOwkgKiB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmUuIFNjYW4gYWdhaW4gYW5kIG9ubHkgcmVwb3J0IHRoZSBvYmplY3RzCiYjNDM7CSAqIGxlZnQgdW5yZWZlcmVuY2VkIChzdGlsbCBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUKSBieSBib3RoIHNjYW5zLgomIzQzOwkgKi8KJiM0MzsJX19rbWVtbGVha19zY2FuKGZhbHNlKTsKJiM0MzsJaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKgogCSAqIFNjYW5uaW5nIHJlc3VsdCByZXBvcnRpbmcuIFdoZW4gdmVyYm9zZSBwcmludGluZyBpcyBlbmFibGVkLCBkZWR1cGUKIAkgKiBieSBzdGFja2RlcG90IHRyYWNlX2hhbmRsZSBzbyBlYWNoIHVuaXF1ZSBiYWNrdHJhY2UgaXMgbG9nZ2VkIG9uY2UKQEAgLTIwMTQsOSAmIzQzOzIwOTMsOCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiAJCXJhd19zcGluX2xvY2tfaXJxKCZhbXA7b2JqZWN0LSZndDtsb2NrKTsKIAkJdHJhY2VfaGFuZGxlID0gMDsKIAkJZGVkdXBfcHJpbnQgPSBmYWxzZTsKLQkJaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSAmYW1wOyZhbXA7Ci0JCSAgICAhKG9iamVjdC0mZ3Q7ZmxhZ3MgJmFtcDsgT0JKRUNUX1JFUE9SVEVEKSkgewotCQkJb2JqZWN0LSZndDtmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7CiYjNDM7CiYjNDM7CQlpZiAoY29uZmlybV9sZWFrKG9iamVjdCkpIHsKIAkJCWlmIChrbWVtbGVha192ZXJib3NlKSB7CiAJCQkJdHJhY2VfaGFuZGxlID0gb2JqZWN0LSZndDt0cmFjZV9oYW5kbGU7CiAJCQkJZGVkdXBfcHJpbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfZ3VwX3Rlc3Quc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaG1tLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2h1Z2V0bGIuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXZtLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2tzbS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rc21fbnVtYS5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYTg1NzZlODM1YzhkMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaApAQCAtMCwwICYjNDM7MSwxMzIgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJiMzOTtzIE4tY29uc2VjdXRpdmUtc2NhbiBsZWFrIGNvbmZpcm1hdGlvbgomIzQzOyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuCiYjNDM7IwomIzQzOyMga21lbWxlYWsgb25seSByZXBvcnRzIGFuIG9iamVjdCBvbmNlIGl0IGhhcyBzdGF5ZWQgdW5yZWZlcmVuY2VkIGZvcgomIzQzOyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0CiYjNDM7IyBzY2FuIChoaXN0b3JpY2FsIGJlaGF2aW91cik7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyIHRyYW5zaWVudCBmYWxzZQomIzQzOyMgcG9zaXRpdmVzIHdoZXJlIGEgbGl2ZSBvYmplY3QmIzM5O3Mgb25seSByZWZlcmVuY2UgaXMgYnJpZWZseSBpbnZpc2libGUgdG8gYQomIzQzOyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlCiYjNDM7IyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsmIzM5O3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zCiYjNDM7IyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF0KJiM0MzsjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLAomIzQzOyMgY2hlY2tzIHRoYXQ6CiYjNDM7IyAgIC0gYSBmcmVzaGx5IGFsbG9jYXRlZCBvYmplY3QgaXMgZ3JleWVkIG9uIGl0cyBmaXJzdCBzY2FuIChpdHMgY2hlY2tzdW0KJiM0MzsjICAgICBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCBiZWZvcmUgdGhhdCBwcmltaW5nIHNjYW47CiYjNDM7IyAgICAgZWFjaCBjYXNlIGJlbG93IHByaW1lcyBvbmNlIGZpcnN0LAomIzQzOyMgICAtIHdpdGggdGhlIGRlZmF1bHQgdGhyZXNob2xkIChtaW5fdW5yZWZfc2NhbnM9MSkgb25lIHNjYW4gYWZ0ZXIgcHJpbWluZwomIzQzOyMgICAgIHJlcG9ydHMgdGhlIG9ycGhhbnMsCiYjNDM7IyAgIC0gcmFpc2luZyB0aGUgdGhyZXNob2xkIHRvIDIgbmVlZHMgdHdvIHNjYW5zIGFmdGVyIHByaW1pbmc6IG9uZSBpcyBub3QKJiM0MzsjICAgICBlbm91Z2gsIHRoZSBzZWNvbmQgcmVwb3J0cywKJiM0MzsjICAgLSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi4KJiM0MzsjCiYjNDM7IyBUaGUgJiMzNDtvbmUgcG9zdC1wcmltZSBzY2FuIGlzIG5vdCBlbm91Z2ggYXQgbWluX3VucmVmX3NjYW5zPTImIzM0OyBjaGVjayBpcyB0aGUKJiM0MzsjIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiByYWlzaW5nIG1pbl91bnJlZl9zY2FucyBtdXN0IHB1c2ggdGhlIHJlcG9ydAomIzQzOyMgc3RyaWN0bHkgbGF0ZXIuIExpa2Uga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm8KJiM0MzsjIGRldGVjdGFibGUgb3JwaGFuIGF0IGFsbCBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIKJiM0MzsjIHRoYW4gZmFpbGluZy4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7IyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3NraXBfYWxsLCBrdGFwX2V4aXRfZmFpbF9tc2csIGt0YXBfdGVzdF9wYXNzLCAuLi4pLgomIzQzO0RJUj0mIzM0OyQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWYgJiMzNDskMCYjMzQ7KSYjMzQ7KSYjMzQ7CiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7c291cmNlICYjMzQ7JHtESVJ9JiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzOwomIzQzO0tNRU1MRUFLPS9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrCiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnMKJiM0MztNT0RVTEU9a21lbWxlYWstdGVzdAomIzQzO0FHRT02CQkjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJiMzOTtzIDVzIG1pbmltdW0gb2JqZWN0IGFnZQomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7CiYjNDM7WyAmIzM0OyQoaWQgLXUpJiMzNDsgLWVxIDAgXSB8fCB7IGt0YXBfc2tpcF9hbGwgJiMzNDttdXN0IHJ1biBhcyByb290JiMzNDs7IGV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDs7IH0KJiM0MztbIC1yICYjMzQ7JEtNRU1MRUFLJiMzNDsgXSB8fAomIzQzOwl7IGt0YXBfc2tpcF9hbGwgJiMzNDtubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspJiMzNDs7IGV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDs7IH0KJiM0MztbIC13ICYjMzQ7JFBBUkFNJiMzNDsgXSB8fAomIzQzOwl7IGt0YXBfc2tpcF9hbGwgJiMzNDttaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudCYjMzQ7OyBleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7OyB9CiYjNDM7bW9kaW5mbyAmIzM0OyRNT0RVTEUmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8CiYjNDM7CXsga3RhcF9za2lwX2FsbCAmIzM0OyRNT0RVTEUgbm90IGJ1aWx0IChDT05GSUdfU0FNUExFX0tNRU1MRUFLKSYjMzQ7OyBleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7OyB9CiYjNDM7CiYjNDM7IyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLAomIzQzOyMgb3IgaXQgc2VsZi1kaXNhYmxlZCBhZnRlciBhbiBpbnRlcm5hbCBlcnJvcik7IGEgJiMzNDtzY2FuJiMzNDsgdGhlbiByZXR1cm5zCiYjNDM7IyBFUEVSTS4gUHJvYmUgb25jZSBhbmQgc2tpcCBpZiBzby4KJiM0MztlY2hvIHNjYW4gJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8CiYjNDM7CXsga3RhcF9za2lwX2FsbCAmIzM0O2ttZW1sZWFrIGlzIGRpc2FibGVkIChjaGVjayBkbWVzZyBvciBrbWVtbGVhaz0gYm9vdCBhcmcpJiMzNDs7IGV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDs7IH0KJiM0MzsKJiM0MztwcmV2PSQoY2F0ICYjMzQ7JFBBUkFNJiMzNDspCiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3ICAjIGludm9rZWQgaW5kaXJlY3RseSB2aWEgdHJhcAomIzQzO2NsZWFudXAoKSB7CiYjNDM7CWVjaG8gJiMzNDskcHJldiYjMzQ7ICZndDsgJiMzNDskUEFSQU0mIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZXN0b3JlIHRoZSBwYXJhbWV0ZXIKJiM0MzsJZWNobyBzY2FuPW9uICZndDsgJiMzNDskS01FTUxFQUsmIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZS1lbmFibGUgYXV0byBzY2FuCiYjNDM7CXJtbW9kICYjMzQ7JE1PRFVMRSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gY2xlYXIgJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhbgomIzQzOyMgb2JqZWN0JiMzOTtzIGNvbnNlY3V0aXZlLXVucmVmZXJlbmNlZCBydW4uIEFuIGF1dG8gc2NhbiBsYW5kaW5nIGJldHdlZW4gdHdvCiYjNDM7IyBtYW51YWwgc2NhbnMgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgYW5kIG1ha2UgdGhlIHRlc3QgZmxha3kuCiYjNDM7ZWNobyBzY2FuPW9mZiAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsjIENyZWF0ZSBhIGZyZXNoLCBhZ2VkIHNldCBvZiBvcnBoYW4gb2JqZWN0cyBmcm9tIHRoZSBoZWxwZXIgbW9kdWxlJiMzOTtzIGluaXQKJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLgomIzQzOyMgUHJlLWV4aXN0aW5nIHJlcG9ydGVkIGxlYWtzIGFyZSBncmV5ZWQgZmlyc3QgKCYjMzQ7Y2xlYXImIzM0Oykgc28gb25seSBvdXIKJiM0MzsjIG9ycGhhbnMgYXJlIGNvdW50ZWQuIFRoZSBtb2R1bGUgaXMgbGVmdCBsb2FkZWQgb24gcHVycG9zZTogb25jZSBpdCBpcwomIzQzOyMgdW5sb2FkZWQgaXRzIHN5bWJvbHMgYXJlIGdvbmUsIHNvIHRoZSBvcnBoYW4gYmFja3RyYWNlcyBubyBsb25nZXIgcmVzb2x2ZQomIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy4KJiM0MztnZW5fb3JwaGFucygpIHsKJiM0MzsJcm1tb2QgJiMzNDskTU9EVUxFJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBjbGVhciAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsKJiM0MzsJbW9kcHJvYmUgJiMzNDskTU9EVUxFJiMzNDsgfHwKJiM0MzsJCXsga3RhcF9za2lwX2FsbCAmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEUmIzM0OzsgZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OzsgfQomIzQzOwlzbGVlcCAmIzM0OyRBR0UmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzY2FuKCkgeyBlY2hvIHNjYW4gJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7OyB9CiYjNDM7CiYjNDM7IyBOdW1iZXIgb2YgaGVscGVyLW1vZHVsZSBvcnBoYW5zIGN1cnJlbnRseSByZXBvcnRlZCBieSBrbWVtbGVhay4gTWF0Y2hpbmcKJiM0MzsjIHRoZSBtb2R1bGUmIzM5O3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvCiYjNDM7IyB1bnJlbGF0ZWQgbGVha3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLiBrbWVtbGVhayBvbmx5IGxpc3RzIGFuIG9iamVjdCBoZXJlCiYjNDM7IyBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIHJlZmxlY3RzIHRoZSBjb25maXJtYXRpb24gZ2F0aW5nLgomIzQzO2NvdW50X29ycGhhbnMoKSB7CiYjNDM7CWM9JChncmVwIC1jICYjMzk7XFtrbWVtbGVha190ZXN0XF0mIzM5OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsKQomIzQzOwllY2hvICYjMzQ7JHtjOi0wfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uCiYjNDM7ZWNobyAzICZndDsgJiMzNDskUEFSQU0mIzM0OwomIzQzO1sgJiMzNDskKGNhdCAmIzM0OyRQQVJBTSYjMzQ7KSYjMzQ7ID0gJiMzNDszJiMzNDsgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDttaW5fdW5yZWZfc2NhbnMgZGlkIG5vdCByZWFkIGJhY2sgYXMgMyYjMzQ7CiYjNDM7CiYjNDM7IyBQcmltaW5nIHNjYW46IGttZW1sZWFrIGdyZXlzIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IG9uIGl0cyBmaXJzdCBzY2FuCiYjNDM7IyAoaXRzIGNoZWNrc3VtIHNldHRsZXMgdGhlbiksIHNvIG5vdGhpbmcgY2FuIGJlIHJlcG9ydGVkIHVudGlsIGEgc2Vjb25kCiYjNDM7IyBzY2FuLiBFdmVyeSBjYXNlIGJlbG93IHJ1bnMgdGhpcyBwcmltaW5nIHNjYW4gYmVmb3JlIGNvdW50aW5nLgomIzQzO3ByaW1lKCkgeyBzY2FuOyB9CiYjNDM7CiYjNDM7IyAxKSBtaW5fdW5yZWZfc2NhbnM9MSAoZGVmYXVsdCk6IG9uZSBzY2FuIGFmdGVyIHByaW1pbmcgcmVwb3J0cyB0aGUKJiM0MzsjICAgIG9ycGhhbnMuIFRoaXMgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZQomIzQzOyMgICAgb3JwaGFucyBoZXJlLgomIzQzO2VjaG8gMSAmZ3Q7ICYjMzQ7JFBBUkFNJiMzNDsKJiM0MztnZW5fb3JwaGFucwomIzQzO3ByaW1lCiYjNDM7c2NhbgomIzQzO2ZpcnN0PSQoY291bnRfb3JwaGFucykKJiM0MztbICYjMzQ7JGZpcnN0JiMzNDsgLWd0IDAgXSB8fAomIzQzOwl7IGt0YXBfc2tpcF9hbGwgJiMzNDskTU9EVUxFIHByb2R1Y2VkIG5vIGRldGVjdGFibGUgb3JwaGFucyAoY2Fubm90IHRlc3QgbWluX3VucmVmX3NjYW5zKSYjMzQ7OyBleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7OyB9CiYjNDM7CiYjNDM7IyAyKSBtaW5fdW5yZWZfc2NhbnM9MjogYWZ0ZXIgcHJpbWluZywgb25lIHNjYW4gaXMgbm90IGVub3VnaCAoc3RpbGwKJiM0MzsjICAgIGdhdGVkKSwgdGhlIHNlY29uZCByZXBvcnRzLiBUaGUgZ2F0ZWQtc2Nhbi16ZXJvIGNoZWNrIGlzIHRoZSBjb3JlCiYjNDM7IyAgICByZWdyZXNzaW9uLgomIzQzO2VjaG8gMiAmZ3Q7ICYjMzQ7JFBBUkFNJiMzNDsKJiM0MztnZW5fb3JwaGFucwomIzQzO3ByaW1lCiYjNDM7c2NhbjsgczE9JChjb3VudF9vcnBoYW5zKQomIzQzO3NjYW47IHMyPSQoY291bnRfb3JwaGFucykKJiM0MztbICYjMzQ7JHMxJiMzNDsgLWVxIDAgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDttaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSBhZnRlciAxIHBvc3QtcHJpbWUgc2NhbiAobXVzdCBiZSAwKSYjMzQ7CiYjNDM7WyAmIzM0OyRzMiYjMzQ7IC1ndCAwIF0gfHwga3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7bWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBhZnRlciAyIHBvc3QtcHJpbWUgc2NhbnMgKGZhbHNlIG5lZ2F0aXZlKSYjMzQ7CiYjNDM7CiYjNDM7a3RhcF9zZXRfcGxhbiAxCiYjNDM7a3RhcF90ZXN0X3Bhc3MgJiMzNDttaW5fdW5yZWZfc2NhbnM9MSByZXBvcnRlZCAkZmlyc3Qgb3JwaGFuKHMpIG9uZSBzY2FuIGFmdGVyIHByaW1pbmc7ID0yIGhlbGQgdGhlbSBvbmUgc2NhbiBsb25nZXIgKCRzMSBhZnRlciBvbmUgc2NhbiwgJHMyIGFmdGVyIHR3byk7IHBhcmFtIHJlYWQtYmFjayBvayYjMzQ7CiYjNDM7a3RhcF9maW5pc2hlZAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgS21lbWxlYWs6IEEgRGVsaWJlcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9rbWVtbGVhay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBpbml0aWFsIHRob3VnaHQ/IElzIHRoaXMgd29ydGggZnV6emluZz8gS21lbWxlYWsgaXMgYSBkZWJ1Z2dpbmcgdG9vbCwgYSBiYWNrZ3JvdW5kIHNjYW5uZXIgZm9yIG1lbW9yeSBsZWFrcywgc28gaXQmIzM5O3Mgbm90IGxpa2UgaXQmIzM5O3MgZGlyZWN0bHkgaGFuZGxpbmcgdXNlciBpbnB1dCBvciBuZXR3b3JraW5nIHRyYWZmaWMuIFVzdWFsbHksIHN5emthbGxlciBmb2N1c2VzIG9uIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gQnV0LCBoYW5nIG9uLi4uIGl0ICppcyogYSBrZXJuZWwgZmVhdHVyZSB0aGF0IGNhbiBiZSBlbmFibGVkIGFuZCBjb25maWd1cmVkLgoKSSBuZWVkIHRvIHN0ZXAgYmFjay4gV2hhdCBhcmUgdGhlIGNyaXRlcmlhPyBUaGlzIHByb21wdCBsaXN0cyBleGNlcHRpb25zIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhvc2UuIERvZXMgdGhlIHBhdGNoIGNoYW5nZSAqcmVhY2hhYmxlKiBjb3JlIGtlcm5lbCBsb2dpYz8gWWVzLCBpdCBtb2RpZmllcyBgbW0va21lbWxlYWsuY2AuIElzIGttZW1sZWFrIGNvbnNpZGVyZWQgY29yZSBrZXJuZWw/IEl0JiMzOTtzIGEgbWVtb3J5IGxlYWsgKmRldGVjdG9yKi4gQ2FuIGl0IHJ1biBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFllcy4gRG9lcyBpdCBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyBBYnNvbHV0ZWx5IOKAkyBpdCBhbHRlcnMgdGhlIHNjYW5uaW5nIGxvZ2ljIHdpdGggdGhpcyBuZXcgYG1pbl91bnJlZl9zY2Fuc2AgcGFyYW1ldGVyIGFuZCB0aGUgbG9naWMgYXJvdW5kIGl0LCBpbmNsdWRpbmcgYGttZW1sZWFrX3NjYW5gLCBgX19rbWVtbGVha19zY2FuYCwgYW5kIGBjb25maXJtX2xlYWtgLgoKU28sIHRoZSBxdWVzdGlvbiBzaGlmdHM6IGlzIGl0IHdvcnRoICpmdXp6aW5nKiBrbWVtbGVhayYjMzk7cyBpbnRlcm5hbCBsb2dpYyAqZGlyZWN0bHkqPyBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtgIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgLi4uIHRoYXQmIzM5O3MgYSB2ZWN0b3IgZm9yIGZ1enppbmcsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyB3b3J0aCBleHBsb3JpbmcsIGFuZCB0aGF0IHRoZSBzeXprYWxsZXIgc2V0dXAgY291bGQgYmUgbW9kaWZpZWQgdG8gdGVzdCBrbWVtbGVhayBpdHNlbGYuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgYXBwcm9hY2ggZm9yIHRoaXMgcGF0Y2guIEkgY291bGQgdGFyZ2V0IHRoZSBmdW5jdGlvbnMgYWx0ZXJlZCBsaWtlIGBfX2ttZW1sZWFrX3NjYW5gLCBgY29uZmlybV9sZWFrYCwgYW5kIGBrbWVtbGVha19zY2FuYC4gQW5kIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyB0b29sIGlzIGFjdHVhbGx5IHRhcmdldGVkIGJ5IHN5emthbGxlci4KCkFoLCBrbWVtbGVhayBpcyBhIGJhY2tncm91bmQgdGhyZWFkIG9yIHRyaWdnZXJlZCB2aWEgZGVidWdmcy4uLiBhbmQgc3l6a2FsbGVyIGRvZXMgdGFyZ2V0IGRlYnVnZnMgc29tZXRpbWVzISBJbnRlcmVzdGluZy4uLiBldmVuIGlmIHRoZSBwcmltYXJ5IGZvY3VzIGlzbiYjMzk7dCBrbWVtbGVhayBpdHNlbGYsIGl0JiMzOTtzICpzdGlsbCoga2VybmVsIGNvZGUuIFJhY2UgY29uZGl0aW9ucyBvciBldmVuIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2l0aGluIGttZW1sZWFrIGFyZSBjb25jZWl2YWJsZS4KCkkgdGhpbmsgdGhpcyBpcyB3b3J0aCBwdXJzdWluZywgZXZlbiBpZiBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgdGFyZ2V0LiBXZSYjMzk7cmUgY2hhbmdpbmcgY29yZSBjb2RlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBzbyB0aGVyZSYjMzk7cyBwb3RlbnRpYWwgdG8gZGlzY292ZXIgbmV3IGJ1Z3MuCgpJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGVuYWJsZWQ6IGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBMZXQmIzM5O3MgZ3JlcCBmb3IgdGhhdCBhbmQgc2VlIGhvdyB3aWRlbHkgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfS01FTUxFQUsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yMzc9Y29uZmlnIEhBVkVfREVCVUdfS01FTUxFQUtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIzOS1cbm1tL0tjb25maWcuZGVidWc6MjQwOmNvbmZpZyBERUJVR19LTUVNTEVBS1xubW0vS2NvbmZpZy5kZWJ1Zy0yNDEtXHRib29sIFwmIzM0O0tlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvclwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjY0LVxubW0vS2NvbmZpZy5kZWJ1ZzoyNjU6Y29uZmlnIERFQlVHX0tNRU1MRUFLX01FTV9QT09MX1NJWkVcbm1tL0tjb25maWcuZGVidWctMjY2LVx0aW50IFwmIzM0O0ttZW1sZWFrIG1lbW9yeSBwb29sIHNpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTI3Ny1cbm1tL0tjb25maWcuZGVidWc6Mjc4OmNvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRlxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gb2ZmXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yODQtXG5tbS9LY29uZmlnLmRlYnVnOjI4NTpjb25maWcgREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXG5tbS9LY29uZmlnLmRlYnVnLTI4Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIGttZW1sZWFrIGF1dG8gc2NhbiB0aHJlYWQgb24gYm9vdCB1cFwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjk5LVxubW0vS2NvbmZpZy5kZWJ1ZzozMDA6Y29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0Vcbm1tL0tjb25maWcuZGVidWctMzAxLVx0Ym9vbCBcJiMzNDtEZWZhdWx0IGttZW1sZWFrIHRvIHZlcmJvc2UgbW9kZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IExlYWsgRGV0ZWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwYXJhbWV0ZXIsIGBtaW5fdW5yZWZfc2NhbnNgLCBhbmQgaXQgYWRkcyB0aGUgYGNvbmZpcm1fbGVha2AgZnVuY3Rpb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYm90aCBgX19rbWVtbGVha19zY2FuYCBhbmQgYGttZW1sZWFrX3NjYW5gLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIGRlcGVuZGVuY2llcyBhZmZlY3RlZCBoZXJlLi4uIG5vLCBqdXN0IGBERUJVR19LTUVNTEVBS2AuCgpIbW0sIG5vdyB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gTGV0IG1lIHJldmlldyB0aGUgY3JpdGVyaWEuLi4gQWgsIHRoZSBndWlkZWxpbmVzIHNheSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIGl0JiMzOTtzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGV4ZWN1dGlvbi4gQWxzbywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXJlIG5vdCB3b3J0aCBmdXp6aW5nLgoKQnV0IHRoaXMgaXMgdG91Y2hpbmcgYG1tL2ttZW1sZWFrLmNgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGNvcmUga2VybmVsIGxvZ2ljLCBpZiBlbmFibGVkLCB3aGljaCBpdCBsaWtlbHkgaXMgaW4gYSBsb3Qgb2YgYnVpbGRzLiBBbmQgdGhlIGNoYW5nZXMgc2VlbSBmdW5jdGlvbmFsOyBpdCYjMzk7cyBhbHRlcmluZyBob3cgbGVhayBjb25maXJtYXRpb24gd29ya3MuIFNvLCB5ZXAsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nOiBgY29uZmlybV9sZWFrYCwgYF9fa21lbWxlYWtfc2NhbmAsIGFuZCBga21lbWxlYWtfc2NhbmAuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zOiBhcmUgdGhleSBzdGF0aWM/IFllcCwgYF9fa21lbWxlYWtfc2NhbmAsIGBjb25maXJtX2xlYWtgLCBhbmQgYGttZW1sZWFrX3NjYW5gIGFyZSBhbGwgc3RhdGljIHdpdGhpbiBgbW0va21lbWxlYWsuY2AuIEdvb2QgdG8ga25vdyBmb3Igc3ltYm9sIHZpc2liaWxpdHkgZHVyaW5nIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiBvZiBgbW0va21lbWxlYWsuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBtb2RpZmllZC4gTWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa21lbWxlYWtfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYz0xODM3PXN0YXRpYyB2b2lkIGRlZHVwX2ZsdXNoKHN0cnVjdCB4YXJyYXkgKmRlZHVwKVxuLS1cbm1tL2ttZW1sZWFrLmMtMTg2MS0gKi9cbm1tL2ttZW1sZWFrLmM6MTg2MjpzdGF0aWMgaW50IF9fa21lbWxlYWtfc2Nhbihib29sIGZ1bGwpXG5tbS9rbWVtbGVhay5jLTE4NjMte1xuLS1cbm1tL2ttZW1sZWFrLmM9MjA0MT1zdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4tLVxubW0va21lbWxlYWsuYy0yMDUwLVx0ICovXG5tbS9rbWVtbGVhay5jOjIwNTE6XHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcbm1tL2ttZW1sZWFrLmMtMjA1Mi1cdFx0cmV0dXJuO1xuLS1cbm1tL2ttZW1sZWFrLmMtMjA2NS1cdCAqL1xubW0va21lbWxlYWsuYzoyMDY2Olx0X19rbWVtbGVha19zY2FuKGZhbHNlKTtcbm1tL2ttZW1sZWFrLmMtMjA2Ny1cdGlmIChzY2FuX3Nob3VsZF9zdG9wKCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGB1cGRhdGVfcmVmc2AgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBgdXBkYXRlX3JlZnNgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZ2l2ZW4gaXRzIG5hbWUsIHRoaXMgZnVuY3Rpb24gaXMgKnByb2JhYmx5KiByZWxhdGVkIHRvIHVwZGF0aW5nIHJlZmVyZW5jZXMgd2l0aGluIHRoaXMgc3lzdGVtIOKAkyBsaWtlbHkgcG9pbnRlcnMsIGluZGljZXMsIG9yIGlkZW50aWZpZXJzIG9mIHNvbWUga2luZC4gTm93IHRoYXQgaXQgaXMgbW9kaWZpZWQgSSBuZWVkIHRvIGV4YW1pbmUgdGhpcyBmdW5jdGlvbiYjMzk7cyBzY29wZS4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgY2hhbmdlIGlzIHRvdWNoaW5nIHRoaXMgcGllY2Ugb2YgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgbW9kdWxlcy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBzZWUgd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkIHdpdGhpbiBgdXBkYXRlX3JlZnNgIGl0c2VsZiwgYmVjYXVzZSBhbnkgY2hhbmdlIHRoZXJlIGhhcyBwb3RlbnRpYWwgZm9yIGRvd25zdHJlYW0gZWZmZWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHdpbGwgaW1wYWN0LiBBIGNoYW5nZSBoZXJlIGNvdWxkIGNhc2NhZGUgdGhyb3VnaCB2YXJpb3VzIGRhdGEgc3RydWN0dXJlcyBvciBjb250cm9sIGZsb3dzLCBtYWtpbmcgaXQgaW1wb3J0YW50IHRvIGxvb2sgYXQgdGhpcyBmdW5jdGlvbiBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfcmVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYz0xNDA3PXN0YXRpYyBib29sIHVwZGF0ZV9jaGVja3N1bShzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXG4tLVxubW0va21lbWxlYWsuYy0xNDM3LSAqL1xubW0va21lbWxlYWsuYzoxNDM4OnN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZzKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdClcbm1tL2ttZW1sZWFrLmMtMTQzOS17XG4tLVxubW0va21lbWxlYWsuYy0xNDYzLVxubW0va21lbWxlYWsuYzoxNDY0OnN0YXRpYyB2b2lkIHBvaW50ZXJfdXBkYXRlX3JlZnMoc3RydWN0IGttZW1sZWFrX29iamVjdCAqc2Nhbm5lZCxcbm1tL2ttZW1sZWFrLmMtMTQ2NS1cdFx0XHQgdW5zaWduZWQgbG9uZyBwb2ludGVyLCB1bnNpZ25lZCBpbnQgb2JqZmxhZ3MpXG4tLVxubW0va21lbWxlYWsuYy0xNTAxLVx0XHRleGNlc3NfcmVmID0gb2JqZWN0LVx1MDAzZWV4Y2Vzc19yZWY7XG5tbS9rbWVtbGVhay5jOjE1MDI6XHRcdC8qIG5vIG5lZWQgZm9yIHVwZGF0ZV9yZWZzKCkgaWYgb2JqZWN0IGFscmVhZHkgZ3JheSAqL1xubW0va21lbWxlYWsuYy0xNTAzLVx0fSBlbHNlIHtcbm1tL2ttZW1sZWFrLmMtMTUwNC1cdFx0ZXhjZXNzX3JlZiA9IDA7XG5tbS9rbWVtbGVhay5jOjE1MDU6XHRcdHVwZGF0ZV9yZWZzKG9iamVjdCk7XG5tbS9rbWVtbGVhay5jLTE1MDYtXHR9XG4tLVxubW0va21lbWxlYWsuYy0xNTE2LVx0XHRyYXdfc3Bpbl9sb2NrX25lc3RlZChcdTAwMjZvYmplY3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xubW0va21lbWxlYWsuYzoxNTE3Olx0XHR1cGRhdGVfcmVmcyhvYmplY3QpO1xubW0va21lbWxlYWsuYy0xNTE4LVx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2b2JqZWN0LVx1MDAzZWxvY2spO1xuLS1cbm1tL2ttZW1sZWFrLmM9MTU0NT1zdGF0aWMgaW50IHNjYW5fYmxvY2sodm9pZCAqX3N0YXJ0LCB2b2lkICpfZW5kLFxuLS1cbm1tL2ttZW1sZWFrLmMtMTU2Ni1cbm1tL2ttZW1sZWFrLmM6MTU2NzpcdFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCAwKTtcbm1tL2ttZW1sZWFrLmM6MTU2ODpcdFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCBPQkpFQ1RfUEVSQ1BVKTtcbm1tL2ttZW1sZWFrLmMtMTU2OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMwCgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDY4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLbWVtbGVhayBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlICpzcGVjaWZpYyoga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBtb2RpZmllZCBrbWVtbGVhayBjb2RlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgX19hbGxvY19vYmplY3RgLCBgdXBkYXRlX3JlZnNgLCBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlLiBgX19hbGxvY19vYmplY3RgIGFuZCBgdXBkYXRlX3JlZnNgIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIGlkZWFsbHksIEkgd291bGQgYXZvaWQgdGhlbSBhcyBmdXp6aW5nIHRhcmdldHMgc2luY2UgZnV6emluZyBpbiBob3QgcGF0aHMgY2FuIGxlYWQgdG8gcGVyZm9ybWFuY2UgaXNzdWVzLiAgYF9fa21lbWxlYWtfc2NhbmAsIGBjb25maXJtX2xlYWtgLCBhbmQgYGttZW1sZWFrX3NjYW5gIGFyZSBtb3JlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgc2NhbiBwcm9jZXNzLCB0cmlnZ2VyZWQgcGVyaW9kaWNhbGx5IG9yIG1hbnVhbGx5LiAgVGhlc2UgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlbS4KCk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdGVsbHMgbWUgbm90IHRvIGxpc3QgZ2VuZXJpYyBjb25maWdzLiAgQnV0IGlzIGBERUJVR19LTUVNTEVBS2AgdG9vIGdlbmVyaWM/ICBObywgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIGttZW1sZWFrICpkZWJ1ZyogZmVhdHVyZSBpdHNlbGYuICBXaGlsZSBpdCAqbWlnaHQqIGJlIGVuYWJsZWQgaW4gc29tZSBpbnN0YW5jZXMsIEkgdGhpbmsgaXQmIzM5O3MgY3J1Y2lhbCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCBmb3IgbXkgZnV6emluZy4gVGhpcyBzZWVtcyBsaWtlIHRoZSAqbWFpbiogY29uZmlnLiBJIGFtIGdvaW5nIHRvIGxpc3QgYERFQlVHX0tNRU1MRUFLYC4KCkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhvc2Ugc2NhbiBmdW5jdGlvbnMuICBga21lbWxlYWtfc2NhbmAgaXMgdGhlIG1haW4gc2NhbiBmdW5jdGlvbi4gSXMgaXQgaG90LXBhdGg/IE5vLCBpdCYjMzk7cyBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IGBrbWVtbGVha19zY2FuX3RocmVhZGAgb3IgbWFudWFsbHkgdGhyb3VnaCBkZWJ1Z2ZzLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKnB1cnBvc2UqIG9mIHRoZXNlIGNoYW5nZXMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgdW5yZWZlcmVuY2VkIHNjYW4gdGhyZXNob2xkIGFuZCBob3cgb2JqZWN0cyBhcmUgY29uZmlybWVkIGFzIGxlYWtzLiAgVGhpcyBkaXJlY3RseSBhZmZlY3RzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGttZW1sZWFrIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcy4KCkZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbiBzeW1ib2xzOiBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGV5JiMzOTtyZSB0aGVyZS4gIGBjb25maXJtX2xlYWtgIGlzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiBhZGRlZCBpbiB0aGlzIHBhdGNoLiBBbmQgeWVzLCBgX19rbWVtbGVha19zY2FuYCBpcyBwcmVzZW50LCBpdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGluIHRoZSBwYXRjaCAocG9zc2libHkgcmVuYW1lZCBvciBjaGFuZ2VkKS4gQW5kIGBrbWVtbGVha19zY2FuYCBhbHNvIGV4aXN0cy4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncz8gVGhlIHRlc3QgdXNlcyBgQ09ORklHX1NBTVBMRV9LTUVNTEVBS2AsIGJ1dCB0aGF0JiMzOTtzIGZvciBhIHNlbGZ0ZXN0LiBJIGRvbiYjMzk7dCBuZWVkIHRvIGVuYWJsZSB0aGF0IHNwZWNpZmljIG1vZHVsZSB0byBmdXp6IHRoZSBjb3JlIGttZW1sZWFrIGxvZ2ljIGl0c2VsZi4gVGhhdCBhcHBlYXJzIHRvIGJlIGl0LgoKVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBpcyBqdXN0IGBERUJVR19LTUVNTEVBS2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19LTUVNTEVBSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbWxlYWtfc2NhbiYjMzQ7LAogICAgJiMzNDtjb25maXJtX2xlYWsmIzM0OywKICAgICYjMzQ7a21lbWxlYWtfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIGxvZ2ljIGluIGttZW1sZWFrLCBpbnRyb2R1Y2luZyBhIG5ldyBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rbWVtbGVha19zY2FuJiMzNDssCiAgICAmIzM0O2NvbmZpcm1fbGVhayYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjIwLjU5MzE2OTM3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTQ2OTM3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rbWVtbGVha19zY2FuXCIsXG4gICAgXCJjb25maXJtX2xlYWtcIixcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIGxvZ2ljIGluIGttZW1sZWFrLCBpbnRyb2R1Y2luZyBhIG5ldyBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjIwLjU5MzE4NTkwMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMjI5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmQwZjg1N2I1MTNlYjk4YmRjOWMyNDFhYWM1MDM4Mjg2MDBhYzUyYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAxNDo0NToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcXG5pbmRleCA3ZDc4NGUwM2YzZjlkNS4uYThhODNiYzY5Y2ViODggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XFxuQEAgLTE5OCw2ICsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvclxcbiBzdGFja3MuIEttZW1sZWFrIGRlZmluZXMgTVNFQ1NfTUlOX0FHRSAoZGVmYXVsdGluZyB0byAxMDAwKSByZXByZXNlbnRpbmdcXG4gdGhlIG1pbmltdW0gYWdlIG9mIGFuIG9iamVjdCB0byBiZSByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrLlxcbiBcXG4rVGhlIGBgbWluX3VucmVmX3NjYW5zYGAgbW9kdWxlIHBhcmFtZXRlciAoZGVmYXVsdCAxKSByZXF1aXJlcyBhbiBvYmplY3QgdG9cXG4rYmUgc2VlbiB1bnJlZmVyZW5jZWQgaW4gdGhhdCBtYW55IGNvbnNlY3V0aXZlIHNjYW5zIGJlZm9yZSBpdCBpcyByZXBvcnRlZC5cXG4rS2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyXFxuK3RoZSB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmVzIGRlc2NyaWJlZCBhYm92ZSwgYXQgdGhlIGNvc3Qgb2YgZGVsYXlpbmdcXG4rZ2VudWluZSByZXBvcnRzIGJ5IHVwIHRvIHRoYXQgbWFueSBzY2Fucy4gSXQgY2FuIGJlIHNldCBhdCBib290IHdpdGhcXG4rYGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9XFx1MDAzY25cXHUwMDNlYGAgb3IgYXQgcnVuLXRpbWUgdmlhXFxuK2BgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgYC5cXG4rXFxuIExpbWl0YXRpb25zIGFuZCBEcmF3YmFja3NcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcXG5pbmRleCBlOTZlOWVmZDE5YjBkOS4uODVmMThiMTdlNzljNGUgMTAwNjQ0XFxuLS0tIGEvbW0va21lbWxlYWsuY1xcbisrKyBiL21tL2ttZW1sZWFrLmNcXG5AQCAtMTUxLDYgKzE1MSw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xcbiBcXHRpbnQgbWluX2NvdW50O1xcbiBcXHQvKiB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50ZXJzIGZvdW5kIHBvaW50aW5nIHRvIHRoaXMgb2JqZWN0ICovXFxuIFxcdGludCBjb3VudDtcXG4rXFx0LyogY29uc2VjdXRpdmUgc2NhbnMgdGhlIG9iamVjdCBoYXMgYmVlbiBzZWVuIHVucmVmZXJlbmNlZCAqL1xcbitcXHR1bnNpZ25lZCBpbnQgdW5yZWZfc2NhbnM7XFxuIFxcdC8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqL1xcbiBcXHR1MzIgY2hlY2tzdW07XFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IHRyYWNlX2hhbmRsZTtcXG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xcbiAjZGVmaW5lIE9CSkVDVF9QSFlTXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gLyogZmxhZyBzZXQgZm9yIHBlci1DUFUgcG9pbnRlcnMgKi9cXG4gI2RlZmluZSBPQkpFQ1RfUEVSQ1BVXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4rLyogZmxhZyBzZXQgb24gYW4gb2JqZWN0IGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoZSBmdWxsIHNjYW4sIHBlbmRpbmcgY29uZmlybWF0aW9uICovXFxuKyNkZWZpbmUgT0JKRUNUX1NVU1BFQ1RcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiBcXG4gLyogc2V0IHdoZW4gX19yZW1vdmVfb2JqZWN0KCkgY2FsbGVkICovXFxuICNkZWZpbmUgREVMU1RBVEVfUkVNT1ZFRFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuQEAgLTIzMiw5ICsyMzYsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3BlcmNwdV9hZGRyO1xcbiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzY2FuX3RocmVhZDtcXG4gLyogdXNlZCB0byBhdm9pZCByZXBvcnRpbmcgb2YgcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKi9cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19taW5fYWdlO1xcbisvKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluX3VucmVmX3NjYW5zID0gMTtcXG4rbW9kdWxlX3BhcmFtKG1pbl91bnJlZl9zY2FucywgdWludCwgMDY0NCk7XFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xcbiAvKiBkZWxheSBiZXR3ZWVuIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmdzICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfc2Nhbl93YWl0O1xcbisvKiBudW1iZXIgb2Ygb2JqZWN0cyBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUIGR1cmluZyB0aGUgY3VycmVudCBzY2FuICovXFxuK3N0YXRpYyBpbnQgbnJfc3VzcGVjdHM7XFxuIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovXFxuIHN0YXRpYyBpbnQga21lbWxlYWtfc3RhY2tfc2NhbiA9IDE7XFxuIC8qIHByb3RlY3RzIHRoZSBtZW1vcnkgc2Nhbm5pbmcsIHBhcmFtZXRlcnMgYW5kIGRlYnVnL2ttZW1sZWFrIGZpbGUgYWNjZXNzICovXFxuQEAgLTY4OCw2ICs2OTcsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxcbiBcXHRvYmplY3QtXFx1MDAzZWV4Y2Vzc19yZWYgPSAwO1xcbiBcXHRvYmplY3QtXFx1MDAzZWNvdW50ID0gMDtcXHRcXHRcXHQvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi9cXG4gXFx0b2JqZWN0LVxcdTAwM2VjaGVja3N1bSA9IH4wO1xcbitcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0b2JqZWN0LVxcdTAwM2VkZWxfc3RhdGUgPSAwO1xcbiBcXG4gXFx0LyogdGFzayBpbmZvcm1hdGlvbiAqL1xcbkBAIC0xNDQwLDYgKzE0NTAsMTEgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3JlZnMoc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KVxcbiBcXHQgKi9cXG4gXFx0b2JqZWN0LVxcdTAwM2Vjb3VudCsrO1xcbiBcXHRpZiAoY29sb3JfZ3JheShvYmplY3QpKSB7XFxuK1xcdFxcdC8qIHJlZmVyZW5jZWQgYWZ0ZXIgYWxsLCBubyBsb25nZXIgYSBzdXNwZWN0ICovXFxuK1xcdFxcdGlmIChvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1NVU1BFQ1QpIHtcXG4rXFx0XFx0XFx0b2JqZWN0LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T0JKRUNUX1NVU1BFQ1Q7XFxuK1xcdFxcdFxcdG5yX3N1c3BlY3RzLS07XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogcHV0X29iamVjdCgpIGNhbGxlZCB3aGVuIHJlbW92aW5nIGZyb20gZ3JheV9saXN0ICovXFxuIFxcdFxcdFdBUk5fT04oIWdldF9vYmplY3Qob2JqZWN0KSk7XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm9iamVjdC1cXHUwMDNlZ3JheV9saXN0LCBcXHUwMDI2Z3JheV9saXN0KTtcXG5AQCAtMTg0NCwxNiArMTg1OSwxNiBAQCBzdGF0aWMgdm9pZCBkZWR1cF9mbHVzaChzdHJ1Y3QgeGFycmF5ICpkZWR1cClcXG4gICoga2VybmVsJ3Mgc3RhbmRhcmQgYWxsb2NhdG9ycy4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZVxcbiAgKiBzY2FuX211dGV4IGhlbGQuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXFxuK3N0YXRpYyBpbnQgX19rbWVtbGVha19zY2FuKGJvb2wgZnVsbClcXG4ge1xcbiBcXHRzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7XFxuIFxcdHN0cnVjdCB6b25lICp6b25lO1xcbiBcXHRpbnQgX19tYXliZV91bnVzZWQgaTtcXG4tXFx0c3RydWN0IHhhcnJheSBkZWR1cDtcXG4tXFx0aW50IG5ld19sZWFrcyA9IDA7XFxuIFxcdGludCBzdG9wID0gMDtcXG4gXFxuIFxcdGppZmZpZXNfbGFzdF9zY2FuID0gamlmZmllcztcXG4rXFx0aWYgKGZ1bGwpXFxuK1xcdFxcdG5yX3N1c3BlY3RzID0gMDtcXG4gXFxuIFxcdC8qIHByZXBhcmUgdGhlIGttZW1sZWFrX29iamVjdCdzICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG5AQCAtMTg4MSw4ICsxODk2LDEzIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4gXFx0XFx0XFx0XFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cXG4rXFx0XFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxcbitcXHRcXHRcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0XFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXFxuIFxcdFxcdG9iamVjdC1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHRpZiAoZnVsbClcXG4rXFx0XFx0XFx0b2JqZWN0LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T0JKRUNUX1NVU1BFQ1Q7XFxuIFxcdFxcdGlmIChjb2xvcl9ncmF5KG9iamVjdCkgXFx1MDAyNlxcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxcbiBcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZvYmplY3QtXFx1MDAzZWdyYXlfbGlzdCwgXFx1MDAyNmdyYXlfbGlzdCk7XFxuIFxcbkBAIC0xOTUwLDYgKzE5NzAsMTAgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxcbiBzY2FuX2dyYXk6XFxuIFxcdHNjYW5fZ3JheV9saXN0KCk7XFxuIFxcbitcXHQvKiBhIGNvbmZpcm1hdGlvbiBzY2FuIGRvZXMgbm90IGxvb2sgZm9yIG1vZGlmaWVkIG9iamVjdHMgKi9cXG4rXFx0aWYgKCFmdWxsKVxcbitcXHRcXHRyZXR1cm4gbnJfc3VzcGVjdHM7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayBmb3IgbmV3IG9yIHVucmVmZXJlbmNlZCBvYmplY3RzIG1vZGlmaWVkIHNpbmNlIHRoZSBwcmV2aW91c1xcbiBcXHQgKiBzY2FuIGFuZCBjb2xvciB0aGVtIGdyYXkgdW50aWwgdGhlIG5leHQgc2Nhbi5cXG5AQCAtMTk3Miw2ICsxOTk2LDExIEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4gXFx0XFx0XFx0LyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqL1xcbiBcXHRcXHRcXHRvYmplY3QtXFx1MDAzZWNvdW50ID0gb2JqZWN0LVxcdTAwM2VtaW5fY291bnQ7XFxuIFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm9iamVjdC1cXHUwMDNlZ3JheV9saXN0LCBcXHUwMDI2Z3JheV9saXN0KTtcXG4rXFx0XFx0fSBlbHNlIGlmICh1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIShvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xcbitcXHRcXHRcXHQvKiBmbGFnIHRoZSBvYmplY3RzIGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoaXMgc2NhbiAqL1xcbitcXHRcXHRcXHRvYmplY3QtXFx1MDAzZWZsYWdzIHw9IE9CSkVDVF9TVVNQRUNUO1xcbitcXHRcXHRcXHRucl9zdXNwZWN0cysrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJhd19zcGluX3VubG9ja19pcnEoXFx1MDAyNm9iamVjdC1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG5AQCAtMTk4MiwxMiArMjAxMSw2MiBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXFxuIFxcdCAqL1xcbiBcXHRzY2FuX2dyYXlfbGlzdCgpO1xcbiBcXG4rXFx0cmV0dXJuIG5yX3N1c3BlY3RzO1xcbit9XFxuK1xcbisvKlxcbisgKiBQcm9tb3RlIGEgc3VzcGVjdGVkIG9iamVjdCB0byBhIHJlcG9ydGVkIGxlYWsgb25jZSBpdCBoYXMgc3RheWVkXFxuKyAqIHVucmVmZXJlbmNlZCBmb3IgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBDYWxsZWQgd2l0aFxcbisgKiBvYmplY3QtXFx1MDAzZWxvY2sgaGVsZDsgcmV0dXJucyB0cnVlIHdoZW4gdGhlIG9iamVjdCBpcyBuZXdseSByZXBvcnRlZC5cXG4rICovXFxuK3N0YXRpYyBib29sIGNvbmZpcm1fbGVhayhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXFxuK3tcXG4rXFx0aWYgKCF1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgfHxcXG4rXFx0ICAgICEob2JqZWN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE9CSkVDVF9TVVNQRUNUKSB8fFxcbitcXHQgICAgKG9iamVjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zICs9IDE7XFxuK1xcdGlmIChvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zIFxcdTAwM2MgbWluX3VucmVmX3NjYW5zKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvYmplY3QtXFx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNjYW4gdGhlIG1lbW9yeSBhbmQgcmVwb3J0IHRoZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyBhcyBsZWFrcy4gTXVzdCBiZVxcbisgKiBjYWxsZWQgd2l0aCB0aGUgc2Nhbl9tdXRleCBoZWxkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcXG4rXFx0c3RydWN0IHhhcnJheSBkZWR1cDtcXG4rXFx0aW50IG5ld19sZWFrcyA9IDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGdWxsIHNjYW4uIE9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYXJlIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgYW5kXFxuK1xcdCAqIGNvdW50ZWQgaW4gdGhlIHJldHVybiB2YWx1ZTsgbm90aGluZyB0byBjb25maXJtIG9yIHJlcG9ydCBvdGhlcndpc2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgc2Nhbm5pbmcgd2FzIHN0b3BwZWQgZG8gbm90IHJlcG9ydCBhbnkgbmV3IHVucmVmZXJlbmNlZCBvYmplY3RzLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSBsaXZlIG9iamVjdCB3aG9zZSBvbmx5IHJlZmVyZW5jZSBpcyBtb3ZlZCBieSwgZm9yIGV4YW1wbGUsIGFcXG4rXFx0ICogY29uY3VycmVudCBSQ1UgdXBkYXRlIGNhbiBiZSBtaXNzZWQgZm9yIG9uZSBzY2FuIGFuZCByZXBvcnRlZCBhcyBhXFxuK1xcdCAqIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZS4gU2NhbiBhZ2FpbiBhbmQgb25seSByZXBvcnQgdGhlIG9iamVjdHNcXG4rXFx0ICogbGVmdCB1bnJlZmVyZW5jZWQgKHN0aWxsIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QpIGJ5IGJvdGggc2NhbnMuXFxuK1xcdCAqL1xcbitcXHRfX2ttZW1sZWFrX3NjYW4oZmFsc2UpO1xcbitcXHRpZiAoc2Nhbl9zaG91bGRfc3RvcCgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBTY2FubmluZyByZXN1bHQgcmVwb3J0aW5nLiBXaGVuIHZlcmJvc2UgcHJpbnRpbmcgaXMgZW5hYmxlZCwgZGVkdXBlXFxuIFxcdCAqIGJ5IHN0YWNrZGVwb3QgdHJhY2VfaGFuZGxlIHNvIGVhY2ggdW5pcXVlIGJhY2t0cmFjZSBpcyBsb2dnZWQgb25jZVxcbkBAIC0yMDE0LDkgKzIwOTMsOCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXFxuIFxcdFxcdHJhd19zcGluX2xvY2tfaXJxKFxcdTAwMjZvYmplY3QtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHR0cmFjZV9oYW5kbGUgPSAwO1xcbiBcXHRcXHRkZWR1cF9wcmludCA9IGZhbHNlO1xcbi1cXHRcXHRpZiAodW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhKG9iamVjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKSB7XFxuLVxcdFxcdFxcdG9iamVjdC1cXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xcbitcXG4rXFx0XFx0aWYgKGNvbmZpcm1fbGVhayhvYmplY3QpKSB7XFxuIFxcdFxcdFxcdGlmIChrbWVtbGVha192ZXJib3NlKSB7XFxuIFxcdFxcdFxcdFxcdHRyYWNlX2hhbmRsZSA9IG9iamVjdC1cXHUwMDNldHJhY2VfaGFuZGxlO1xcbiBcXHRcXHRcXHRcXHRkZWR1cF9wcmludCA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0xNTAsNiArMTUwLDcgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X2d1cF90ZXN0LnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9obW0uc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2h1Z2V0bGIuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2h1Z2V2bS5zaFxcbitURVNUX1BST0dTICs9IGtzZnRfa21lbWxlYWtfY29uZmlybS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfa21lbWxlYWtfZGVkdXAuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2tzbS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfa3NtX251bWEuc2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2E4NTc2ZTgzNWM4ZDFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXFxuQEAgLTAsMCArMSwxMzIgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjXFxuKyMgRnVuY3Rpb25hbCB0ZXN0IGZvciBrbWVtbGVhaydzIE4tY29uc2VjdXRpdmUtc2NhbiBsZWFrIGNvbmZpcm1hdGlvblxcbisjICh0aGUgbWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIpLlxcbisjXFxuKyMga21lbWxlYWsgb25seSByZXBvcnRzIGFuIG9iamVjdCBvbmNlIGl0IGhhcyBzdGF5ZWQgdW5yZWZlcmVuY2VkIGZvclxcbisjIG1pbl91bnJlZl9zY2FucyBjb25zZWN1dGl2ZSBzY2Fucy4gVGhlIGRlZmF1bHQgb2YgMSByZXBvcnRzIG9uIHRoZSBmaXJzdFxcbisjIHNjYW4gKGhpc3RvcmljYWwgYmVoYXZpb3VyKTsgaGlnaGVyIHZhbHVlcyBmaWx0ZXIgdHJhbnNpZW50IGZhbHNlXFxuKyMgcG9zaXRpdmVzIHdoZXJlIGEgbGl2ZSBvYmplY3QncyBvbmx5IHJlZmVyZW5jZSBpcyBicmllZmx5IGludmlzaWJsZSB0byBhXFxuKyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlXFxuKyMgdGVzdCBsb2FkcyBzYW1wbGVzL2ttZW1sZWFrJ3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zXFxuKyMgYW5kLCBjb3VudGluZyBvbmx5IHRob3NlIG9ycGhhbnMgKG1hdGNoZWQgYnkgdGhlaXIgW2ttZW1sZWFrX3Rlc3RdXFxuKyMgYmFja3RyYWNlIHNvIHVucmVsYXRlZCBsZWFrcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSBhcmUgaWdub3JlZCksXFxuKyMgY2hlY2tzIHRoYXQ6XFxuKyMgICAtIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IGlzIGdyZXllZCBvbiBpdHMgZmlyc3Qgc2NhbiAoaXRzIGNoZWNrc3VtXFxuKyMgICAgIHNldHRsZXMgdGhlbiksIHNvIG5vdGhpbmcgY2FuIGJlIHJlcG9ydGVkIGJlZm9yZSB0aGF0IHByaW1pbmcgc2NhbjtcXG4rIyAgICAgZWFjaCBjYXNlIGJlbG93IHByaW1lcyBvbmNlIGZpcnN0LFxcbisjICAgLSB3aXRoIHRoZSBkZWZhdWx0IHRocmVzaG9sZCAobWluX3VucmVmX3NjYW5zPTEpIG9uZSBzY2FuIGFmdGVyIHByaW1pbmdcXG4rIyAgICAgcmVwb3J0cyB0aGUgb3JwaGFucyxcXG4rIyAgIC0gcmFpc2luZyB0aGUgdGhyZXNob2xkIHRvIDIgbmVlZHMgdHdvIHNjYW5zIGFmdGVyIHByaW1pbmc6IG9uZSBpcyBub3RcXG4rIyAgICAgZW5vdWdoLCB0aGUgc2Vjb25kIHJlcG9ydHMsXFxuKyMgICAtIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxcbisjXFxuKyMgVGhlIFxcXCJvbmUgcG9zdC1wcmltZSBzY2FuIGlzIG5vdCBlbm91Z2ggYXQgbWluX3VucmVmX3NjYW5zPTJcXFwiIGNoZWNrIGlzIHRoZVxcbisjIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiByYWlzaW5nIG1pbl91bnJlZl9zY2FucyBtdXN0IHB1c2ggdGhlIHJlcG9ydFxcbisjIHN0cmljdGx5IGxhdGVyLiBMaWtlIGtzZnRfa21lbWxlYWtfZGVkdXAuc2gsIGlmIHRoZSBtb2R1bGUgeWllbGRzIG5vXFxuKyMgZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsIGluIHRoZSBydW5uaW5nIGVudmlyb25tZW50IHRoZSB0ZXN0IHNraXBzIHJhdGhlclxcbisjIHRoYW4gZmFpbGluZy5cXG4rI1xcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rXFxuKyMgS1RBUCBvdXRwdXQgaGVscGVycyAoa3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCBrdGFwX3Rlc3RfcGFzcywgLi4uKS5cXG4rRElSPVxcXCIkKGRpcm5hbWUgXFxcIiQocmVhZGxpbmsgLWYgXFxcIiQwXFxcIilcXFwiKVxcXCJcXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXFxuK3NvdXJjZSBcXFwiJHtESVJ9XFxcIi8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXFxuK1xcbitLTUVNTEVBSz0vc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha1xcbitQQVJBTT0vc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc1xcbitNT0RVTEU9a21lbWxlYWstdGVzdFxcbitBR0U9NlxcdFxcdCMgc2Vjb25kczsgbXVzdCBleGNlZWQga21lbWxlYWsncyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcXG4rXFxuK2t0YXBfcHJpbnRfaGVhZGVyXFxuK1xcbitbIFxcXCIkKGlkIC11KVxcXCIgLWVxIDAgXSB8fCB7IGt0YXBfc2tpcF9hbGwgXFxcIm11c3QgcnVuIGFzIHJvb3RcXFwiOyBleGl0IFxcXCIkS1NGVF9TS0lQXFxcIjsgfVxcbitbIC1yIFxcXCIkS01FTUxFQUtcXFwiIF0gfHxcXG4rXFx0eyBrdGFwX3NraXBfYWxsIFxcXCJubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspXFxcIjsgZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCI7IH1cXG4rWyAtdyBcXFwiJFBBUkFNXFxcIiBdIHx8XFxuK1xcdHsga3RhcF9za2lwX2FsbCBcXFwibWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIgbm90IHByZXNlbnRcXFwiOyBleGl0IFxcXCIkS1NGVF9TS0lQXFxcIjsgfVxcbittb2RpbmZvIFxcXCIkTU9EVUxFXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHxcXG4rXFx0eyBrdGFwX3NraXBfYWxsIFxcXCIkTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcXFwiOyBleGl0IFxcXCIkS1NGVF9TS0lQXFxcIjsgfVxcbitcXG4rIyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLFxcbisjIG9yIGl0IHNlbGYtZGlzYWJsZWQgYWZ0ZXIgYW4gaW50ZXJuYWwgZXJyb3IpOyBhIFxcXCJzY2FuXFxcIiB0aGVuIHJldHVybnNcXG4rIyBFUEVSTS4gUHJvYmUgb25jZSBhbmQgc2tpcCBpZiBzby5cXG4rZWNobyBzY2FuIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGwgfHxcXG4rXFx0eyBrdGFwX3NraXBfYWxsIFxcXCJrbWVtbGVhayBpcyBkaXNhYmxlZCAoY2hlY2sgZG1lc2cgb3Iga21lbWxlYWs9IGJvb3QgYXJnKVxcXCI7IGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiOyB9XFxuK1xcbitwcmV2PSQoY2F0IFxcXCIkUEFSQU1cXFwiKVxcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcgICMgaW52b2tlZCBpbmRpcmVjdGx5IHZpYSB0cmFwXFxuK2NsZWFudXAoKSB7XFxuK1xcdGVjaG8gXFxcIiRwcmV2XFxcIiBcXHUwMDNlIFxcXCIkUEFSQU1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFx0XFx0IyByZXN0b3JlIHRoZSBwYXJhbWV0ZXJcXG4rXFx0ZWNobyBzY2FuPW9uIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXHRcXHQjIHJlLWVuYWJsZSBhdXRvIHNjYW5cXG4rXFx0cm1tb2QgXFxcIiRNT0RVTEVcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gY2xlYXIgXFx1MDAzZSBcXFwiJEtNRU1MRUFLXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbit9XFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbisjIFN0b3AgdGhlIGF1dG9tYXRpYyBzY2FuIHRocmVhZDogb25seSBvdXIgbWFudWFsIHNjYW5zIHNob3VsZCBhZHZhbmNlIGFuXFxuKyMgb2JqZWN0J3MgY29uc2VjdXRpdmUtdW5yZWZlcmVuY2VkIHJ1bi4gQW4gYXV0byBzY2FuIGxhbmRpbmcgYmV0d2VlbiB0d29cXG4rIyBtYW51YWwgc2NhbnMgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgYW5kIG1ha2UgdGhlIHRlc3QgZmxha3kuXFxuK2VjaG8gc2Nhbj1vZmYgXFx1MDAzZSBcXFwiJEtNRU1MRUFLXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rIyBDcmVhdGUgYSBmcmVzaCwgYWdlZCBzZXQgb2Ygb3JwaGFuIG9iamVjdHMgZnJvbSB0aGUgaGVscGVyIG1vZHVsZSdzIGluaXRcXG4rIyBwYXRoIChpdHMga21hbGxvYy92bWFsbG9jL3BlcmNwdSBhbGxvY2F0aW9ucyBhcmUgZHJvcHBlZCByaWdodCBhd2F5KS5cXG4rIyBQcmUtZXhpc3RpbmcgcmVwb3J0ZWQgbGVha3MgYXJlIGdyZXllZCBmaXJzdCAoXFxcImNsZWFyXFxcIikgc28gb25seSBvdXJcXG4rIyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcXG4rIyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXFxuKyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy5cXG4rZ2VuX29ycGhhbnMoKSB7XFxuK1xcdHJtbW9kIFxcXCIkTU9EVUxFXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIGNsZWFyIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCJcXG4rXFx0bW9kcHJvYmUgXFxcIiRNT0RVTEVcXFwiIHx8XFxuK1xcdFxcdHsga3RhcF9za2lwX2FsbCBcXFwiZmFpbGVkIHRvIGxvYWQgJE1PRFVMRVxcXCI7IGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiOyB9XFxuK1xcdHNsZWVwIFxcXCIkQUdFXFxcIlxcbit9XFxuK1xcbitzY2FuKCkgeyBlY2hvIHNjYW4gXFx1MDAzZSBcXFwiJEtNRU1MRUFLXFxcIjsgfVxcbitcXG4rIyBOdW1iZXIgb2YgaGVscGVyLW1vZHVsZSBvcnBoYW5zIGN1cnJlbnRseSByZXBvcnRlZCBieSBrbWVtbGVhay4gTWF0Y2hpbmdcXG4rIyB0aGUgbW9kdWxlJ3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvXFxuKyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxcbisjIG9uY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQsIHNvIHRoaXMgcmVmbGVjdHMgdGhlIGNvbmZpcm1hdGlvbiBnYXRpbmcuXFxuK2NvdW50X29ycGhhbnMoKSB7XFxuK1xcdGM9JChncmVwIC1jICdcXFxcW2ttZW1sZWFrX3Rlc3RcXFxcXScgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGwpXFxuK1xcdGVjaG8gXFxcIiR7YzotMH1cXFwiXFxuK31cXG4rXFxuKyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXFxuK2VjaG8gMyBcXHUwMDNlIFxcXCIkUEFSQU1cXFwiXFxuK1sgXFxcIiQoY2F0IFxcXCIkUEFSQU1cXFwiKVxcXCIgPSBcXFwiM1xcXCIgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXFxcIm1pbl91bnJlZl9zY2FucyBkaWQgbm90IHJlYWQgYmFjayBhcyAzXFxcIlxcbitcXG4rIyBQcmltaW5nIHNjYW46IGttZW1sZWFrIGdyZXlzIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0IG9uIGl0cyBmaXJzdCBzY2FuXFxuKyMgKGl0cyBjaGVja3N1bSBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCB1bnRpbCBhIHNlY29uZFxcbisjIHNjYW4uIEV2ZXJ5IGNhc2UgYmVsb3cgcnVucyB0aGlzIHByaW1pbmcgc2NhbiBiZWZvcmUgY291bnRpbmcuXFxuK3ByaW1lKCkgeyBzY2FuOyB9XFxuK1xcbisjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb25lIHNjYW4gYWZ0ZXIgcHJpbWluZyByZXBvcnRzIHRoZVxcbisjICAgIG9ycGhhbnMuIFRoaXMgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZVxcbisjICAgIG9ycGhhbnMgaGVyZS5cXG4rZWNobyAxIFxcdTAwM2UgXFxcIiRQQVJBTVxcXCJcXG4rZ2VuX29ycGhhbnNcXG4rcHJpbWVcXG4rc2NhblxcbitmaXJzdD0kKGNvdW50X29ycGhhbnMpXFxuK1sgXFxcIiRmaXJzdFxcXCIgLWd0IDAgXSB8fFxcbitcXHR7IGt0YXBfc2tpcF9hbGwgXFxcIiRNT0RVTEUgcHJvZHVjZWQgbm8gZGV0ZWN0YWJsZSBvcnBoYW5zIChjYW5ub3QgdGVzdCBtaW5fdW5yZWZfc2NhbnMpXFxcIjsgZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCI7IH1cXG4rXFxuKyMgMikgbWluX3VucmVmX3NjYW5zPTI6IGFmdGVyIHByaW1pbmcsIG9uZSBzY2FuIGlzIG5vdCBlbm91Z2ggKHN0aWxsXFxuKyMgICAgZ2F0ZWQpLCB0aGUgc2Vjb25kIHJlcG9ydHMuIFRoZSBnYXRlZC1zY2FuLXplcm8gY2hlY2sgaXMgdGhlIGNvcmVcXG4rIyAgICByZWdyZXNzaW9uLlxcbitlY2hvIDIgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIlxcbitnZW5fb3JwaGFuc1xcbitwcmltZVxcbitzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpXFxuK3NjYW47IHMyPSQoY291bnRfb3JwaGFucylcXG4rWyBcXFwiJHMxXFxcIiAtZXEgMCBdIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcXFwibWluX3VucmVmX3NjYW5zPTI6ICRzMSBvcnBoYW4ocykgYWZ0ZXIgMSBwb3N0LXByaW1lIHNjYW4gKG11c3QgYmUgMClcXFwiXFxuK1sgXFxcIiRzMlxcXCIgLWd0IDAgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXFxcIm1pbl91bnJlZl9zY2Fucz0yOiBubyByZXBvcnQgYWZ0ZXIgMiBwb3N0LXByaW1lIHNjYW5zIChmYWxzZSBuZWdhdGl2ZSlcXFwiXFxuK1xcbitrdGFwX3NldF9wbGFuIDFcXG4ra3RhcF90ZXN0X3Bhc3MgXFxcIm1pbl91bnJlZl9zY2Fucz0xIHJlcG9ydGVkICRmaXJzdCBvcnBoYW4ocykgb25lIHNjYW4gYWZ0ZXIgcHJpbWluZzsgPTIgaGVsZCB0aGVtIG9uZSBzY2FuIGxvbmdlciAoJHMxIGFmdGVyIG9uZSBzY2FuLCAkczIgYWZ0ZXIgdHdvKTsgcGFyYW0gcmVhZC1iYWNrIG9rXFxcIlxcbitrdGFwX2ZpbmlzaGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjIxLjMyNjY1MjA1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MTM0NDE1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfS01FTUxFQUtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ttZW1sZWFrX3NjYW5cIixcbiAgICBcImNvbmZpcm1fbGVha1wiLFxuICAgIFwia21lbWxlYWtfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGVhayBkZXRlY3Rpb24gbG9naWMgaW4ga21lbWxlYWssIGludHJvZHVjaW5nIGEgbmV3IHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgY2hhbmdpbmcgaG93IG9iamVjdHMgYXJlIGNvbmZpcm1lZCBhcyBsZWFrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDBmODU3YjUxM2ViOThiZGM5YzI0MWFhYzUwMzgyODYwMGFjNTJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTQ6NDU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG5AQCAtMTk4LDYgKzE5OCwxNCBAQCBzeXN0ZW1zLCBiZWNhdXNlIG9mIHBvaW50ZXJzIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiBDUFUgcmVnaXN0ZXJzIG9yXG4gc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nXG4gdGhlIG1pbmltdW0gYWdlIG9mIGFuIG9iamVjdCB0byBiZSByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrLlxuIFxuK1RoZSBgYG1pbl91bnJlZl9zY2Fuc2BgIG1vZHVsZSBwYXJhbWV0ZXIgKGRlZmF1bHQgMSkgcmVxdWlyZXMgYW4gb2JqZWN0IHRvXG4rYmUgc2VlbiB1bnJlZmVyZW5jZWQgaW4gdGhhdCBtYW55IGNvbnNlY3V0aXZlIHNjYW5zIGJlZm9yZSBpdCBpcyByZXBvcnRlZC5cbitLZWVwaW5nIGl0IGF0IDEgcHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW91cjsgaGlnaGVyIHZhbHVlcyBmaWx0ZXJcbit0aGUgdHJhbnNpZW50IGZhbHNlIHBvc2l0aXZlcyBkZXNjcmliZWQgYWJvdmUsIGF0IHRoZSBjb3N0IG9mIGRlbGF5aW5nXG4rZ2VudWluZSByZXBvcnRzIGJ5IHVwIHRvIHRoYXQgbWFueSBzY2Fucy4gSXQgY2FuIGJlIHNldCBhdCBib290IHdpdGhcbitgYGttZW1sZWFrLm1pbl91bnJlZl9zY2Fucz1cdTAwM2NuXHUwMDNlYGAgb3IgYXQgcnVuLXRpbWUgdmlhXG4rYGAvc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc2BgLlxuK1xuIExpbWl0YXRpb25zIGFuZCBEcmF3YmFja3NcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcbmluZGV4IGU5NmU5ZWZkMTliMGQ5Li44NWYxOGIxN2U3OWM0ZSAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbisrKyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xNTEsNiArMTUxLDggQEAgc3RydWN0IGttZW1sZWFrX29iamVjdCB7XG4gXHRpbnQgbWluX2NvdW50O1xuIFx0LyogdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludGVycyBmb3VuZCBwb2ludGluZyB0byB0aGlzIG9iamVjdCAqL1xuIFx0aW50IGNvdW50O1xuK1x0LyogY29uc2VjdXRpdmUgc2NhbnMgdGhlIG9iamVjdCBoYXMgYmVlbiBzZWVuIHVucmVmZXJlbmNlZCAqL1xuK1x0dW5zaWduZWQgaW50IHVucmVmX3NjYW5zO1xuIFx0LyogY2hlY2tzdW0gZm9yIGRldGVjdGluZyBtb2RpZmllZCBvYmplY3RzICovXG4gXHR1MzIgY2hlY2tzdW07XG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7XG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBrbWVtbGVha19vYmplY3Qge1xuICNkZWZpbmUgT0JKRUNUX1BIWVNcdFx0KDEgXHUwMDNjXHUwMDNjIDQpXG4gLyogZmxhZyBzZXQgZm9yIHBlci1DUFUgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIE9CSkVDVF9QRVJDUFVcdFx0KDEgXHUwMDNjXHUwMDNjIDUpXG4rLyogZmxhZyBzZXQgb24gYW4gb2JqZWN0IGxlZnQgdW5yZWZlcmVuY2VkIGJ5IHRoZSBmdWxsIHNjYW4sIHBlbmRpbmcgY29uZmlybWF0aW9uICovXG4rI2RlZmluZSBPQkpFQ1RfU1VTUEVDVFx0XHQoMSBcdTAwM2NcdTAwM2MgNilcbiBcbiAvKiBzZXQgd2hlbiBfX3JlbW92ZV9vYmplY3QoKSBjYWxsZWQgKi9cbiAjZGVmaW5lIERFTFNUQVRFX1JFTU9WRURcdCgxIFx1MDAzY1x1MDAzYyAwKVxuQEAgLTIzMiw5ICsyMzYsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3BlcmNwdV9hZGRyO1xuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkO1xuIC8qIHVzZWQgdG8gYXZvaWQgcmVwb3J0aW5nIG9mIHJlY2VudGx5IGFsbG9jYXRlZCBvYmplY3RzICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19taW5fYWdlO1xuKy8qIGNvbnNlY3V0aXZlIHNjYW5zIGFuIG9iamVjdCBtdXN0IHN0YXkgdW5yZWZlcmVuY2VkIGJlZm9yZSByZXBvcnRpbmcgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4rbW9kdWxlX3BhcmFtKG1pbl91bnJlZl9zY2FucywgdWludCwgMDY0NCk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47XG4gLyogZGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgbWVtb3J5IHNjYW5uaW5ncyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfc2Nhbl93YWl0O1xuKy8qIG51bWJlciBvZiBvYmplY3RzIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgZHVyaW5nIHRoZSBjdXJyZW50IHNjYW4gKi9cbitzdGF0aWMgaW50IG5yX3N1c3BlY3RzO1xuIC8qIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRhc2sgc3RhY2tzIHNjYW5uaW5nICovXG4gc3RhdGljIGludCBrbWVtbGVha19zdGFja19zY2FuID0gMTtcbiAvKiBwcm90ZWN0cyB0aGUgbWVtb3J5IHNjYW5uaW5nLCBwYXJhbWV0ZXJzIGFuZCBkZWJ1Zy9rbWVtbGVhayBmaWxlIGFjY2VzcyAqL1xuQEAgLTY4OCw2ICs2OTcsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxuIFx0b2JqZWN0LVx1MDAzZWV4Y2Vzc19yZWYgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcdFx0XHQvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi9cbiBcdG9iamVjdC1cdTAwM2VjaGVja3N1bSA9IH4wO1xuK1x0b2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zID0gMDtcbiBcdG9iamVjdC1cdTAwM2VkZWxfc3RhdGUgPSAwO1xuIFxuIFx0LyogdGFzayBpbmZvcm1hdGlvbiAqL1xuQEAgLTE0NDAsNiArMTQ1MCwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXG4gXHQgKi9cbiBcdG9iamVjdC1cdTAwM2Vjb3VudCsrO1xuIFx0aWYgKGNvbG9yX2dyYXkob2JqZWN0KSkge1xuK1x0XHQvKiByZWZlcmVuY2VkIGFmdGVyIGFsbCwgbm8gbG9uZ2VyIGEgc3VzcGVjdCAqL1xuK1x0XHRpZiAob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfU1VTUEVDVCkge1xuK1x0XHRcdG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5PQkpFQ1RfU1VTUEVDVDtcbitcdFx0XHRucl9zdXNwZWN0cy0tO1xuK1x0XHR9XG4gXHRcdC8qIHB1dF9vYmplY3QoKSBjYWxsZWQgd2hlbiByZW1vdmluZyBmcm9tIGdyYXlfbGlzdCAqL1xuIFx0XHRXQVJOX09OKCFnZXRfb2JqZWN0KG9iamVjdCkpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9iamVjdC1cdTAwM2VncmF5X2xpc3QsIFx1MDAyNmdyYXlfbGlzdCk7XG5AQCAtMTg0NCwxNiArMTg1OSwxNiBAQCBzdGF0aWMgdm9pZCBkZWR1cF9mbHVzaChzdHJ1Y3QgeGFycmF5ICpkZWR1cClcbiAgKiBrZXJuZWwncyBzdGFuZGFyZCBhbGxvY2F0b3JzLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlXG4gICogc2Nhbl9tdXRleCBoZWxkLlxuICAqL1xuLXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbitzdGF0aWMgaW50IF9fa21lbWxlYWtfc2Nhbihib29sIGZ1bGwpXG4ge1xuIFx0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG4gXHRpbnQgX19tYXliZV91bnVzZWQgaTtcbi1cdHN0cnVjdCB4YXJyYXkgZGVkdXA7XG4tXHRpbnQgbmV3X2xlYWtzID0gMDtcbiBcdGludCBzdG9wID0gMDtcbiBcbiBcdGppZmZpZXNfbGFzdF9zY2FuID0gamlmZmllcztcbitcdGlmIChmdWxsKVxuK1x0XHRucl9zdXNwZWN0cyA9IDA7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBrbWVtbGVha19vYmplY3QncyAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTE4ODEsOCArMTg5NiwxMyBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdFx0XHRfX3BhaW50X2l0KG9iamVjdCwgS01FTUxFQUtfQkxBQ0spO1xuIFx0XHR9XG4gXG4rXHRcdC8qIHJlZmVyZW5jZWQgbGFzdCBzY2FuOiByZXN0YXJ0IHRoZSB1bnJlZmVyZW5jZWQgcnVuICovXG4rXHRcdGlmICghY29sb3Jfd2hpdGUob2JqZWN0KSlcbitcdFx0XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0XHQvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi9cbiBcdFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcbitcdFx0aWYgKGZ1bGwpXG4rXHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9CSkVDVF9TVVNQRUNUO1xuIFx0XHRpZiAoY29sb3JfZ3JheShvYmplY3QpIFx1MDAyNlx1MDAyNiBnZXRfb2JqZWN0KG9iamVjdCkpXG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZvYmplY3QtXHUwMDNlZ3JheV9saXN0LCBcdTAwMjZncmF5X2xpc3QpO1xuIFxuQEAgLTE5NTAsNiArMTk3MCwxMCBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gc2Nhbl9ncmF5OlxuIFx0c2Nhbl9ncmF5X2xpc3QoKTtcbiBcbitcdC8qIGEgY29uZmlybWF0aW9uIHNjYW4gZG9lcyBub3QgbG9vayBmb3IgbW9kaWZpZWQgb2JqZWN0cyAqL1xuK1x0aWYgKCFmdWxsKVxuK1x0XHRyZXR1cm4gbnJfc3VzcGVjdHM7XG4rXG4gXHQvKlxuIFx0ICogQ2hlY2sgZm9yIG5ldyBvciB1bnJlZmVyZW5jZWQgb2JqZWN0cyBtb2RpZmllZCBzaW5jZSB0aGUgcHJldmlvdXNcbiBcdCAqIHNjYW4gYW5kIGNvbG9yIHRoZW0gZ3JheSB1bnRpbCB0aGUgbmV4dCBzY2FuLlxuQEAgLTE5NzIsNiArMTk5NiwxMSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdFx0LyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqL1xuIFx0XHRcdG9iamVjdC1cdTAwM2Vjb3VudCA9IG9iamVjdC1cdTAwM2VtaW5fY291bnQ7XG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZvYmplY3QtXHUwMDNlZ3JheV9saXN0LCBcdTAwMjZncmF5X2xpc3QpO1xuK1x0XHR9IGVsc2UgaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAhKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xuK1x0XHRcdC8qIGZsYWcgdGhlIG9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYnkgdGhpcyBzY2FuICovXG4rXHRcdFx0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9TVVNQRUNUO1xuK1x0XHRcdG5yX3N1c3BlY3RzKys7XG4gXHRcdH1cbiBcdFx0cmF3X3NwaW5fdW5sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jayk7XG4gXHR9XG5AQCAtMTk4MiwxMiArMjAxMSw2MiBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHQgKi9cbiBcdHNjYW5fZ3JheV9saXN0KCk7XG4gXG4rXHRyZXR1cm4gbnJfc3VzcGVjdHM7XG4rfVxuK1xuKy8qXG4rICogUHJvbW90ZSBhIHN1c3BlY3RlZCBvYmplY3QgdG8gYSByZXBvcnRlZCBsZWFrIG9uY2UgaXQgaGFzIHN0YXllZFxuKyAqIHVucmVmZXJlbmNlZCBmb3IgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBDYWxsZWQgd2l0aFxuKyAqIG9iamVjdC1cdTAwM2Vsb2NrIGhlbGQ7IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBvYmplY3QgaXMgbmV3bHkgcmVwb3J0ZWQuXG4rICovXG4rc3RhdGljIGJvb2wgY29uZmlybV9sZWFrKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdClcbit7XG4rXHRpZiAoIXVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSB8fFxuK1x0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfU1VTUEVDVCkgfHxcbitcdCAgICAob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgKz0gMTtcbitcdGlmIChvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgXHUwMDNjIG1pbl91bnJlZl9zY2FucylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2JqZWN0LVx1MDAzZWZsYWdzIHw9IE9CSkVDVF9SRVBPUlRFRDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIFNjYW4gdGhlIG1lbW9yeSBhbmQgcmVwb3J0IHRoZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyBhcyBsZWFrcy4gTXVzdCBiZVxuKyAqIGNhbGxlZCB3aXRoIHRoZSBzY2FuX211dGV4IGhlbGQuXG4rICovXG4rc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxuK3tcbitcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcbitcdHN0cnVjdCB4YXJyYXkgZGVkdXA7XG4rXHRpbnQgbmV3X2xlYWtzID0gMDtcbitcbitcdC8qXG4rXHQgKiBGdWxsIHNjYW4uIE9iamVjdHMgbGVmdCB1bnJlZmVyZW5jZWQgYXJlIGZsYWdnZWQgT0JKRUNUX1NVU1BFQ1QgYW5kXG4rXHQgKiBjb3VudGVkIGluIHRoZSByZXR1cm4gdmFsdWU7IG5vdGhpbmcgdG8gY29uZmlybSBvciByZXBvcnQgb3RoZXJ3aXNlLlxuK1x0ICovXG4rXHRpZiAoIV9fa21lbWxlYWtfc2Nhbih0cnVlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIElmIHNjYW5uaW5nIHdhcyBzdG9wcGVkIGRvIG5vdCByZXBvcnQgYW55IG5ldyB1bnJlZmVyZW5jZWQgb2JqZWN0cy5cbiBcdCAqL1xuIFx0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LypcbitcdCAqIEEgbGl2ZSBvYmplY3Qgd2hvc2Ugb25seSByZWZlcmVuY2UgaXMgbW92ZWQgYnksIGZvciBleGFtcGxlLCBhXG4rXHQgKiBjb25jdXJyZW50IFJDVSB1cGRhdGUgY2FuIGJlIG1pc3NlZCBmb3Igb25lIHNjYW4gYW5kIHJlcG9ydGVkIGFzIGFcbitcdCAqIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZS4gU2NhbiBhZ2FpbiBhbmQgb25seSByZXBvcnQgdGhlIG9iamVjdHNcbitcdCAqIGxlZnQgdW5yZWZlcmVuY2VkIChzdGlsbCBmbGFnZ2VkIE9CSkVDVF9TVVNQRUNUKSBieSBib3RoIHNjYW5zLlxuK1x0ICovXG4rXHRfX2ttZW1sZWFrX3NjYW4oZmFsc2UpO1xuK1x0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIFNjYW5uaW5nIHJlc3VsdCByZXBvcnRpbmcuIFdoZW4gdmVyYm9zZSBwcmludGluZyBpcyBlbmFibGVkLCBkZWR1cGVcbiBcdCAqIGJ5IHN0YWNrZGVwb3QgdHJhY2VfaGFuZGxlIHNvIGVhY2ggdW5pcXVlIGJhY2t0cmFjZSBpcyBsb2dnZWQgb25jZVxuQEAgLTIwMTQsOSArMjA5Myw4IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBcdFx0cmF3X3NwaW5fbG9ja19pcnEoXHUwMDI2b2JqZWN0LVx1MDAzZWxvY2spO1xuIFx0XHR0cmFjZV9oYW5kbGUgPSAwO1xuIFx0XHRkZWR1cF9wcmludCA9IGZhbHNlO1xuLVx0XHRpZiAodW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9SRVBPUlRFRCkpIHtcbi1cdFx0XHRvYmplY3QtXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xuK1xuK1x0XHRpZiAoY29uZmlybV9sZWFrKG9iamVjdCkpIHtcbiBcdFx0XHRpZiAoa21lbWxlYWtfdmVyYm9zZSkge1xuIFx0XHRcdFx0dHJhY2VfaGFuZGxlID0gb2JqZWN0LVx1MDAzZXRyYWNlX2hhbmRsZTtcbiBcdFx0XHRcdGRlZHVwX3ByaW50ID0gdHJ1ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlZDMyMWFlNzA5ZGFjZi4uNzg2YjFkNzNkOTNiMGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNTAsNiArMTUwLDcgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X2d1cF90ZXN0LnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2htbS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9odWdldGxiLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2h1Z2V2bS5zaFxuK1RFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2tzbS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rc21fbnVtYS5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zYTg1NzZlODM1YzhkMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXG5AQCAtMCwwICsxLDEzMiBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIEZ1bmN0aW9uYWwgdGVzdCBmb3Iga21lbWxlYWsncyBOLWNvbnNlY3V0aXZlLXNjYW4gbGVhayBjb25maXJtYXRpb25cbisjICh0aGUgbWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIpLlxuKyNcbisjIGttZW1sZWFrIG9ubHkgcmVwb3J0cyBhbiBvYmplY3Qgb25jZSBpdCBoYXMgc3RheWVkIHVucmVmZXJlbmNlZCBmb3JcbisjIG1pbl91bnJlZl9zY2FucyBjb25zZWN1dGl2ZSBzY2Fucy4gVGhlIGRlZmF1bHQgb2YgMSByZXBvcnRzIG9uIHRoZSBmaXJzdFxuKyMgc2NhbiAoaGlzdG9yaWNhbCBiZWhhdmlvdXIpOyBoaWdoZXIgdmFsdWVzIGZpbHRlciB0cmFuc2llbnQgZmFsc2VcbisjIHBvc2l0aXZlcyB3aGVyZSBhIGxpdmUgb2JqZWN0J3Mgb25seSByZWZlcmVuY2UgaXMgYnJpZWZseSBpbnZpc2libGUgdG8gYVxuKyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlXG4rIyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsncyBoZWxwZXIgbW9kdWxlIHRvIGNyZWF0ZSBvcnBoYW4gYWxsb2NhdGlvbnNcbisjIGFuZCwgY291bnRpbmcgb25seSB0aG9zZSBvcnBoYW5zIChtYXRjaGVkIGJ5IHRoZWlyIFtrbWVtbGVha190ZXN0XVxuKyMgYmFja3RyYWNlIHNvIHVucmVsYXRlZCBsZWFrcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSBhcmUgaWdub3JlZCksXG4rIyBjaGVja3MgdGhhdDpcbisjICAgLSBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdCBpcyBncmV5ZWQgb24gaXRzIGZpcnN0IHNjYW4gKGl0cyBjaGVja3N1bVxuKyMgICAgIHNldHRsZXMgdGhlbiksIHNvIG5vdGhpbmcgY2FuIGJlIHJlcG9ydGVkIGJlZm9yZSB0aGF0IHByaW1pbmcgc2NhbjtcbisjICAgICBlYWNoIGNhc2UgYmVsb3cgcHJpbWVzIG9uY2UgZmlyc3QsXG4rIyAgIC0gd2l0aCB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgKG1pbl91bnJlZl9zY2Fucz0xKSBvbmUgc2NhbiBhZnRlciBwcmltaW5nXG4rIyAgICAgcmVwb3J0cyB0aGUgb3JwaGFucyxcbisjICAgLSByYWlzaW5nIHRoZSB0aHJlc2hvbGQgdG8gMiBuZWVkcyB0d28gc2NhbnMgYWZ0ZXIgcHJpbWluZzogb25lIGlzIG5vdFxuKyMgICAgIGVub3VnaCwgdGhlIHNlY29uZCByZXBvcnRzLFxuKyMgICAtIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxuKyNcbisjIFRoZSBcIm9uZSBwb3N0LXByaW1lIHNjYW4gaXMgbm90IGVub3VnaCBhdCBtaW5fdW5yZWZfc2NhbnM9MlwiIGNoZWNrIGlzIHRoZVxuKyMgY29yZSByZWdyZXNzaW9uIHRlc3Q6IHJhaXNpbmcgbWluX3VucmVmX3NjYW5zIG11c3QgcHVzaCB0aGUgcmVwb3J0XG4rIyBzdHJpY3RseSBsYXRlci4gTGlrZSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoLCBpZiB0aGUgbW9kdWxlIHlpZWxkcyBub1xuKyMgZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsIGluIHRoZSBydW5uaW5nIGVudmlyb25tZW50IHRoZSB0ZXN0IHNraXBzIHJhdGhlclxuKyMgdGhhbiBmYWlsaW5nLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4rIyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3NraXBfYWxsLCBrdGFwX2V4aXRfZmFpbF9tc2csIGt0YXBfdGVzdF9wYXNzLCAuLi4pLlxuK0RJUj1cIiQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWYgXCIkMFwiKVwiKVwiXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rc291cmNlIFwiJHtESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK0tNRU1MRUFLPS9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrXG4rUEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcbitNT0RVTEU9a21lbWxlYWstdGVzdFxuK0FHRT02XHRcdCMgc2Vjb25kczsgbXVzdCBleGNlZWQga21lbWxlYWsncyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcbitcbitrdGFwX3ByaW50X2hlYWRlclxuK1xuK1sgXCIkKGlkIC11KVwiIC1lcSAwIF0gfHwgeyBrdGFwX3NraXBfYWxsIFwibXVzdCBydW4gYXMgcm9vdFwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rWyAtciBcIiRLTUVNTEVBS1wiIF0gfHxcbitcdHsga3RhcF9za2lwX2FsbCBcIm5vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcIjsgZXhpdCBcIiRLU0ZUX1NLSVBcIjsgfVxuK1sgLXcgXCIkUEFSQU1cIiBdIHx8XG4rXHR7IGt0YXBfc2tpcF9hbGwgXCJtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rbW9kaW5mbyBcIiRNT0RVTEVcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbitcdHsga3RhcF9za2lwX2FsbCBcIiRNT0RVTEUgbm90IGJ1aWx0IChDT05GSUdfU0FNUExFX0tNRU1MRUFLKVwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rXG4rIyBrbWVtbGVhayBjYW4gYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgYXQgcnVudGltZSAoa21lbWxlYWs9b2ZmIGJvb3QgYXJnLFxuKyMgb3IgaXQgc2VsZi1kaXNhYmxlZCBhZnRlciBhbiBpbnRlcm5hbCBlcnJvcik7IGEgXCJzY2FuXCIgdGhlbiByZXR1cm5zXG4rIyBFUEVSTS4gUHJvYmUgb25jZSBhbmQgc2tpcCBpZiBzby5cbitlY2hvIHNjYW4gXHUwMDNlIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbCB8fFxuK1x0eyBrdGFwX3NraXBfYWxsIFwia21lbWxlYWsgaXMgZGlzYWJsZWQgKGNoZWNrIGRtZXNnIG9yIGttZW1sZWFrPSBib290IGFyZylcIjsgZXhpdCBcIiRLU0ZUX1NLSVBcIjsgfVxuK1xuK3ByZXY9JChjYXQgXCIkUEFSQU1cIilcbisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIzMTcgICMgaW52b2tlZCBpbmRpcmVjdGx5IHZpYSB0cmFwXG4rY2xlYW51cCgpIHtcbitcdGVjaG8gXCIkcHJldlwiIFx1MDAzZSBcIiRQQVJBTVwiIDJcdTAwM2UvZGV2L251bGxcdFx0IyByZXN0b3JlIHRoZSBwYXJhbWV0ZXJcbitcdGVjaG8gc2Nhbj1vbiBcdTAwM2UgXCIkS01FTUxFQUtcIiAyXHUwMDNlL2Rldi9udWxsXHRcdCMgcmUtZW5hYmxlIGF1dG8gc2NhblxuK1x0cm1tb2QgXCIkTU9EVUxFXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBjbGVhciBcdTAwM2UgXCIkS01FTUxFQUtcIiAyXHUwMDNlL2Rldi9udWxsXG4rfVxuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rIyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxuKyMgb2JqZWN0J3MgY29uc2VjdXRpdmUtdW5yZWZlcmVuY2VkIHJ1bi4gQW4gYXV0byBzY2FuIGxhbmRpbmcgYmV0d2VlbiB0d29cbisjIG1hbnVhbCBzY2FucyB3b3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBhbmQgbWFrZSB0aGUgdGVzdCBmbGFreS5cbitlY2hvIHNjYW49b2ZmIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGxcbitcbisjIENyZWF0ZSBhIGZyZXNoLCBhZ2VkIHNldCBvZiBvcnBoYW4gb2JqZWN0cyBmcm9tIHRoZSBoZWxwZXIgbW9kdWxlJ3MgaW5pdFxuKyMgcGF0aCAoaXRzIGttYWxsb2Mvdm1hbGxvYy9wZXJjcHUgYWxsb2NhdGlvbnMgYXJlIGRyb3BwZWQgcmlnaHQgYXdheSkuXG4rIyBQcmUtZXhpc3RpbmcgcmVwb3J0ZWQgbGVha3MgYXJlIGdyZXllZCBmaXJzdCAoXCJjbGVhclwiKSBzbyBvbmx5IG91clxuKyMgb3JwaGFucyBhcmUgY291bnRlZC4gVGhlIG1vZHVsZSBpcyBsZWZ0IGxvYWRlZCBvbiBwdXJwb3NlOiBvbmNlIGl0IGlzXG4rIyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXG4rIyB0byBba21lbWxlYWtfdGVzdF0gYW5kIGNvdWxkIG5vdCBiZSBtYXRjaGVkIGJlbG93LlxuK2dlbl9vcnBoYW5zKCkge1xuK1x0cm1tb2QgXCIkTU9EVUxFXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBjbGVhciBcdTAwM2UgXCIkS01FTUxFQUtcIlxuK1x0bW9kcHJvYmUgXCIkTU9EVUxFXCIgfHxcbitcdFx0eyBrdGFwX3NraXBfYWxsIFwiZmFpbGVkIHRvIGxvYWQgJE1PRFVMRVwiOyBleGl0IFwiJEtTRlRfU0tJUFwiOyB9XG4rXHRzbGVlcCBcIiRBR0VcIlxuK31cbitcbitzY2FuKCkgeyBlY2hvIHNjYW4gXHUwMDNlIFwiJEtNRU1MRUFLXCI7IH1cbitcbisjIE51bWJlciBvZiBoZWxwZXItbW9kdWxlIG9ycGhhbnMgY3VycmVudGx5IHJlcG9ydGVkIGJ5IGttZW1sZWFrLiBNYXRjaGluZ1xuKyMgdGhlIG1vZHVsZSdzIG93biBiYWNrdHJhY2UgKFtrbWVtbGVha190ZXN0XSkga2VlcHMgdGhlIGNvdW50IGltbXVuZSB0b1xuKyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxuKyMgb25jZSBpdCBoYXMgYmVlbiByZXBvcnRlZCwgc28gdGhpcyByZWZsZWN0cyB0aGUgY29uZmlybWF0aW9uIGdhdGluZy5cbitjb3VudF9vcnBoYW5zKCkge1xuK1x0Yz0kKGdyZXAgLWMgJ1xcW2ttZW1sZWFrX3Rlc3RcXF0nIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbClcbitcdGVjaG8gXCIke2M6LTB9XCJcbit9XG4rXG4rIyAwKSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbitlY2hvIDMgXHUwMDNlIFwiJFBBUkFNXCJcbitbIFwiJChjYXQgXCIkUEFSQU1cIilcIiA9IFwiM1wiIF0gfHwga3RhcF9leGl0X2ZhaWxfbXNnIFwibWluX3VucmVmX3NjYW5zIGRpZCBub3QgcmVhZCBiYWNrIGFzIDNcIlxuK1xuKyMgUHJpbWluZyBzY2FuOiBrbWVtbGVhayBncmV5cyBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdCBvbiBpdHMgZmlyc3Qgc2NhblxuKyMgKGl0cyBjaGVja3N1bSBzZXR0bGVzIHRoZW4pLCBzbyBub3RoaW5nIGNhbiBiZSByZXBvcnRlZCB1bnRpbCBhIHNlY29uZFxuKyMgc2Nhbi4gRXZlcnkgY2FzZSBiZWxvdyBydW5zIHRoaXMgcHJpbWluZyBzY2FuIGJlZm9yZSBjb3VudGluZy5cbitwcmltZSgpIHsgc2NhbjsgfVxuK1xuKyMgMSkgbWluX3VucmVmX3NjYW5zPTEgKGRlZmF1bHQpOiBvbmUgc2NhbiBhZnRlciBwcmltaW5nIHJlcG9ydHMgdGhlXG4rIyAgICBvcnBoYW5zLiBUaGlzIGFsc28gZXN0YWJsaXNoZXMgdGhhdCB0aGUgaGVscGVyIHByb2R1Y2VzIGRldGVjdGFibGVcbisjICAgIG9ycGhhbnMgaGVyZS5cbitlY2hvIDEgXHUwMDNlIFwiJFBBUkFNXCJcbitnZW5fb3JwaGFuc1xuK3ByaW1lXG4rc2NhblxuK2ZpcnN0PSQoY291bnRfb3JwaGFucylcbitbIFwiJGZpcnN0XCIgLWd0IDAgXSB8fFxuK1x0eyBrdGFwX3NraXBfYWxsIFwiJE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcIjsgZXhpdCBcIiRLU0ZUX1NLSVBcIjsgfVxuK1xuKyMgMikgbWluX3VucmVmX3NjYW5zPTI6IGFmdGVyIHByaW1pbmcsIG9uZSBzY2FuIGlzIG5vdCBlbm91Z2ggKHN0aWxsXG4rIyAgICBnYXRlZCksIHRoZSBzZWNvbmQgcmVwb3J0cy4gVGhlIGdhdGVkLXNjYW4temVybyBjaGVjayBpcyB0aGUgY29yZVxuKyMgICAgcmVncmVzc2lvbi5cbitlY2hvIDIgXHUwMDNlIFwiJFBBUkFNXCJcbitnZW5fb3JwaGFuc1xuK3ByaW1lXG4rc2NhbjsgczE9JChjb3VudF9vcnBoYW5zKVxuK3NjYW47IHMyPSQoY291bnRfb3JwaGFucylcbitbIFwiJHMxXCIgLWVxIDAgXSB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXCJtaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSBhZnRlciAxIHBvc3QtcHJpbWUgc2NhbiAobXVzdCBiZSAwKVwiXG4rWyBcIiRzMlwiIC1ndCAwIF0gfHwga3RhcF9leGl0X2ZhaWxfbXNnIFwibWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBhZnRlciAyIHBvc3QtcHJpbWUgc2NhbnMgKGZhbHNlIG5lZ2F0aXZlKVwiXG4rXG4ra3RhcF9zZXRfcGxhbiAxXG4ra3RhcF90ZXN0X3Bhc3MgXCJtaW5fdW5yZWZfc2NhbnM9MSByZXBvcnRlZCAkZmlyc3Qgb3JwaGFuKHMpIG9uZSBzY2FuIGFmdGVyIHByaW1pbmc7ID0yIGhlbGQgdGhlbSBvbmUgc2NhbiBsb25nZXIgKCRzMSBhZnRlciBvbmUgc2NhbiwgJHMyIGFmdGVyIHR3byk7IHBhcmFtIHJlYWQtYmFjayBva1wiXG4ra3RhcF9maW5pc2hlZFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6MjEuMzI2NjU1NjI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0OTk2NzkyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLbWVtbGVhazogQSBEZWxpYmVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9rbWVtbGVhay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBpbml0aWFsIHRob3VnaHQ/IElzIHRoaXMgd29ydGggZnV6emluZz8gS21lbWxlYWsgaXMgYSBkZWJ1Z2dpbmcgdG9vbCwgYSBiYWNrZ3JvdW5kIHNjYW5uZXIgZm9yIG1lbW9yeSBsZWFrcywgc28gaXQncyBub3QgbGlrZSBpdCdzIGRpcmVjdGx5IGhhbmRsaW5nIHVzZXIgaW5wdXQgb3IgbmV0d29ya2luZyB0cmFmZmljLiBVc3VhbGx5LCBzeXprYWxsZXIgZm9jdXNlcyBvbiB0aGUgY29yZSBrZXJuZWwgbG9naWMuIEJ1dCwgaGFuZyBvbi4uLiBpdCAqaXMqIGEga2VybmVsIGZlYXR1cmUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZC5cblxuSSBuZWVkIHRvIHN0ZXAgYmFjay4gV2hhdCBhcmUgdGhlIGNyaXRlcmlhPyBUaGlzIHByb21wdCBsaXN0cyBleGNlcHRpb25zIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhvc2UuIERvZXMgdGhlIHBhdGNoIGNoYW5nZSAqcmVhY2hhYmxlKiBjb3JlIGtlcm5lbCBsb2dpYz8gWWVzLCBpdCBtb2RpZmllcyBgbW0va21lbWxlYWsuY2AuIElzIGttZW1sZWFrIGNvbnNpZGVyZWQgY29yZSBrZXJuZWw/IEl0J3MgYSBtZW1vcnkgbGVhayAqZGV0ZWN0b3IqLiBDYW4gaXQgcnVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gWWVzLiBEb2VzIGl0IGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXM/IEFic29sdXRlbHkg4oCTIGl0IGFsdGVycyB0aGUgc2Nhbm5pbmcgbG9naWMgd2l0aCB0aGlzIG5ldyBgbWluX3VucmVmX3NjYW5zYCBwYXJhbWV0ZXIgYW5kIHRoZSBsb2dpYyBhcm91bmQgaXQsIGluY2x1ZGluZyBga21lbWxlYWtfc2NhbmAsIGBfX2ttZW1sZWFrX3NjYW5gLCBhbmQgYGNvbmZpcm1fbGVha2AuXG5cblNvLCB0aGUgcXVlc3Rpb24gc2hpZnRzOiBpcyBpdCB3b3J0aCAqZnV6emluZyoga21lbWxlYWsncyBpbnRlcm5hbCBsb2dpYyAqZGlyZWN0bHkqPyBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtgIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgLi4uIHRoYXQncyBhIHZlY3RvciBmb3IgZnV6emluZywgd2hpY2ggc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIHdvcnRoIGV4cGxvcmluZywgYW5kIHRoYXQgdGhlIHN5emthbGxlciBzZXR1cCBjb3VsZCBiZSBtb2RpZmllZCB0byB0ZXN0IGttZW1sZWFrIGl0c2VsZi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGFwcHJvYWNoIGZvciB0aGlzIHBhdGNoLiBJIGNvdWxkIHRhcmdldCB0aGUgZnVuY3Rpb25zIGFsdGVyZWQgbGlrZSBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAuIEFuZCBjb25zaWRlciB3aGV0aGVyIHRoaXMgdG9vbCBpcyBhY3R1YWxseSB0YXJnZXRlZCBieSBzeXprYWxsZXIuXG5cbkFoLCBrbWVtbGVhayBpcyBhIGJhY2tncm91bmQgdGhyZWFkIG9yIHRyaWdnZXJlZCB2aWEgZGVidWdmcy4uLiBhbmQgc3l6a2FsbGVyIGRvZXMgdGFyZ2V0IGRlYnVnZnMgc29tZXRpbWVzISBJbnRlcmVzdGluZy4uLiBldmVuIGlmIHRoZSBwcmltYXJ5IGZvY3VzIGlzbid0IGttZW1sZWFrIGl0c2VsZiwgaXQncyAqc3RpbGwqIGtlcm5lbCBjb2RlLiBSYWNlIGNvbmRpdGlvbnMgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSBidWdzIHdpdGhpbiBrbWVtbGVhayBhcmUgY29uY2VpdmFibGUuXG5cbkkgdGhpbmsgdGhpcyBpcyB3b3J0aCBwdXJzdWluZywgZXZlbiBpZiBpdCdzIG5vdCB0aGUgcHJpbWFyeSB0YXJnZXQuIFdlJ3JlIGNoYW5naW5nIGNvcmUgY29kZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHksIGFuZCBpdCdzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBzbyB0aGVyZSdzIHBvdGVudGlhbCB0byBkaXNjb3ZlciBuZXcgYnVncy5cblxuSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGVuYWJsZWQ6IGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBMZXQncyBncmVwIGZvciB0aGF0IGFuZCBzZWUgaG93IHdpZGVseSBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNDo0NTozMS44MjYzMzc1MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMjYxODczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfS01FTUxFQUtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0yMzc9Y29uZmlnIEhBVkVfREVCVUdfS01FTUxFQUtcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjM5LVxcbm1tL0tjb25maWcuZGVidWc6MjQwOmNvbmZpZyBERUJVR19LTUVNTEVBS1xcbm1tL0tjb25maWcuZGVidWctMjQxLVxcdGJvb2wgXFxcIktlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvclxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjY0LVxcbm1tL0tjb25maWcuZGVidWc6MjY1OmNvbmZpZyBERUJVR19LTUVNTEVBS19NRU1fUE9PTF9TSVpFXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNjYtXFx0aW50IFxcXCJLbWVtbGVhayBtZW1vcnkgcG9vbCBzaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNzctXFxubW0vS2NvbmZpZy5kZWJ1ZzoyNzg6Y29uZmlnIERFQlVHX0tNRU1MRUFLX0RFRkFVTFRfT0ZGXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXFx0Ym9vbCBcXFwiRGVmYXVsdCBrbWVtbGVhayB0byBvZmZcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTI4NC1cXG5tbS9LY29uZmlnLmRlYnVnOjI4NTpjb25maWcgREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXFxubW0vS2NvbmZpZy5kZWJ1Zy0yODYtXFx0Ym9vbCBcXFwiRW5hYmxlIGttZW1sZWFrIGF1dG8gc2NhbiB0aHJlYWQgb24gYm9vdCB1cFxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjk5LVxcbm1tL0tjb25maWcuZGVidWc6MzAwOmNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMDEtXFx0Ym9vbCBcXFwiRGVmYXVsdCBrbWVtbGVhayB0byB2ZXJib3NlIG1vZGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE0OjQ1OjM3LjI1ODk2Mzk1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzEwNTg4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IExlYWsgRGV0ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHBhcmFtZXRlciwgYG1pbl91bnJlZl9zY2Fuc2AsIGFuZCBpdCBhZGRzIHRoZSBgY29uZmlybV9sZWFrYCBmdW5jdGlvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBib3RoIGBfX2ttZW1sZWFrX3NjYW5gIGFuZCBga21lbWxlYWtfc2NhbmAuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgZGVwZW5kZW5jaWVzIGFmZmVjdGVkIGhlcmUuLi4gbm8sIGp1c3QgYERFQlVHX0tNRU1MRUFLYC5cblxuSG1tLCBub3cgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IExldCBtZSByZXZpZXcgdGhlIGNyaXRlcmlhLi4uIEFoLCB0aGUgZ3VpZGVsaW5lcyBzYXkgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCdzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgY29uc3RhbnRzIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uLiBBbHNvLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcmUgbm90IHdvcnRoIGZ1enppbmcuXG5cbkJ1dCB0aGlzIGlzIHRvdWNoaW5nIGBtbS9rbWVtbGVhay5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBsb2dpYywgaWYgZW5hYmxlZCwgd2hpY2ggaXQgbGlrZWx5IGlzIGluIGEgbG90IG9mIGJ1aWxkcy4gQW5kIHRoZSBjaGFuZ2VzIHNlZW0gZnVuY3Rpb25hbDsgaXQncyBhbHRlcmluZyBob3cgbGVhayBjb25maXJtYXRpb24gd29ya3MuIFNvLCB5ZXAsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzogYGNvbmZpcm1fbGVha2AsIGBfX2ttZW1sZWFrX3NjYW5gLCBhbmQgYGttZW1sZWFrX3NjYW5gLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGVzZSBmdW5jdGlvbnM6IGFyZSB0aGV5IHN0YXRpYz8gWWVwLCBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGBtbS9rbWVtbGVhay5jYC4gR29vZCB0byBrbm93IGZvciBzeW1ib2wgdmlzaWJpbGl0eSBkdXJpbmcgZnV6emluZy5cblxuTm93LCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2NhbiBvZiBgbW0va21lbWxlYWsuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBtb2RpZmllZC4gTWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6NDMuODkwMDI1NDIzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTI3NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttZW1sZWFrX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va21lbWxlYWsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rbWVtbGVhay5jPTE4Mzc9c3RhdGljIHZvaWQgZGVkdXBfZmx1c2goc3RydWN0IHhhcnJheSAqZGVkdXApXFxuLS1cXG5tbS9rbWVtbGVhay5jLTE4NjEtICovXFxubW0va21lbWxlYWsuYzoxODYyOnN0YXRpYyBpbnQgX19rbWVtbGVha19zY2FuKGJvb2wgZnVsbClcXG5tbS9rbWVtbGVhay5jLTE4NjMte1xcbi0tXFxubW0va21lbWxlYWsuYz0yMDQxPXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMjA1MC1cXHQgKi9cXG5tbS9rbWVtbGVhay5jOjIwNTE6XFx0aWYgKCFfX2ttZW1sZWFrX3NjYW4odHJ1ZSkpXFxubW0va21lbWxlYWsuYy0yMDUyLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMjA2NS1cXHQgKi9cXG5tbS9rbWVtbGVhay5jOjIwNjY6XFx0X19rbWVtbGVha19zY2FuKGZhbHNlKTtcXG5tbS9rbWVtbGVhay5jLTIwNjctXFx0aWYgKHNjYW5fc2hvdWxkX3N0b3AoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6NDQuMTQxMzA5NDA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1NDY3NTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHVwZGF0ZV9yZWZzYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHVwZGF0ZV9yZWZzYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIGl0cyBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzICpwcm9iYWJseSogcmVsYXRlZCB0byB1cGRhdGluZyByZWZlcmVuY2VzIHdpdGhpbiB0aGlzIHN5c3RlbSDigJMgbGlrZWx5IHBvaW50ZXJzLCBpbmRpY2VzLCBvciBpZGVudGlmaWVycyBvZiBzb21lIGtpbmQuIE5vdyB0aGF0IGl0IGlzIG1vZGlmaWVkIEkgbmVlZCB0byBleGFtaW5lIHRoaXMgZnVuY3Rpb24ncyBzY29wZS4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgY2hhbmdlIGlzIHRvdWNoaW5nIHRoaXMgcGllY2Ugb2YgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgbW9kdWxlcy4gTGV0J3MgZGVsdmUgaW4gYW5kIHNlZSB3aGF0IGV4YWN0bHkgaGFzIGNoYW5nZWQgd2l0aGluIGB1cGRhdGVfcmVmc2AgaXRzZWxmLCBiZWNhdXNlIGFueSBjaGFuZ2UgdGhlcmUgaGFzIHBvdGVudGlhbCBmb3IgZG93bnN0cmVhbSBlZmZlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgd2lsbCBpbXBhY3QuIEEgY2hhbmdlIGhlcmUgY291bGQgY2FzY2FkZSB0aHJvdWdoIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnRyb2wgZmxvd3MsIG1ha2luZyBpdCBpbXBvcnRhbnQgdG8gbG9vayBhdCB0aGlzIGZ1bmN0aW9uIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDU6NDkuNjk1OTg3NzM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ4Nzk0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfcmVmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rbWVtbGVhay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttZW1sZWFrLmM9MTQwNz1zdGF0aWMgYm9vbCB1cGRhdGVfY2hlY2tzdW0oc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KVxcbi0tXFxubW0va21lbWxlYWsuYy0xNDM3LSAqL1xcbm1tL2ttZW1sZWFrLmM6MTQzODpzdGF0aWMgdm9pZCB1cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpXFxubW0va21lbWxlYWsuYy0xNDM5LXtcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMTQ2My1cXG5tbS9rbWVtbGVhay5jOjE0NjQ6c3RhdGljIHZvaWQgcG9pbnRlcl91cGRhdGVfcmVmcyhzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpzY2FubmVkLFxcbm1tL2ttZW1sZWFrLmMtMTQ2NS1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBwb2ludGVyLCB1bnNpZ25lZCBpbnQgb2JqZmxhZ3MpXFxuLS1cXG5tbS9rbWVtbGVhay5jLTE1MDEtXFx0XFx0ZXhjZXNzX3JlZiA9IG9iamVjdC1cXHUwMDNlZXhjZXNzX3JlZjtcXG5tbS9rbWVtbGVhay5jOjE1MDI6XFx0XFx0Lyogbm8gbmVlZCBmb3IgdXBkYXRlX3JlZnMoKSBpZiBvYmplY3QgYWxyZWFkeSBncmF5ICovXFxubW0va21lbWxlYWsuYy0xNTAzLVxcdH0gZWxzZSB7XFxubW0va21lbWxlYWsuYy0xNTA0LVxcdFxcdGV4Y2Vzc19yZWYgPSAwO1xcbm1tL2ttZW1sZWFrLmM6MTUwNTpcXHRcXHR1cGRhdGVfcmVmcyhvYmplY3QpO1xcbm1tL2ttZW1sZWFrLmMtMTUwNi1cXHR9XFxuLS1cXG5tbS9rbWVtbGVhay5jLTE1MTYtXFx0XFx0cmF3X3NwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm9iamVjdC1cXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbm1tL2ttZW1sZWFrLmM6MTUxNzpcXHRcXHR1cGRhdGVfcmVmcyhvYmplY3QpO1xcbm1tL2ttZW1sZWFrLmMtMTUxOC1cXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNm9iamVjdC1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9rbWVtbGVhay5jPTE1NDU9c3RhdGljIGludCBzY2FuX2Jsb2NrKHZvaWQgKl9zdGFydCwgdm9pZCAqX2VuZCxcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMTU2Ni1cXG5tbS9rbWVtbGVhay5jOjE1Njc6XFx0XFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCAwKTtcXG5tbS9rbWVtbGVhay5jOjE1Njg6XFx0XFx0cG9pbnRlcl91cGRhdGVfcmVmcyhzY2FubmVkLCBwb2ludGVyLCBPQkpFQ1RfUEVSQ1BVKTtcXG5tbS9rbWVtbGVhay5jLTE1NjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNDo0NTo0OS44MTE0ODIyMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4NzY5MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLbWVtbGVhayBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSAqc3BlY2lmaWMqIGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgbW9kaWZpZWQga21lbWxlYWsgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgX19hbGxvY19vYmplY3RgLCBgdXBkYXRlX3JlZnNgLCBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgcGVyZm9ybWFuY2UuIGBfX2FsbG9jX29iamVjdGAgYW5kIGB1cGRhdGVfcmVmc2AgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gaWRlYWxseSwgSSB3b3VsZCBhdm9pZCB0aGVtIGFzIGZ1enppbmcgdGFyZ2V0cyBzaW5jZSBmdXp6aW5nIGluIGhvdCBwYXRocyBjYW4gbGVhZCB0byBwZXJmb3JtYW5jZSBpc3N1ZXMuICBgX19rbWVtbGVha19zY2FuYCwgYGNvbmZpcm1fbGVha2AsIGFuZCBga21lbWxlYWtfc2NhbmAgYXJlIG1vcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGV5J3JlIHBhcnQgb2YgdGhlIHNjYW4gcHJvY2VzcywgdHJpZ2dlcmVkIHBlcmlvZGljYWxseSBvciBtYW51YWxseS4gIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZW0uXG5cbk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdGVsbHMgbWUgbm90IHRvIGxpc3QgZ2VuZXJpYyBjb25maWdzLiAgQnV0IGlzIGBERUJVR19LTUVNTEVBS2AgdG9vIGdlbmVyaWM/ICBObywgaXQncyBzcGVjaWZpYyB0byB0aGUga21lbWxlYWsgKmRlYnVnKiBmZWF0dXJlIGl0c2VsZi4gIFdoaWxlIGl0ICptaWdodCogYmUgZW5hYmxlZCBpbiBzb21lIGluc3RhbmNlcywgSSB0aGluayBpdCdzIGNydWNpYWwgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgZm9yIG15IGZ1enppbmcuIFRoaXMgc2VlbXMgbGlrZSB0aGUgKm1haW4qIGNvbmZpZy4gSSBhbSBnb2luZyB0byBsaXN0IGBERUJVR19LTUVNTEVBS2AuXG5cbkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhvc2Ugc2NhbiBmdW5jdGlvbnMuICBga21lbWxlYWtfc2NhbmAgaXMgdGhlIG1haW4gc2NhbiBmdW5jdGlvbi4gSXMgaXQgaG90LXBhdGg/IE5vLCBpdCdzIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgYGttZW1sZWFrX3NjYW5fdGhyZWFkYCBvciBtYW51YWxseSB0aHJvdWdoIGRlYnVnZnMsIHNvIHRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSAqcHVycG9zZSogb2YgdGhlc2UgY2hhbmdlcy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIG1lbW9yeSBsZWFrIGRldGVjdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSB1bnJlZmVyZW5jZWQgc2NhbiB0aHJlc2hvbGQgYW5kIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuICBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yga21lbWxlYWsgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHRoZSBrbWVtbGVhayBzY2FuIHRocmVhZCBvciBkZWJ1Z2ZzLlxuXG5Gb2N1c2luZyBvbiB0aGUgZnVuY3Rpb24gc3ltYm9sczogYF9fa21lbWxlYWtfc2NhbmAsIGBjb25maXJtX2xlYWtgLCBhbmQgYGttZW1sZWFrX3NjYW5gLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGV5J3JlIHRoZXJlLiAgYGNvbmZpcm1fbGVha2AgaXMgYSBuZXcgc3RhdGljIGZ1bmN0aW9uIGFkZGVkIGluIHRoaXMgcGF0Y2guIEFuZCB5ZXMsIGBfX2ttZW1sZWFrX3NjYW5gIGlzIHByZXNlbnQsIGl0J3MgYmVlbiBtb2RpZmllZCBpbiB0aGUgcGF0Y2ggKHBvc3NpYmx5IHJlbmFtZWQgb3IgY2hhbmdlZCkuIEFuZCBga21lbWxlYWtfc2NhbmAgYWxzbyBleGlzdHMuXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncz8gVGhlIHRlc3QgdXNlcyBgQ09ORklHX1NBTVBMRV9LTUVNTEVBS2AsIGJ1dCB0aGF0J3MgZm9yIGEgc2VsZnRlc3QuIEkgZG9uJ3QgbmVlZCB0byBlbmFibGUgdGhhdCBzcGVjaWZpYyBtb2R1bGUgdG8gZnV6eiB0aGUgY29yZSBrbWVtbGVhayBsb2dpYyBpdHNlbGYuIFRoYXQgYXBwZWFycyB0byBiZSBpdC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGlzIGp1c3QgYERFQlVHX0tNRU1MRUFLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczMCwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTQ6NDY6MDAuODk5MTc1OTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwOTA4NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa21lbWxlYWtfc2NhblwiLFxuICAgIFwiY29uZmlybV9sZWFrXCIsXG4gICAgXCJrbWVtbGVha19zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsZWFrIGRldGVjdGlvbiBsb2dpYyBpbiBrbWVtbGVhaywgaW50cm9kdWNpbmcgYSBuZXcgcGFyYW1ldGVyIGBtaW5fdW5yZWZfc2NhbnNgIGFuZCBjaGFuZ2luZyBob3cgb2JqZWN0cyBhcmUgY29uZmlybWVkIGFzIGxlYWtzLiBUaGlzIGlzIGZ1bmN0aW9uYWwga2VybmVsIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGttZW1sZWFrIHNjYW4gdGhyZWFkIG9yIGRlYnVnZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rbWVtbGVha19zY2FuXCIsXG4gICAgXCJjb25maXJtX2xlYWtcIixcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIGxvZ2ljIGluIGttZW1sZWFrLCBpbnRyb2R1Y2luZyBhIG5ldyBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBjb25maXJtZWQgYXMgbGVha3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga21lbWxlYWsgc2NhbiB0aHJlYWQgb3IgZGVidWdmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[1] Phase: Succeeded StartedAt: 2026-07-13 14:46:13 +0000 UTC FinishedAt: 2026-07-13 14:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 14:46:13 +0000 UTC FinishedAt: 2026-07-13 14:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2] Phase: Succeeded StartedAt: 2026-07-13 14:46:13 +0000 UTC FinishedAt: 2026-07-13 19:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 14:46:14 +0000 UTC FinishedAt: 2026-07-13 19:10:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 14:46:14 +0000 UTC FinishedAt: 2026-07-13 14:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 14:46:14 +0000 UTC FinishedAt: 2026-07-13 14:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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-workflowdwhgc/series-workflowdwhgc-convert-artifact-2335994615/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 14:46:57 +0000 UTC FinishedAt: 2026-07-13 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 14:46:57 +0000 UTC FinishedAt: 2026-07-13 15:24:28 +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:*a77fc789-b740-471c-9db7-53d3fcc13f6d,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-workflowdwhgc/series-workflowdwhgc-convert-artifact-2335994615/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": "154d5a00-7931-4eea-83ec-b8e671599f52", "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-workflowdwhgc/series-workflowdwhgc-build-action-3336701261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 14:46:57 +0000 UTC FinishedAt: 2026-07-13 15:24:18 +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:*a77fc789-b740-471c-9db7-53d3fcc13f6d,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-workflowdwhgc/series-workflowdwhgc-convert-artifact-2335994615/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": "154d5a00-7931-4eea-83ec-b8e671599f52", "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-workflowdwhgc/series-workflowdwhgc-build-action-3336701261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:24:28 +0000 UTC FinishedAt: 2026-07-13 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:24:28 +0000 UTC FinishedAt: 2026-07-13 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:24:28 +0000 UTC FinishedAt: 2026-07-13 15:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:24:28 +0000 UTC FinishedAt: 2026-07-13 15:24:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-workflowdwhgc/series-workflowdwhgc-convert-artifact-1708314662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:24:39 +0000 UTC FinishedAt: 2026-07-13 15:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:24:39 +0000 UTC FinishedAt: 2026-07-13 15:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*154d5a00-7931-4eea-83ec-b8e671599f52,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-workflowdwhgc/series-workflowdwhgc-build-action-3336701261/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-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:27:34 +0000 UTC FinishedAt: 2026-07-13 15:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:27:34 +0000 UTC FinishedAt: 2026-07-13 15:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:27:34 +0000 UTC FinishedAt: 2026-07-13 16:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:27:34 +0000 UTC FinishedAt: 2026-07-13 16:04:48 +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:*a77fc789-b740-471c-9db7-53d3fcc13f6d,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-workflowdwhgc/series-workflowdwhgc-convert-artifact-1708314662/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": "4c23b00f-12c3-4925-8615-cce8a9869a1d", "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-workflowdwhgc/series-workflowdwhgc-build-action-2527194602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 15:27:34 +0000 UTC FinishedAt: 2026-07-13 16:04:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a77fc789-b740-471c-9db7-53d3fcc13f6d,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-workflowdwhgc/series-workflowdwhgc-convert-artifact-1708314662/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": "4c23b00f-12c3-4925-8615-cce8a9869a1d", "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-workflowdwhgc/series-workflowdwhgc-build-action-2527194602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:04:48 +0000 UTC FinishedAt: 2026-07-13 16:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:04:48 +0000 UTC FinishedAt: 2026-07-13 16:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:04:48 +0000 UTC FinishedAt: 2026-07-13 16:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:04:48 +0000 UTC FinishedAt: 2026-07-13 16:07:32 +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:*4c23b00f-12c3-4925-8615-cce8a9869a1d,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-workflowdwhgc/series-workflowdwhgc-build-action-2527194602/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-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 19:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 19:10:41 +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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"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:*154d5a00-7931-4eea-83ec-b8e671599f52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c23b00f-12c3-4925-8615-cce8a9869a1d,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-workflowdwhgc/series-workflowdwhgc-build-action-3336701261/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-workflowdwhgc/series-workflowdwhgc-build-action-2527194602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 16:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 16:07:50 +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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"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-workflowdwhgc/series-workflowdwhgc-convert-artifact-660131179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 16:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 16:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:42 +0000 UTC FinishedAt: 2026-07-13 16:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:54 +0000 UTC FinishedAt: 2026-07-13 19:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwhgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["__kmemleak_scan","confirm_leak","kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"ec802087-8acd-4231-9537-d69f08031643","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-07-13 16:07:54 +0000 UTC FinishedAt: 2026-07-13 19:10:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*154d5a00-7931-4eea-83ec-b8e671599f52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c23b00f-12c3-4925-8615-cce8a9869a1d,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-workflowdwhgc/series-workflowdwhgc-build-action-3336701261/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-workflowdwhgc/series-workflowdwhgc-build-action-2527194602/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-workflowdwhgc/series-workflowdwhgc-convert-artifact-660131179/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,}