Name: series-workflowf9fxk Phase: Succeeded StartedAt: 2026-09-04 00:06:14 +0000 UTC FinishedAt: 2026-09-04 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[0] Phase: Succeeded StartedAt: 2026-09-04 00:06:14 +0000 UTC FinishedAt: 2026-09-04 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 00:06:14 +0000 UTC FinishedAt: 2026-09-04 00:43:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "7b1a07a9-e130-4937-adc6-7baf70c401be" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_ld_imm", "do_check_insn", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfaW1tJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX2luc24mIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBieSBhZGRpbmcgYSBjaGVjayBpbiBjaGVja19sZF9pbW0oKSB0byByZWplY3QgQlBGX1BTRVVET19GVU5DIHJlZmVyZW5jZXMgdG8gc3VicHJvZyAwICh0aGUgbWFpbiBwcm9ncmFtKSwgcHJldmVudGluZyB1bnBhdGNoZWQgaW5zdHJ1Y3Rpb24gYWRkcmVzc2VzIHdoZW4gc3VicHJvZ19jbnQgaXMgMS4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1N2I3MzI4ZjE4MjZiZmNkMThjYjRmOWY4YzU2OWYzMTRmMDRjMWU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMDo0Mjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2NDAzNTY4Mzc5NTEuLjdkOGRkYjFiZWUwMGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE3MDg5LDYgJiM0MzsxNzA4OSwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2hlbiBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbiYjMzk7dCBiZSByZXdyaXR0ZW5cbiYjNDM7XHRcdCAqIHRvIGhvbGQgYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MuIEFzc3VtZSB0aGF0IG5vIHVzYWJsZSBwcm9ncmFtXG4mIzQzO1x0XHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3VicHJvZ25vID09IDApIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCBiZSB0aGUgbWFpbiBwcm9ncmFtXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xuIFx0XHRkc3RfcmVnLVx1MDAzZXN1YnByb2dubyA9IHN1YnByb2dubztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvcHNldWRvX2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcbkBAIC0wLDAgJiM0MzsxLDQ1IEBAXG4mIzQzOy8qXG4mIzQzOyAqIEJ1Z2d5IHZlcmlmaWVyIGFjY2VwdGVkIHRoZSBwcm9ncmFtIGJlbG93IHdoaWxlIG5vdCBwYXRjaGluZyBCUEZfUFNFVURPX0ZVTkNcbiYjNDM7ICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGxcbiYjNDM7ICogdG8gYSBib2d1cyBhZGRyZXNzLlxuJiM0MzsgKi9cbiYjNDM7e1xuJiM0MztcdFwmIzM0O0JQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbVwmIzM0OyxcbiYjNDM7XHQuaW5zbnMgPSB7XG4mIzQzO1x0LyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2KGludCl7MH0pOyAqL1xuJiM0MztcdEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMTAsIC00LCAwKSxcbiYjNDM7XHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMiwgQlBGX1JFR18xMCksXG4mIzQzO1x0QlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC00KSxcbiYjNDM7XHRCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0pLFxuJiM0MztcdEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMTApLFxuJiM0MztcdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzApLFxuJiM0MztcdC8qIGJwZl90aW1lcl9pbml0KHI2LCBcdTAwMjZ0aW1lcl9tYXAsIDApOyAqL1xuJiM0MztcdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLFxuJiM0MztcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18yLCAwKSxcbiYjNDM7XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksXG4mIzQzO1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9pbml0KSxcbiYjNDM7XHQvKiBicGZfdGltZXJfc2V0X2NhbGxiYWNrKHI2LCBcdTAwM2NpbnNuICMwXHUwMDNlKTsgKi9cbiYjNDM7XHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSxcbiYjNDM7XHRCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksXG4mIzQzO1x0QlBGX1JBV19JTlNOKDAsIDAsIDAsIDAsIDApLFxuJiM0MztcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfc2V0X2NhbGxiYWNrKSxcbiYjNDM7XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0QlBGX0VYSVRfSU5TTigpLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCxcbiYjNDM7XHQuZml4dXBfbWFwX3RpbWVyID0geyAzLCA5IH0sXG4mIzQzO1x0LnJlc3VsdCA9IFJFSkVDVCxcbiYjNDM7XHQuZXJyc3RyID0gXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cJiMzNDssXG4mIzQzO1x0LmZ1bmNfaW5mbyA9IHsgeyAwLCA0IC8qIG1haW5fcHJvZyAqLyB9IH0sXG4mIzQzO1x0LmZ1bmNfaW5mb19jbnQgPSAxLFxuJiM0MztcdC5idGZfc3RyaW5ncyA9IFwmIzM0O1xcMGludFxcMGN0eFxcMG1haW5fcHJvZ1wmIzM0OyxcbiYjNDM7XHQuYnRmX3R5cGVzID0ge1xuJiM0MztcdC8qIDE6IGludCAgICAgICAgICAgICovIEJURl9UWVBFX0lOVF9FTkMoMSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSxcbiYjNDM7XHQvKiAyOiB2b2lkKiAgICAgICAgICAqLyBCVEZfUFRSX0VOQygwKSxcbiYjNDM7XHQvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksXG4mIzQzO1x0XHRcdFx0QlRGX0ZVTkNfUFJPVE9fQVJHX0VOQyg1LCAyKSxcbiYjNDM7XHQvKiA0OiBtYWluX3Byb2cgICAgICAqLyBCVEZfRlVOQ19FTkMoOSwgMyksXG4mIzQzO1x0QlRGX0VORF9SQVdcbiYjNDM7XHR9XG4mIzQzO30sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19sZF9pbW0mIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYnkgYWRkaW5nIGEgY2hlY2sgaW4gY2hlY2tfbGRfaW1tKCkgdG8gcmVqZWN0IEJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2VzIHRvIHN1YnByb2cgMCAodGhlIG1haW4gcHJvZ3JhbSksIHByZXZlbnRpbmcgdW5wYXRjaGVkIGluc3RydWN0aW9uIGFkZHJlc3NlcyB3aGVuIHN1YnByb2dfY250IGlzIDEuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTdiNzMyOGYxODI2YmZjZDE4Y2I0ZjlmOGM1NjlmMzE0ZjA0YzFlOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTcwODksNiAmIzQzOzE3MDg5LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCXZlcmJvc2UoZW52LCAmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiBlbnYtJmd0O3N1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24mIzM5O3QgYmUgcmV3cml0dGVuCiYjNDM7CQkgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbQomIzQzOwkJICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHN1YnByb2dubyA9PSAwKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAogCQlkc3RfcmVnLSZndDt0eXBlID0gUFRSX1RPX0ZVTkM7CiAJCWRzdF9yZWctJmd0O3N1YnByb2dubyA9IHN1YnByb2dubzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jCkBAIC0wLDAgJiM0MzsxLDQ1IEBACiYjNDM7LyoKJiM0MzsgKiBCdWdneSB2ZXJpZmllciBhY2NlcHRlZCB0aGUgcHJvZ3JhbSBiZWxvdyB3aGlsZSBub3QgcGF0Y2hpbmcgQlBGX1BTRVVET19GVU5DCiYjNDM7ICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGwKJiM0MzsgKiB0byBhIGJvZ3VzIGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7ewomIzQzOwkmIzM0O0JQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuaW5zbnMgPSB7CiYjNDM7CS8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RpbWVyX21hcCwgJmFtcDsoaW50KXswfSk7ICovCiYjNDM7CUJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMTAsIC00LCAwKSwKJiM0MzsJQlBGX01PVjY0X1JFRyhCUEZfUkVHXzIsIEJQRl9SRUdfMTApLAomIzQzOwlCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTQpLAomIzQzOwlCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAxMCksCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzApLAomIzQzOwkvKiBicGZfdGltZXJfaW5pdChyNiwgJmFtcDt0aW1lcl9tYXAsIDApOyAqLwomIzQzOwlCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSwKJiM0MzsJQlBGX0xEX01BUF9GRChCUEZfUkVHXzIsIDApLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfaW5pdCksCiYjNDM7CS8qIGJwZl90aW1lcl9zZXRfY2FsbGJhY2socjYsICZsdDtpbnNuICMwJmd0Oyk7ICovCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLAomIzQzOwlCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksCiYjNDM7CUJQRl9SQVdfSU5TTigwLCAwLCAwLCAwLCAwKSwKJiM0MzsJQlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9zZXRfY2FsbGJhY2spLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfSwKJiM0MzsJLnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCwKJiM0MzsJLmZpeHVwX21hcF90aW1lciA9IHsgMywgOSB9LAomIzQzOwkucmVzdWx0ID0gUkVKRUNULAomIzQzOwkuZXJyc3RyID0gJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuZnVuY19pbmZvID0geyB7IDAsIDQgLyogbWFpbl9wcm9nICovIH0gfSwKJiM0MzsJLmZ1bmNfaW5mb19jbnQgPSAxLAomIzQzOwkuYnRmX3N0cmluZ3MgPSAmIzM0O1wwaW50XDBjdHhcMG1haW5fcHJvZyYjMzQ7LAomIzQzOwkuYnRmX3R5cGVzID0gewomIzQzOwkvKiAxOiBpbnQgICAgICAgICAgICAqLyBCVEZfVFlQRV9JTlRfRU5DKDEsIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksCiYjNDM7CS8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLAomIzQzOwkvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksCiYjNDM7CQkJCUJURl9GVU5DX1BST1RPX0FSR19FTkMoNSwgMiksCiYjNDM7CS8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSwKJiM0MzsJQlRGX0VORF9SQVcKJiM0MzsJfQomIzQzO30sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5IG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBCUEYgdmVyaWZpZXIgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgKSwgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4gIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBhIHJvdXRpbmUga2VybmVsIG1haW50ZW5hbmNlIGFzc2Vzc21lbnQg4oCTIGEgZGVmZW5zaXZlIG1lYXN1cmUuIFdlIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgYXR0YWNrIHN1cmZhY2Ugb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBwYXRjaCBpdHNlbGYgbG9va3MgbGlrZSB0aGlzOiBbSW5zZXJ0IHRoZSBwcm92aWRlZCBkaWZmIGhlcmUgZm9yIGNvbnRleHRdLiBJdCBzZWVtcyB0byBiZSBhZGRpbmcgYSByZXN0cmljdGlvbiB0byB0aGUgYGNoZWNrX2xkX2ltbWAgZnVuY3Rpb24gd2l0aGluIHRoZSB2ZXJpZmllci4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIHZlcmlmaWVyIGZyb20gYWNjZXB0aW5nIHdoYXQgYXBwZWFycyB0byBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgbWFpbiBwcm9ncmFtIHdoZW4gYGVudi0mZ3Q7c3VicHJvZ19jbnQgPT0gMWAuIEl0IG5vdyByZWplY3RzIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBtYWluIEJQRiBwcm9ncmFtLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGtpbmQgb2YgY2hhbmdlICpjb3VsZCogYmUgc2lnbmlmaWNhbnQuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhbnl0aGluZyB0aGF0IGFsdGVycyBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBmdW5jdGlvbiBwb2ludGVyIGludGVycHJldGF0aW9uLCB3YXJyYW50cyBhIGNsb3NlIGxvb2suIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgdGhpbmcgYW5kIGlzIGxpa2VseSBtYWtpbmcgdGhlIHZlcmlmaWVyIG1vcmUgcm9idXN0LCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdCBqdXN0IGFzc3VtZS4gIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgY2hlY2sgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hpY2ggbWlnaHQgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgY2hlY2tfbGRfaW1tYC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBncmVwYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHkgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgY291bGQgdHJpZ2dlciB0aGlzIG5ldyBjaGVjaywgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgd2F5cyB0byBieXBhc3MgaXQuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFkZGVkIGBwc2V1ZG9fZnVuYy5jYCBzZWxmdGVzdCBpcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHdoaWNoIGl0IHNlZW1zIGxpa2UgaXQgaXMpLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgYWRkcyBtb3JlIHJpZ29yb3VzIHZlcmlmaWNhdGlvbi4gVGhpcyBhZGRzIHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzA3MDpcdFx0XHRcdGJyZWFrO1xuMTcwNzE6XHRcdFx0ZGVmYXVsdDpcbjE3MDcyOlx0XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7cHNldWRvIGJ0ZiBpZDogdW5leHBlY3RlZCBkc3QgcmVnIHR5cGVcJiMzNDspO1xuMTcwNzM6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE3MDc0Olx0XHRcdH1cbjE3MDc1Olx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbjE3MDc2Olx0XHRcdHJldHVybiAwO1xuMTcwNzc6XHRcdH1cbjE3MDc4Olx0XG4xNzA3OTpcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkMpIHtcbjE3MDgwOlx0XHRcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbjE3MDgxOlx0XHRcdHUzMiBzdWJwcm9nbm8gPSBicGZfZmluZF9zdWJwcm9nKGVudixcbjE3MDgyOlx0XHRcdFx0XHRcdFx0IGVudi1cdTAwM2VpbnNuX2lkeCAmIzQzOyBpbnNuLVx1MDAzZWltbSAmIzQzOyAxKTtcbjE3MDgzOlx0XG4xNzA4NDpcdFx0XHRpZiAoIWF1eC1cdTAwM2VmdW5jX2luZm8pIHtcbjE3MDg1Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21pc3NpbmcgYnRmIGZ1bmNfaW5mb1xcblwmIzM0Oyk7XG4xNzA4NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcwODc6XHRcdFx0fVxuMTcwODg6XHRcdFx0aWYgKGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcbjE3MDg5Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXG5cJiMzNDspO1xuMTcwOTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MDkxOlx0XHRcdH1cbjE3MDkyOlx0XHRcdC8qXG4xNzA5MzpcdFx0XHQgKiBXaGVuIGVudi1cdTAwM2VzdWJwcm9nX2NudCA9PSAxIHRoaXMgaW5zdHJ1Y3Rpb24gd29uJiMzOTt0IGJlIHJld3JpdHRlblxuMTcwOTQ6XHRcdFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cbjE3MDk1Olx0XHRcdCAqIGNvbWJpbmVzIGUuZy4gbWFpbiBhbmQgdGltZXIgY2FsbGJhY2sgYW5kIGp1c3QgcmVqZWN0IGhlcmUuXG4xNzA5NjpcdFx0XHQgKi9cbjE3MDk3Olx0XHRcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xuMTcwOTg6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXG5cJiMzNDspO1xuMTcwOTk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MTAwOlx0XHRcdH1cbjE3MTAxOlx0XG4xNzEwMjpcdFx0XHRkc3RfcmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fRlVOQztcbjE3MTAzOlx0XHRcdGRzdF9yZWctXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xuMTcxMDQ6XHRcdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuMTcxMDU6XHRcdFx0cmV0dXJuIDA7XG4xNzEwNjpcdFx0fVxuMTcxMDc6XHRcbjE3MTA4Olx0XHRtYXAgPSBlbnYtXHUwMDNldXNlZF9tYXBzW2F1eC1cdTAwM2VtYXBfaW5kZXhdO1xuMTcxMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKnJlYWNoYWJsZSo/IFllcCwgdGhlIEJQRiB2ZXJpZmllciBsaXZlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoYXQgYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBzeXNjYWxsLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpOZXh0LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBteSB0aW1lIHRvIGZ1eno/IEFic29sdXRlbHkuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSAqY29yZSogY29tcG9uZW50IG9mIHRoZSBCUEYgc3Vic3lzdGVtLiBBbnkgY2hhbmdlIGhlcmXigJR2ZXJpZmljYXRpb24gbG9naWMgdHdlYWtzLCBpbnN0cnVjdGlvbiBjaGVja3MsIGhvdyB3ZSBoYW5kbGUgcHNldWRvIGZ1bmN0aW9ucywgc3VicHJvZ3JhbSBjaGVja3MsIGFsbCBvZiBpdOKAlGhhcyB0aGUgcG90ZW50aWFsIHRvIG1vZGlmeSBhY3R1YWxseSAqZXhlY3V0YWJsZSBrZXJuZWwgY29kZSouIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbmQsIHRoZSBzdGFuZGFyZCBhcHByb2FjaCBvZiB1c2luZyBzeXprYWxsZXIgd2l0aCBCUEYgc3lzY2FsbHMgaXMga25vd24gdG8gYmUgZWZmZWN0aXZlLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIFNvLCB5ZWFoLCBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBmb3IgQlBGIGFuZCB0aGUgQlBGIHN5c2NhbGwgaXRzZWxmLiBUaW1lIHRvIHBva2UgYXJvdW5kIGBpbml0L0tjb25maWdgLCBvciBtYXliZSBga2VybmVsL2JwZi9LY29uZmlnYCwgb3IgcGVyaGFwcyBga2VybmVsL2JwZi9NYWtlZmlsZWAsIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDEzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHNtX3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQxNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsc21fdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02ND1zdGF0aWMgREVGSU5FX01VVEVYKHVwZGF0ZV9tdXRleCk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY5OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MC19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NTk0OT1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTU5NjUtXG5rZXJuZWwvYnBmL2J0Zi5jOjU5NjY6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL2J0Zi5jLTU5NjctXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2Vcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5MjM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19kZXZfcHJvZ19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI1LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTI2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX2Rldl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MjctXHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBjZ3JvdXBfZGV2X2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNDc4PXN0YXRpYyB1MzIgc3lzY3RsX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0MS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU0Mjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zeXNjdGxfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQzLVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gc3lzY3RsX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNzU2PXN0YXRpYyBpbnQgY2dfc29ja29wdF9nZXRfcHJvbG9ndWUoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zixcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjQtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NjU6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja29wdF92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjYtXHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBjZ19zb2Nrb3B0X2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03NDE9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQzLVx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2dzID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ0Olx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKm9wcyA9IGVudi1cdTAwM2VvcHM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0NS1cdGludCBpLCBjbnQsIHNpemUsIGN0eF9maWVsZF9zaXplLCByZXQsIGRlbHRhID0gMCwgZXBpbG9ndWVfY250ID0gMDtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNS0vKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzY6ICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLVx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzctICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY2Mjg9c3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2NDU6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N5c2NhbGxfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0Ni1cdC5nZXRfZnVuY19wcm90byAgPSBzeXNjYWxsX3Byb2dfZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTk5Mj1fX2JwZl9rZnVuYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmJwZl9pdGVyX3Rhc2tfdm1hX25leHQoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTAtXHQvKlxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDExOlx0ICogVGhlIHZlcmlmaWVyIG9ubHkgdHJ1c3RzIHZtX21tIGFuZCB2bV9maWxlIChzZWVcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMi1cdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTctLyogZHVtbXkgX29wcy4gVGhlIHZlcmlmaWVyIHdpbGwgb3BlcmF0ZSBvbiB0YXJnZXQgcHJvZ3JhbSYjMzk7cyBvcHMuICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfZXh0ZW5zaW9uX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE5LX07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MS0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSkgXFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjpcdFtfaWRdID0gXHUwMDI2IF9uYW1lICMjIF92ZXJpZmllcl9vcHMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDMtI2RlZmluZSBCUEZfTUFQX1RZUEUoX2lkLCBfb3BzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjMxPWVudW0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjQyLSAqIEZvciB0cmFkaXRpb25hbCBQVFJfVE9fTUFQX1ZBTFVFIG9yIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MsIHRoZSB2ZXJpZmllclxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyNDM6ICogY2xlYXJzIHJlZy1cdTAwM2VpZCBhZnRlciB2YWx1ZV9vcl9udWxsLVx1MDAzZXZhbHVlIHRyYW5zaXRpb24sIHNpbmNlIHRoZSB2ZXJpZmllciBvbmx5XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI0NC0gKiBjYXJlcyBhYm91dCB0aGUgcmFuZ2Ugb2YgYWNjZXNzIHRvIHZhbGlkIG1hcCB2YWx1ZSBwb2ludGVyIGFuZCBkb2VzbiYjMzk7dCBjYXJlXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NDM4PXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxMi1cdFx0XHRcdGVudiwgXCYjMzQ7VGhpcyBvcGVyYXRpb24gc3VidHJhY3RzIHBvaW50ZXIgcmVnaXN0ZXIgUiVkIGZyb20gc2NhbGFyIHJlZ2lzdGVyIFIlZC4gXCYjMzQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2MTM6XHRcdFx0XHRcJiMzNDtUaGUgdmVyaWZpZXIgb25seSB0cmFja3MgcG9pbnRlci1taW51cy1zY2FsYXIgYXJpdGhtZXRpYyBmb3IgYWxsb3dlZCBwb2ludGVyIHR5cGVzLlwmIzM0Oyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxNC1cdFx0XHRcdHB0cl9yZWdubywgZHN0KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc1MzA9Ym9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NTk1LSAqXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc1OTY6ICogLSBpZiBzbywgYW5kIGlmIHZlcmlmaWVyIG9yIGN1cnJlbnQgSklUIGlubGluZXMgdGhlIGNhbGwgdG8gdGhlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc1OTctICogICBicGZfZmFzdGNhbGwgZnVuY3Rpb24gKGUuZy4gYSBoZWxwZXIgY2FsbCksIGtlcm5lbCByZW1vdmVzIHVubmVjZXNzYXJ5XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY5PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODYtXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODc6XHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4OC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMjA9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzU5LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM2MDpcdFx0ZW52LVx1MDAzZW9wcyA9IGJwZl92ZXJpZmllcl9vcHNbdGd0X3Byb2ctXHUwMDNldHlwZV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjEtXHRcdHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSB0Z3RfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5OTM9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDAzLVx0Lyogbm8gcHJvZ3JhbSBpcyB2YWxpZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDA0Olx0aWYgKEFSUkFZX1NJWkUoYnBmX3ZlcmlmaWVyX29wcykgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE1LVx0ZW52LVx1MDAzZXByb2cgPSAqcHJvZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTAxNjpcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW2Vudi1cdTAwM2Vwcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE3LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTAyNTpcdC8qIHVzZXIgY291bGQgaGF2ZSByZXF1ZXN0ZWQgdmVyYm9zZSB2ZXJpZmllciBvdXRwdXRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNi1cdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIGJlZ2luIGJ5IGNoZWNraW5nIGBpbml0L0tjb25maWdgIOKAkyBpdCBvZnRlbiBob2xkcyBmdW5kYW1lbnRhbCBzZXR0aW5ncyByZWxhdGVkIHRvIGtlcm5lbCBmZWF0dXJlcy4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCB0aGUgbmV4dCBsb2dpY2FsIGxvY2F0aW9uIHdvdWxkIGJlIHRoZSBjb3JlIEJQRiBpbXBsZW1lbnRhdGlvbiBkaXJlY3RvcnkgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYmIzM5O3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gdGhvc2UgdHdvIHBsYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjgxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkZpbmRpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzbiYjMzk7dCB1c3VhbGx5IHNvbWV0aGluZyBJJiMzOTtkIGhhdmUgdG8gZG8gZnJvbSBtZW1vcnksIGJ1dCBJIGhhdmUgYSBodW5jaCBpdCBpcyBsaW5rZWQgdG8gc29tZXRoaW5nIHNwZWNpZmljIGFuZCBJJiMzOTttIGRyYXdpbmcgYSBibGFuay4gVGhlcmVmb3JlLCB0aW1lIHRvIHN5c3RlbWF0aWNhbGx5IGxvY2F0ZSBpdC4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBjb25maWd1cmVkLCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBldmVuIGlmIGl0JiMzOTtzIGRlcHJlY2F0ZWQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJIGhhdmUgdG8gZG8uIFRoZSBiZXN0IHdheSB0byBnZXQgYSBmdWxsIHBpY3R1cmUgaXMgdG8gc2VhcmNoIGFjcm9zcyAqYWxsKiB0aGUgS2NvbmZpZyBmaWxlcy4gQSBjcm9zcy1yZWZlcmVuY2UgaXMgbGlrZWx5IHRvIGhpZ2hsaWdodCBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG9zc2libGUgYnVpbGQgZmxhZ3MgdGhhdCBzdXJyb3VuZCB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkmIzM5O3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJiMzOTttIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcbiAgMjE6XHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuICAyMjpcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG4gIDIzOlx0XHRib29sXG4gIDI0Olx0XG4gIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBSZWxhdGlvbnNoaXBzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpczsgaXQgc2VlbXMgd2UgYXJlIGRlYWxpbmcgd2l0aCBgQlBGX1NZU0NBTExgIGluIHRoZSBjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY2hlY2tfbGRfaW1tYCBpbnRlcmFjdHMgd2l0aCBpdC4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIGlzIGBjaGVja19sZF9pbW1gIHN0YXRpYywgbm9uLXN0YXRpYywgb3IgaXMgaXQgY2FsbGVkIGJ5IHNvbWV0aGluZyBlbHNlPyBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgbGlua3MgdG9nZXRoZXIgYW5kIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBzdGFydCBieSBmaWd1cmluZyBvdXQgaXRzIHNjb3BlIGFuZCBzZWUgd2hvIGlzIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2xkX2ltbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3ODc9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzAyNi0vKiB2ZXJpZnkgQlBGX0xEX0lNTTY0IGluc3RydWN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMjc6c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDI4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwODc9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE4Mi1cdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTgzOlx0XHRcdGVyciA9IGNoZWNrX2xkX2ltbShlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTg0LVx0XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBDb250cm9sIEZsb3cqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBjaGVja19sZF9pbW1gIGFuZCBgZG9fY2hlY2tfaW5zbmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoZXJlIGBjaGVja19sZF9pbW1gLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGlzIHVzZWQuIElzIGl0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkb2VzIGl0IGV4aXN0IGFzIGEgZGlzY3JldGUgc3ltYm9sPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGtleS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZXhhbWluZSB0aGUgY2FsbHMgdG8gYGJwZl9jaGVja2AsIGBkb19jaGVja2AsIG9yIGBkb19jaGVja19pbnNuYCB0b28uIFNlZWluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgQlBGIHZlcmlmaWVyIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19jaGVja1xcKHxkb19jaGVja19pbnNuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xODAyOT1zdGF0aWMgaW50IGNoZWNrX2luZGlyZWN0X2p1bXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA4Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA4NzpzdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE5Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODE5NzpzdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxOTgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODM0Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODM0NzpcdFx0ZXJyID0gZG9fY2hlY2tfaW5zbihlbnYsIFx1MDAyNmRvX3ByaW50X3N0YXRlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODM0OC1cdFx0aWYgKGVycm9yX3JlY292ZXJhYmxlX3dpdGhfbm9zcGVjKGVycikgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZXNwZWN1bGF0aXZlKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Mjg0PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQyNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQyODpcdHJldCA9IGRvX2NoZWNrKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0Mjktb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc4NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIEluc3RydWN0aW9uIFZhbGlkYXRpb24gV29ya2Zsb3cqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGluc3RydWN0aW9uIHZhbGlkYXRpb24gcHJvY2VzcyBoZXJlLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBzZXQgb2YgY29yZSBjaGVja3Mgb3IgZnVuY3Rpb25zIHdlJiMzOTtyZSB1c2luZzogYGNoZWNrX2xkX2ltbWAsIGBkb19jaGVja19pbnNuYCwgYGRvX2NoZWNrX2NvbW1vbmAsIGFuZCwgY3J1Y2lhbGx5LCBgYnBmX2NoZWNrYC4gSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIE15IG5leHQgc3RlcCBoYXMgdG8gYmUgZXhhbWluaW5nIHRoZSBjYWxsIGNoYWluIG9mIGBicGZfY2hlY2tgLiBVbmRlcnN0YW5kaW5nIHdoYXQgY2FsbHMgaW50byB0aGlzIGZ1bmN0aW9uIGlzIGtleS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQsIGFuZCBieSB0cmFjaW5nIGl0cyBjYWxsZXJzIEkgY2FuIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hlcmUgYW5kIGhvdyB0aGUgaW5zdHJ1Y3Rpb24gdmFsaWRhdGlvbiBvY2N1cnMuIEl0IHNlZW1zIGxpa2UgYSBjbGFzc2ljIGJvdHRvbS11cCBhbmFseXNpcyB3aWxsIGJlIGhlbHBmdWwgaW4gdGhpcyBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVja1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0xMjg9cmV1c2VzIHRoZSBleGlzdGluZyBgYGZkX2FycmF5YGA6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM0LSAgIHNldCBzbyB0aGUga2VybmVsIGtub3dzIHRoZSBhcnJheSYjMzk7cyBsZW5ndGguXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdDoxMzU6Iy4gU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBydW5zIGluc2lkZSB0aGUgdmVyaWZpZXIgKGBgYnBmX2NoZWNrKClgYCksIG9uY2UgaXRcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNi0gICBoYXMgcmVzb2x2ZWQgdGhlIGBgZmRfYXJyYXlgYCBlbnRyaWVzIGludG8gdGhlIHByb2dyYW0mIzM5O3MgYGB1c2VkX21hcHNgYC4gVGhlXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q9MjMwPVRoaXMgaG9vayBnYXRlcyBhZG1pc3Npb24gKipmb3IgZXZlcnkgbG9hZCoqLCBmcm9tIGEgc2luZ2xlIGNhbGwgc2l0ZSBpbnNpZGUgdGhlXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdDoyMzE6dmVyaWZpZXIgKGBgYnBmX2NoZWNrKClgYCksIGJlZm9yZSB0aGUgbWFpbiB2ZXJpZmljYXRpb24gd29yay4gSXQgcnVucyBhZnRlciB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTIzMi1vcHRpb25hbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBzbyB0aGUgdmVyZGljdCBhbmQga2V5cmluZyBmaWVsZHMgYXJlIGZpbmFsIC0gdGhlXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zMDUxPXN0cnVjdCBicGZfbG9nX2F0dHI7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwNTI6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipmcCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUzLVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTA1PXN0cnVjdCBicGZfZmRfYXJyYXkge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTEzLS8qIHNpbmdsZSBjb250YWluZXIgZm9yIGFsbCBzdHJ1Y3RzXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjkxNDogKiBvbmUgdmVyaWZpZXJfZW52IHBlciBicGZfY2hlY2soKSBjYWxsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTkxNS0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE3MDA9aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTcwMi1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTcwMzovKiBGdW5jdGlvbnMgaW4gZml4dXBzLmMsIGNhbGxlZCBmcm9tIGJwZl9jaGVjaygpICovXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE3MDQtaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTcxNz1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC90Y3AuaC03MzAtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTMyLVx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxMzM6XHRlcnIgPSBicGZfY2hlY2soXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1Mz1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODY3LS8qXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4Njg6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NjktICogb25jZSB0aGUgcHJvZ3JhbSYjMzk7cyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NzY9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkzOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTk0LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDA3LVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDg6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMDktXHQgKi9cbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjYzPXN0YXRpYyBpbnQgY29va2llX3RjcF9yZXFza19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzAxLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEYpXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzAyOnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMy17XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI1LVx0aWYgKGNvb2tpZV9icGZfb2soc2tiKSkge1xubmV0L2lwdjQvc3luY29va2llcy5jOjQyNjpcdFx0cmVxID0gY29va2llX2JwZl9jaGVjayhzaywgc2tiKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjctXHR9IGVsc2Uge1xuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE5Mi1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTk0LVx0fSBlbHNlIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zaWduZWRfbG9hZGVyLmM9NTI3PXN0YXRpYyB2b2lkIHNpZ25hdHVyZV9mYWlsdXJlX2xvZ3Modm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zaWduZWRfbG9hZGVyLmMtNTM2LVx0XHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2lnbmVkX2xvYWRlci5jOjUzNzpcdFx0ICogU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBub3cgcnVucyBpbnNpZGUgYnBmX2NoZWNrKCksIHNvIGFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NpZ25lZF9sb2FkZXIuYy01MzgtXHRcdCAqIGZhaWx1cmUgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgdmVyaWZpZXIgbG9nLiBBIHByZXNlbnQtYnV0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkwNAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGlzIHdpdGhpbiB0aGUgYGNoZWNrX2xkX2ltbWAgZnVuY3Rpb24uIEdvb2QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIEkgcXVpY2tseSBjb25maXJtIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIOKAkyBgc3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKWAg4oCTIGFuZCB0aGF0IGl0IHJlc2lkZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgYWxzbyBub3RlIHRoYXQgdGhlIHN1cnJvdW5kaW5nIHZlcmlmaWNhdGlvbiBmdW5jdGlvbnMsIGBkb19jaGVja19pbnNuYCwgYGRvX2NoZWNrYCwgYW5kIGBicGZfY2hlY2tgLCBhcmUgYWxsIGluIHRoZSBzYW1lIGZpbGUuIFRoYXQmIzM5O3MgZ29vZCBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlOyBleGNlbGxlbnQsIG1lYW5pbmcgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciB0YXJnZXRlZCBmdXp6aW5nLiBUaGUgcmVhc29uaW5nIGNvbmZpcm1zIHRoYXQgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSBgQlBGX1BTRVVET19GVU5DYCByZWZlcmVuY2VzIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgdW5wYXRjaGVkIGNvZGUgd2l0aGluIHRoZSBtYWluIHByb2dyYW0gd2hlbiBvbmx5IG9uZSBzdWJwcm9ncmFtIGV4aXN0cyAoc3VicHJvZyAwKS4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGNvZGUsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAg4oCTIGEgY3JpdGljYWwgc3lzY2FsbC4gVGhpcyB0ZWxscyBtZSB0aGUgbG9naWMgaXMgc291bmQgYW5kIHRoZSBleHBvc3VyZSBpcyByZWxldmFudC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgY2hlY2tfbGRfaW1tYCwgYGRvX2NoZWNrX2luc25gLCBhbmQgYGJwZl9jaGVja2AgYXJlIHRoZSBrZXkgYXJlYXMgZm9yIGRlZXBlciBzY3J1dGlueS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYWxzbyBwcm92aWRlZCBhcyBgQlBGX1NZU0NBTExgIOKAkyB3aGljaCBJIGFscmVhZHkga25ldyBlbmFibGVzIGB2ZXJpZmllci5vYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19CUEZgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIGFuZCB5ZXMsIGl0IGlzLiBBbGwgZ29vZCB0aGVyZS4KCkkgYWxzbyBzZWUgdGhhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBpcyB0aGUgb25seSBrZXJuZWwgZmlsZSBjaGFuZ2VkLCBwbHVzIHRoZSB1c2Vyc3BhY2UgdGVzdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNgIGhhcyBiZWVuIGFkZGVkLiBTbyBpdCYjMzk7cyBmYWlybHkgY29udGFpbmVkLgoKQWxyaWdodCwgZXZlcnl0aGluZyBsb29rcyBjbGVhbiwgY29uY2lzZSwgYW5kIHdlbGwtZGVmaW5lZC4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfaW1tJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX2luc24mIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19sZF9pbW0mIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYnkgYWRkaW5nIGEgY2hlY2sgaW4gY2hlY2tfbGRfaW1tKCkgdG8gcmVqZWN0IEJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2VzIHRvIHN1YnByb2cgMCAodGhlIG1haW4gcHJvZ3JhbSksIHByZXZlbnRpbmcgdW5wYXRjaGVkIGluc3RydWN0aW9uIGFkZHJlc3NlcyB3aGVuIHN1YnByb2dfY250IGlzIDEuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTdiNzMyOGYxODI2YmZjZDE4Y2I0ZjlmOGM1NjlmMzE0ZjA0YzFlOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTcwODksNiAmIzQzOzE3MDg5LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCXZlcmJvc2UoZW52LCAmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiBlbnYtJmd0O3N1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24mIzM5O3QgYmUgcmV3cml0dGVuCiYjNDM7CQkgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbQomIzQzOwkJICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHN1YnByb2dubyA9PSAwKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAogCQlkc3RfcmVnLSZndDt0eXBlID0gUFRSX1RPX0ZVTkM7CiAJCWRzdF9yZWctJmd0O3N1YnByb2dubyA9IHN1YnByb2dubzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jCkBAIC0wLDAgJiM0MzsxLDQ1IEBACiYjNDM7LyoKJiM0MzsgKiBCdWdneSB2ZXJpZmllciBhY2NlcHRlZCB0aGUgcHJvZ3JhbSBiZWxvdyB3aGlsZSBub3QgcGF0Y2hpbmcgQlBGX1BTRVVET19GVU5DCiYjNDM7ICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGwKJiM0MzsgKiB0byBhIGJvZ3VzIGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7ewomIzQzOwkmIzM0O0JQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuaW5zbnMgPSB7CiYjNDM7CS8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RpbWVyX21hcCwgJmFtcDsoaW50KXswfSk7ICovCiYjNDM7CUJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMTAsIC00LCAwKSwKJiM0MzsJQlBGX01PVjY0X1JFRyhCUEZfUkVHXzIsIEJQRl9SRUdfMTApLAomIzQzOwlCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTQpLAomIzQzOwlCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAxMCksCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzApLAomIzQzOwkvKiBicGZfdGltZXJfaW5pdChyNiwgJmFtcDt0aW1lcl9tYXAsIDApOyAqLwomIzQzOwlCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSwKJiM0MzsJQlBGX0xEX01BUF9GRChCUEZfUkVHXzIsIDApLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfaW5pdCksCiYjNDM7CS8qIGJwZl90aW1lcl9zZXRfY2FsbGJhY2socjYsICZsdDtpbnNuICMwJmd0Oyk7ICovCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLAomIzQzOwlCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksCiYjNDM7CUJQRl9SQVdfSU5TTigwLCAwLCAwLCAwLCAwKSwKJiM0MzsJQlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9zZXRfY2FsbGJhY2spLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfSwKJiM0MzsJLnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCwKJiM0MzsJLmZpeHVwX21hcF90aW1lciA9IHsgMywgOSB9LAomIzQzOwkucmVzdWx0ID0gUkVKRUNULAomIzQzOwkuZXJyc3RyID0gJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuZnVuY19pbmZvID0geyB7IDAsIDQgLyogbWFpbl9wcm9nICovIH0gfSwKJiM0MzsJLmZ1bmNfaW5mb19jbnQgPSAxLAomIzQzOwkuYnRmX3N0cmluZ3MgPSAmIzM0O1wwaW50XDBjdHhcMG1haW5fcHJvZyYjMzQ7LAomIzQzOwkuYnRmX3R5cGVzID0gewomIzQzOwkvKiAxOiBpbnQgICAgICAgICAgICAqLyBCVEZfVFlQRV9JTlRfRU5DKDEsIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksCiYjNDM7CS8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLAomIzQzOwkvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksCiYjNDM7CQkJCUJURl9GVU5DX1BST1RPX0FSR19FTkMoNSwgMiksCiYjNDM7CS8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSwKJiM0MzsJQlRGX0VORF9SQVcKJiM0MzsJfQomIzQzO30sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgQW5hbHlzaXMgb2YgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LiBMb29raW5nIGF0IHRoZSBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjaGVja19sZF9pbW1gIGZ1bmN0aW9uLCBJIHNlZSBhIG5ldyBjaGVjazoKCmBgYGMKJiM0MzsJCS8qCiYjNDM7CQkgKiBXaGVuIGVudi0mZ3Q7c3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbiYjMzk7dCBiZSByZXdyaXR0ZW4KJiM0MzsJCSAqIHRvIGhvbGQgYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MuIEFzc3VtZSB0aGF0IG5vIHVzYWJsZSBwcm9ncmFtCiYjNDM7CQkgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3VicHJvZ25vID09IDApIHsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQpgYGAKCkVzc2VudGlhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSBiZWluZyB0aGUgJiMzNDttYWluJiMzNDsgcHJvZ3JhbSB3aGVuIGBzdWJwcm9nX2NudGAgaXMgMSwgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC4gVGhpcyBpcyBwcm9iYWJseSB0byBwcmV2ZW50IHNvbWUga2luZCBvZiB3ZWlyZCBpbnRlcmFjdGlvbiB0aGF0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgZnJvbSBhIHByb2dyYW1taW5nIGRlc2lnbiBwZXJzcGVjdGl2ZTsgaXQgc291bmRzIGxpa2UgdGhleSYjMzk7cmUgZXhwbGljaXRseSBkaXNhbGxvd2luZyBhIHNwZWNpZmljIHNjZW5hcmlvLgoKQW5kIHRoZXJlJiMzOTtzIGEgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jYCB0byBzdXBwb3J0IHRoaXMgY2hhbmdlLgoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYXJvdW5kIGBjaGVja19sZF9pbW1gLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGVjayB3aXRoaW4gdGhlIGJyb2FkZXIgdmVyaWZpZXIuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBpbW1lZGlhdGUgbG9hZHMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhlIG92ZXJhbGwgcHJvZ3JhbSBzdHJ1Y3R1cmUuIFRoaXMgbWlnaHQgcmV2ZWFsIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IG5ldyBjb2RlcGF0aHMgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgY2hlY2sgaXMgKmRvaW5nKiwgYW5kIGhvdyBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGJlaGF2ZSwgYXMgd2VsbCBhcyBpZiBpdCB3b3VsZCB0cmlnZ2VyIGFueSBpc3N1ZXMgaW4gYSBtb3JlIGNvbXBsZXggc2NlbmFyaW8gd2l0aCBLTVNBTiBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MDcwOlx0XHRcdFx0YnJlYWs7XG4xNzA3MTpcdFx0XHRkZWZhdWx0OlxuMTcwNzI6XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtwc2V1ZG8gYnRmIGlkOiB1bmV4cGVjdGVkIGRzdCByZWcgdHlwZVwmIzM0Oyk7XG4xNzA3MzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTcwNzQ6XHRcdFx0fVxuMTcwNzU6XHRcdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuMTcwNzY6XHRcdFx0cmV0dXJuIDA7XG4xNzA3NzpcdFx0fVxuMTcwNzg6XHRcbjE3MDc5Olx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fRlVOQykge1xuMTcwODA6XHRcdFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4O1xuMTcwODE6XHRcdFx0dTMyIHN1YnByb2dubyA9IGJwZl9maW5kX3N1YnByb2coZW52LFxuMTcwODI6XHRcdFx0XHRcdFx0XHQgZW52LVx1MDAzZWluc25faWR4ICYjNDM7IGluc24tXHUwMDNlaW1tICYjNDM7IDEpO1xuMTcwODM6XHRcbjE3MDg0Olx0XHRcdGlmICghYXV4LVx1MDAzZWZ1bmNfaW5mbykge1xuMTcwODU6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWlzc2luZyBidGYgZnVuY19pbmZvXFxuXCYjMzQ7KTtcbjE3MDg2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzA4NzpcdFx0XHR9XG4xNzA4ODpcdFx0XHRpZiAoYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ25vXS5saW5rYWdlICE9IEJURl9GVU5DX1NUQVRJQykge1xuMTcwODk6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gbm90IHN0YXRpY1xcblwmIzM0Oyk7XG4xNzA5MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcwOTE6XHRcdFx0fVxuMTcwOTI6XHRcdFx0LypcbjE3MDkzOlx0XHRcdCAqIFdoZW4gZW52LVx1MDAzZXN1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24mIzM5O3QgYmUgcmV3cml0dGVuXG4xNzA5NDpcdFx0XHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxuMTcwOTU6XHRcdFx0ICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS5cbjE3MDk2Olx0XHRcdCAqL1xuMTcwOTc6XHRcdFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XG4xNzA5ODpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVxcblwmIzM0Oyk7XG4xNzA5OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcxMDA6XHRcdFx0fVxuMTcxMDE6XHRcbjE3MTAyOlx0XHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xuMTcxMDM6XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XG4xNzEwNDpcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4xNzEwNTpcdFx0XHRyZXR1cm4gMDtcbjE3MTA2Olx0XHR9XG4xNzEwNzpcdFxuMTcxMDg6XHRcdG1hcCA9IGVudi1cdTAwM2V1c2VkX21hcHNbYXV4LVx1MDAzZW1hcF9pbmRleF07XG4xNzEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY5CgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgcHJldHR5IGNsZWFyOiB0aGUgQlBGIHZlcmlmaWVyIHdhcyBtaXN0YWtlbmx5IGFsbG93aW5nIGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyB0byBwb2ludCB0byB0aGUgbWFpbiBwcm9ncmFtIChzdWJwcm9nIDApIHdoZW4gaXQgc2hvdWxkbiYjMzk7dCBoYXZlLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG9ubHkgdGhlIG1haW4gcHJvZ3JhbSBvciB3aGVuIHRoZSBzdWJwcm9ncmFtIG51bWJlciBpcyAwLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB0aGUgSklUIGtpY2tzIGluLCBpdCB3b3VsZG4mIzM5O3QgcmV3cml0ZSB0aGUgcHNldWRvLWZ1bmN0aW9uIHBvaW50ZXIgdG8gYSAqcmVhbCogZnVuY3Rpb24gcG9pbnRlciwgYW5kIHRoZSBwcm9ncmFtIHdvdWxkIHRyeSB0byBjYWxsIGdhcmJhZ2UuIENsYXNzaWMgY29udHJvbCBmbG93IGhpamFjaywgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW8gLSBhIGNyaXRpY2FsIGJ1Zy4KClRoZSBwcm9wb3NlZCBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXg6IGl0IGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgY2hlY2tfbGRfaW1tYCB0byBleHBsaWNpdGx5IHJlamVjdCBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIG1haW4gcHJvZ3JhbS4gU2ltcGxlLCBlbGVnYW50LCBhbmQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSByb290IGNhdXNlLiBObyBjb21wbGV4IHJld3JpdGVzLCBqdXN0IGEgc2FuaXR5IGNoZWNrIGR1cmluZyB2ZXJpZmljYXRpb24uCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY2hlY2tsaXN0LiBEb2VzIHRoaXMgcGF0Y2g6CgoxLiAgKipJbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIGZpZWxkcy9wYWRkaW5nIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZD8qKiBObywgZGVmaW5pdGVseSBub3QuIEl0JiMzOTtzIGEgdmVyaWZpY2F0aW9uIGNoYW5nZSwgbm90IGEgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLgoyLiAgKipSZWx5IG9uIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gVGhlIGBzdWJwcm9nbm9gIGlzIGEgYHUzMmAgcmV0dXJuZWQgYnkgYGJwZl9maW5kX3N1YnByb2dgLCB3aGljaCBpcyBpbml0aWFsaXplZCwgc28gdGhpcyBpc24mIzM5O3QgYSBjb25jZXJuLgozLiAgKipJbnZvbHZlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8qKiBOb3QgYXQgYWxsLiBJdCYjMzk7cyBqdXN0IGEgdmFsaWRhdGlvbiBjaGVjay4KNC4gICoqQWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8qKiBObywgdGhlIHBhdGNoIHNpbXBseSByZWplY3RzIGFuIGludmFsaWQgcHJvZ3JhbS4KClRoZSBwYXRjaCBzaW1wbHkgcmVqZWN0cyBpbnZhbGlkIEJQRiBwcm9ncmFtcyB3aXRoIGBzdWJwcm9nbm8gPT0gMGAgZHVyaW5nIEJQRiB2ZXJpZmljYXRpb24uIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgYSBidWcsIG5vdCBjcmVhdGluZyBuZXcgb25lcy4gVGhlIHByZXZpb3VzIGJ1ZyB3YXMgYSB2ZXJpZmllciBpc3N1ZSwgYW5kIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSByb290IGNhdXNlIG9mIGNvbnRyb2wgZmxvdyBoaWphY2tzLCBjcmFzaGVzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXJlJiMzOTtzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLgoKU2VlbXMgY3J5c3RhbCBjbGVhci4gTm8gS01TQU4gaW1wbGljYXRpb25zLiBOZWVkS01TQU4gc2hvdWxkIGFic29sdXRlbHkgYmUgZmFsc2UuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgS01TQU4gcmVhc29uaW5nIHN0cnVjdHVyZSwgYW5kIGl0IGFsaWducyBwZXJmZWN0bHkgd2l0aCBteSBhc3Nlc3NtZW50LiBUaGlzIHBhdGNoIGlzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyIChgY2hlY2tfbGRfaW1tYCkgdG8gcmVqZWN0IGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9ncmFtIChgc3VicHJvZ25vID09IDBgKSwgcHJldmVudGluZyBhbiBpc3N1ZSB3aGVyZSBzdWNoIHBzZXVkby1mdW5jIGluc3RydWN0aW9ucyB3ZXJlIG5vdCBwYXRjaGVkIHdpdGggYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MgYW5kIGxlZCB0byBjYWxscyB0byBib2d1cyBhZGRyZXNzZXMuIFRoaXMgaXMgYSBwdXJlIHZlcmlmaWNhdGlvbi92YWxpZGF0aW9uIGNoZWNrIHJlamVjdGluZyBpbnZhbGlkIEJQRiBieXRlY29kZS4gSXQgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyIChgY2hlY2tfbGRfaW1tYCkgdG8gcmVqZWN0IGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9ncmFtIChgc3VicHJvZ25vID09IDBgKSwgcHJldmVudGluZyBhbiBpc3N1ZSB3aGVyZSBzdWNoIHBzZXVkby1mdW5jIGluc3RydWN0aW9ucyB3ZXJlIG5vdCBwYXRjaGVkIHdpdGggYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MgYW5kIGxlZCB0byBjYWxscyB0byBib2d1cyBhZGRyZXNzZXMuIFRoaXMgaXMgYSBwdXJlIHZlcmlmaWNhdGlvbi92YWxpZGF0aW9uIGNoZWNrIHJlamVjdGluZyBpbnZhbGlkIEJQRiBieXRlY29kZS4gSXQgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDI6NDUuNTA1MjIzMDg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMzg0NzA4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9pbW1cIixcbiAgICBcImRvX2NoZWNrX2luc25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDI6NDUuNTA1MjI4MTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxMjM3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1N2I3MzI4ZjE4MjZiZmNkMThjYjRmOWY4YzU2OWYzMTRmMDRjMWU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTcwODksNiArMTcwODksMTUgQEAgc3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaGVuIGVudi1cXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbid0IGJlIHJld3JpdHRlblxcbitcXHRcXHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxcbitcXHRcXHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0ZHN0X3JlZy1cXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xcbiBcXHRcXHRkc3RfcmVnLVxcdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjYzYzVjNjdkNTFkZWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcXG5AQCAtMCwwICsxLDQ1IEBAXFxuKy8qXFxuKyAqIEJ1Z2d5IHZlcmlmaWVyIGFjY2VwdGVkIHRoZSBwcm9ncmFtIGJlbG93IHdoaWxlIG5vdCBwYXRjaGluZyBCUEZfUFNFVURPX0ZVTkNcXG4rICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGxcXG4rICogdG8gYSBib2d1cyBhZGRyZXNzLlxcbisgKi9cXG4re1xcbitcXHRcXFwiQlBGX1BTRVVET19GVU5DIHJlZmVyZW5jZSB0byB0aGUgbWFpbiBwcm9ncmFtXFxcIixcXG4rXFx0Lmluc25zID0ge1xcbitcXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRpbWVyX21hcCwgXFx1MDAyNihpbnQpezB9KTsgKi9cXG4rXFx0QlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xMCwgLTQsIDApLFxcbitcXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMiwgQlBGX1JFR18xMCksXFxuK1xcdEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtNCksXFxuK1xcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18xLCAwKSxcXG4rXFx0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0pLFxcbitcXHRCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzAsIDAsIDEwKSxcXG4rXFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfMCksXFxuK1xcdC8qIGJwZl90aW1lcl9pbml0KHI2LCBcXHUwMDI2dGltZXJfbWFwLCAwKTsgKi9cXG4rXFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfNiksXFxuK1xcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18yLCAwKSxcXG4rXFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzMsIDApLFxcbitcXHRCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3RpbWVyX2luaXQpLFxcbitcXHQvKiBicGZfdGltZXJfc2V0X2NhbGxiYWNrKHI2LCBcXHUwMDNjaW5zbiAjMFxcdTAwM2UpOyAqL1xcbitcXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSxcXG4rXFx0QlBGX1JBV19JTlNOKEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFcsIEJQRl9SRUdfMiwgQlBGX1BTRVVET19GVU5DLCAwLCAtMTUpLFxcbitcXHRCUEZfUkFXX0lOU04oMCwgMCwgMCwgMCwgMCksXFxuK1xcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfc2V0X2NhbGxiYWNrKSxcXG4rXFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxcbitcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdH0sXFxuK1xcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1RSQUNFUE9JTlQsXFxuK1xcdC5maXh1cF9tYXBfdGltZXIgPSB7IDMsIDkgfSxcXG4rXFx0LnJlc3VsdCA9IFJFSkVDVCxcXG4rXFx0LmVycnN0ciA9IFxcXCJjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVxcXCIsXFxuK1xcdC5mdW5jX2luZm8gPSB7IHsgMCwgNCAvKiBtYWluX3Byb2cgKi8gfSB9LFxcbitcXHQuZnVuY19pbmZvX2NudCA9IDEsXFxuK1xcdC5idGZfc3RyaW5ncyA9IFxcXCJcXFxcMGludFxcXFwwY3R4XFxcXDBtYWluX3Byb2dcXFwiLFxcbitcXHQuYnRmX3R5cGVzID0ge1xcbitcXHQvKiAxOiBpbnQgICAgICAgICAgICAqLyBCVEZfVFlQRV9JTlRfRU5DKDEsIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksXFxuK1xcdC8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLFxcbitcXHQvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksXFxuK1xcdFxcdFxcdFxcdEJURl9GVU5DX1BST1RPX0FSR19FTkMoNSwgMiksXFxuK1xcdC8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSxcXG4rXFx0QlRGX0VORF9SQVdcXG4rXFx0fVxcbit9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0Mjo0NS45NDYwMjcxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk3MDU4MDI0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9pbW1cIixcbiAgICBcImRvX2NoZWNrX2luc25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1N2I3MzI4ZjE4MjZiZmNkMThjYjRmOWY4YzU2OWYzMTRmMDRjMWU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMDo0Mjo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTcwODksNiArMTcwODksMTUgQEAgc3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdHZlcmJvc2UoZW52LCBcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0LypcbitcdFx0ICogV2hlbiBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbid0IGJlIHJld3JpdHRlblxuK1x0XHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxuK1x0XHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcbiBcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0ZVTkM7XG4gXHRcdGRzdF9yZWctXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42M2M1YzY3ZDUxZGVhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvcHNldWRvX2Z1bmMuY1xuQEAgLTAsMCArMSw0NSBAQFxuKy8qXG4rICogQnVnZ3kgdmVyaWZpZXIgYWNjZXB0ZWQgdGhlIHByb2dyYW0gYmVsb3cgd2hpbGUgbm90IHBhdGNoaW5nIEJQRl9QU0VVRE9fRlVOQ1xuKyAqIGxvYWQgaW5zdHJ1Y3Rpb24gdG8gY29udGFpbiBhIHJlYWwgYWRkcmVzcy4gV2hpY2ggcmVzdWx0ZWQgaW4gYSBmdW5jdGlvbiBjYWxsXG4rICogdG8gYSBib2d1cyBhZGRyZXNzLlxuKyAqL1xuK3tcbitcdFwiQlBGX1BTRVVET19GVU5DIHJlZmVyZW5jZSB0byB0aGUgbWFpbiBwcm9ncmFtXCIsXG4rXHQuaW5zbnMgPSB7XG4rXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGltZXJfbWFwLCBcdTAwMjYoaW50KXswfSk7ICovXG4rXHRCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEwLCAtNCwgMCksXG4rXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMiwgQlBGX1JFR18xMCksXG4rXHRCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTQpLFxuK1x0QlBGX0xEX01BUF9GRChCUEZfUkVHXzEsIDApLFxuK1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0pLFxuK1x0QlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAxMCksXG4rXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfNiwgQlBGX1JFR18wKSxcbitcdC8qIGJwZl90aW1lcl9pbml0KHI2LCBcdTAwMjZ0aW1lcl9tYXAsIDApOyAqL1xuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfNiksXG4rXHRCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMiwgMCksXG4rXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksXG4rXHRCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3RpbWVyX2luaXQpLFxuK1x0LyogYnBmX3RpbWVyX3NldF9jYWxsYmFjayhyNiwgXHUwMDNjaW5zbiAjMFx1MDAzZSk7ICovXG4rXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSxcbitcdEJQRl9SQVdfSU5TTihCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXLCBCUEZfUkVHXzIsIEJQRl9QU0VVRE9fRlVOQywgMCwgLTE1KSxcbitcdEJQRl9SQVdfSU5TTigwLCAwLCAwLCAwLCAwKSxcbitcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfc2V0X2NhbGxiYWNrKSxcbitcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdEJQRl9FWElUX0lOU04oKSxcbitcdH0sXG4rXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5ULFxuK1x0LmZpeHVwX21hcF90aW1lciA9IHsgMywgOSB9LFxuK1x0LnJlc3VsdCA9IFJFSkVDVCxcbitcdC5lcnJzdHIgPSBcImNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCBiZSB0aGUgbWFpbiBwcm9ncmFtXCIsXG4rXHQuZnVuY19pbmZvID0geyB7IDAsIDQgLyogbWFpbl9wcm9nICovIH0gfSxcbitcdC5mdW5jX2luZm9fY250ID0gMSxcbitcdC5idGZfc3RyaW5ncyA9IFwiXFwwaW50XFwwY3R4XFwwbWFpbl9wcm9nXCIsXG4rXHQuYnRmX3R5cGVzID0ge1xuK1x0LyogMTogaW50ICAgICAgICAgICAgKi8gQlRGX1RZUEVfSU5UX0VOQygxLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLFxuK1x0LyogMjogdm9pZCogICAgICAgICAgKi8gQlRGX1BUUl9FTkMoMCksXG4rXHQvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksXG4rXHRcdFx0XHRCVEZfRlVOQ19QUk9UT19BUkdfRU5DKDUsIDIpLFxuK1x0LyogNDogbWFpbl9wcm9nICAgICAgKi8gQlRGX0ZVTkNfRU5DKDksIDMpLFxuK1x0QlRGX0VORF9SQVdcbitcdH1cbit9LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDI6NDUuOTQ2MDI4NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQ3ODIzOTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgU3VpdGFiaWxpdHkgb2YgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIG5ldyBrZXJuZWwgcGF0Y2gsIHNwZWNpZmljYWxseSBhIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCksIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuICBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhIHJvdXRpbmUga2VybmVsIG1haW50ZW5hbmNlIGFzc2Vzc21lbnQg4oCTIGEgZGVmZW5zaXZlIG1lYXN1cmUuIFdlIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgYXR0YWNrIHN1cmZhY2Ugb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBsaWtlIHRoaXM6IFtJbnNlcnQgdGhlIHByb3ZpZGVkIGRpZmYgaGVyZSBmb3IgY29udGV4dF0uIEl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIHJlc3RyaWN0aW9uIHRvIHRoZSBgY2hlY2tfbGRfaW1tYCBmdW5jdGlvbiB3aXRoaW4gdGhlIHZlcmlmaWVyLiBFc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGFjY2VwdGluZyB3aGF0IGFwcGVhcnMgdG8gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIG1haW4gcHJvZ3JhbSB3aGVuIGBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMWAuIEl0IG5vdyByZWplY3RzIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBtYWluIEJQRiBwcm9ncmFtLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMga2luZCBvZiBjaGFuZ2UgKmNvdWxkKiBiZSBzaWduaWZpY2FudC4gVGhlIEJQRiB2ZXJpZmllciBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGFueXRoaW5nIHRoYXQgYWx0ZXJzIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIGZ1bmN0aW9uIHBvaW50ZXIgaW50ZXJwcmV0YXRpb24sIHdhcnJhbnRzIGEgY2xvc2UgbG9vay4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aGluZyBhbmQgaXMgbGlrZWx5IG1ha2luZyB0aGUgdmVyaWZpZXIgbW9yZSByb2J1c3QsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBub3QganVzdCBhc3N1bWUuICBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgbmV3IGNoZWNrIGRvZXNuJ3QgY3JlYXRlIG5ldyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hpY2ggbWlnaHQgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBjaGVja19sZF9pbW1gLiBJJ2xsIG5lZWQgdG8gdXNlIGBnaXQgZ3JlcGAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgY29udGV4dC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgY291bGQgdHJpZ2dlciB0aGlzIG5ldyBjaGVjaywgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgd2F5cyB0byBieXBhc3MgaXQuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFkZGVkIGBwc2V1ZG9fZnVuYy5jYCBzZWxmdGVzdCBpcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHdoaWNoIGl0IHNlZW1zIGxpa2UgaXQgaXMpLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgYWRkcyBtb3JlIHJpZ29yb3VzIHZlcmlmaWNhdGlvbi4gVGhpcyBhZGRzIHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzowMS40MjQyNzAwMDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcwNzE6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNzA3MjpcXHRcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHNldWRvIGJ0ZiBpZDogdW5leHBlY3RlZCBkc3QgcmVnIHR5cGVcXFwiKTtcXG4xNzA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNzA3NDpcXHRcXHRcXHR9XFxuMTcwNzU6XFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbjE3MDc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE3MDc3OlxcdFxcdH1cXG4xNzA3ODpcXHRcXG4xNzA3OTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkMpIHtcXG4xNzA4MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eDtcXG4xNzA4MTpcXHRcXHRcXHR1MzIgc3VicHJvZ25vID0gYnBmX2ZpbmRfc3VicHJvZyhlbnYsXFxuMTcwODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGVudi1cXHUwMDNlaW5zbl9pZHggKyBpbnNuLVxcdTAwM2VpbW0gKyAxKTtcXG4xNzA4MzpcXHRcXG4xNzA4NDpcXHRcXHRcXHRpZiAoIWF1eC1cXHUwMDNlZnVuY19pbmZvKSB7XFxuMTcwODU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtaXNzaW5nIGJ0ZiBmdW5jX2luZm9cXFxcblxcXCIpO1xcbjE3MDg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDg3OlxcdFxcdFxcdH1cXG4xNzA4ODpcXHRcXHRcXHRpZiAoYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcXG4xNzA4OTpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbjE3MDkwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDkxOlxcdFxcdFxcdH1cXG4xNzA5MjpcXHRcXHRcXHQvKlxcbjE3MDkzOlxcdFxcdFxcdCAqIFdoZW4gZW52LVxcdTAwM2VzdWJwcm9nX2NudCA9PSAxIHRoaXMgaW5zdHJ1Y3Rpb24gd29uJ3QgYmUgcmV3cml0dGVuXFxuMTcwOTQ6XFx0XFx0XFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cXG4xNzA5NTpcXHRcXHRcXHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxcbjE3MDk2OlxcdFxcdFxcdCAqL1xcbjE3MDk3OlxcdFxcdFxcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xcbjE3MDk4OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXFxcblxcXCIpO1xcbjE3MDk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MTAwOlxcdFxcdFxcdH1cXG4xNzEwMTpcXHRcXG4xNzEwMjpcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX0ZVTkM7XFxuMTcxMDM6XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xcbjE3MTA0OlxcdFxcdFxcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcXG4xNzEwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzEwNjpcXHRcXHR9XFxuMTcxMDc6XFx0XFxuMTcxMDg6XFx0XFx0bWFwID0gZW52LVxcdTAwM2V1c2VkX21hcHNbYXV4LVxcdTAwM2VtYXBfaW5kZXhdO1xcbjE3MTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzowMS40MjYwNzQ4MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwNjgyMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBZZXAsIHRoZSBCUEYgdmVyaWZpZXIgbGl2ZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGF0IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5OZXh0LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBteSB0aW1lIHRvIGZ1eno/IEFic29sdXRlbHkuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSAqY29yZSogY29tcG9uZW50IG9mIHRoZSBCUEYgc3Vic3lzdGVtLiBBbnkgY2hhbmdlIGhlcmXigJR2ZXJpZmljYXRpb24gbG9naWMgdHdlYWtzLCBpbnN0cnVjdGlvbiBjaGVja3MsIGhvdyB3ZSBoYW5kbGUgcHNldWRvIGZ1bmN0aW9ucywgc3VicHJvZ3JhbSBjaGVja3MsIGFsbCBvZiBpdOKAlGhhcyB0aGUgcG90ZW50aWFsIHRvIG1vZGlmeSBhY3R1YWxseSAqZXhlY3V0YWJsZSBrZXJuZWwgY29kZSouIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFuZCwgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIG9mIHVzaW5nIHN5emthbGxlciB3aXRoIEJQRiBzeXNjYWxscyBpcyBrbm93biB0byBiZSBlZmZlY3RpdmUsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBTbywgeWVhaCwgV29ydGhGdXp6aW5nID0gdHJ1ZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGZvciBCUEYgYW5kIHRoZSBCUEYgc3lzY2FsbCBpdHNlbGYuIFRpbWUgdG8gcG9rZSBhcm91bmQgYGluaXQvS2NvbmZpZ2AsIG9yIG1heWJlIGBrZXJuZWwvYnBmL0tjb25maWdgLCBvciBwZXJoYXBzIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3MgcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDQuMDg2NzU5NzA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzUwNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTctXFx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY0PXN0YXRpYyBERUZJTkVfTVVURVgodXBkYXRlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6Njk6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N0cnVjdF9vcHNfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MC19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01OTQ5PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2UoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy01OTY1LVxcbmtlcm5lbC9icGYvYnRmLmM6NTk2NjpcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XFxua2VybmVsL2JwZi9idGYuYy01OTY3LVxcdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI1LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNy1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNncm91cF9kZXZfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDMtXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBzeXNjdGxfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjQtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2Ni1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNnX3NvY2tvcHRfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NzQxPWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQzLVxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ0OlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXFx1MDAzZW9wcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0NS1cXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNS0vKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cXHUwMDNlZ2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzctICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjYyOD1zeXNjYWxsX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY0NTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3lzY2FsbF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0Ni1cXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTk5Mj1fX2JwZl9rZnVuYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmJwZl9pdGVyX3Rhc2tfdm1hX25leHQoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdClcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMC1cXHQvKlxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcXHQgKiBUaGUgdmVyaWZpZXIgb25seSB0cnVzdHMgdm1fbW0gYW5kIHZtX2ZpbGUgKHNlZVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMi1cXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTctLyogZHVtbXkgX29wcy4gVGhlIHZlcmlmaWVyIHdpbGwgb3BlcmF0ZSBvbiB0YXJnZXQgcHJvZ3JhbSdzIG9wcy4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfZXh0ZW5zaW9uX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxLSNkZWZpbmUgQlBGX1BST0dfVFlQRShfaWQsIF9uYW1lLCBwcm9nX2N0eF90eXBlLCBrZXJuX2N0eF90eXBlKSBcXFxcXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyOlxcdFtfaWRdID0gXFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00My0jZGVmaW5lIEJQRl9NQVBfVFlQRShfaWQsIF9vcHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzIzMT1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjQyLSAqIEZvciB0cmFkaXRpb25hbCBQVFJfVE9fTUFQX1ZBTFVFIG9yIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MsIHRoZSB2ZXJpZmllclxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjQzOiAqIGNsZWFycyByZWctXFx1MDAzZWlkIGFmdGVyIHZhbHVlX29yX251bGwtXFx1MDAzZXZhbHVlIHRyYW5zaXRpb24sIHNpbmNlIHRoZSB2ZXJpZmllciBvbmx5XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNDQtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24ndCBjYXJlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ0Mzg9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MTItXFx0XFx0XFx0XFx0ZW52LCBcXFwiVGhpcyBvcGVyYXRpb24gc3VidHJhY3RzIHBvaW50ZXIgcmVnaXN0ZXIgUiVkIGZyb20gc2NhbGFyIHJlZ2lzdGVyIFIlZC4gXFxcIlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYxMzpcXHRcXHRcXHRcXHRcXFwiVGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxNC1cXHRcXHRcXHRcXHRwdHJfcmVnbm8sIGRzdCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc1MzA9Ym9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc1OTUtICpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc1OTY6ICogLSBpZiBzbywgYW5kIGlmIHZlcmlmaWVyIG9yIGN1cnJlbnQgSklUIGlubGluZXMgdGhlIGNhbGwgdG8gdGhlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NTk3LSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY5PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4Ni1cXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODc6XFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODgtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMjA9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNTktXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzYwOlxcdFxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1t0Z3RfcHJvZy1cXHUwMDNldHlwZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzYxLVxcdFxcdHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTkzPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDAzLVxcdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDQ6XFx0aWYgKEFSUkFZX1NJWkUoYnBmX3ZlcmlmaWVyX29wcykgPT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTUtXFx0ZW52LVxcdTAwM2Vwcm9nID0gKnByb2c7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDE2OlxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXFx1MDAzZXByb2ctXFx1MDAzZXR5cGVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAxNy1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMjU6XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNi1cXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDQuMTM0NTE2Mzk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwODkzOTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgYmVnaW4gYnkgY2hlY2tpbmcgYGluaXQvS2NvbmZpZ2Ag4oCTIGl0IG9mdGVuIGhvbGRzIGZ1bmRhbWVudGFsIHNldHRpbmdzIHJlbGF0ZWQgdG8ga2VybmVsIGZlYXR1cmVzLiBJZiBpdCdzIG5vdCB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBsb2NhdGlvbiB3b3VsZCBiZSB0aGUgY29yZSBCUEYgaW1wbGVtZW50YXRpb24gZGlyZWN0b3J5IGl0c2VsZiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGJ3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gbG9vayBpbiB0aG9zZSB0d28gcGxhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDYuMzQzNDU5OTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTcxMjM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjA2LjM4ODAzODE4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTAzNzAzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipGaW5kaW5nIHRoZSBCUEZfU1lTQ0FMTCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzbid0IHVzdWFsbHkgc29tZXRoaW5nIEknZCBoYXZlIHRvIGRvIGZyb20gbWVtb3J5LCBidXQgSSBoYXZlIGEgaHVuY2ggaXQgaXMgbGlua2VkIHRvIHNvbWV0aGluZyBzcGVjaWZpYyBhbmQgSSdtIGRyYXdpbmcgYSBibGFuay4gVGhlcmVmb3JlLCB0aW1lIHRvIHN5c3RlbWF0aWNhbGx5IGxvY2F0ZSBpdC4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBjb25maWd1cmVkLCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBldmVuIGlmIGl0J3MgZGVwcmVjYXRlZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIEkgaGF2ZSB0byBkby4gVGhlIGJlc3Qgd2F5IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBpcyB0byBzZWFyY2ggYWNyb3NzICphbGwqIHRoZSBLY29uZmlnIGZpbGVzLiBBIGNyb3NzLXJlZmVyZW5jZSBpcyBsaWtlbHkgdG8gaGlnaGxpZ2h0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBidWlsZCBmbGFncyB0aGF0IHN1cnJvdW5kIHRoaXMgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDguNjk4NDEzMDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEyNTkyMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjEwLjYxMTAxNDAwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTcyMTcwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBsb29rIGludG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29uZmlndXJhdGlvbi4gSSByZW1lbWJlciB3b3JraW5nIHdpdGggYEtjb25maWdgIGZpbGVzIGJlZm9yZTsgdGhleSdyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBmb3IgY29udHJvbGxpbmcga2VybmVsIGZlYXR1cmVzLiBMZXQncyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJ20gdGhpbmtpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDI3LiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBjb3JlIGVuYWJsaW5nIG9wdGlvbnMgZm9yIEJQRiwgb3IgcGVyaGFwcyBjb25maWd1cmF0aW9uIG9mIHNvbWUgb2YgdGhlIEJQRiBzdWJzeXN0ZW1zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSdsbCBzZWUgd2hhdCB0aGUgb3B0aW9ucyBhcmUgYW5kIHdoYXQgbXkgdW5kZXJzdGFuZGluZyBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjEyLjc4MzE4NzA1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MTIuNzgzMjQ5MTk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQ3ODk3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBSZWxhdGlvbnNoaXBzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXM7IGl0IHNlZW1zIHdlIGFyZSBkZWFsaW5nIHdpdGggYEJQRl9TWVNDQUxMYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGNoZWNrX2xkX2ltbWAgaW50ZXJhY3RzIHdpdGggaXQuIEZpcnN0IHRoaW5nJ3MgZmlyc3QsIGlzIGBjaGVja19sZF9pbW1gIHN0YXRpYywgbm9uLXN0YXRpYywgb3IgaXMgaXQgY2FsbGVkIGJ5IHNvbWV0aGluZyBlbHNlPyBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgbGlua3MgdG9nZXRoZXIgYW5kIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBzdGFydCBieSBmaWd1cmluZyBvdXQgaXRzIHNjb3BlIGFuZCBzZWUgd2hvIGlzIGNhbGxpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE1LjEzODA0MTQ2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTcyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfbGRfaW1tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3ODc9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDI2LS8qIHZlcmlmeSBCUEZfTERfSU1NNjQgaW5zdHJ1Y3Rpb24gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMjc6c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzAyOC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwODc9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTgyLVxcdFxcdGlmIChtb2RlID09IEJQRl9JTU0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxODM6XFx0XFx0XFx0ZXJyID0gY2hlY2tfbGRfaW1tKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTg0LVxcdFxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE1LjE4NDM0NDkzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwNzI2NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgQ29udHJvbCBGbG93KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYGNoZWNrX2xkX2ltbWAgYW5kIGBkb19jaGVja19pbnNuYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgd2hlcmUgYGNoZWNrX2xkX2ltbWAsIHRoZSBzdGF0aWMgZnVuY3Rpb24gZGVmaW5lZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgaXMgdXNlZC4gSXMgaXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIGRvZXMgaXQgZXhpc3QgYXMgYSBkaXNjcmV0ZSBzeW1ib2w/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgaXMga2V5LiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleGFtaW5lIHRoZSBjYWxscyB0byBgYnBmX2NoZWNrYCwgYGRvX2NoZWNrYCwgb3IgYGRvX2NoZWNrX2luc25gIHRvby4gU2VlaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBCUEYgdmVyaWZpZXIgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MTcuMTE1MDczNjA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM4NjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19jaGVja1xcXFwofGRvX2NoZWNrX2luc25cXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDI5PXN0YXRpYyBpbnQgY2hlY2tfaW5kaXJlY3RfanVtcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDg3OnN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTk2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODE5NzpzdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTk4LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODM0Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgzNDc6XFx0XFx0ZXJyID0gZG9fY2hlY2tfaW5zbihlbnYsIFxcdTAwMjZkb19wcmludF9zdGF0ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzQ4LVxcdFxcdGlmIChlcnJvcl9yZWNvdmVyYWJsZV93aXRoX25vc3BlYyhlcnIpIFxcdTAwMjZcXHUwMDI2IHN0YXRlLVxcdTAwM2VzcGVjdWxhdGl2ZSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Mjg0PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDI3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQyODpcXHRyZXQgPSBkb19jaGVjayhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQyOS1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE3LjE2MzQ2MzQ2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYxNzk1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBJbnN0cnVjdGlvbiBWYWxpZGF0aW9uIFdvcmtmbG93KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGluc3RydWN0aW9uIHZhbGlkYXRpb24gcHJvY2VzcyBoZXJlLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBzZXQgb2YgY29yZSBjaGVja3Mgb3IgZnVuY3Rpb25zIHdlJ3JlIHVzaW5nOiBgY2hlY2tfbGRfaW1tYCwgYGRvX2NoZWNrX2luc25gLCBgZG9fY2hlY2tfY29tbW9uYCwgYW5kLCBjcnVjaWFsbHksIGBicGZfY2hlY2tgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGF0ZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gTXkgbmV4dCBzdGVwIGhhcyB0byBiZSBleGFtaW5pbmcgdGhlIGNhbGwgY2hhaW4gb2YgYGJwZl9jaGVja2AuIFVuZGVyc3RhbmRpbmcgd2hhdCBjYWxscyBpbnRvIHRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCdzIHRoZSBjZW50cmFsIHBvaW50LCBhbmQgYnkgdHJhY2luZyBpdHMgY2FsbGVycyBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGFuZCBob3cgdGhlIGluc3RydWN0aW9uIHZhbGlkYXRpb24gb2NjdXJzLiBJdCBzZWVtcyBsaWtlIGEgY2xhc3NpYyBib3R0b20tdXAgYW5hbHlzaXMgd2lsbCBiZSBoZWxwZnVsIGluIHRoaXMgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE5LjAyNTI2MTAxNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4ODA5MzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0xMjg9cmV1c2VzIHRoZSBleGlzdGluZyBgYGZkX2FycmF5YGA6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5J3MgbGVuZ3RoLlxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNi0gICBoYXMgcmVzb2x2ZWQgdGhlIGBgZmRfYXJyYXlgYCBlbnRyaWVzIGludG8gdGhlIHByb2dyYW0ncyBgYHVzZWRfbWFwc2BgLiBUaGVcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTIzMD1UaGlzIGhvb2sgZ2F0ZXMgYWRtaXNzaW9uICoqZm9yIGV2ZXJ5IGxvYWQqKiwgZnJvbSBhIHNpbmdsZSBjYWxsIHNpdGUgaW5zaWRlIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTIzMi1vcHRpb25hbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBzbyB0aGUgdmVyZGljdCBhbmQga2V5cmluZyBmaWVsZHMgYXJlIGZpbmFsIC0gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwNTE9c3RydWN0IGJwZl9sb2dfYXR0cjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwNTI6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipmcCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzA1My1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTkwNT1zdHJ1Y3QgYnBmX2ZkX2FycmF5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTEzLS8qIHNpbmdsZSBjb250YWluZXIgZm9yIGFsbCBzdHJ1Y3RzXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo5MTQ6ICogb25lIHZlcmlmaWVyX2VudiBwZXIgYnBmX2NoZWNrKCkgY2FsbFxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTE1LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNzAwPWludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTcwMi1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE3MDM6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTcwNC1pbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD03MTc9c3RhdGljIGlubGluZSBib29sIGNvb2tpZV9icGZfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cXG5pbmNsdWRlL25ldC90Y3AuaDo3MjI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMy0jZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzI4LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzItXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU4PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYwOi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjEtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NTM9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODY3LS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODY4OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg2OS0gKiBvbmNlIHRoZSBwcm9ncmFtJ3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NzY9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkzOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5NC1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwNy1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDg6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwOS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0yNjM9c3RhdGljIGludCBjb29raWVfdGNwX3JlcXNrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMDI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMy17XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9NDA1PXN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cXHRpZiAoY29va2llX2JwZl9vayhza2IpKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjQyNjpcXHRcXHRyZXEgPSBjb29raWVfYnBmX2NoZWNrKHNrLCBza2IpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTkyLVxcdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTkzOlxcdFxcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XFxubmV0L2lwdjYvc3luY29va2llcy5jLTE5NC1cXHR9IGVsc2Uge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2lnbmVkX2xvYWRlci5jPTUyNz1zdGF0aWMgdm9pZCBzaWduYXR1cmVfZmFpbHVyZV9sb2dzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zaWduZWRfbG9hZGVyLmMtNTM2LVxcdFxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2lnbmVkX2xvYWRlci5jOjUzNzpcXHRcXHQgKiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIG5vdyBydW5zIGluc2lkZSBicGZfY2hlY2soKSwgc28gYVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NpZ25lZF9sb2FkZXIuYy01MzgtXFx0XFx0ICogZmFpbHVyZSBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZSB2ZXJpZmllciBsb2cuIEEgcHJlc2VudC1idXQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjIxLjQxMzM2MTQ5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTY1MTYwMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgY2hlY2tfbGRfaW1tYCBmdW5jdGlvbi4gR29vZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBxdWlja2x5IGNvbmZpcm0gaXQncyBhIHN0YXRpYyBmdW5jdGlvbiDigJMgYHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilgIOKAkyBhbmQgdGhhdCBpdCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIGFsc28gbm90ZSB0aGF0IHRoZSBzdXJyb3VuZGluZyB2ZXJpZmljYXRpb24gZnVuY3Rpb25zLCBgZG9fY2hlY2tfaW5zbmAsIGBkb19jaGVja2AsIGFuZCBgYnBmX2NoZWNrYCwgYXJlIGFsbCBpbiB0aGUgc2FtZSBmaWxlLiBUaGF0J3MgZ29vZCBjb250ZXh0LlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgZ3VpZGVsaW5lcy4gVGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQgdG8gdHJ1ZTsgZXhjZWxsZW50LCBtZWFuaW5nIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gVGhlIHJlYXNvbmluZyBjb25maXJtcyB0aGF0IHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYEJQRl9QU0VVRE9fRlVOQ2AgcmVmZXJlbmNlcyBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIHVucGF0Y2hlZCBjb2RlIHdpdGhpbiB0aGUgbWFpbiBwcm9ncmFtIHdoZW4gb25seSBvbmUgc3VicHJvZ3JhbSBleGlzdHMgKHN1YnByb2cgMCkuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBjb2RlLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAg4oCTIGEgY3JpdGljYWwgc3lzY2FsbC4gVGhpcyB0ZWxscyBtZSB0aGUgbG9naWMgaXMgc291bmQgYW5kIHRoZSBleHBvc3VyZSBpcyByZWxldmFudC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGBjaGVja19sZF9pbW1gLCBgZG9fY2hlY2tfaW5zbmAsIGFuZCBgYnBmX2NoZWNrYCBhcmUgdGhlIGtleSBhcmVhcyBmb3IgZGVlcGVyIHNjcnV0aW55LiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHNvIHByb3ZpZGVkIGFzIGBCUEZfU1lTQ0FMTGAg4oCTIHdoaWNoIEkgYWxyZWFkeSBrbmV3IGVuYWJsZXMgYHZlcmlmaWVyLm9gLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0JQRmAgaXMgc2VsZWN0ZWQgYnkgYEJQRl9TWVNDQUxMYCwgYW5kIHllcywgaXQgaXMuIEFsbCBnb29kIHRoZXJlLlxuXG5JIGFsc28gc2VlIHRoYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaXMgdGhlIG9ubHkga2VybmVsIGZpbGUgY2hhbmdlZCwgcGx1cyB0aGUgdXNlcnNwYWNlIHRlc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jYCBoYXMgYmVlbiBhZGRlZC4gU28gaXQncyBmYWlybHkgY29udGFpbmVkLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGxvb2tzIGNsZWFuLCBjb25jaXNlLCBhbmQgd2VsbC1kZWZpbmVkLiBJJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTA0LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzoyNS41Nzg1MjQ4NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzMwMDk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9pbW1cIixcbiAgICBcImRvX2NoZWNrX2luc25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX2xkX2ltbVwiLFxuICAgIFwiZG9fY2hlY2tfaW5zblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYnkgYWRkaW5nIGEgY2hlY2sgaW4gY2hlY2tfbGRfaW1tKCkgdG8gcmVqZWN0IEJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2VzIHRvIHN1YnByb2cgMCAodGhlIG1haW4gcHJvZ3JhbSksIHByZXZlbnRpbmcgdW5wYXRjaGVkIGluc3RydWN0aW9uIGFkZHJlc3NlcyB3aGVuIHN1YnByb2dfY250IGlzIDEuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzoyNS42NTE4MzM3ODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTE4NDk5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzoyNS42NTIzMjA2MjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5OTkxMzU3MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGNoZWNrX2xkX2ltbWApIHRvIHJlamVjdCBgQlBGX1BTRVVET19GVU5DYCBpbnN0cnVjdGlvbnMgcG9pbnRpbmcgdG8gdGhlIG1haW4gcHJvZ3JhbSAoYHN1YnByb2dubyA9PSAwYCksIHByZXZlbnRpbmcgYW4gaXNzdWUgd2hlcmUgc3VjaCBwc2V1ZG8tZnVuYyBpbnN0cnVjdGlvbnMgd2VyZSBub3QgcGF0Y2hlZCB3aXRoIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzIGFuZCBsZWQgdG8gY2FsbHMgdG8gYm9ndXMgYWRkcmVzc2VzLiBUaGlzIGlzIGEgcHVyZSB2ZXJpZmljYXRpb24vdmFsaWRhdGlvbiBjaGVjayByZWplY3RpbmcgaW52YWxpZCBCUEYgYnl0ZWNvZGUuIEl0IGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTdiNzMyOGYxODI2YmZjZDE4Y2I0ZjlmOGM1NjlmMzE0ZjA0YzFlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2NDAzNTY4Mzc5NTEuLjdkOGRkYjFiZWUwMGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE3MDg5LDYgKzE3MDg5LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJjYWxsYmFjayBmdW5jdGlvbiBub3Qgc3RhdGljXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIFdoZW4gZW52LVx1MDAzZXN1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24ndCBiZSByZXdyaXR0ZW5cbitcdFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cbitcdFx0ICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcImNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCBiZSB0aGUgbWFpbiBwcm9ncmFtXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXG4gXHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xuIFx0XHRkc3RfcmVnLVx1MDAzZXN1YnByb2dubyA9IHN1YnByb2dubztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvcHNldWRvX2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvKlxuKyAqIEJ1Z2d5IHZlcmlmaWVyIGFjY2VwdGVkIHRoZSBwcm9ncmFtIGJlbG93IHdoaWxlIG5vdCBwYXRjaGluZyBCUEZfUFNFVURPX0ZVTkNcbisgKiBsb2FkIGluc3RydWN0aW9uIHRvIGNvbnRhaW4gYSByZWFsIGFkZHJlc3MuIFdoaWNoIHJlc3VsdGVkIGluIGEgZnVuY3Rpb24gY2FsbFxuKyAqIHRvIGEgYm9ndXMgYWRkcmVzcy5cbisgKi9cbit7XG4rXHRcIkJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbVwiLFxuK1x0Lmluc25zID0ge1xuK1x0LyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2KGludCl7MH0pOyAqL1xuK1x0QlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xMCwgLTQsIDApLFxuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzIsIEJQRl9SRUdfMTApLFxuK1x0QlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC00KSxcbitcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18xLCAwKSxcbitcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSxcbitcdEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMTApLFxuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfMCksXG4rXHQvKiBicGZfdGltZXJfaW5pdChyNiwgXHUwMDI2dGltZXJfbWFwLCAwKTsgKi9cbitcdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLFxuK1x0QlBGX0xEX01BUF9GRChCUEZfUkVHXzIsIDApLFxuK1x0QlBGX01PVjY0X0lNTShCUEZfUkVHXzMsIDApLFxuK1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9pbml0KSxcbitcdC8qIGJwZl90aW1lcl9zZXRfY2FsbGJhY2socjYsIFx1MDAzY2luc24gIzBcdTAwM2UpOyAqL1xuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfNiksXG4rXHRCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksXG4rXHRCUEZfUkFXX0lOU04oMCwgMCwgMCwgMCwgMCksXG4rXHRCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3RpbWVyX3NldF9jYWxsYmFjayksXG4rXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9LFxuK1x0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCxcbitcdC5maXh1cF9tYXBfdGltZXIgPSB7IDMsIDkgfSxcbitcdC5yZXN1bHQgPSBSRUpFQ1QsXG4rXHQuZXJyc3RyID0gXCJjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVwiLFxuK1x0LmZ1bmNfaW5mbyA9IHsgeyAwLCA0IC8qIG1haW5fcHJvZyAqLyB9IH0sXG4rXHQuZnVuY19pbmZvX2NudCA9IDEsXG4rXHQuYnRmX3N0cmluZ3MgPSBcIlxcMGludFxcMGN0eFxcMG1haW5fcHJvZ1wiLFxuK1x0LmJ0Zl90eXBlcyA9IHtcbitcdC8qIDE6IGludCAgICAgICAgICAgICovIEJURl9UWVBFX0lOVF9FTkMoMSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSxcbitcdC8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLFxuK1x0LyogMzogaW50IF9fKHZvaWQgKikgKi8gQlRGX0ZVTkNfUFJPVE9fRU5DKDEsIDEpLFxuK1x0XHRcdFx0QlRGX0ZVTkNfUFJPVE9fQVJHX0VOQyg1LCAyKSxcbitcdC8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSxcbitcdEJURl9FTkRfUkFXXG4rXHR9XG4rfSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjI1LjY1MjMyMTM2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTA3OTg1MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgQW5hbHlzaXMgb2YgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2hlY2tfbGRfaW1tYCBmdW5jdGlvbiwgSSBzZWUgYSBuZXcgY2hlY2s6XG5cbmBgYGNcbitcdFx0LypcbitcdFx0ICogV2hlbiBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbid0IGJlIHJld3JpdHRlblxuK1x0XHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxuK1x0XHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbmBgYFxuXG5Fc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSBiZWluZyB0aGUgXCJtYWluXCIgcHJvZ3JhbSB3aGVuIGBzdWJwcm9nX2NudGAgaXMgMSwgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC4gVGhpcyBpcyBwcm9iYWJseSB0byBwcmV2ZW50IHNvbWUga2luZCBvZiB3ZWlyZCBpbnRlcmFjdGlvbiB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tIGEgcHJvZ3JhbW1pbmcgZGVzaWduIHBlcnNwZWN0aXZlOyBpdCBzb3VuZHMgbGlrZSB0aGV5J3JlIGV4cGxpY2l0bHkgZGlzYWxsb3dpbmcgYSBzcGVjaWZpYyBzY2VuYXJpby5cblxuQW5kIHRoZXJlJ3MgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNgIHRvIHN1cHBvcnQgdGhpcyBjaGFuZ2UuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFyb3VuZCBgY2hlY2tfbGRfaW1tYC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGVjayB3aXRoaW4gdGhlIGJyb2FkZXIgdmVyaWZpZXIuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGltbWVkaWF0ZSBsb2FkcywgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGUgb3ZlcmFsbCBwcm9ncmFtIHN0cnVjdHVyZS4gVGhpcyBtaWdodCByZXZlYWwgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbmV3IGNvZGVwYXRocyB0aGF0IEtNU0FOIG1pZ2h0IGV4cG9zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG5ldyBjaGVjayBpcyAqZG9pbmcqLCBhbmQgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZWhhdmUsIGFzIHdlbGwgYXMgaWYgaXQgd291bGQgdHJpZ2dlciBhbnkgaXNzdWVzIGluIGEgbW9yZSBjb21wbGV4IHNjZW5hcmlvIHdpdGggS01TQU4gZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjMxLjE2MDMxMDY4OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcwNzE6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNzA3MjpcXHRcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHNldWRvIGJ0ZiBpZDogdW5leHBlY3RlZCBkc3QgcmVnIHR5cGVcXFwiKTtcXG4xNzA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNzA3NDpcXHRcXHRcXHR9XFxuMTcwNzU6XFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbjE3MDc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE3MDc3OlxcdFxcdH1cXG4xNzA3ODpcXHRcXG4xNzA3OTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkMpIHtcXG4xNzA4MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eDtcXG4xNzA4MTpcXHRcXHRcXHR1MzIgc3VicHJvZ25vID0gYnBmX2ZpbmRfc3VicHJvZyhlbnYsXFxuMTcwODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGVudi1cXHUwMDNlaW5zbl9pZHggKyBpbnNuLVxcdTAwM2VpbW0gKyAxKTtcXG4xNzA4MzpcXHRcXG4xNzA4NDpcXHRcXHRcXHRpZiAoIWF1eC1cXHUwMDNlZnVuY19pbmZvKSB7XFxuMTcwODU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtaXNzaW5nIGJ0ZiBmdW5jX2luZm9cXFxcblxcXCIpO1xcbjE3MDg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDg3OlxcdFxcdFxcdH1cXG4xNzA4ODpcXHRcXHRcXHRpZiAoYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcXG4xNzA4OTpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbjE3MDkwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDkxOlxcdFxcdFxcdH1cXG4xNzA5MjpcXHRcXHRcXHQvKlxcbjE3MDkzOlxcdFxcdFxcdCAqIFdoZW4gZW52LVxcdTAwM2VzdWJwcm9nX2NudCA9PSAxIHRoaXMgaW5zdHJ1Y3Rpb24gd29uJ3QgYmUgcmV3cml0dGVuXFxuMTcwOTQ6XFx0XFx0XFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cXG4xNzA5NTpcXHRcXHRcXHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxcbjE3MDk2OlxcdFxcdFxcdCAqL1xcbjE3MDk3OlxcdFxcdFxcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xcbjE3MDk4OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXFxcblxcXCIpO1xcbjE3MDk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MTAwOlxcdFxcdFxcdH1cXG4xNzEwMTpcXHRcXG4xNzEwMjpcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX0ZVTkM7XFxuMTcxMDM6XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xcbjE3MTA0OlxcdFxcdFxcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcXG4xNzEwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzEwNjpcXHRcXHR9XFxuMTcxMDc6XFx0XFxuMTcxMDg6XFx0XFx0bWFwID0gZW52LVxcdTAwM2V1c2VkX21hcHNbYXV4LVxcdTAwM2VtYXBfaW5kZXhdO1xcbjE3MTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzozMS4xNjEzNjIzNjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ4MjI4MjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHByZXR0eSBjbGVhcjogdGhlIEJQRiB2ZXJpZmllciB3YXMgbWlzdGFrZW5seSBhbGxvd2luZyBgQlBGX1BTRVVET19GVU5DYCBpbnN0cnVjdGlvbnMgdG8gcG9pbnQgdG8gdGhlIG1haW4gcHJvZ3JhbSAoc3VicHJvZyAwKSB3aGVuIGl0IHNob3VsZG4ndCBoYXZlLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggb25seSB0aGUgbWFpbiBwcm9ncmFtIG9yIHdoZW4gdGhlIHN1YnByb2dyYW0gbnVtYmVyIGlzIDAuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHRoZSBKSVQga2lja3MgaW4sIGl0IHdvdWxkbid0IHJld3JpdGUgdGhlIHBzZXVkby1mdW5jdGlvbiBwb2ludGVyIHRvIGEgKnJlYWwqIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgcHJvZ3JhbSB3b3VsZCB0cnkgdG8gY2FsbCBnYXJiYWdlLiBDbGFzc2ljIGNvbnRyb2wgZmxvdyBoaWphY2ssIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvIC0gYSBjcml0aWNhbCBidWcuXG5cblRoZSBwcm9wb3NlZCBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXg6IGl0IGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgY2hlY2tfbGRfaW1tYCB0byBleHBsaWNpdGx5IHJlamVjdCBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIG1haW4gcHJvZ3JhbS4gU2ltcGxlLCBlbGVnYW50LCBhbmQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSByb290IGNhdXNlLiBObyBjb21wbGV4IHJld3JpdGVzLCBqdXN0IGEgc2FuaXR5IGNoZWNrIGR1cmluZyB2ZXJpZmljYXRpb24uXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNoZWNrbGlzdC4gRG9lcyB0aGlzIHBhdGNoOlxuXG4xLiAgKipJbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIGZpZWxkcy9wYWRkaW5nIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZD8qKiBObywgZGVmaW5pdGVseSBub3QuIEl0J3MgYSB2ZXJpZmljYXRpb24gY2hhbmdlLCBub3QgYSBkYXRhIHN0cnVjdHVyZSBjaGFuZ2UuXG4yLiAgKipSZWx5IG9uIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gVGhlIGBzdWJwcm9nbm9gIGlzIGEgYHUzMmAgcmV0dXJuZWQgYnkgYGJwZl9maW5kX3N1YnByb2dgLCB3aGljaCBpcyBpbml0aWFsaXplZCwgc28gdGhpcyBpc24ndCBhIGNvbmNlcm4uXG4zLiAgKipJbnZvbHZlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8qKiBOb3QgYXQgYWxsLiBJdCdzIGp1c3QgYSB2YWxpZGF0aW9uIGNoZWNrLlxuNC4gICoqQWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8qKiBObywgdGhlIHBhdGNoIHNpbXBseSByZWplY3RzIGFuIGludmFsaWQgcHJvZ3JhbS5cblxuVGhlIHBhdGNoIHNpbXBseSByZWplY3RzIGludmFsaWQgQlBGIHByb2dyYW1zIHdpdGggYHN1YnByb2dubyA9PSAwYCBkdXJpbmcgQlBGIHZlcmlmaWNhdGlvbi4gSXQncyBhYm91dCBwcmV2ZW50aW5nIGEgYnVnLCBub3QgY3JlYXRpbmcgbmV3IG9uZXMuIFRoZSBwcmV2aW91cyBidWcgd2FzIGEgdmVyaWZpZXIgaXNzdWUsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyB0aGUgcm9vdCBjYXVzZSBvZiBjb250cm9sIGZsb3cgaGlqYWNrcywgY3Jhc2hlcywgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVyZSdzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLlxuXG5TZWVtcyBjcnlzdGFsIGNsZWFyLiBObyBLTVNBTiBpbXBsaWNhdGlvbnMuIE5lZWRLTVNBTiBzaG91bGQgYWJzb2x1dGVseSBiZSBmYWxzZS4gSSd2ZSBkb3VibGUtY2hlY2tlZCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIEtNU0FOIHJlYXNvbmluZyBzdHJ1Y3R1cmUsIGFuZCBpdCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBpcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY5LCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjM1LjY0MzY0Njg3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyIChgY2hlY2tfbGRfaW1tYCkgdG8gcmVqZWN0IGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9ncmFtIChgc3VicHJvZ25vID09IDBgKSwgcHJldmVudGluZyBhbiBpc3N1ZSB3aGVyZSBzdWNoIHBzZXVkby1mdW5jIGluc3RydWN0aW9ucyB3ZXJlIG5vdCBwYXRjaGVkIHdpdGggYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MgYW5kIGxlZCB0byBjYWxscyB0byBib2d1cyBhZGRyZXNzZXMuIFRoaXMgaXMgYSBwdXJlIHZlcmlmaWNhdGlvbi92YWxpZGF0aW9uIGNoZWNrIHJlamVjdGluZyBpbnZhbGlkIEJQRiBieXRlY29kZS4gSXQgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 00:06:14 +0000 UTC FinishedAt: 2026-09-04 00:43:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "7b1a07a9-e130-4937-adc6-7baf70c401be" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_ld_imm", "do_check_insn", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfaW1tJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX2luc24mIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBieSBhZGRpbmcgYSBjaGVjayBpbiBjaGVja19sZF9pbW0oKSB0byByZWplY3QgQlBGX1BTRVVET19GVU5DIHJlZmVyZW5jZXMgdG8gc3VicHJvZyAwICh0aGUgbWFpbiBwcm9ncmFtKSwgcHJldmVudGluZyB1bnBhdGNoZWQgaW5zdHJ1Y3Rpb24gYWRkcmVzc2VzIHdoZW4gc3VicHJvZ19jbnQgaXMgMS4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1N2I3MzI4ZjE4MjZiZmNkMThjYjRmOWY4YzU2OWYzMTRmMDRjMWU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMDo0Mjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2NDAzNTY4Mzc5NTEuLjdkOGRkYjFiZWUwMGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE3MDg5LDYgJiM0MzsxNzA4OSwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2hlbiBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbiYjMzk7dCBiZSByZXdyaXR0ZW5cbiYjNDM7XHRcdCAqIHRvIGhvbGQgYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MuIEFzc3VtZSB0aGF0IG5vIHVzYWJsZSBwcm9ncmFtXG4mIzQzO1x0XHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3VicHJvZ25vID09IDApIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCBiZSB0aGUgbWFpbiBwcm9ncmFtXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xuIFx0XHRkc3RfcmVnLVx1MDAzZXN1YnByb2dubyA9IHN1YnByb2dubztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvcHNldWRvX2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcbkBAIC0wLDAgJiM0MzsxLDQ1IEBAXG4mIzQzOy8qXG4mIzQzOyAqIEJ1Z2d5IHZlcmlmaWVyIGFjY2VwdGVkIHRoZSBwcm9ncmFtIGJlbG93IHdoaWxlIG5vdCBwYXRjaGluZyBCUEZfUFNFVURPX0ZVTkNcbiYjNDM7ICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGxcbiYjNDM7ICogdG8gYSBib2d1cyBhZGRyZXNzLlxuJiM0MzsgKi9cbiYjNDM7e1xuJiM0MztcdFwmIzM0O0JQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbVwmIzM0OyxcbiYjNDM7XHQuaW5zbnMgPSB7XG4mIzQzO1x0LyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2KGludCl7MH0pOyAqL1xuJiM0MztcdEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMTAsIC00LCAwKSxcbiYjNDM7XHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMiwgQlBGX1JFR18xMCksXG4mIzQzO1x0QlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC00KSxcbiYjNDM7XHRCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0pLFxuJiM0MztcdEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMTApLFxuJiM0MztcdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzApLFxuJiM0MztcdC8qIGJwZl90aW1lcl9pbml0KHI2LCBcdTAwMjZ0aW1lcl9tYXAsIDApOyAqL1xuJiM0MztcdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLFxuJiM0MztcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18yLCAwKSxcbiYjNDM7XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksXG4mIzQzO1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9pbml0KSxcbiYjNDM7XHQvKiBicGZfdGltZXJfc2V0X2NhbGxiYWNrKHI2LCBcdTAwM2NpbnNuICMwXHUwMDNlKTsgKi9cbiYjNDM7XHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSxcbiYjNDM7XHRCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksXG4mIzQzO1x0QlBGX1JBV19JTlNOKDAsIDAsIDAsIDAsIDApLFxuJiM0MztcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfc2V0X2NhbGxiYWNrKSxcbiYjNDM7XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0QlBGX0VYSVRfSU5TTigpLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCxcbiYjNDM7XHQuZml4dXBfbWFwX3RpbWVyID0geyAzLCA5IH0sXG4mIzQzO1x0LnJlc3VsdCA9IFJFSkVDVCxcbiYjNDM7XHQuZXJyc3RyID0gXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cJiMzNDssXG4mIzQzO1x0LmZ1bmNfaW5mbyA9IHsgeyAwLCA0IC8qIG1haW5fcHJvZyAqLyB9IH0sXG4mIzQzO1x0LmZ1bmNfaW5mb19jbnQgPSAxLFxuJiM0MztcdC5idGZfc3RyaW5ncyA9IFwmIzM0O1xcMGludFxcMGN0eFxcMG1haW5fcHJvZ1wmIzM0OyxcbiYjNDM7XHQuYnRmX3R5cGVzID0ge1xuJiM0MztcdC8qIDE6IGludCAgICAgICAgICAgICovIEJURl9UWVBFX0lOVF9FTkMoMSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSxcbiYjNDM7XHQvKiAyOiB2b2lkKiAgICAgICAgICAqLyBCVEZfUFRSX0VOQygwKSxcbiYjNDM7XHQvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksXG4mIzQzO1x0XHRcdFx0QlRGX0ZVTkNfUFJPVE9fQVJHX0VOQyg1LCAyKSxcbiYjNDM7XHQvKiA0OiBtYWluX3Byb2cgICAgICAqLyBCVEZfRlVOQ19FTkMoOSwgMyksXG4mIzQzO1x0QlRGX0VORF9SQVdcbiYjNDM7XHR9XG4mIzQzO30sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19sZF9pbW0mIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYnkgYWRkaW5nIGEgY2hlY2sgaW4gY2hlY2tfbGRfaW1tKCkgdG8gcmVqZWN0IEJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2VzIHRvIHN1YnByb2cgMCAodGhlIG1haW4gcHJvZ3JhbSksIHByZXZlbnRpbmcgdW5wYXRjaGVkIGluc3RydWN0aW9uIGFkZHJlc3NlcyB3aGVuIHN1YnByb2dfY250IGlzIDEuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTdiNzMyOGYxODI2YmZjZDE4Y2I0ZjlmOGM1NjlmMzE0ZjA0YzFlOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTcwODksNiAmIzQzOzE3MDg5LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCXZlcmJvc2UoZW52LCAmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiBlbnYtJmd0O3N1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24mIzM5O3QgYmUgcmV3cml0dGVuCiYjNDM7CQkgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbQomIzQzOwkJICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHN1YnByb2dubyA9PSAwKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAogCQlkc3RfcmVnLSZndDt0eXBlID0gUFRSX1RPX0ZVTkM7CiAJCWRzdF9yZWctJmd0O3N1YnByb2dubyA9IHN1YnByb2dubzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jCkBAIC0wLDAgJiM0MzsxLDQ1IEBACiYjNDM7LyoKJiM0MzsgKiBCdWdneSB2ZXJpZmllciBhY2NlcHRlZCB0aGUgcHJvZ3JhbSBiZWxvdyB3aGlsZSBub3QgcGF0Y2hpbmcgQlBGX1BTRVVET19GVU5DCiYjNDM7ICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGwKJiM0MzsgKiB0byBhIGJvZ3VzIGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7ewomIzQzOwkmIzM0O0JQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuaW5zbnMgPSB7CiYjNDM7CS8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RpbWVyX21hcCwgJmFtcDsoaW50KXswfSk7ICovCiYjNDM7CUJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMTAsIC00LCAwKSwKJiM0MzsJQlBGX01PVjY0X1JFRyhCUEZfUkVHXzIsIEJQRl9SRUdfMTApLAomIzQzOwlCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTQpLAomIzQzOwlCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAxMCksCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzApLAomIzQzOwkvKiBicGZfdGltZXJfaW5pdChyNiwgJmFtcDt0aW1lcl9tYXAsIDApOyAqLwomIzQzOwlCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSwKJiM0MzsJQlBGX0xEX01BUF9GRChCUEZfUkVHXzIsIDApLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfaW5pdCksCiYjNDM7CS8qIGJwZl90aW1lcl9zZXRfY2FsbGJhY2socjYsICZsdDtpbnNuICMwJmd0Oyk7ICovCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLAomIzQzOwlCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksCiYjNDM7CUJQRl9SQVdfSU5TTigwLCAwLCAwLCAwLCAwKSwKJiM0MzsJQlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9zZXRfY2FsbGJhY2spLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfSwKJiM0MzsJLnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCwKJiM0MzsJLmZpeHVwX21hcF90aW1lciA9IHsgMywgOSB9LAomIzQzOwkucmVzdWx0ID0gUkVKRUNULAomIzQzOwkuZXJyc3RyID0gJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuZnVuY19pbmZvID0geyB7IDAsIDQgLyogbWFpbl9wcm9nICovIH0gfSwKJiM0MzsJLmZ1bmNfaW5mb19jbnQgPSAxLAomIzQzOwkuYnRmX3N0cmluZ3MgPSAmIzM0O1wwaW50XDBjdHhcMG1haW5fcHJvZyYjMzQ7LAomIzQzOwkuYnRmX3R5cGVzID0gewomIzQzOwkvKiAxOiBpbnQgICAgICAgICAgICAqLyBCVEZfVFlQRV9JTlRfRU5DKDEsIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksCiYjNDM7CS8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLAomIzQzOwkvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksCiYjNDM7CQkJCUJURl9GVU5DX1BST1RPX0FSR19FTkMoNSwgMiksCiYjNDM7CS8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSwKJiM0MzsJQlRGX0VORF9SQVcKJiM0MzsJfQomIzQzO30sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5IG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbmV3IGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBCUEYgdmVyaWZpZXIgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgKSwgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4gIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBhIHJvdXRpbmUga2VybmVsIG1haW50ZW5hbmNlIGFzc2Vzc21lbnQg4oCTIGEgZGVmZW5zaXZlIG1lYXN1cmUuIFdlIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgYXR0YWNrIHN1cmZhY2Ugb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBwYXRjaCBpdHNlbGYgbG9va3MgbGlrZSB0aGlzOiBbSW5zZXJ0IHRoZSBwcm92aWRlZCBkaWZmIGhlcmUgZm9yIGNvbnRleHRdLiBJdCBzZWVtcyB0byBiZSBhZGRpbmcgYSByZXN0cmljdGlvbiB0byB0aGUgYGNoZWNrX2xkX2ltbWAgZnVuY3Rpb24gd2l0aGluIHRoZSB2ZXJpZmllci4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIHZlcmlmaWVyIGZyb20gYWNjZXB0aW5nIHdoYXQgYXBwZWFycyB0byBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgbWFpbiBwcm9ncmFtIHdoZW4gYGVudi0mZ3Q7c3VicHJvZ19jbnQgPT0gMWAuIEl0IG5vdyByZWplY3RzIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBtYWluIEJQRiBwcm9ncmFtLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGtpbmQgb2YgY2hhbmdlICpjb3VsZCogYmUgc2lnbmlmaWNhbnQuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhbnl0aGluZyB0aGF0IGFsdGVycyBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBmdW5jdGlvbiBwb2ludGVyIGludGVycHJldGF0aW9uLCB3YXJyYW50cyBhIGNsb3NlIGxvb2suIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgdGhpbmcgYW5kIGlzIGxpa2VseSBtYWtpbmcgdGhlIHZlcmlmaWVyIG1vcmUgcm9idXN0LCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdCBqdXN0IGFzc3VtZS4gIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgY2hlY2sgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hpY2ggbWlnaHQgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgY2hlY2tfbGRfaW1tYC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBncmVwYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHkgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgY291bGQgdHJpZ2dlciB0aGlzIG5ldyBjaGVjaywgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgd2F5cyB0byBieXBhc3MgaXQuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFkZGVkIGBwc2V1ZG9fZnVuYy5jYCBzZWxmdGVzdCBpcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHdoaWNoIGl0IHNlZW1zIGxpa2UgaXQgaXMpLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgYWRkcyBtb3JlIHJpZ29yb3VzIHZlcmlmaWNhdGlvbi4gVGhpcyBhZGRzIHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzA3MDpcdFx0XHRcdGJyZWFrO1xuMTcwNzE6XHRcdFx0ZGVmYXVsdDpcbjE3MDcyOlx0XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7cHNldWRvIGJ0ZiBpZDogdW5leHBlY3RlZCBkc3QgcmVnIHR5cGVcJiMzNDspO1xuMTcwNzM6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE3MDc0Olx0XHRcdH1cbjE3MDc1Olx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbjE3MDc2Olx0XHRcdHJldHVybiAwO1xuMTcwNzc6XHRcdH1cbjE3MDc4Olx0XG4xNzA3OTpcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkMpIHtcbjE3MDgwOlx0XHRcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbjE3MDgxOlx0XHRcdHUzMiBzdWJwcm9nbm8gPSBicGZfZmluZF9zdWJwcm9nKGVudixcbjE3MDgyOlx0XHRcdFx0XHRcdFx0IGVudi1cdTAwM2VpbnNuX2lkeCAmIzQzOyBpbnNuLVx1MDAzZWltbSAmIzQzOyAxKTtcbjE3MDgzOlx0XG4xNzA4NDpcdFx0XHRpZiAoIWF1eC1cdTAwM2VmdW5jX2luZm8pIHtcbjE3MDg1Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21pc3NpbmcgYnRmIGZ1bmNfaW5mb1xcblwmIzM0Oyk7XG4xNzA4NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcwODc6XHRcdFx0fVxuMTcwODg6XHRcdFx0aWYgKGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcbjE3MDg5Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXG5cJiMzNDspO1xuMTcwOTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MDkxOlx0XHRcdH1cbjE3MDkyOlx0XHRcdC8qXG4xNzA5MzpcdFx0XHQgKiBXaGVuIGVudi1cdTAwM2VzdWJwcm9nX2NudCA9PSAxIHRoaXMgaW5zdHJ1Y3Rpb24gd29uJiMzOTt0IGJlIHJld3JpdHRlblxuMTcwOTQ6XHRcdFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cbjE3MDk1Olx0XHRcdCAqIGNvbWJpbmVzIGUuZy4gbWFpbiBhbmQgdGltZXIgY2FsbGJhY2sgYW5kIGp1c3QgcmVqZWN0IGhlcmUuXG4xNzA5NjpcdFx0XHQgKi9cbjE3MDk3Olx0XHRcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xuMTcwOTg6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXG5cJiMzNDspO1xuMTcwOTk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MTAwOlx0XHRcdH1cbjE3MTAxOlx0XG4xNzEwMjpcdFx0XHRkc3RfcmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fRlVOQztcbjE3MTAzOlx0XHRcdGRzdF9yZWctXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xuMTcxMDQ6XHRcdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuMTcxMDU6XHRcdFx0cmV0dXJuIDA7XG4xNzEwNjpcdFx0fVxuMTcxMDc6XHRcbjE3MTA4Olx0XHRtYXAgPSBlbnYtXHUwMDNldXNlZF9tYXBzW2F1eC1cdTAwM2VtYXBfaW5kZXhdO1xuMTcxMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKnJlYWNoYWJsZSo/IFllcCwgdGhlIEJQRiB2ZXJpZmllciBsaXZlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoYXQgYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBzeXNjYWxsLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpOZXh0LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBteSB0aW1lIHRvIGZ1eno/IEFic29sdXRlbHkuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSAqY29yZSogY29tcG9uZW50IG9mIHRoZSBCUEYgc3Vic3lzdGVtLiBBbnkgY2hhbmdlIGhlcmXigJR2ZXJpZmljYXRpb24gbG9naWMgdHdlYWtzLCBpbnN0cnVjdGlvbiBjaGVja3MsIGhvdyB3ZSBoYW5kbGUgcHNldWRvIGZ1bmN0aW9ucywgc3VicHJvZ3JhbSBjaGVja3MsIGFsbCBvZiBpdOKAlGhhcyB0aGUgcG90ZW50aWFsIHRvIG1vZGlmeSBhY3R1YWxseSAqZXhlY3V0YWJsZSBrZXJuZWwgY29kZSouIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbmQsIHRoZSBzdGFuZGFyZCBhcHByb2FjaCBvZiB1c2luZyBzeXprYWxsZXIgd2l0aCBCUEYgc3lzY2FsbHMgaXMga25vd24gdG8gYmUgZWZmZWN0aXZlLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIFNvLCB5ZWFoLCBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBmb3IgQlBGIGFuZCB0aGUgQlBGIHN5c2NhbGwgaXRzZWxmLiBUaW1lIHRvIHBva2UgYXJvdW5kIGBpbml0L0tjb25maWdgLCBvciBtYXliZSBga2VybmVsL2JwZi9LY29uZmlnYCwgb3IgcGVyaGFwcyBga2VybmVsL2JwZi9NYWtlZmlsZWAsIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDEzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHNtX3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQxNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsc21fdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02ND1zdGF0aWMgREVGSU5FX01VVEVYKHVwZGF0ZV9tdXRleCk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY5OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MC19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NTk0OT1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTU5NjUtXG5rZXJuZWwvYnBmL2J0Zi5jOjU5NjY6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL2J0Zi5jLTU5NjctXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2Vcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5MjM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19kZXZfcHJvZ19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI1LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTI2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX2Rldl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MjctXHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBjZ3JvdXBfZGV2X2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNDc4PXN0YXRpYyB1MzIgc3lzY3RsX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0MS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU0Mjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zeXNjdGxfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQzLVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gc3lzY3RsX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNzU2PXN0YXRpYyBpbnQgY2dfc29ja29wdF9nZXRfcHJvbG9ndWUoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zixcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjQtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NjU6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja29wdF92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjYtXHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBjZ19zb2Nrb3B0X2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03NDE9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQzLVx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2dzID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ0Olx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKm9wcyA9IGVudi1cdTAwM2VvcHM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0NS1cdGludCBpLCBjbnQsIHNpemUsIGN0eF9maWVsZF9zaXplLCByZXQsIGRlbHRhID0gMCwgZXBpbG9ndWVfY250ID0gMDtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNS0vKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzY6ICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLVx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzctICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY2Mjg9c3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2NDU6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N5c2NhbGxfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0Ni1cdC5nZXRfZnVuY19wcm90byAgPSBzeXNjYWxsX3Byb2dfZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTk5Mj1fX2JwZl9rZnVuYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmJwZl9pdGVyX3Rhc2tfdm1hX25leHQoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTAtXHQvKlxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDExOlx0ICogVGhlIHZlcmlmaWVyIG9ubHkgdHJ1c3RzIHZtX21tIGFuZCB2bV9maWxlIChzZWVcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMi1cdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTctLyogZHVtbXkgX29wcy4gVGhlIHZlcmlmaWVyIHdpbGwgb3BlcmF0ZSBvbiB0YXJnZXQgcHJvZ3JhbSYjMzk7cyBvcHMuICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfZXh0ZW5zaW9uX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE5LX07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MS0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSkgXFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjpcdFtfaWRdID0gXHUwMDI2IF9uYW1lICMjIF92ZXJpZmllcl9vcHMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDMtI2RlZmluZSBCUEZfTUFQX1RZUEUoX2lkLCBfb3BzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjMxPWVudW0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjQyLSAqIEZvciB0cmFkaXRpb25hbCBQVFJfVE9fTUFQX1ZBTFVFIG9yIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MsIHRoZSB2ZXJpZmllclxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyNDM6ICogY2xlYXJzIHJlZy1cdTAwM2VpZCBhZnRlciB2YWx1ZV9vcl9udWxsLVx1MDAzZXZhbHVlIHRyYW5zaXRpb24sIHNpbmNlIHRoZSB2ZXJpZmllciBvbmx5XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI0NC0gKiBjYXJlcyBhYm91dCB0aGUgcmFuZ2Ugb2YgYWNjZXNzIHRvIHZhbGlkIG1hcCB2YWx1ZSBwb2ludGVyIGFuZCBkb2VzbiYjMzk7dCBjYXJlXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NDM4PXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxMi1cdFx0XHRcdGVudiwgXCYjMzQ7VGhpcyBvcGVyYXRpb24gc3VidHJhY3RzIHBvaW50ZXIgcmVnaXN0ZXIgUiVkIGZyb20gc2NhbGFyIHJlZ2lzdGVyIFIlZC4gXCYjMzQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2MTM6XHRcdFx0XHRcJiMzNDtUaGUgdmVyaWZpZXIgb25seSB0cmFja3MgcG9pbnRlci1taW51cy1zY2FsYXIgYXJpdGhtZXRpYyBmb3IgYWxsb3dlZCBwb2ludGVyIHR5cGVzLlwmIzM0Oyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxNC1cdFx0XHRcdHB0cl9yZWdubywgZHN0KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc1MzA9Ym9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NTk1LSAqXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc1OTY6ICogLSBpZiBzbywgYW5kIGlmIHZlcmlmaWVyIG9yIGN1cnJlbnQgSklUIGlubGluZXMgdGhlIGNhbGwgdG8gdGhlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc1OTctICogICBicGZfZmFzdGNhbGwgZnVuY3Rpb24gKGUuZy4gYSBoZWxwZXIgY2FsbCksIGtlcm5lbCByZW1vdmVzIHVubmVjZXNzYXJ5XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY5PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODYtXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODc6XHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4OC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMjA9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzU5LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM2MDpcdFx0ZW52LVx1MDAzZW9wcyA9IGJwZl92ZXJpZmllcl9vcHNbdGd0X3Byb2ctXHUwMDNldHlwZV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjEtXHRcdHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSB0Z3RfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5OTM9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDAzLVx0Lyogbm8gcHJvZ3JhbSBpcyB2YWxpZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDA0Olx0aWYgKEFSUkFZX1NJWkUoYnBmX3ZlcmlmaWVyX29wcykgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE1LVx0ZW52LVx1MDAzZXByb2cgPSAqcHJvZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTAxNjpcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW2Vudi1cdTAwM2Vwcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE3LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTAyNTpcdC8qIHVzZXIgY291bGQgaGF2ZSByZXF1ZXN0ZWQgdmVyYm9zZSB2ZXJpZmllciBvdXRwdXRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNi1cdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIGJlZ2luIGJ5IGNoZWNraW5nIGBpbml0L0tjb25maWdgIOKAkyBpdCBvZnRlbiBob2xkcyBmdW5kYW1lbnRhbCBzZXR0aW5ncyByZWxhdGVkIHRvIGtlcm5lbCBmZWF0dXJlcy4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCB0aGUgbmV4dCBsb2dpY2FsIGxvY2F0aW9uIHdvdWxkIGJlIHRoZSBjb3JlIEJQRiBpbXBsZW1lbnRhdGlvbiBkaXJlY3RvcnkgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYmIzM5O3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gdGhvc2UgdHdvIHBsYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjgxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkZpbmRpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzbiYjMzk7dCB1c3VhbGx5IHNvbWV0aGluZyBJJiMzOTtkIGhhdmUgdG8gZG8gZnJvbSBtZW1vcnksIGJ1dCBJIGhhdmUgYSBodW5jaCBpdCBpcyBsaW5rZWQgdG8gc29tZXRoaW5nIHNwZWNpZmljIGFuZCBJJiMzOTttIGRyYXdpbmcgYSBibGFuay4gVGhlcmVmb3JlLCB0aW1lIHRvIHN5c3RlbWF0aWNhbGx5IGxvY2F0ZSBpdC4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBjb25maWd1cmVkLCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBldmVuIGlmIGl0JiMzOTtzIGRlcHJlY2F0ZWQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJIGhhdmUgdG8gZG8uIFRoZSBiZXN0IHdheSB0byBnZXQgYSBmdWxsIHBpY3R1cmUgaXMgdG8gc2VhcmNoIGFjcm9zcyAqYWxsKiB0aGUgS2NvbmZpZyBmaWxlcy4gQSBjcm9zcy1yZWZlcmVuY2UgaXMgbGlrZWx5IHRvIGhpZ2hsaWdodCBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG9zc2libGUgYnVpbGQgZmxhZ3MgdGhhdCBzdXJyb3VuZCB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkmIzM5O3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJiMzOTttIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcbiAgMjE6XHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuICAyMjpcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG4gIDIzOlx0XHRib29sXG4gIDI0Olx0XG4gIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBSZWxhdGlvbnNoaXBzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpczsgaXQgc2VlbXMgd2UgYXJlIGRlYWxpbmcgd2l0aCBgQlBGX1NZU0NBTExgIGluIHRoZSBjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY2hlY2tfbGRfaW1tYCBpbnRlcmFjdHMgd2l0aCBpdC4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIGlzIGBjaGVja19sZF9pbW1gIHN0YXRpYywgbm9uLXN0YXRpYywgb3IgaXMgaXQgY2FsbGVkIGJ5IHNvbWV0aGluZyBlbHNlPyBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgbGlua3MgdG9nZXRoZXIgYW5kIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBzdGFydCBieSBmaWd1cmluZyBvdXQgaXRzIHNjb3BlIGFuZCBzZWUgd2hvIGlzIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2xkX2ltbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3ODc9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzAyNi0vKiB2ZXJpZnkgQlBGX0xEX0lNTTY0IGluc3RydWN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMjc6c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDI4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwODc9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE4Mi1cdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTgzOlx0XHRcdGVyciA9IGNoZWNrX2xkX2ltbShlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTg0LVx0XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBDb250cm9sIEZsb3cqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBjaGVja19sZF9pbW1gIGFuZCBgZG9fY2hlY2tfaW5zbmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoZXJlIGBjaGVja19sZF9pbW1gLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGlzIHVzZWQuIElzIGl0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkb2VzIGl0IGV4aXN0IGFzIGEgZGlzY3JldGUgc3ltYm9sPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGtleS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZXhhbWluZSB0aGUgY2FsbHMgdG8gYGJwZl9jaGVja2AsIGBkb19jaGVja2AsIG9yIGBkb19jaGVja19pbnNuYCB0b28uIFNlZWluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgQlBGIHZlcmlmaWVyIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19jaGVja1xcKHxkb19jaGVja19pbnNuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xODAyOT1zdGF0aWMgaW50IGNoZWNrX2luZGlyZWN0X2p1bXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA4Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA4NzpzdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE5Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODE5NzpzdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxOTgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODM0Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODM0NzpcdFx0ZXJyID0gZG9fY2hlY2tfaW5zbihlbnYsIFx1MDAyNmRvX3ByaW50X3N0YXRlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODM0OC1cdFx0aWYgKGVycm9yX3JlY292ZXJhYmxlX3dpdGhfbm9zcGVjKGVycikgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZXNwZWN1bGF0aXZlKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Mjg0PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQyNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQyODpcdHJldCA9IGRvX2NoZWNrKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0Mjktb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc4NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIEluc3RydWN0aW9uIFZhbGlkYXRpb24gV29ya2Zsb3cqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGluc3RydWN0aW9uIHZhbGlkYXRpb24gcHJvY2VzcyBoZXJlLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBzZXQgb2YgY29yZSBjaGVja3Mgb3IgZnVuY3Rpb25zIHdlJiMzOTtyZSB1c2luZzogYGNoZWNrX2xkX2ltbWAsIGBkb19jaGVja19pbnNuYCwgYGRvX2NoZWNrX2NvbW1vbmAsIGFuZCwgY3J1Y2lhbGx5LCBgYnBmX2NoZWNrYC4gSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIE15IG5leHQgc3RlcCBoYXMgdG8gYmUgZXhhbWluaW5nIHRoZSBjYWxsIGNoYWluIG9mIGBicGZfY2hlY2tgLiBVbmRlcnN0YW5kaW5nIHdoYXQgY2FsbHMgaW50byB0aGlzIGZ1bmN0aW9uIGlzIGtleS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQsIGFuZCBieSB0cmFjaW5nIGl0cyBjYWxsZXJzIEkgY2FuIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hlcmUgYW5kIGhvdyB0aGUgaW5zdHJ1Y3Rpb24gdmFsaWRhdGlvbiBvY2N1cnMuIEl0IHNlZW1zIGxpa2UgYSBjbGFzc2ljIGJvdHRvbS11cCBhbmFseXNpcyB3aWxsIGJlIGhlbHBmdWwgaW4gdGhpcyBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVja1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0xMjg9cmV1c2VzIHRoZSBleGlzdGluZyBgYGZkX2FycmF5YGA6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM0LSAgIHNldCBzbyB0aGUga2VybmVsIGtub3dzIHRoZSBhcnJheSYjMzk7cyBsZW5ndGguXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdDoxMzU6Iy4gU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBydW5zIGluc2lkZSB0aGUgdmVyaWZpZXIgKGBgYnBmX2NoZWNrKClgYCksIG9uY2UgaXRcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNi0gICBoYXMgcmVzb2x2ZWQgdGhlIGBgZmRfYXJyYXlgYCBlbnRyaWVzIGludG8gdGhlIHByb2dyYW0mIzM5O3MgYGB1c2VkX21hcHNgYC4gVGhlXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q9MjMwPVRoaXMgaG9vayBnYXRlcyBhZG1pc3Npb24gKipmb3IgZXZlcnkgbG9hZCoqLCBmcm9tIGEgc2luZ2xlIGNhbGwgc2l0ZSBpbnNpZGUgdGhlXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdDoyMzE6dmVyaWZpZXIgKGBgYnBmX2NoZWNrKClgYCksIGJlZm9yZSB0aGUgbWFpbiB2ZXJpZmljYXRpb24gd29yay4gSXQgcnVucyBhZnRlciB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTIzMi1vcHRpb25hbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBzbyB0aGUgdmVyZGljdCBhbmQga2V5cmluZyBmaWVsZHMgYXJlIGZpbmFsIC0gdGhlXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zMDUxPXN0cnVjdCBicGZfbG9nX2F0dHI7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwNTI6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipmcCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUzLVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTA1PXN0cnVjdCBicGZfZmRfYXJyYXkge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTEzLS8qIHNpbmdsZSBjb250YWluZXIgZm9yIGFsbCBzdHJ1Y3RzXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjkxNDogKiBvbmUgdmVyaWZpZXJfZW52IHBlciBicGZfY2hlY2soKSBjYWxsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTkxNS0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE3MDA9aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTcwMi1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTcwMzovKiBGdW5jdGlvbnMgaW4gZml4dXBzLmMsIGNhbGxlZCBmcm9tIGJwZl9jaGVjaygpICovXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE3MDQtaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTcxNz1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC90Y3AuaC03MzAtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTMyLVx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxMzM6XHRlcnIgPSBicGZfY2hlY2soXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1Mz1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODY3LS8qXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4Njg6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NjktICogb25jZSB0aGUgcHJvZ3JhbSYjMzk7cyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NzY9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkzOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTk0LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDA3LVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDg6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMDktXHQgKi9cbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjYzPXN0YXRpYyBpbnQgY29va2llX3RjcF9yZXFza19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzAxLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEYpXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzAyOnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMy17XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI1LVx0aWYgKGNvb2tpZV9icGZfb2soc2tiKSkge1xubmV0L2lwdjQvc3luY29va2llcy5jOjQyNjpcdFx0cmVxID0gY29va2llX2JwZl9jaGVjayhzaywgc2tiKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjctXHR9IGVsc2Uge1xuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE5Mi1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTk0LVx0fSBlbHNlIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zaWduZWRfbG9hZGVyLmM9NTI3PXN0YXRpYyB2b2lkIHNpZ25hdHVyZV9mYWlsdXJlX2xvZ3Modm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zaWduZWRfbG9hZGVyLmMtNTM2LVx0XHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2lnbmVkX2xvYWRlci5jOjUzNzpcdFx0ICogU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBub3cgcnVucyBpbnNpZGUgYnBmX2NoZWNrKCksIHNvIGFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NpZ25lZF9sb2FkZXIuYy01MzgtXHRcdCAqIGZhaWx1cmUgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgdmVyaWZpZXIgbG9nLiBBIHByZXNlbnQtYnV0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkwNAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGlzIHdpdGhpbiB0aGUgYGNoZWNrX2xkX2ltbWAgZnVuY3Rpb24uIEdvb2QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIEkgcXVpY2tseSBjb25maXJtIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIOKAkyBgc3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKWAg4oCTIGFuZCB0aGF0IGl0IHJlc2lkZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgYWxzbyBub3RlIHRoYXQgdGhlIHN1cnJvdW5kaW5nIHZlcmlmaWNhdGlvbiBmdW5jdGlvbnMsIGBkb19jaGVja19pbnNuYCwgYGRvX2NoZWNrYCwgYW5kIGBicGZfY2hlY2tgLCBhcmUgYWxsIGluIHRoZSBzYW1lIGZpbGUuIFRoYXQmIzM5O3MgZ29vZCBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlOyBleGNlbGxlbnQsIG1lYW5pbmcgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciB0YXJnZXRlZCBmdXp6aW5nLiBUaGUgcmVhc29uaW5nIGNvbmZpcm1zIHRoYXQgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSBgQlBGX1BTRVVET19GVU5DYCByZWZlcmVuY2VzIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgdW5wYXRjaGVkIGNvZGUgd2l0aGluIHRoZSBtYWluIHByb2dyYW0gd2hlbiBvbmx5IG9uZSBzdWJwcm9ncmFtIGV4aXN0cyAoc3VicHJvZyAwKS4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGNvZGUsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAg4oCTIGEgY3JpdGljYWwgc3lzY2FsbC4gVGhpcyB0ZWxscyBtZSB0aGUgbG9naWMgaXMgc291bmQgYW5kIHRoZSBleHBvc3VyZSBpcyByZWxldmFudC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgY2hlY2tfbGRfaW1tYCwgYGRvX2NoZWNrX2luc25gLCBhbmQgYGJwZl9jaGVja2AgYXJlIHRoZSBrZXkgYXJlYXMgZm9yIGRlZXBlciBzY3J1dGlueS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYWxzbyBwcm92aWRlZCBhcyBgQlBGX1NZU0NBTExgIOKAkyB3aGljaCBJIGFscmVhZHkga25ldyBlbmFibGVzIGB2ZXJpZmllci5vYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19CUEZgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIGFuZCB5ZXMsIGl0IGlzLiBBbGwgZ29vZCB0aGVyZS4KCkkgYWxzbyBzZWUgdGhhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBpcyB0aGUgb25seSBrZXJuZWwgZmlsZSBjaGFuZ2VkLCBwbHVzIHRoZSB1c2Vyc3BhY2UgdGVzdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNgIGhhcyBiZWVuIGFkZGVkLiBTbyBpdCYjMzk7cyBmYWlybHkgY29udGFpbmVkLgoKQWxyaWdodCwgZXZlcnl0aGluZyBsb29rcyBjbGVhbiwgY29uY2lzZSwgYW5kIHdlbGwtZGVmaW5lZC4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfaW1tJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX2luc24mIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19sZF9pbW0mIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYnkgYWRkaW5nIGEgY2hlY2sgaW4gY2hlY2tfbGRfaW1tKCkgdG8gcmVqZWN0IEJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2VzIHRvIHN1YnByb2cgMCAodGhlIG1haW4gcHJvZ3JhbSksIHByZXZlbnRpbmcgdW5wYXRjaGVkIGluc3RydWN0aW9uIGFkZHJlc3NlcyB3aGVuIHN1YnByb2dfY250IGlzIDEuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTdiNzMyOGYxODI2YmZjZDE4Y2I0ZjlmOGM1NjlmMzE0ZjA0YzFlOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTcwODksNiAmIzQzOzE3MDg5LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCXZlcmJvc2UoZW52LCAmIzM0O2NhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiBlbnYtJmd0O3N1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24mIzM5O3QgYmUgcmV3cml0dGVuCiYjNDM7CQkgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbQomIzQzOwkJICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHN1YnByb2dubyA9PSAwKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAogCQlkc3RfcmVnLSZndDt0eXBlID0gUFRSX1RPX0ZVTkM7CiAJCWRzdF9yZWctJmd0O3N1YnByb2dubyA9IHN1YnByb2dubzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jCkBAIC0wLDAgJiM0MzsxLDQ1IEBACiYjNDM7LyoKJiM0MzsgKiBCdWdneSB2ZXJpZmllciBhY2NlcHRlZCB0aGUgcHJvZ3JhbSBiZWxvdyB3aGlsZSBub3QgcGF0Y2hpbmcgQlBGX1BTRVVET19GVU5DCiYjNDM7ICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGwKJiM0MzsgKiB0byBhIGJvZ3VzIGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7ewomIzQzOwkmIzM0O0JQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuaW5zbnMgPSB7CiYjNDM7CS8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RpbWVyX21hcCwgJmFtcDsoaW50KXswfSk7ICovCiYjNDM7CUJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMTAsIC00LCAwKSwKJiM0MzsJQlBGX01PVjY0X1JFRyhCUEZfUkVHXzIsIEJQRl9SRUdfMTApLAomIzQzOwlCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTQpLAomIzQzOwlCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAxMCksCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR182LCBCUEZfUkVHXzApLAomIzQzOwkvKiBicGZfdGltZXJfaW5pdChyNiwgJmFtcDt0aW1lcl9tYXAsIDApOyAqLwomIzQzOwlCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSwKJiM0MzsJQlBGX0xEX01BUF9GRChCUEZfUkVHXzIsIDApLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksCiYjNDM7CUJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfaW5pdCksCiYjNDM7CS8qIGJwZl90aW1lcl9zZXRfY2FsbGJhY2socjYsICZsdDtpbnNuICMwJmd0Oyk7ICovCiYjNDM7CUJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLAomIzQzOwlCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksCiYjNDM7CUJQRl9SQVdfSU5TTigwLCAwLCAwLCAwLCAwKSwKJiM0MzsJQlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9zZXRfY2FsbGJhY2spLAomIzQzOwlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfSwKJiM0MzsJLnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCwKJiM0MzsJLmZpeHVwX21hcF90aW1lciA9IHsgMywgOSB9LAomIzQzOwkucmVzdWx0ID0gUkVKRUNULAomIzQzOwkuZXJyc3RyID0gJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbSYjMzQ7LAomIzQzOwkuZnVuY19pbmZvID0geyB7IDAsIDQgLyogbWFpbl9wcm9nICovIH0gfSwKJiM0MzsJLmZ1bmNfaW5mb19jbnQgPSAxLAomIzQzOwkuYnRmX3N0cmluZ3MgPSAmIzM0O1wwaW50XDBjdHhcMG1haW5fcHJvZyYjMzQ7LAomIzQzOwkuYnRmX3R5cGVzID0gewomIzQzOwkvKiAxOiBpbnQgICAgICAgICAgICAqLyBCVEZfVFlQRV9JTlRfRU5DKDEsIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksCiYjNDM7CS8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLAomIzQzOwkvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksCiYjNDM7CQkJCUJURl9GVU5DX1BST1RPX0FSR19FTkMoNSwgMiksCiYjNDM7CS8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSwKJiM0MzsJQlRGX0VORF9SQVcKJiM0MzsJfQomIzQzO30sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgQW5hbHlzaXMgb2YgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LiBMb29raW5nIGF0IHRoZSBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjaGVja19sZF9pbW1gIGZ1bmN0aW9uLCBJIHNlZSBhIG5ldyBjaGVjazoKCmBgYGMKJiM0MzsJCS8qCiYjNDM7CQkgKiBXaGVuIGVudi0mZ3Q7c3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbiYjMzk7dCBiZSByZXdyaXR0ZW4KJiM0MzsJCSAqIHRvIGhvbGQgYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MuIEFzc3VtZSB0aGF0IG5vIHVzYWJsZSBwcm9ncmFtCiYjNDM7CQkgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3VicHJvZ25vID09IDApIHsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQpgYGAKCkVzc2VudGlhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSBiZWluZyB0aGUgJiMzNDttYWluJiMzNDsgcHJvZ3JhbSB3aGVuIGBzdWJwcm9nX2NudGAgaXMgMSwgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC4gVGhpcyBpcyBwcm9iYWJseSB0byBwcmV2ZW50IHNvbWUga2luZCBvZiB3ZWlyZCBpbnRlcmFjdGlvbiB0aGF0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgZnJvbSBhIHByb2dyYW1taW5nIGRlc2lnbiBwZXJzcGVjdGl2ZTsgaXQgc291bmRzIGxpa2UgdGhleSYjMzk7cmUgZXhwbGljaXRseSBkaXNhbGxvd2luZyBhIHNwZWNpZmljIHNjZW5hcmlvLgoKQW5kIHRoZXJlJiMzOTtzIGEgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jYCB0byBzdXBwb3J0IHRoaXMgY2hhbmdlLgoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYXJvdW5kIGBjaGVja19sZF9pbW1gLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGVjayB3aXRoaW4gdGhlIGJyb2FkZXIgdmVyaWZpZXIuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBpbW1lZGlhdGUgbG9hZHMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhlIG92ZXJhbGwgcHJvZ3JhbSBzdHJ1Y3R1cmUuIFRoaXMgbWlnaHQgcmV2ZWFsIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IG5ldyBjb2RlcGF0aHMgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgY2hlY2sgaXMgKmRvaW5nKiwgYW5kIGhvdyBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGJlaGF2ZSwgYXMgd2VsbCBhcyBpZiBpdCB3b3VsZCB0cmlnZ2VyIGFueSBpc3N1ZXMgaW4gYSBtb3JlIGNvbXBsZXggc2NlbmFyaW8gd2l0aCBLTVNBTiBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MDcwOlx0XHRcdFx0YnJlYWs7XG4xNzA3MTpcdFx0XHRkZWZhdWx0OlxuMTcwNzI6XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtwc2V1ZG8gYnRmIGlkOiB1bmV4cGVjdGVkIGRzdCByZWcgdHlwZVwmIzM0Oyk7XG4xNzA3MzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTcwNzQ6XHRcdFx0fVxuMTcwNzU6XHRcdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuMTcwNzY6XHRcdFx0cmV0dXJuIDA7XG4xNzA3NzpcdFx0fVxuMTcwNzg6XHRcbjE3MDc5Olx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fRlVOQykge1xuMTcwODA6XHRcdFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4O1xuMTcwODE6XHRcdFx0dTMyIHN1YnByb2dubyA9IGJwZl9maW5kX3N1YnByb2coZW52LFxuMTcwODI6XHRcdFx0XHRcdFx0XHQgZW52LVx1MDAzZWluc25faWR4ICYjNDM7IGluc24tXHUwMDNlaW1tICYjNDM7IDEpO1xuMTcwODM6XHRcbjE3MDg0Olx0XHRcdGlmICghYXV4LVx1MDAzZWZ1bmNfaW5mbykge1xuMTcwODU6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWlzc2luZyBidGYgZnVuY19pbmZvXFxuXCYjMzQ7KTtcbjE3MDg2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzA4NzpcdFx0XHR9XG4xNzA4ODpcdFx0XHRpZiAoYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ25vXS5saW5rYWdlICE9IEJURl9GVU5DX1NUQVRJQykge1xuMTcwODk6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gbm90IHN0YXRpY1xcblwmIzM0Oyk7XG4xNzA5MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcwOTE6XHRcdFx0fVxuMTcwOTI6XHRcdFx0LypcbjE3MDkzOlx0XHRcdCAqIFdoZW4gZW52LVx1MDAzZXN1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24mIzM5O3QgYmUgcmV3cml0dGVuXG4xNzA5NDpcdFx0XHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxuMTcwOTU6XHRcdFx0ICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS5cbjE3MDk2Olx0XHRcdCAqL1xuMTcwOTc6XHRcdFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XG4xNzA5ODpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVxcblwmIzM0Oyk7XG4xNzA5OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcxMDA6XHRcdFx0fVxuMTcxMDE6XHRcbjE3MTAyOlx0XHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xuMTcxMDM6XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XG4xNzEwNDpcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4xNzEwNTpcdFx0XHRyZXR1cm4gMDtcbjE3MTA2Olx0XHR9XG4xNzEwNzpcdFxuMTcxMDg6XHRcdG1hcCA9IGVudi1cdTAwM2V1c2VkX21hcHNbYXV4LVx1MDAzZW1hcF9pbmRleF07XG4xNzEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY5CgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgcHJldHR5IGNsZWFyOiB0aGUgQlBGIHZlcmlmaWVyIHdhcyBtaXN0YWtlbmx5IGFsbG93aW5nIGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyB0byBwb2ludCB0byB0aGUgbWFpbiBwcm9ncmFtIChzdWJwcm9nIDApIHdoZW4gaXQgc2hvdWxkbiYjMzk7dCBoYXZlLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG9ubHkgdGhlIG1haW4gcHJvZ3JhbSBvciB3aGVuIHRoZSBzdWJwcm9ncmFtIG51bWJlciBpcyAwLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB0aGUgSklUIGtpY2tzIGluLCBpdCB3b3VsZG4mIzM5O3QgcmV3cml0ZSB0aGUgcHNldWRvLWZ1bmN0aW9uIHBvaW50ZXIgdG8gYSAqcmVhbCogZnVuY3Rpb24gcG9pbnRlciwgYW5kIHRoZSBwcm9ncmFtIHdvdWxkIHRyeSB0byBjYWxsIGdhcmJhZ2UuIENsYXNzaWMgY29udHJvbCBmbG93IGhpamFjaywgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW8gLSBhIGNyaXRpY2FsIGJ1Zy4KClRoZSBwcm9wb3NlZCBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXg6IGl0IGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgY2hlY2tfbGRfaW1tYCB0byBleHBsaWNpdGx5IHJlamVjdCBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIG1haW4gcHJvZ3JhbS4gU2ltcGxlLCBlbGVnYW50LCBhbmQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSByb290IGNhdXNlLiBObyBjb21wbGV4IHJld3JpdGVzLCBqdXN0IGEgc2FuaXR5IGNoZWNrIGR1cmluZyB2ZXJpZmljYXRpb24uCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY2hlY2tsaXN0LiBEb2VzIHRoaXMgcGF0Y2g6CgoxLiAgKipJbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIGZpZWxkcy9wYWRkaW5nIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZD8qKiBObywgZGVmaW5pdGVseSBub3QuIEl0JiMzOTtzIGEgdmVyaWZpY2F0aW9uIGNoYW5nZSwgbm90IGEgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLgoyLiAgKipSZWx5IG9uIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gVGhlIGBzdWJwcm9nbm9gIGlzIGEgYHUzMmAgcmV0dXJuZWQgYnkgYGJwZl9maW5kX3N1YnByb2dgLCB3aGljaCBpcyBpbml0aWFsaXplZCwgc28gdGhpcyBpc24mIzM5O3QgYSBjb25jZXJuLgozLiAgKipJbnZvbHZlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8qKiBOb3QgYXQgYWxsLiBJdCYjMzk7cyBqdXN0IGEgdmFsaWRhdGlvbiBjaGVjay4KNC4gICoqQWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8qKiBObywgdGhlIHBhdGNoIHNpbXBseSByZWplY3RzIGFuIGludmFsaWQgcHJvZ3JhbS4KClRoZSBwYXRjaCBzaW1wbHkgcmVqZWN0cyBpbnZhbGlkIEJQRiBwcm9ncmFtcyB3aXRoIGBzdWJwcm9nbm8gPT0gMGAgZHVyaW5nIEJQRiB2ZXJpZmljYXRpb24uIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgYSBidWcsIG5vdCBjcmVhdGluZyBuZXcgb25lcy4gVGhlIHByZXZpb3VzIGJ1ZyB3YXMgYSB2ZXJpZmllciBpc3N1ZSwgYW5kIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSByb290IGNhdXNlIG9mIGNvbnRyb2wgZmxvdyBoaWphY2tzLCBjcmFzaGVzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXJlJiMzOTtzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLgoKU2VlbXMgY3J5c3RhbCBjbGVhci4gTm8gS01TQU4gaW1wbGljYXRpb25zLiBOZWVkS01TQU4gc2hvdWxkIGFic29sdXRlbHkgYmUgZmFsc2UuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgS01TQU4gcmVhc29uaW5nIHN0cnVjdHVyZSwgYW5kIGl0IGFsaWducyBwZXJmZWN0bHkgd2l0aCBteSBhc3Nlc3NtZW50LiBUaGlzIHBhdGNoIGlzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyIChgY2hlY2tfbGRfaW1tYCkgdG8gcmVqZWN0IGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9ncmFtIChgc3VicHJvZ25vID09IDBgKSwgcHJldmVudGluZyBhbiBpc3N1ZSB3aGVyZSBzdWNoIHBzZXVkby1mdW5jIGluc3RydWN0aW9ucyB3ZXJlIG5vdCBwYXRjaGVkIHdpdGggYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MgYW5kIGxlZCB0byBjYWxscyB0byBib2d1cyBhZGRyZXNzZXMuIFRoaXMgaXMgYSBwdXJlIHZlcmlmaWNhdGlvbi92YWxpZGF0aW9uIGNoZWNrIHJlamVjdGluZyBpbnZhbGlkIEJQRiBieXRlY29kZS4gSXQgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyIChgY2hlY2tfbGRfaW1tYCkgdG8gcmVqZWN0IGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9ncmFtIChgc3VicHJvZ25vID09IDBgKSwgcHJldmVudGluZyBhbiBpc3N1ZSB3aGVyZSBzdWNoIHBzZXVkby1mdW5jIGluc3RydWN0aW9ucyB3ZXJlIG5vdCBwYXRjaGVkIHdpdGggYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MgYW5kIGxlZCB0byBjYWxscyB0byBib2d1cyBhZGRyZXNzZXMuIFRoaXMgaXMgYSBwdXJlIHZlcmlmaWNhdGlvbi92YWxpZGF0aW9uIGNoZWNrIHJlamVjdGluZyBpbnZhbGlkIEJQRiBieXRlY29kZS4gSXQgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDI6NDUuNTA1MjIzMDg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMzg0NzA4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9pbW1cIixcbiAgICBcImRvX2NoZWNrX2luc25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDI6NDUuNTA1MjI4MTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxMjM3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1N2I3MzI4ZjE4MjZiZmNkMThjYjRmOWY4YzU2OWYzMTRmMDRjMWU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTcwODksNiArMTcwODksMTUgQEAgc3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaGVuIGVudi1cXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbid0IGJlIHJld3JpdHRlblxcbitcXHRcXHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxcbitcXHRcXHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0ZHN0X3JlZy1cXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xcbiBcXHRcXHRkc3RfcmVnLVxcdTAwM2VzdWJwcm9nbm8gPSBzdWJwcm9nbm87XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjYzYzVjNjdkNTFkZWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcXG5AQCAtMCwwICsxLDQ1IEBAXFxuKy8qXFxuKyAqIEJ1Z2d5IHZlcmlmaWVyIGFjY2VwdGVkIHRoZSBwcm9ncmFtIGJlbG93IHdoaWxlIG5vdCBwYXRjaGluZyBCUEZfUFNFVURPX0ZVTkNcXG4rICogbG9hZCBpbnN0cnVjdGlvbiB0byBjb250YWluIGEgcmVhbCBhZGRyZXNzLiBXaGljaCByZXN1bHRlZCBpbiBhIGZ1bmN0aW9uIGNhbGxcXG4rICogdG8gYSBib2d1cyBhZGRyZXNzLlxcbisgKi9cXG4re1xcbitcXHRcXFwiQlBGX1BTRVVET19GVU5DIHJlZmVyZW5jZSB0byB0aGUgbWFpbiBwcm9ncmFtXFxcIixcXG4rXFx0Lmluc25zID0ge1xcbitcXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRpbWVyX21hcCwgXFx1MDAyNihpbnQpezB9KTsgKi9cXG4rXFx0QlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xMCwgLTQsIDApLFxcbitcXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMiwgQlBGX1JFR18xMCksXFxuK1xcdEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtNCksXFxuK1xcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18xLCAwKSxcXG4rXFx0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0pLFxcbitcXHRCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzAsIDAsIDEwKSxcXG4rXFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfMCksXFxuK1xcdC8qIGJwZl90aW1lcl9pbml0KHI2LCBcXHUwMDI2dGltZXJfbWFwLCAwKTsgKi9cXG4rXFx0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfNiksXFxuK1xcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18yLCAwKSxcXG4rXFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzMsIDApLFxcbitcXHRCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3RpbWVyX2luaXQpLFxcbitcXHQvKiBicGZfdGltZXJfc2V0X2NhbGxiYWNrKHI2LCBcXHUwMDNjaW5zbiAjMFxcdTAwM2UpOyAqL1xcbitcXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSxcXG4rXFx0QlBGX1JBV19JTlNOKEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFcsIEJQRl9SRUdfMiwgQlBGX1BTRVVET19GVU5DLCAwLCAtMTUpLFxcbitcXHRCUEZfUkFXX0lOU04oMCwgMCwgMCwgMCwgMCksXFxuK1xcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfc2V0X2NhbGxiYWNrKSxcXG4rXFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxcbitcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdH0sXFxuK1xcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1RSQUNFUE9JTlQsXFxuK1xcdC5maXh1cF9tYXBfdGltZXIgPSB7IDMsIDkgfSxcXG4rXFx0LnJlc3VsdCA9IFJFSkVDVCxcXG4rXFx0LmVycnN0ciA9IFxcXCJjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVxcXCIsXFxuK1xcdC5mdW5jX2luZm8gPSB7IHsgMCwgNCAvKiBtYWluX3Byb2cgKi8gfSB9LFxcbitcXHQuZnVuY19pbmZvX2NudCA9IDEsXFxuK1xcdC5idGZfc3RyaW5ncyA9IFxcXCJcXFxcMGludFxcXFwwY3R4XFxcXDBtYWluX3Byb2dcXFwiLFxcbitcXHQuYnRmX3R5cGVzID0ge1xcbitcXHQvKiAxOiBpbnQgICAgICAgICAgICAqLyBCVEZfVFlQRV9JTlRfRU5DKDEsIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksXFxuK1xcdC8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLFxcbitcXHQvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksXFxuK1xcdFxcdFxcdFxcdEJURl9GVU5DX1BST1RPX0FSR19FTkMoNSwgMiksXFxuK1xcdC8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSxcXG4rXFx0QlRGX0VORF9SQVdcXG4rXFx0fVxcbit9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0Mjo0NS45NDYwMjcxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk3MDU4MDI0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9pbW1cIixcbiAgICBcImRvX2NoZWNrX2luc25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1N2I3MzI4ZjE4MjZiZmNkMThjYjRmOWY4YzU2OWYzMTRmMDRjMWU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMDo0Mjo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTY0MDM1NjgzNzk1MS4uN2Q4ZGRiMWJlZTAwYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTcwODksNiArMTcwODksMTUgQEAgc3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdHZlcmJvc2UoZW52LCBcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0LypcbitcdFx0ICogV2hlbiBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbid0IGJlIHJld3JpdHRlblxuK1x0XHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxuK1x0XHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcbiBcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0ZVTkM7XG4gXHRcdGRzdF9yZWctXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42M2M1YzY3ZDUxZGVhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvcHNldWRvX2Z1bmMuY1xuQEAgLTAsMCArMSw0NSBAQFxuKy8qXG4rICogQnVnZ3kgdmVyaWZpZXIgYWNjZXB0ZWQgdGhlIHByb2dyYW0gYmVsb3cgd2hpbGUgbm90IHBhdGNoaW5nIEJQRl9QU0VVRE9fRlVOQ1xuKyAqIGxvYWQgaW5zdHJ1Y3Rpb24gdG8gY29udGFpbiBhIHJlYWwgYWRkcmVzcy4gV2hpY2ggcmVzdWx0ZWQgaW4gYSBmdW5jdGlvbiBjYWxsXG4rICogdG8gYSBib2d1cyBhZGRyZXNzLlxuKyAqL1xuK3tcbitcdFwiQlBGX1BTRVVET19GVU5DIHJlZmVyZW5jZSB0byB0aGUgbWFpbiBwcm9ncmFtXCIsXG4rXHQuaW5zbnMgPSB7XG4rXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGltZXJfbWFwLCBcdTAwMjYoaW50KXswfSk7ICovXG4rXHRCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEwLCAtNCwgMCksXG4rXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMiwgQlBGX1JFR18xMCksXG4rXHRCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTQpLFxuK1x0QlBGX0xEX01BUF9GRChCUEZfUkVHXzEsIDApLFxuK1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0pLFxuK1x0QlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAxMCksXG4rXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfNiwgQlBGX1JFR18wKSxcbitcdC8qIGJwZl90aW1lcl9pbml0KHI2LCBcdTAwMjZ0aW1lcl9tYXAsIDApOyAqL1xuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfNiksXG4rXHRCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMiwgMCksXG4rXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMywgMCksXG4rXHRCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3RpbWVyX2luaXQpLFxuK1x0LyogYnBmX3RpbWVyX3NldF9jYWxsYmFjayhyNiwgXHUwMDNjaW5zbiAjMFx1MDAzZSk7ICovXG4rXHRCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR182KSxcbitcdEJQRl9SQVdfSU5TTihCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXLCBCUEZfUkVHXzIsIEJQRl9QU0VVRE9fRlVOQywgMCwgLTE1KSxcbitcdEJQRl9SQVdfSU5TTigwLCAwLCAwLCAwLCAwKSxcbitcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfdGltZXJfc2V0X2NhbGxiYWNrKSxcbitcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdEJQRl9FWElUX0lOU04oKSxcbitcdH0sXG4rXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5ULFxuK1x0LmZpeHVwX21hcF90aW1lciA9IHsgMywgOSB9LFxuK1x0LnJlc3VsdCA9IFJFSkVDVCxcbitcdC5lcnJzdHIgPSBcImNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCBiZSB0aGUgbWFpbiBwcm9ncmFtXCIsXG4rXHQuZnVuY19pbmZvID0geyB7IDAsIDQgLyogbWFpbl9wcm9nICovIH0gfSxcbitcdC5mdW5jX2luZm9fY250ID0gMSxcbitcdC5idGZfc3RyaW5ncyA9IFwiXFwwaW50XFwwY3R4XFwwbWFpbl9wcm9nXCIsXG4rXHQuYnRmX3R5cGVzID0ge1xuK1x0LyogMTogaW50ICAgICAgICAgICAgKi8gQlRGX1RZUEVfSU5UX0VOQygxLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLFxuK1x0LyogMjogdm9pZCogICAgICAgICAgKi8gQlRGX1BUUl9FTkMoMCksXG4rXHQvKiAzOiBpbnQgX18odm9pZCAqKSAqLyBCVEZfRlVOQ19QUk9UT19FTkMoMSwgMSksXG4rXHRcdFx0XHRCVEZfRlVOQ19QUk9UT19BUkdfRU5DKDUsIDIpLFxuK1x0LyogNDogbWFpbl9wcm9nICAgICAgKi8gQlRGX0ZVTkNfRU5DKDksIDMpLFxuK1x0QlRGX0VORF9SQVdcbitcdH1cbit9LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDI6NDUuOTQ2MDI4NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQ3ODIzOTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgU3VpdGFiaWxpdHkgb2YgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIG5ldyBrZXJuZWwgcGF0Y2gsIHNwZWNpZmljYWxseSBhIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCksIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuICBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhIHJvdXRpbmUga2VybmVsIG1haW50ZW5hbmNlIGFzc2Vzc21lbnQg4oCTIGEgZGVmZW5zaXZlIG1lYXN1cmUuIFdlIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgYXR0YWNrIHN1cmZhY2Ugb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBsaWtlIHRoaXM6IFtJbnNlcnQgdGhlIHByb3ZpZGVkIGRpZmYgaGVyZSBmb3IgY29udGV4dF0uIEl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIHJlc3RyaWN0aW9uIHRvIHRoZSBgY2hlY2tfbGRfaW1tYCBmdW5jdGlvbiB3aXRoaW4gdGhlIHZlcmlmaWVyLiBFc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIHRoZSB2ZXJpZmllciBmcm9tIGFjY2VwdGluZyB3aGF0IGFwcGVhcnMgdG8gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIG1haW4gcHJvZ3JhbSB3aGVuIGBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMWAuIEl0IG5vdyByZWplY3RzIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBtYWluIEJQRiBwcm9ncmFtLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMga2luZCBvZiBjaGFuZ2UgKmNvdWxkKiBiZSBzaWduaWZpY2FudC4gVGhlIEJQRiB2ZXJpZmllciBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGFueXRoaW5nIHRoYXQgYWx0ZXJzIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIGZ1bmN0aW9uIHBvaW50ZXIgaW50ZXJwcmV0YXRpb24sIHdhcnJhbnRzIGEgY2xvc2UgbG9vay4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aGluZyBhbmQgaXMgbGlrZWx5IG1ha2luZyB0aGUgdmVyaWZpZXIgbW9yZSByb2J1c3QsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBub3QganVzdCBhc3N1bWUuICBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgbmV3IGNoZWNrIGRvZXNuJ3QgY3JlYXRlIG5ldyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hpY2ggbWlnaHQgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBjaGVja19sZF9pbW1gLiBJJ2xsIG5lZWQgdG8gdXNlIGBnaXQgZ3JlcGAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgY29udGV4dC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgY291bGQgdHJpZ2dlciB0aGlzIG5ldyBjaGVjaywgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgd2F5cyB0byBieXBhc3MgaXQuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFkZGVkIGBwc2V1ZG9fZnVuYy5jYCBzZWxmdGVzdCBpcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHdoaWNoIGl0IHNlZW1zIGxpa2UgaXQgaXMpLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgYWRkcyBtb3JlIHJpZ29yb3VzIHZlcmlmaWNhdGlvbi4gVGhpcyBhZGRzIHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzowMS40MjQyNzAwMDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcwNzE6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNzA3MjpcXHRcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHNldWRvIGJ0ZiBpZDogdW5leHBlY3RlZCBkc3QgcmVnIHR5cGVcXFwiKTtcXG4xNzA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNzA3NDpcXHRcXHRcXHR9XFxuMTcwNzU6XFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbjE3MDc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE3MDc3OlxcdFxcdH1cXG4xNzA3ODpcXHRcXG4xNzA3OTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkMpIHtcXG4xNzA4MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eDtcXG4xNzA4MTpcXHRcXHRcXHR1MzIgc3VicHJvZ25vID0gYnBmX2ZpbmRfc3VicHJvZyhlbnYsXFxuMTcwODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGVudi1cXHUwMDNlaW5zbl9pZHggKyBpbnNuLVxcdTAwM2VpbW0gKyAxKTtcXG4xNzA4MzpcXHRcXG4xNzA4NDpcXHRcXHRcXHRpZiAoIWF1eC1cXHUwMDNlZnVuY19pbmZvKSB7XFxuMTcwODU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtaXNzaW5nIGJ0ZiBmdW5jX2luZm9cXFxcblxcXCIpO1xcbjE3MDg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDg3OlxcdFxcdFxcdH1cXG4xNzA4ODpcXHRcXHRcXHRpZiAoYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcXG4xNzA4OTpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbjE3MDkwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDkxOlxcdFxcdFxcdH1cXG4xNzA5MjpcXHRcXHRcXHQvKlxcbjE3MDkzOlxcdFxcdFxcdCAqIFdoZW4gZW52LVxcdTAwM2VzdWJwcm9nX2NudCA9PSAxIHRoaXMgaW5zdHJ1Y3Rpb24gd29uJ3QgYmUgcmV3cml0dGVuXFxuMTcwOTQ6XFx0XFx0XFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cXG4xNzA5NTpcXHRcXHRcXHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxcbjE3MDk2OlxcdFxcdFxcdCAqL1xcbjE3MDk3OlxcdFxcdFxcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xcbjE3MDk4OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXFxcblxcXCIpO1xcbjE3MDk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MTAwOlxcdFxcdFxcdH1cXG4xNzEwMTpcXHRcXG4xNzEwMjpcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX0ZVTkM7XFxuMTcxMDM6XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xcbjE3MTA0OlxcdFxcdFxcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcXG4xNzEwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzEwNjpcXHRcXHR9XFxuMTcxMDc6XFx0XFxuMTcxMDg6XFx0XFx0bWFwID0gZW52LVxcdTAwM2V1c2VkX21hcHNbYXV4LVxcdTAwM2VtYXBfaW5kZXhdO1xcbjE3MTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzowMS40MjYwNzQ4MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwNjgyMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBZZXAsIHRoZSBCUEYgdmVyaWZpZXIgbGl2ZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGF0IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5OZXh0LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBteSB0aW1lIHRvIGZ1eno/IEFic29sdXRlbHkuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSAqY29yZSogY29tcG9uZW50IG9mIHRoZSBCUEYgc3Vic3lzdGVtLiBBbnkgY2hhbmdlIGhlcmXigJR2ZXJpZmljYXRpb24gbG9naWMgdHdlYWtzLCBpbnN0cnVjdGlvbiBjaGVja3MsIGhvdyB3ZSBoYW5kbGUgcHNldWRvIGZ1bmN0aW9ucywgc3VicHJvZ3JhbSBjaGVja3MsIGFsbCBvZiBpdOKAlGhhcyB0aGUgcG90ZW50aWFsIHRvIG1vZGlmeSBhY3R1YWxseSAqZXhlY3V0YWJsZSBrZXJuZWwgY29kZSouIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFuZCwgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIG9mIHVzaW5nIHN5emthbGxlciB3aXRoIEJQRiBzeXNjYWxscyBpcyBrbm93biB0byBiZSBlZmZlY3RpdmUsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBTbywgeWVhaCwgV29ydGhGdXp6aW5nID0gdHJ1ZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGZvciBCUEYgYW5kIHRoZSBCUEYgc3lzY2FsbCBpdHNlbGYuIFRpbWUgdG8gcG9rZSBhcm91bmQgYGluaXQvS2NvbmZpZ2AsIG9yIG1heWJlIGBrZXJuZWwvYnBmL0tjb25maWdgLCBvciBwZXJoYXBzIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3MgcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDQuMDg2NzU5NzA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzUwNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTctXFx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY0PXN0YXRpYyBERUZJTkVfTVVURVgodXBkYXRlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6Njk6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N0cnVjdF9vcHNfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MC19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01OTQ5PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2UoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy01OTY1LVxcbmtlcm5lbC9icGYvYnRmLmM6NTk2NjpcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XFxua2VybmVsL2JwZi9idGYuYy01OTY3LVxcdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI1LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNy1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNncm91cF9kZXZfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDMtXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBzeXNjdGxfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjQtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2Ni1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNnX3NvY2tvcHRfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NzQxPWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQzLVxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ0OlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXFx1MDAzZW9wcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0NS1cXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNS0vKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cXHUwMDNlZ2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzctICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjYyOD1zeXNjYWxsX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY0NTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3lzY2FsbF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0Ni1cXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTk5Mj1fX2JwZl9rZnVuYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmJwZl9pdGVyX3Rhc2tfdm1hX25leHQoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdClcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMC1cXHQvKlxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcXHQgKiBUaGUgdmVyaWZpZXIgb25seSB0cnVzdHMgdm1fbW0gYW5kIHZtX2ZpbGUgKHNlZVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMi1cXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTctLyogZHVtbXkgX29wcy4gVGhlIHZlcmlmaWVyIHdpbGwgb3BlcmF0ZSBvbiB0YXJnZXQgcHJvZ3JhbSdzIG9wcy4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfZXh0ZW5zaW9uX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxLSNkZWZpbmUgQlBGX1BST0dfVFlQRShfaWQsIF9uYW1lLCBwcm9nX2N0eF90eXBlLCBrZXJuX2N0eF90eXBlKSBcXFxcXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyOlxcdFtfaWRdID0gXFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00My0jZGVmaW5lIEJQRl9NQVBfVFlQRShfaWQsIF9vcHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzIzMT1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjQyLSAqIEZvciB0cmFkaXRpb25hbCBQVFJfVE9fTUFQX1ZBTFVFIG9yIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MsIHRoZSB2ZXJpZmllclxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjQzOiAqIGNsZWFycyByZWctXFx1MDAzZWlkIGFmdGVyIHZhbHVlX29yX251bGwtXFx1MDAzZXZhbHVlIHRyYW5zaXRpb24sIHNpbmNlIHRoZSB2ZXJpZmllciBvbmx5XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNDQtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24ndCBjYXJlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ0Mzg9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MTItXFx0XFx0XFx0XFx0ZW52LCBcXFwiVGhpcyBvcGVyYXRpb24gc3VidHJhY3RzIHBvaW50ZXIgcmVnaXN0ZXIgUiVkIGZyb20gc2NhbGFyIHJlZ2lzdGVyIFIlZC4gXFxcIlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYxMzpcXHRcXHRcXHRcXHRcXFwiVGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxNC1cXHRcXHRcXHRcXHRwdHJfcmVnbm8sIGRzdCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc1MzA9Ym9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc1OTUtICpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc1OTY6ICogLSBpZiBzbywgYW5kIGlmIHZlcmlmaWVyIG9yIGN1cnJlbnQgSklUIGlubGluZXMgdGhlIGNhbGwgdG8gdGhlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NTk3LSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY5PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4Ni1cXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODc6XFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODgtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMjA9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNTktXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzYwOlxcdFxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1t0Z3RfcHJvZy1cXHUwMDNldHlwZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzYxLVxcdFxcdHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTkzPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDAzLVxcdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDQ6XFx0aWYgKEFSUkFZX1NJWkUoYnBmX3ZlcmlmaWVyX29wcykgPT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTUtXFx0ZW52LVxcdTAwM2Vwcm9nID0gKnByb2c7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDE2OlxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXFx1MDAzZXByb2ctXFx1MDAzZXR5cGVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAxNy1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMjU6XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyNi1cXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDQuMTM0NTE2Mzk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwODkzOTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgYmVnaW4gYnkgY2hlY2tpbmcgYGluaXQvS2NvbmZpZ2Ag4oCTIGl0IG9mdGVuIGhvbGRzIGZ1bmRhbWVudGFsIHNldHRpbmdzIHJlbGF0ZWQgdG8ga2VybmVsIGZlYXR1cmVzLiBJZiBpdCdzIG5vdCB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBsb2NhdGlvbiB3b3VsZCBiZSB0aGUgY29yZSBCUEYgaW1wbGVtZW50YXRpb24gZGlyZWN0b3J5IGl0c2VsZiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGJ3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gbG9vayBpbiB0aG9zZSB0d28gcGxhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDYuMzQzNDU5OTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTcxMjM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjA2LjM4ODAzODE4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTAzNzAzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipGaW5kaW5nIHRoZSBCUEZfU1lTQ0FMTCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzbid0IHVzdWFsbHkgc29tZXRoaW5nIEknZCBoYXZlIHRvIGRvIGZyb20gbWVtb3J5LCBidXQgSSBoYXZlIGEgaHVuY2ggaXQgaXMgbGlua2VkIHRvIHNvbWV0aGluZyBzcGVjaWZpYyBhbmQgSSdtIGRyYXdpbmcgYSBibGFuay4gVGhlcmVmb3JlLCB0aW1lIHRvIHN5c3RlbWF0aWNhbGx5IGxvY2F0ZSBpdC4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBjb25maWd1cmVkLCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBldmVuIGlmIGl0J3MgZGVwcmVjYXRlZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIEkgaGF2ZSB0byBkby4gVGhlIGJlc3Qgd2F5IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBpcyB0byBzZWFyY2ggYWNyb3NzICphbGwqIHRoZSBLY29uZmlnIGZpbGVzLiBBIGNyb3NzLXJlZmVyZW5jZSBpcyBsaWtlbHkgdG8gaGlnaGxpZ2h0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBidWlsZCBmbGFncyB0aGF0IHN1cnJvdW5kIHRoaXMgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MDguNjk4NDEzMDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEyNTkyMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjEwLjYxMTAxNDAwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTcyMTcwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBsb29rIGludG8gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29uZmlndXJhdGlvbi4gSSByZW1lbWJlciB3b3JraW5nIHdpdGggYEtjb25maWdgIGZpbGVzIGJlZm9yZTsgdGhleSdyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBmb3IgY29udHJvbGxpbmcga2VybmVsIGZlYXR1cmVzLiBMZXQncyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJ20gdGhpbmtpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDI3LiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBjb3JlIGVuYWJsaW5nIG9wdGlvbnMgZm9yIEJQRiwgb3IgcGVyaGFwcyBjb25maWd1cmF0aW9uIG9mIHNvbWUgb2YgdGhlIEJQRiBzdWJzeXN0ZW1zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSdsbCBzZWUgd2hhdCB0aGUgb3B0aW9ucyBhcmUgYW5kIHdoYXQgbXkgdW5kZXJzdGFuZGluZyBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjEyLjc4MzE4NzA1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MTIuNzgzMjQ5MTk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQ3ODk3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBSZWxhdGlvbnNoaXBzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXM7IGl0IHNlZW1zIHdlIGFyZSBkZWFsaW5nIHdpdGggYEJQRl9TWVNDQUxMYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGNoZWNrX2xkX2ltbWAgaW50ZXJhY3RzIHdpdGggaXQuIEZpcnN0IHRoaW5nJ3MgZmlyc3QsIGlzIGBjaGVja19sZF9pbW1gIHN0YXRpYywgbm9uLXN0YXRpYywgb3IgaXMgaXQgY2FsbGVkIGJ5IHNvbWV0aGluZyBlbHNlPyBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgbGlua3MgdG9nZXRoZXIgYW5kIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBzdGFydCBieSBmaWd1cmluZyBvdXQgaXRzIHNjb3BlIGFuZCBzZWUgd2hvIGlzIGNhbGxpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE1LjEzODA0MTQ2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTcyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfbGRfaW1tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3ODc9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDI2LS8qIHZlcmlmeSBCUEZfTERfSU1NNjQgaW5zdHJ1Y3Rpb24gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMjc6c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzAyOC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwODc9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTgyLVxcdFxcdGlmIChtb2RlID09IEJQRl9JTU0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxODM6XFx0XFx0XFx0ZXJyID0gY2hlY2tfbGRfaW1tKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTg0LVxcdFxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE1LjE4NDM0NDkzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwNzI2NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgQ29udHJvbCBGbG93KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYGNoZWNrX2xkX2ltbWAgYW5kIGBkb19jaGVja19pbnNuYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgd2hlcmUgYGNoZWNrX2xkX2ltbWAsIHRoZSBzdGF0aWMgZnVuY3Rpb24gZGVmaW5lZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgaXMgdXNlZC4gSXMgaXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIGRvZXMgaXQgZXhpc3QgYXMgYSBkaXNjcmV0ZSBzeW1ib2w/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgaXMga2V5LiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleGFtaW5lIHRoZSBjYWxscyB0byBgYnBmX2NoZWNrYCwgYGRvX2NoZWNrYCwgb3IgYGRvX2NoZWNrX2luc25gIHRvby4gU2VlaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBCUEYgdmVyaWZpZXIgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6NDM6MTcuMTE1MDczNjA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM4NjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19jaGVja1xcXFwofGRvX2NoZWNrX2luc25cXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDI5PXN0YXRpYyBpbnQgY2hlY2tfaW5kaXJlY3RfanVtcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDg3OnN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTk2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODE5NzpzdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTk4LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODM0Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgzNDc6XFx0XFx0ZXJyID0gZG9fY2hlY2tfaW5zbihlbnYsIFxcdTAwMjZkb19wcmludF9zdGF0ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzQ4LVxcdFxcdGlmIChlcnJvcl9yZWNvdmVyYWJsZV93aXRoX25vc3BlYyhlcnIpIFxcdTAwMjZcXHUwMDI2IHN0YXRlLVxcdTAwM2VzcGVjdWxhdGl2ZSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Mjg0PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDI3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQyODpcXHRyZXQgPSBkb19jaGVjayhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQyOS1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE3LjE2MzQ2MzQ2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYxNzk1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBJbnN0cnVjdGlvbiBWYWxpZGF0aW9uIFdvcmtmbG93KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGluc3RydWN0aW9uIHZhbGlkYXRpb24gcHJvY2VzcyBoZXJlLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBzZXQgb2YgY29yZSBjaGVja3Mgb3IgZnVuY3Rpb25zIHdlJ3JlIHVzaW5nOiBgY2hlY2tfbGRfaW1tYCwgYGRvX2NoZWNrX2luc25gLCBgZG9fY2hlY2tfY29tbW9uYCwgYW5kLCBjcnVjaWFsbHksIGBicGZfY2hlY2tgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGF0ZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gTXkgbmV4dCBzdGVwIGhhcyB0byBiZSBleGFtaW5pbmcgdGhlIGNhbGwgY2hhaW4gb2YgYGJwZl9jaGVja2AuIFVuZGVyc3RhbmRpbmcgd2hhdCBjYWxscyBpbnRvIHRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCdzIHRoZSBjZW50cmFsIHBvaW50LCBhbmQgYnkgdHJhY2luZyBpdHMgY2FsbGVycyBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGFuZCBob3cgdGhlIGluc3RydWN0aW9uIHZhbGlkYXRpb24gb2NjdXJzLiBJdCBzZWVtcyBsaWtlIGEgY2xhc3NpYyBib3R0b20tdXAgYW5hbHlzaXMgd2lsbCBiZSBoZWxwZnVsIGluIHRoaXMgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjE5LjAyNTI2MTAxNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4ODA5MzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0xMjg9cmV1c2VzIHRoZSBleGlzdGluZyBgYGZkX2FycmF5YGA6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5J3MgbGVuZ3RoLlxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNi0gICBoYXMgcmVzb2x2ZWQgdGhlIGBgZmRfYXJyYXlgYCBlbnRyaWVzIGludG8gdGhlIHByb2dyYW0ncyBgYHVzZWRfbWFwc2BgLiBUaGVcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTIzMD1UaGlzIGhvb2sgZ2F0ZXMgYWRtaXNzaW9uICoqZm9yIGV2ZXJ5IGxvYWQqKiwgZnJvbSBhIHNpbmdsZSBjYWxsIHNpdGUgaW5zaWRlIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTIzMi1vcHRpb25hbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBzbyB0aGUgdmVyZGljdCBhbmQga2V5cmluZyBmaWVsZHMgYXJlIGZpbmFsIC0gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwNTE9c3RydWN0IGJwZl9sb2dfYXR0cjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwNTI6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipmcCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzA1My1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTkwNT1zdHJ1Y3QgYnBmX2ZkX2FycmF5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTEzLS8qIHNpbmdsZSBjb250YWluZXIgZm9yIGFsbCBzdHJ1Y3RzXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo5MTQ6ICogb25lIHZlcmlmaWVyX2VudiBwZXIgYnBmX2NoZWNrKCkgY2FsbFxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTE1LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNzAwPWludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTcwMi1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE3MDM6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTcwNC1pbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD03MTc9c3RhdGljIGlubGluZSBib29sIGNvb2tpZV9icGZfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cXG5pbmNsdWRlL25ldC90Y3AuaDo3MjI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMy0jZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzI4LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzItXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU4PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYwOi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjEtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NTM9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODY3LS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODY4OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg2OS0gKiBvbmNlIHRoZSBwcm9ncmFtJ3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NzY9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkzOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5NC1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwNy1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDg6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwOS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0yNjM9c3RhdGljIGludCBjb29raWVfdGNwX3JlcXNrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMDI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMy17XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9NDA1PXN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cXHRpZiAoY29va2llX2JwZl9vayhza2IpKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjQyNjpcXHRcXHRyZXEgPSBjb29raWVfYnBmX2NoZWNrKHNrLCBza2IpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTkyLVxcdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTkzOlxcdFxcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XFxubmV0L2lwdjYvc3luY29va2llcy5jLTE5NC1cXHR9IGVsc2Uge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2lnbmVkX2xvYWRlci5jPTUyNz1zdGF0aWMgdm9pZCBzaWduYXR1cmVfZmFpbHVyZV9sb2dzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zaWduZWRfbG9hZGVyLmMtNTM2LVxcdFxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2lnbmVkX2xvYWRlci5jOjUzNzpcXHRcXHQgKiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIG5vdyBydW5zIGluc2lkZSBicGZfY2hlY2soKSwgc28gYVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NpZ25lZF9sb2FkZXIuYy01MzgtXFx0XFx0ICogZmFpbHVyZSBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZSB2ZXJpZmllciBsb2cuIEEgcHJlc2VudC1idXQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjIxLjQxMzM2MTQ5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTY1MTYwMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgY2hlY2tfbGRfaW1tYCBmdW5jdGlvbi4gR29vZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBxdWlja2x5IGNvbmZpcm0gaXQncyBhIHN0YXRpYyBmdW5jdGlvbiDigJMgYHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilgIOKAkyBhbmQgdGhhdCBpdCByZXNpZGVzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIGFsc28gbm90ZSB0aGF0IHRoZSBzdXJyb3VuZGluZyB2ZXJpZmljYXRpb24gZnVuY3Rpb25zLCBgZG9fY2hlY2tfaW5zbmAsIGBkb19jaGVja2AsIGFuZCBgYnBmX2NoZWNrYCwgYXJlIGFsbCBpbiB0aGUgc2FtZSBmaWxlLiBUaGF0J3MgZ29vZCBjb250ZXh0LlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgZ3VpZGVsaW5lcy4gVGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQgdG8gdHJ1ZTsgZXhjZWxsZW50LCBtZWFuaW5nIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gVGhlIHJlYXNvbmluZyBjb25maXJtcyB0aGF0IHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYEJQRl9QU0VVRE9fRlVOQ2AgcmVmZXJlbmNlcyBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIHVucGF0Y2hlZCBjb2RlIHdpdGhpbiB0aGUgbWFpbiBwcm9ncmFtIHdoZW4gb25seSBvbmUgc3VicHJvZ3JhbSBleGlzdHMgKHN1YnByb2cgMCkuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBjb2RlLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAg4oCTIGEgY3JpdGljYWwgc3lzY2FsbC4gVGhpcyB0ZWxscyBtZSB0aGUgbG9naWMgaXMgc291bmQgYW5kIHRoZSBleHBvc3VyZSBpcyByZWxldmFudC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGBjaGVja19sZF9pbW1gLCBgZG9fY2hlY2tfaW5zbmAsIGFuZCBgYnBmX2NoZWNrYCBhcmUgdGhlIGtleSBhcmVhcyBmb3IgZGVlcGVyIHNjcnV0aW55LiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHNvIHByb3ZpZGVkIGFzIGBCUEZfU1lTQ0FMTGAg4oCTIHdoaWNoIEkgYWxyZWFkeSBrbmV3IGVuYWJsZXMgYHZlcmlmaWVyLm9gLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0JQRmAgaXMgc2VsZWN0ZWQgYnkgYEJQRl9TWVNDQUxMYCwgYW5kIHllcywgaXQgaXMuIEFsbCBnb29kIHRoZXJlLlxuXG5JIGFsc28gc2VlIHRoYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaXMgdGhlIG9ubHkga2VybmVsIGZpbGUgY2hhbmdlZCwgcGx1cyB0aGUgdXNlcnNwYWNlIHRlc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jYCBoYXMgYmVlbiBhZGRlZC4gU28gaXQncyBmYWlybHkgY29udGFpbmVkLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGxvb2tzIGNsZWFuLCBjb25jaXNlLCBhbmQgd2VsbC1kZWZpbmVkLiBJJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTA0LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzoyNS41Nzg1MjQ4NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzMwMDk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9pbW1cIixcbiAgICBcImRvX2NoZWNrX2luc25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGJ5IGFkZGluZyBhIGNoZWNrIGluIGNoZWNrX2xkX2ltbSgpIHRvIHJlamVjdCBCUEZfUFNFVURPX0ZVTkMgcmVmZXJlbmNlcyB0byBzdWJwcm9nIDAgKHRoZSBtYWluIHByb2dyYW0pLCBwcmV2ZW50aW5nIHVucGF0Y2hlZCBpbnN0cnVjdGlvbiBhZGRyZXNzZXMgd2hlbiBzdWJwcm9nX2NudCBpcyAxLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX2xkX2ltbVwiLFxuICAgIFwiZG9fY2hlY2tfaW5zblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYnkgYWRkaW5nIGEgY2hlY2sgaW4gY2hlY2tfbGRfaW1tKCkgdG8gcmVqZWN0IEJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2VzIHRvIHN1YnByb2cgMCAodGhlIG1haW4gcHJvZ3JhbSksIHByZXZlbnRpbmcgdW5wYXRjaGVkIGluc3RydWN0aW9uIGFkZHJlc3NlcyB3aGVuIHN1YnByb2dfY250IGlzIDEuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzoyNS42NTE4MzM3ODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTE4NDk5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzoyNS42NTIzMjA2MjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5OTkxMzU3MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGNoZWNrX2xkX2ltbWApIHRvIHJlamVjdCBgQlBGX1BTRVVET19GVU5DYCBpbnN0cnVjdGlvbnMgcG9pbnRpbmcgdG8gdGhlIG1haW4gcHJvZ3JhbSAoYHN1YnByb2dubyA9PSAwYCksIHByZXZlbnRpbmcgYW4gaXNzdWUgd2hlcmUgc3VjaCBwc2V1ZG8tZnVuYyBpbnN0cnVjdGlvbnMgd2VyZSBub3QgcGF0Y2hlZCB3aXRoIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzIGFuZCBsZWQgdG8gY2FsbHMgdG8gYm9ndXMgYWRkcmVzc2VzLiBUaGlzIGlzIGEgcHVyZSB2ZXJpZmljYXRpb24vdmFsaWRhdGlvbiBjaGVjayByZWplY3RpbmcgaW52YWxpZCBCUEYgYnl0ZWNvZGUuIEl0IGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTdiNzMyOGYxODI2YmZjZDE4Y2I0ZjlmOGM1NjlmMzE0ZjA0YzFlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDA6NDI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2NDAzNTY4Mzc5NTEuLjdkOGRkYjFiZWUwMGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE3MDg5LDYgKzE3MDg5LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJjYWxsYmFjayBmdW5jdGlvbiBub3Qgc3RhdGljXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIFdoZW4gZW52LVx1MDAzZXN1YnByb2dfY250ID09IDEgdGhpcyBpbnN0cnVjdGlvbiB3b24ndCBiZSByZXdyaXR0ZW5cbitcdFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cbitcdFx0ICogY29tYmluZXMgZS5nLiBtYWluIGFuZCB0aW1lciBjYWxsYmFjayBhbmQganVzdCByZWplY3QgaGVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcImNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCBiZSB0aGUgbWFpbiBwcm9ncmFtXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXG4gXHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19GVU5DO1xuIFx0XHRkc3RfcmVnLVx1MDAzZXN1YnByb2dubyA9IHN1YnByb2dubztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvcHNldWRvX2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9wc2V1ZG9fZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjNjNWM2N2Q1MWRlYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvKlxuKyAqIEJ1Z2d5IHZlcmlmaWVyIGFjY2VwdGVkIHRoZSBwcm9ncmFtIGJlbG93IHdoaWxlIG5vdCBwYXRjaGluZyBCUEZfUFNFVURPX0ZVTkNcbisgKiBsb2FkIGluc3RydWN0aW9uIHRvIGNvbnRhaW4gYSByZWFsIGFkZHJlc3MuIFdoaWNoIHJlc3VsdGVkIGluIGEgZnVuY3Rpb24gY2FsbFxuKyAqIHRvIGEgYm9ndXMgYWRkcmVzcy5cbisgKi9cbit7XG4rXHRcIkJQRl9QU0VVRE9fRlVOQyByZWZlcmVuY2UgdG8gdGhlIG1haW4gcHJvZ3JhbVwiLFxuK1x0Lmluc25zID0ge1xuK1x0LyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2KGludCl7MH0pOyAqL1xuK1x0QlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xMCwgLTQsIDApLFxuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzIsIEJQRl9SRUdfMTApLFxuK1x0QlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC00KSxcbitcdEJQRl9MRF9NQVBfRkQoQlBGX1JFR18xLCAwKSxcbitcdEJQRl9FTUlUX0NBTEwoQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSxcbitcdEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMTApLFxuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzYsIEJQRl9SRUdfMCksXG4rXHQvKiBicGZfdGltZXJfaW5pdChyNiwgXHUwMDI2dGltZXJfbWFwLCAwKTsgKi9cbitcdEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzYpLFxuK1x0QlBGX0xEX01BUF9GRChCUEZfUkVHXzIsIDApLFxuK1x0QlBGX01PVjY0X0lNTShCUEZfUkVHXzMsIDApLFxuK1x0QlBGX0VNSVRfQ0FMTChCUEZfRlVOQ190aW1lcl9pbml0KSxcbitcdC8qIGJwZl90aW1lcl9zZXRfY2FsbGJhY2socjYsIFx1MDAzY2luc24gIzBcdTAwM2UpOyAqL1xuK1x0QlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfNiksXG4rXHRCUEZfUkFXX0lOU04oQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVywgQlBGX1JFR18yLCBCUEZfUFNFVURPX0ZVTkMsIDAsIC0xNSksXG4rXHRCUEZfUkFXX0lOU04oMCwgMCwgMCwgMCwgMCksXG4rXHRCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3RpbWVyX3NldF9jYWxsYmFjayksXG4rXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9LFxuK1x0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCxcbitcdC5maXh1cF9tYXBfdGltZXIgPSB7IDMsIDkgfSxcbitcdC5yZXN1bHQgPSBSRUpFQ1QsXG4rXHQuZXJyc3RyID0gXCJjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgYmUgdGhlIG1haW4gcHJvZ3JhbVwiLFxuK1x0LmZ1bmNfaW5mbyA9IHsgeyAwLCA0IC8qIG1haW5fcHJvZyAqLyB9IH0sXG4rXHQuZnVuY19pbmZvX2NudCA9IDEsXG4rXHQuYnRmX3N0cmluZ3MgPSBcIlxcMGludFxcMGN0eFxcMG1haW5fcHJvZ1wiLFxuK1x0LmJ0Zl90eXBlcyA9IHtcbitcdC8qIDE6IGludCAgICAgICAgICAgICovIEJURl9UWVBFX0lOVF9FTkMoMSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSxcbitcdC8qIDI6IHZvaWQqICAgICAgICAgICovIEJURl9QVFJfRU5DKDApLFxuK1x0LyogMzogaW50IF9fKHZvaWQgKikgKi8gQlRGX0ZVTkNfUFJPVE9fRU5DKDEsIDEpLFxuK1x0XHRcdFx0QlRGX0ZVTkNfUFJPVE9fQVJHX0VOQyg1LCAyKSxcbitcdC8qIDQ6IG1haW5fcHJvZyAgICAgICovIEJURl9GVU5DX0VOQyg5LCAzKSxcbitcdEJURl9FTkRfUkFXXG4rXHR9XG4rfSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjI1LjY1MjMyMTM2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTA3OTg1MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgQW5hbHlzaXMgb2YgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gTG9va2luZyBhdCB0aGUgY29kZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2hlY2tfbGRfaW1tYCBmdW5jdGlvbiwgSSBzZWUgYSBuZXcgY2hlY2s6XG5cbmBgYGNcbitcdFx0LypcbitcdFx0ICogV2hlbiBlbnYtXHUwMDNlc3VicHJvZ19jbnQgPT0gMSB0aGlzIGluc3RydWN0aW9uIHdvbid0IGJlIHJld3JpdHRlblxuK1x0XHQgKiB0byBob2xkIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzLiBBc3N1bWUgdGhhdCBubyB1c2FibGUgcHJvZ3JhbVxuK1x0XHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN1YnByb2dubyA9PSAwKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbmBgYFxuXG5Fc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSBiZWluZyB0aGUgXCJtYWluXCIgcHJvZ3JhbSB3aGVuIGBzdWJwcm9nX2NudGAgaXMgMSwgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC4gVGhpcyBpcyBwcm9iYWJseSB0byBwcmV2ZW50IHNvbWUga2luZCBvZiB3ZWlyZCBpbnRlcmFjdGlvbiB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tIGEgcHJvZ3JhbW1pbmcgZGVzaWduIHBlcnNwZWN0aXZlOyBpdCBzb3VuZHMgbGlrZSB0aGV5J3JlIGV4cGxpY2l0bHkgZGlzYWxsb3dpbmcgYSBzcGVjaWZpYyBzY2VuYXJpby5cblxuQW5kIHRoZXJlJ3MgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL3BzZXVkb19mdW5jLmNgIHRvIHN1cHBvcnQgdGhpcyBjaGFuZ2UuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFyb3VuZCBgY2hlY2tfbGRfaW1tYC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGVjayB3aXRoaW4gdGhlIGJyb2FkZXIgdmVyaWZpZXIuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGltbWVkaWF0ZSBsb2FkcywgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGUgb3ZlcmFsbCBwcm9ncmFtIHN0cnVjdHVyZS4gVGhpcyBtaWdodCByZXZlYWwgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbmV3IGNvZGVwYXRocyB0aGF0IEtNU0FOIG1pZ2h0IGV4cG9zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG5ldyBjaGVjayBpcyAqZG9pbmcqLCBhbmQgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZWhhdmUsIGFzIHdlbGwgYXMgaWYgaXQgd291bGQgdHJpZ2dlciBhbnkgaXNzdWVzIGluIGEgbW9yZSBjb21wbGV4IHNjZW5hcmlvIHdpdGggS01TQU4gZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjMxLjE2MDMxMDY4OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcwNzE6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNzA3MjpcXHRcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHNldWRvIGJ0ZiBpZDogdW5leHBlY3RlZCBkc3QgcmVnIHR5cGVcXFwiKTtcXG4xNzA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNzA3NDpcXHRcXHRcXHR9XFxuMTcwNzU6XFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbjE3MDc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE3MDc3OlxcdFxcdH1cXG4xNzA3ODpcXHRcXG4xNzA3OTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkMpIHtcXG4xNzA4MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eDtcXG4xNzA4MTpcXHRcXHRcXHR1MzIgc3VicHJvZ25vID0gYnBmX2ZpbmRfc3VicHJvZyhlbnYsXFxuMTcwODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGVudi1cXHUwMDNlaW5zbl9pZHggKyBpbnNuLVxcdTAwM2VpbW0gKyAxKTtcXG4xNzA4MzpcXHRcXG4xNzA4NDpcXHRcXHRcXHRpZiAoIWF1eC1cXHUwMDNlZnVuY19pbmZvKSB7XFxuMTcwODU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtaXNzaW5nIGJ0ZiBmdW5jX2luZm9cXFxcblxcXCIpO1xcbjE3MDg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDg3OlxcdFxcdFxcdH1cXG4xNzA4ODpcXHRcXHRcXHRpZiAoYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcXG4xNzA4OTpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbjE3MDkwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MDkxOlxcdFxcdFxcdH1cXG4xNzA5MjpcXHRcXHRcXHQvKlxcbjE3MDkzOlxcdFxcdFxcdCAqIFdoZW4gZW52LVxcdTAwM2VzdWJwcm9nX2NudCA9PSAxIHRoaXMgaW5zdHJ1Y3Rpb24gd29uJ3QgYmUgcmV3cml0dGVuXFxuMTcwOTQ6XFx0XFx0XFx0ICogdG8gaG9sZCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcy4gQXNzdW1lIHRoYXQgbm8gdXNhYmxlIHByb2dyYW1cXG4xNzA5NTpcXHRcXHRcXHQgKiBjb21iaW5lcyBlLmcuIG1haW4gYW5kIHRpbWVyIGNhbGxiYWNrIGFuZCBqdXN0IHJlamVjdCBoZXJlLlxcbjE3MDk2OlxcdFxcdFxcdCAqL1xcbjE3MDk3OlxcdFxcdFxcdGlmIChzdWJwcm9nbm8gPT0gMCkge1xcbjE3MDk4OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGJhY2sgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBtYWluIHByb2dyYW1cXFxcblxcXCIpO1xcbjE3MDk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MTAwOlxcdFxcdFxcdH1cXG4xNzEwMTpcXHRcXG4xNzEwMjpcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX0ZVTkM7XFxuMTcxMDM6XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicHJvZ25vID0gc3VicHJvZ25vO1xcbjE3MTA0OlxcdFxcdFxcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcXG4xNzEwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzEwNjpcXHRcXHR9XFxuMTcxMDc6XFx0XFxuMTcxMDg6XFx0XFx0bWFwID0gZW52LVxcdTAwM2V1c2VkX21hcHNbYXV4LVxcdTAwM2VtYXBfaW5kZXhdO1xcbjE3MTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDo0MzozMS4xNjEzNjIzNjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ4MjI4MjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHByZXR0eSBjbGVhcjogdGhlIEJQRiB2ZXJpZmllciB3YXMgbWlzdGFrZW5seSBhbGxvd2luZyBgQlBGX1BTRVVET19GVU5DYCBpbnN0cnVjdGlvbnMgdG8gcG9pbnQgdG8gdGhlIG1haW4gcHJvZ3JhbSAoc3VicHJvZyAwKSB3aGVuIGl0IHNob3VsZG4ndCBoYXZlLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggb25seSB0aGUgbWFpbiBwcm9ncmFtIG9yIHdoZW4gdGhlIHN1YnByb2dyYW0gbnVtYmVyIGlzIDAuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHRoZSBKSVQga2lja3MgaW4sIGl0IHdvdWxkbid0IHJld3JpdGUgdGhlIHBzZXVkby1mdW5jdGlvbiBwb2ludGVyIHRvIGEgKnJlYWwqIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgcHJvZ3JhbSB3b3VsZCB0cnkgdG8gY2FsbCBnYXJiYWdlLiBDbGFzc2ljIGNvbnRyb2wgZmxvdyBoaWphY2ssIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvIC0gYSBjcml0aWNhbCBidWcuXG5cblRoZSBwcm9wb3NlZCBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXg6IGl0IGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgY2hlY2tfbGRfaW1tYCB0byBleHBsaWNpdGx5IHJlamVjdCBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIG1haW4gcHJvZ3JhbS4gU2ltcGxlLCBlbGVnYW50LCBhbmQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSByb290IGNhdXNlLiBObyBjb21wbGV4IHJld3JpdGVzLCBqdXN0IGEgc2FuaXR5IGNoZWNrIGR1cmluZyB2ZXJpZmljYXRpb24uXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNoZWNrbGlzdC4gRG9lcyB0aGlzIHBhdGNoOlxuXG4xLiAgKipJbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIGZpZWxkcy9wYWRkaW5nIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZD8qKiBObywgZGVmaW5pdGVseSBub3QuIEl0J3MgYSB2ZXJpZmljYXRpb24gY2hhbmdlLCBub3QgYSBkYXRhIHN0cnVjdHVyZSBjaGFuZ2UuXG4yLiAgKipSZWx5IG9uIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gVGhlIGBzdWJwcm9nbm9gIGlzIGEgYHUzMmAgcmV0dXJuZWQgYnkgYGJwZl9maW5kX3N1YnByb2dgLCB3aGljaCBpcyBpbml0aWFsaXplZCwgc28gdGhpcyBpc24ndCBhIGNvbmNlcm4uXG4zLiAgKipJbnZvbHZlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8qKiBOb3QgYXQgYWxsLiBJdCdzIGp1c3QgYSB2YWxpZGF0aW9uIGNoZWNrLlxuNC4gICoqQWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8qKiBObywgdGhlIHBhdGNoIHNpbXBseSByZWplY3RzIGFuIGludmFsaWQgcHJvZ3JhbS5cblxuVGhlIHBhdGNoIHNpbXBseSByZWplY3RzIGludmFsaWQgQlBGIHByb2dyYW1zIHdpdGggYHN1YnByb2dubyA9PSAwYCBkdXJpbmcgQlBGIHZlcmlmaWNhdGlvbi4gSXQncyBhYm91dCBwcmV2ZW50aW5nIGEgYnVnLCBub3QgY3JlYXRpbmcgbmV3IG9uZXMuIFRoZSBwcmV2aW91cyBidWcgd2FzIGEgdmVyaWZpZXIgaXNzdWUsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyB0aGUgcm9vdCBjYXVzZSBvZiBjb250cm9sIGZsb3cgaGlqYWNrcywgY3Jhc2hlcywgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVyZSdzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLlxuXG5TZWVtcyBjcnlzdGFsIGNsZWFyLiBObyBLTVNBTiBpbXBsaWNhdGlvbnMuIE5lZWRLTVNBTiBzaG91bGQgYWJzb2x1dGVseSBiZSBmYWxzZS4gSSd2ZSBkb3VibGUtY2hlY2tlZCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIEtNU0FOIHJlYXNvbmluZyBzdHJ1Y3R1cmUsIGFuZCBpdCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBpcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY5LCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjQzOjM1LjY0MzY0Njg3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBjaGVja19sZF9pbW1gKSB0byByZWplY3QgYEJQRl9QU0VVRE9fRlVOQ2AgaW5zdHJ1Y3Rpb25zIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb2dyYW0gKGBzdWJwcm9nbm8gPT0gMGApLCBwcmV2ZW50aW5nIGFuIGlzc3VlIHdoZXJlIHN1Y2ggcHNldWRvLWZ1bmMgaW5zdHJ1Y3Rpb25zIHdlcmUgbm90IHBhdGNoZWQgd2l0aCBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBhbmQgbGVkIHRvIGNhbGxzIHRvIGJvZ3VzIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIHB1cmUgdmVyaWZpY2F0aW9uL3ZhbGlkYXRpb24gY2hlY2sgcmVqZWN0aW5nIGludmFsaWQgQlBGIGJ5dGVjb2RlLiBJdCBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyIChgY2hlY2tfbGRfaW1tYCkgdG8gcmVqZWN0IGBCUEZfUFNFVURPX0ZVTkNgIGluc3RydWN0aW9ucyBwb2ludGluZyB0byB0aGUgbWFpbiBwcm9ncmFtIChgc3VicHJvZ25vID09IDBgKSwgcHJldmVudGluZyBhbiBpc3N1ZSB3aGVyZSBzdWNoIHBzZXVkby1mdW5jIGluc3RydWN0aW9ucyB3ZXJlIG5vdCBwYXRjaGVkIHdpdGggYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3MgYW5kIGxlZCB0byBjYWxscyB0byBib2d1cyBhZGRyZXNzZXMuIFRoaXMgaXMgYSBwdXJlIHZlcmlmaWNhdGlvbi92YWxpZGF0aW9uIGNoZWNrIHJlamVjdGluZyBpbnZhbGlkIEJQRiBieXRlY29kZS4gSXQgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[1] Phase: Succeeded StartedAt: 2026-09-04 00:43:46 +0000 UTC FinishedAt: 2026-09-04 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 00:43:46 +0000 UTC FinishedAt: 2026-09-04 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2] Phase: Succeeded StartedAt: 2026-09-04 00:43:46 +0000 UTC FinishedAt: 2026-09-04 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 00:43:46 +0000 UTC FinishedAt: 2026-09-04 04:25:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 00:43:46 +0000 UTC FinishedAt: 2026-09-04 00:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 00:43:46 +0000 UTC FinishedAt: 2026-09-04 00:43:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf9fxk/series-workflowf9fxk-convert-artifact-3457511586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 00:43:56 +0000 UTC FinishedAt: 2026-09-04 01:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 00:43:56 +0000 UTC FinishedAt: 2026-09-04 01:04:04 +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:*ac8eaebb-28fb-43a7-a0d3-564fbc63adb6,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-workflowf9fxk/series-workflowf9fxk-convert-artifact-3457511586/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": "ab638124-8caf-4be5-bd94-283e04f99f6d", "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-workflowf9fxk/series-workflowf9fxk-build-action-2048062048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 00:43:56 +0000 UTC FinishedAt: 2026-09-04 01:03:54 +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:*ac8eaebb-28fb-43a7-a0d3-564fbc63adb6,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-workflowf9fxk/series-workflowf9fxk-convert-artifact-3457511586/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": "ab638124-8caf-4be5-bd94-283e04f99f6d", "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-workflowf9fxk/series-workflowf9fxk-build-action-2048062048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 01:04:04 +0000 UTC FinishedAt: 2026-09-04 01:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 01:04:04 +0000 UTC FinishedAt: 2026-09-04 01:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 01:04:04 +0000 UTC FinishedAt: 2026-09-04 01:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 01:04:04 +0000 UTC FinishedAt: 2026-09-04 01:04:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf9fxk/series-workflowf9fxk-convert-artifact-3690717181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 01:04:14 +0000 UTC FinishedAt: 2026-09-04 01:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 01:04:14 +0000 UTC FinishedAt: 2026-09-04 01:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab638124-8caf-4be5-bd94-283e04f99f6d,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-workflowf9fxk/series-workflowf9fxk-build-action-2048062048/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-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 01:06:17 +0000 UTC FinishedAt: 2026-09-04 01:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 01:06:17 +0000 UTC FinishedAt: 2026-09-04 01:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 01:06:17 +0000 UTC FinishedAt: 2026-09-04 01:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 01:06:17 +0000 UTC FinishedAt: 2026-09-04 01:22:02 +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:*ac8eaebb-28fb-43a7-a0d3-564fbc63adb6,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-workflowf9fxk/series-workflowf9fxk-convert-artifact-3690717181/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": "62160288-ec1f-4675-9b8d-d1663cf66cb2", "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-workflowf9fxk/series-workflowf9fxk-build-action-612081753/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 01:06:17 +0000 UTC FinishedAt: 2026-09-04 01:21:52 +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:*ac8eaebb-28fb-43a7-a0d3-564fbc63adb6,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-workflowf9fxk/series-workflowf9fxk-convert-artifact-3690717181/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": "62160288-ec1f-4675-9b8d-d1663cf66cb2", "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-workflowf9fxk/series-workflowf9fxk-build-action-612081753/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 01:22:02 +0000 UTC FinishedAt: 2026-09-04 01:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 01:22:02 +0000 UTC FinishedAt: 2026-09-04 01:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 01:22:02 +0000 UTC FinishedAt: 2026-09-04 01:24:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 01:22:02 +0000 UTC FinishedAt: 2026-09-04 01:23:54 +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:*62160288-ec1f-4675-9b8d-d1663cf66cb2,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-workflowf9fxk/series-workflowf9fxk-build-action-612081753/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-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 04:25:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ab638124-8caf-4be5-bd94-283e04f99f6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62160288-ec1f-4675-9b8d-d1663cf66cb2,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-workflowf9fxk/series-workflowf9fxk-build-action-2048062048/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-workflowf9fxk/series-workflowf9fxk-build-action-612081753/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 01:24:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 01:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf9fxk/series-workflowf9fxk-convert-artifact-759906946/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 01:24:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 01:24:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 01:24:04 +0000 UTC FinishedAt: 2026-09-04 01:24:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 01:24:14 +0000 UTC FinishedAt: 2026-09-04 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9fxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_imm","do_check_insn","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7b1a07a9-e130-4937-adc6-7baf70c401be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 01:24:14 +0000 UTC FinishedAt: 2026-09-04 04:25:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab638124-8caf-4be5-bd94-283e04f99f6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62160288-ec1f-4675-9b8d-d1663cf66cb2,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-workflowf9fxk/series-workflowf9fxk-build-action-2048062048/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-workflowf9fxk/series-workflowf9fxk-build-action-612081753/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-workflowf9fxk/series-workflowf9fxk-convert-artifact-759906946/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,}