Name: series-workflowdfd4k Phase: Succeeded StartedAt: 2026-08-12 12:40:58 +0000 UTC FinishedAt: 2026-08-12 16:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[0] Phase: Succeeded StartedAt: 2026-08-12 12:40:58 +0000 UTC FinishedAt: 2026-08-12 12:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 12:40:58 +0000 UTC FinishedAt: 2026-08-12 12:44:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "series_id": "f431f705-2be1-4fda-b504-7ceac8c57fa9" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "try_synchronize_srcu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3N5bmNocm9uaXplX3NyY3UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIGBzeW5jaHJvbml6ZV9zcmN1YCB3aGVuIHRoZXJlIGFyZSBubyByZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFJDVS9TUkNVIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBieSBhbnkga2VybmVsIG1vZHVsZSBvciBzdWJzeXN0ZW0gdXNpbmcgU1JDVS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGlkZW50aWZpZXMgcmVhZGVyLWZyZWUgc3RhdGVzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4Y2M0Njc4OGFkN2FiMmJjZWI4NTJmZTQzNTY3ZTBjYzk4MTJmMGVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDM6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuaW5kZXggYTU0Y2U5ZTgwOGI5Mi4uMGQ3NTQzYzdiZWNjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsXG4gXHRcdHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTtcbiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4mIzQzO2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIFxuICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5AQCAtMjYwLDYgJiM0MzsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdFxuJiM0MzsgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGVcbiYjNDM7ICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0XG4mIzQzOyAqIHNsZWVwaW5nLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzczsgb24gZmFpbHVyZSB0aGUgY2FsbGVyIG11c3QgZmFsbFxuJiM0MzsgKiBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKS5cbiYjNDM7ICpcbiYjNDM7ICogT24gIVNNUCBhIHJlYWRlciBjYW4gb25seSBiZSBtaWQtY3JpdGljYWwtc2VjdGlvbiBpZiBpdCB3YXNcbiYjNDM7ICogcHJlZW1wdGVkIChvciBpcyBydW5uaW5nIGluIGFuIGludGVycnVwdCB3aGljaCBwcmVlbXB0ZWQgdXMpLCBpblxuJiM0MzsgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nXG4mIzQzOyAqIHplcm8gdGhlcmVmb3JlIHByb3ZlcyB0aGF0IG5vIHJlYWRlciBleGlzdHMsIGFuZCBhbnkgcmVhZGVyIHdoaWNoXG4mIzQzOyAqIGJlZ2lucyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2lsbCwgYnkgcHJvZ3JhbSBvcmRlciBvbiB0aGlzXG4mIzQzOyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIVJFQURfT05DRShzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhUkVBRF9PTkNFKHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1sxXSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpO1xuJiM0MztcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMTU4MCw2ICYjNDM7MTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogdHJ5X3N5bmNocm9uaXplX3NyY3UgLSBpbmxpbmUgZ3JhY2UgcGVyaW9kIGZvciBhIHJlYWRlci1mcmVlIHNyY3Vfc3RydWN0XG4mIzQzOyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuXG4mIzQzOyAqXG4mIzQzOyAqIElmIEBzc3AgcHJvdmFibHkgaGFzIG5vIHJlYWRlcnMgaW4gZWl0aGVyIGVwb2NoLCBwcm92aWRlIHRoZVxuJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXRcbiYjNDM7ICogc2xlZXBpbmcsIHdpdGhvdXQgYSB0cmlwIHRocm91Z2ggdGhlIFNSQ1Ugd29ya3F1ZXVlLCBhbmQgd2l0aG91dFxuJiM0MzsgKiBhZHZhbmNpbmcgdGhlIGdyYWNlLXBlcmlvZCBzZXF1ZW5jZS4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uXG4mIzQzOyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3JcbiYjNDM7ICogc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsXG4mIzQzOyAqIHNlY3Rpb25zIGFyZSBzaG9ydCwgYXRvbWljLCBhbmQgdXN1YWxseSBhYnNlbnQg4oCUIHdoZXJlIGV2ZW4gYW5cbiYjNDM7ICogZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCBjb3N0cyB0d28gdHJpcHMgdGhyb3VnaCB0aGUgd29ya3F1ZXVlIGFuZCBhblxuJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZVxuJiM0MzsgKiB0aGFuIHRoZSBjaGVjayBiZWxvdy5cbiYjNDM7ICpcbiYjNDM7ICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKClcbiYjNDM7ICogZmxhdm9ycyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgcHJvb2Y7IGlmIHRoZSBfZmFzdCgpIGZsYXZvcnMgaGF2ZVxuJiM0MzsgKiBldmVyIGJlZW4gdXNlZCBvbiBAc3NwLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCB0cnlfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdW5sb2NrczAsIHVubG9ja3MxO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmRtMCwgcmRtMTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9yZGVyIHRoZSBjYWxsZXImIzM5O3MgcHJpb3Igc3RvcmVzIGJlZm9yZSB0aGUgY291bnRlciByZWFkcyBiZWxvdy5cbiYjNDM7XHQgKiBQYWlycyAoc3RvcmUtYnVmZmVyaW5nIHBhdHRlcm4pIHdpdGggdGhlIHNtcF9tYigpIGluXG4mIzQzO1x0ICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdFxuJiM0MztcdCAqIG9ic2VydmVkIGJ5IHRoZSBzdW1zIGJlbG93IGlzIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZSwgd2l0aGluIGl0c1xuJiM0MztcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZ1xuJiM0MztcdCAqIHRoaXMgZnVuY3Rpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1xuJiM0MztcdHVubG9ja3MwID0gc3JjdV9yZWFkZXJzX3VubG9ja19pZHgoc3NwLCAwLCBcdTAwMjZyZG0wKTtcbiYjNDM7XHR1bmxvY2tzMSA9IHNyY3VfcmVhZGVyc191bmxvY2tfaWR4KHNzcCwgMSwgXHUwMDI2cmRtMSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhZGVyIGZsYXZvcnMgd2hpY2ggZWxpZGUgdGhlIHJlYWQtc2lkZSBzbXBfbWIoKSB0aGF0IHRoZVxuJiM0MztcdCAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTtcbiYjNDM7XHQgKiB0aGV5IG5lZWQgYSByZWFsIGdyYWNlIHBlcmlvZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHJkbTAgfCByZG0xKSBcdTAwMjYgU1JDVV9SRUFEX0ZMQVZPUl9TTE9XR1ApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgaW4gc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHhfY2hlY2soKTogZW5zdXJlIHRoYXQgYSBsb2NrIGlzXG4mIzQzO1x0ICogYWx3YXlzIGNvdW50ZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgdW5sb2NrIGlzIGNvdW50ZWQsIHNvIHRoYXRcbiYjNDM7XHQgKiBhIHJlYWRlciByYWNpbmcgd2l0aCB0aGVzZSBzdW1zIGNhbiBvbmx5IGluZmxhdGUgdGhlIGxvY2sgc3VtXG4mIzQzO1x0ICogYW5kIGZvcmNlIHRoZSAoc2FmZSkgZmFsbGJhY2suIFN1bW1pbmcgYm90aCBlcG9jaHMgbWVhbnMgbm9cbiYjNDM7XHQgKiBpbmRleCBmbGlwIGlzIG5lZWRlZDogYSBzdGFibGUgZXF1YWxpdHkgcHJvdmVzIHRoZXJlIHdhcyBhXG4mIzQzO1x0ICogbW9tZW50IGluIHRoaXMgZnVuY3Rpb24gYXQgd2hpY2ggbm8gcmVhZGVycyBleGlzdGVkIGF0IGFsbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAwLCBmYWxzZSwgdW5sb2NrczApKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMSwgZmFsc2UsIHVubG9ja3MxKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogT3JkZXIgdGhlIGNhbGxlciYjMzk7cyBzdWJzZXF1ZW50IGFjY2Vzc2VzIGFmdGVyIHRoZSBwcm9vZi4gKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0cnlfc3luY2hyb25pemVfc3JjdSk7XG4mIzQzO1xuIC8qKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IHRvIHByb3ZpZGUgY29va2llIGZvci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfc3luY2hyb25pemVfc3JjdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBgc3luY2hyb25pemVfc3JjdWAgd2hlbiB0aGVyZSBhcmUgbm8gcmVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBSQ1UvU1JDVSBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgYnkgYW55IGtlcm5lbCBtb2R1bGUgb3Igc3Vic3lzdGVtIHVzaW5nIFNSQ1UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHJlYWRlci1mcmVlIHN0YXRlcyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNjNDY3ODhhZDdhYjJiY2ViODUyZmU0MzU2N2UwY2M5ODEyZjBlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtOTEsNiAmIzQzOzkxLDcgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOwogdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiYjNDM7Ym9vbCB0cnlfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMjYwLDYgJiM0MzsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiAKJiM0MzsvKioKJiM0MzsgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3QKJiM0MzsgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLgomIzQzOyAqCiYjNDM7ICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlCiYjNDM7ICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0CiYjNDM7ICogc2xlZXBpbmcuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlIHRoZSBjYWxsZXIgbXVzdCBmYWxsCiYjNDM7ICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuCiYjNDM7ICoKJiM0MzsgKiBPbiAhU01QIGEgcmVhZGVyIGNhbiBvbmx5IGJlIG1pZC1jcml0aWNhbC1zZWN0aW9uIGlmIGl0IHdhcwomIzQzOyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW4KJiM0MzsgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nCiYjNDM7ICogemVybyB0aGVyZWZvcmUgcHJvdmVzIHRoYXQgbm8gcmVhZGVyIGV4aXN0cywgYW5kIGFueSByZWFkZXIgd2hpY2gKJiM0MzsgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpcwomIzQzOyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJcmV0dXJuICFSRUFEX09OQ0Uoc3NwLSZndDtzcmN1X2xvY2tfbmVzdGluZ1swXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIVJFQURfT05DRShzc3AtJmd0O3NyY3VfbG9ja19uZXN0aW5nWzFdKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpOwomIzQzOwogLyoKICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwpAQCAtMTU4MCw2ICYjNDM7MTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTsKIAomIzQzOy8qKgomIzQzOyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdAomIzQzOyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuCiYjNDM7ICoKJiM0MzsgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGUKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXQKJiM0MzsgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0CiYjNDM7ICogYWR2YW5jaW5nIHRoZSBncmFjZS1wZXJpb2Qgc2VxdWVuY2UuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbgomIzQzOyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3IKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsCiYjNDM7ICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhbgomIzQzOyAqIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgY29zdHMgdHdvIHRyaXBzIHRocm91Z2ggdGhlIHdvcmtxdWV1ZSBhbmQgYW4KJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZQomIzQzOyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LgomIzQzOyAqCiYjNDM7ICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKCkKJiM0MzsgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlCiYjNDM7ICogZXZlciBiZWVuIHVzZWQgb24gQHNzcCwgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB1bmxvY2tzMCwgdW5sb2NrczE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmRtMCwgcmRtMTsKJiM0MzsKJiM0MzsJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHByaW9yIHN0b3JlcyBiZWZvcmUgdGhlIGNvdW50ZXIgcmVhZHMgYmVsb3cuCiYjNDM7CSAqIFBhaXJzIChzdG9yZS1idWZmZXJpbmcgcGF0dGVybikgd2l0aCB0aGUgc21wX21iKCkgaW4KJiM0MzsJICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdAomIzQzOwkgKiBvYnNlcnZlZCBieSB0aGUgc3VtcyBiZWxvdyBpcyBndWFyYW50ZWVkIHRvIG9ic2VydmUsIHdpdGhpbiBpdHMKJiM0MzsJICogY3JpdGljYWwgc2VjdGlvbiwgZXZlcnkgc3RvcmUgdGhlIGNhbGxlciBtYWRlIGJlZm9yZSBjYWxsaW5nCiYjNDM7CSAqIHRoaXMgZnVuY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsKJiM0MzsJdW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsICZhbXA7cmRtMCk7CiYjNDM7CXVubG9ja3MxID0gc3JjdV9yZWFkZXJzX3VubG9ja19pZHgoc3NwLCAxLCAmYW1wO3JkbTEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFkZXIgZmxhdm9ycyB3aGljaCBlbGlkZSB0aGUgcmVhZC1zaWRlIHNtcF9tYigpIHRoYXQgdGhlCiYjNDM7CSAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTsKJiM0MzsJICogdGhleSBuZWVkIGEgcmVhbCBncmFjZSBwZXJpb2QuCiYjNDM7CSAqLwomIzQzOwlpZiAoKHJkbTAgfCByZG0xKSAmYW1wOyBTUkNVX1JFQURfRkxBVk9SX1NMT1dHUCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgaW4gc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHhfY2hlY2soKTogZW5zdXJlIHRoYXQgYSBsb2NrIGlzCiYjNDM7CSAqIGFsd2F5cyBjb3VudGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHVubG9jayBpcyBjb3VudGVkLCBzbyB0aGF0CiYjNDM7CSAqIGEgcmVhZGVyIHJhY2luZyB3aXRoIHRoZXNlIHN1bXMgY2FuIG9ubHkgaW5mbGF0ZSB0aGUgbG9jayBzdW0KJiM0MzsJICogYW5kIGZvcmNlIHRoZSAoc2FmZSkgZmFsbGJhY2suIFN1bW1pbmcgYm90aCBlcG9jaHMgbWVhbnMgbm8KJiM0MzsJICogaW5kZXggZmxpcCBpcyBuZWVkZWQ6IGEgc3RhYmxlIGVxdWFsaXR5IHByb3ZlcyB0aGVyZSB3YXMgYQomIzQzOwkgKiBtb21lbnQgaW4gdGhpcyBmdW5jdGlvbiBhdCB3aGljaCBubyByZWFkZXJzIGV4aXN0ZWQgYXQgYWxsLgomIzQzOwkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CiYjNDM7CWlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMCwgZmFsc2UsIHVubG9ja3MwKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAxLCBmYWxzZSwgdW5sb2NrczEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTsKJiM0MzsKIC8qKgogICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llCiAgKiBAc3NwOiBzcmN1X3N0cnVjdCB0byBwcm92aWRlIGNvb2tpZSBmb3IuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTmV3IFNSQ1UgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIGFkZGluZyBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHRvIFNSQ1UsIHJpZ2h0PyBBbmQgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaW4gYm90aCBgc3JjdXRpbnkuY2AgYW5kIGBzcmN1dHJlZS5jYCDigJMgdGhhdCYjMzk7cyBhIGtleSBpbmRpY2F0b3Igb2YgaXRzIHNpZ25pZmljYW5jZS4gVGhpcyBpcyBrZXJuZWwgc3luY2hyb25pemF0aW9uIGF0IGl0cyBjb3JlLCBzbyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3Igc2NydXRpbnkuIFRoaXMgbmV3IGZ1bmN0aW9uLCBleHBvcnRlZCBhcyBgRVhQT1JUX1NZTUJPTF9HUExgLCBzb3VuZHMgbGlrZSBpdCBwcm92aWRlcyBhIGZhc3QgcGF0aCB3aGVuIHRoZXJlIGFyZSBubyBTUkNVIHJlYWRlcnMgcHJlc2VudC4KCkFscmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgdGhpcyBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEFic29sdXRlbHksIHRoaXMgaXMgY2hhbmdpbmcgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBsb29rLiBUaGUgZmFjdCB0aGF0IGB0cnlfc3luY2hyb25pemVfc3JjdWAgaXMgYSBuZXcgQVBJIGVudHJ5IHBvaW50IGlzIGFub3RoZXIgcmVkIGZsYWcgb2YgcG90ZW50aWFsIGludGVyZXN0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBXZSBrbm93IGBzcmN1dGlueS5jYCBnZXRzIGNvbXBpbGVkIHdpdGggYENPTkZJR19USU5ZX1NSQ1VgIGFuZCBgc3JjdXRyZWUuY2AgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfVFJFRV9TUkNVYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgQ09ORklHX1NSQ1VgIGlzIHRoZSBtYWluIGNvbmZpZyBzZXR0aW5nLCBhbmQgd2lsbCBzZWxlY3Qgb25lIG9mIHRoZSBjaGlsZHJlbi4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaWdnaW5nIGludG8gYGtlcm5lbC9yY3UvTWFrZWZpbGVgIG9yIGBpbml0L0tjb25maWdgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIFNSQ1UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXCguKlNSQ1UuKlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9NYWtlZmlsZT0xMD1vYmoteSAmIzQzOz0gdXBkYXRlLm8gc3luYy5vXG5rZXJuZWwvcmN1L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19UUkVFX1NSQ1UpICYjNDM7PSBzcmN1dHJlZS5vXG5rZXJuZWwvcmN1L01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19USU5ZX1NSQ1UpICYjNDM7PSBzcmN1dGlueS5vXG5rZXJuZWwvcmN1L01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSAmIzQzOz0gcmN1dG9ydHVyZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnM6CgoqKkFuYWx5emluZyBDT05GSUdfVFJFRV9TUkNVIGFuZCBDT05GSUdfVElOWV9TUkNVKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19UUkVFX1NSQ1VgIGFuZCBgQ09ORklHX1RJTllfU1JDVWAuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHR3byBvcHRpb25zIGZvciBTUkNVIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGV5IGludGVyZGVwZW5kZW50PyBEbyB0aGV5IGhhdmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgYXV0b21hdGljYWxseSBlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBPciwgYXJlIHRoZXkgc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gc29tZSBjcml0ZXJpYT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IHRoZXnigJlyZSBkZWZpbmVkIGFuZCBpZiBhbnl0aGluZyBmb3JjZXMgb3IgZXhjbHVkZXMgdGhlbS4gTGV04oCZcyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoVFJFRXxUSU5ZKV9TUkNVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZz00MT1jb25maWcgUkNVX0VYUEVSVFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy01NS1cbmtlcm5lbC9yY3UvS2NvbmZpZzo1Njpjb25maWcgVElOWV9TUkNVXG5rZXJuZWwvcmN1L0tjb25maWctNTctXHRib29sXG4tLVxua2VybmVsL3JjdS9LY29uZmlnLTYxLVxua2VybmVsL3JjdS9LY29uZmlnOjYyOmNvbmZpZyBUUkVFX1NSQ1Vcbmtlcm5lbC9yY3UvS2NvbmZpZy02My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0cywgYW5kIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlVuZGVyc3RhbmRpbmcgSW1wbGljaXQgQm9vbGVhbiBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZXNlICYjMzQ7dGhleSYjMzQ7IHZhcmlhYmxlcywgd2hpY2ggYXJlIGRlZmluZWQgYXMgYGJvb2xgIChib29sZWFucykgKndpdGhvdXQqIGFueSBkaXJlY3QgcHJvbXB0aW5nLiBUaGlzIGltcGxpZXMgYSBzcGVjaWZpYyBkZXNpZ24gY2hvaWNlIGluIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhleSYjMzk7cmUgbm90IGdldHRpbmcgdGhlaXIgdmFsdWUgdGhyb3VnaCBhIGRpcmVjdCB1c2VyIGlucHV0LCBhbiBleHBsaWNpdCBxdWVzdGlvbiBvciBzZWxlY3Rpb24uIEluc3RlYWQsIHRoZWlyIHRydXRoaW5lc3MgaXMgZGVyaXZlZCAqaW1wbGljaXRseSogZnJvbSB0aGUgc2V0dGluZ3MgYW5kIGludGVyYWN0aW9ucyBvZiBvdGhlciwgcG9zc2libHkgbW9yZSBwcm9taW5lbnQsIGNvbmZpZ3MuCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgbWVhbnMgdGhlc2UgYGJvb2xgIHZhcmlhYmxlcyBhcmUgKmRlcGVuZGFudCouIFRoZWlyIHZhbHVlcyBhcmUgZGVyaXZlZCBmcm9tIHNvbWUgdXBzdHJlYW0gbG9naWMsIHBlcmhhcHMgY29uZGl0aW9uYWwgc2V0dGluZ3MsIGNhbGN1bGF0ZWQgZmxhZ3MsIG9yIHByZS1kZWZpbmVkIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4KClRoaXMgaXMgYSBnb29kIHNpZ24sIHBvdGVudGlhbGx5LiBCZWNhdXNlIHRoaXMgaW1wbGljaXQgc2VsZWN0aW9uIGFwcHJvYWNoIGNhbiBiZSBtb3JlIHN0cmVhbWxpbmVkIGZvciB0aGUgZW5kLXVzZXIuIElmIGl0IGlzIHdlbGwtZGVzaWduZWQsIGl0IGNhbiByZWR1Y2UgY29nbml0aXZlIGxvYWQgYW5kIHByb3ZpZGUgYSBzbW9vdGhlciB1c2VyIGV4cGVyaWVuY2UuIEl0IGFsbG93cyB0aGUgc3lzdGVtIHRvIG1ha2Ugc2Vuc2libGUgYXNzdW1wdGlvbnMsIHJlbW92aW5nIHRoZSBuZWVkIGZvciB0aGUgdXNlciB0byBtYWtlIGNob2ljZXMgdGhleSBkb24mIzM5O3QgbmVjZXNzYXJpbHkgdW5kZXJzdGFuZCBvciBjYXJlIGFib3V0LiBJdCBhbHNvIGNvdWxkIHN1cHBvcnQgbW9yZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3Mgc2V0dGluZ3MgYW5kIGZlYXR1cmUgdXNlLgoKSG93ZXZlciwgaW1wbGljaXQgc2V0dGluZ3MgYWxzbyBjYW4gY3JlYXRlIGEgcG90ZW50aWFsIGRlYnVnZ2luZyBhbmQgbWFuYWdlbWVudCBwcm9ibGVtLiBJZiB0aGUgbG9naWMgaXMgbm90IHdlbGwtZG9jdW1lbnRlZCwgdGhlbiBpdCBjYW4gbWFrZSB0cm91Ymxlc2hvb3RpbmcgY29tcGxleCBjb25maWcgYmVoYXZpb3VyLCBvciBhbnRpY2lwYXRpbmcgdGhlIHJlc3VsdCBvZiBvdGhlciBjb25maWd1cmF0aW9uIGNob2ljZXMsIGRpZmZpY3VsdC4gV2Ugd2lsbCBoYXZlIHRvIHNwZW5kIGEgYml0IG1vcmUgdGltZSBnZXR0aW5nIHRvIGtub3cgdGhlbSB0byBiZXR0ZXIgYXBwcmVjaWF0ZSB0aGVpciBmdW5jdGlvbi4KClNvLCB3aGlsZSBwb3RlbnRpYWxseSBlbGVnYW50LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgZ3JhcGggb2YgdGhlc2UgYGJvb2xgIHZhcmlhYmxlcyB0byBmdWxseSBncmFzcCB0aGVpciBzaWduaWZpY2FuY2UgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IChUUkVFfFRJTlkpX1NSQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzczoKCioqU1JDVSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBgU1JDVWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGxhdGVzdCBzZXR0aW5ncyB0byBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgcnVubmluZyBvcHRpbWFsbHksIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MsIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgY3VycmVudCBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGluIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXNpcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTUkNVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipTUkNVIENvbmZpZ3VyYXRpb24gSHVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gU1JDVS4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIHRoZSBrZXJuZWwgZm9yIHNvbWUgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc21zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHdoZXJlIHdvdWxkIHRob3NlIHNldHRpbmdzIGxpa2VseSBiZT8gR2l2ZW4gaXRzIGNvcmUgbmF0dXJlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNpbmNlIHRoYXQgb2Z0ZW4gaGFuZGxlcyBmdW5kYW1lbnRhbCBrZXJuZWwgZmVhdHVyZXMgb3IgdGhlIGBrZXJuZWwvcmN1L0tjb25maWdgIGZpbGUgc2luY2UgU1JDVSBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gUkNVLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCB3aGF0IEkgbmVlZCBmcm9tIGVpdGhlciBvZiB0aG9zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNSQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzUyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSHVudCBmb3IgUkNVIEltcGxlbWVudGF0aW9uIERldGFpbHMqKgoKT2theSwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMgUkNVIHRoaW5nLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGFuZCBkaXJ0eSBhcHByb2FjaC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFJDVSBpcywgYWxtb3N0IGNlcnRhaW5seSwgYGtlcm5lbC9yY3UvS2NvbmZpZ2AuIFNvLCB3aGF0IEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgYSBzaW1wbGUgdGV4dCBzZWFyY2ggaW5zaWRlIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgc3RyaW5ncyBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbmFtZXMgb2YgbGlrZWx5LCBzcGVjaWZpYyBSQ1UgaW1wbGVtZW50YXRpb25zLCBhbmQgS2NvbmZpZyBvcHRpb25zIHVzdWFsbHkgaGF2ZSBhIGRpc3RpbmN0aXZlIG5hbWluZyBjb252ZW50aW9uLiBIb3BlZnVsbHkgdGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBoaWdoLWxldmVsIGRlc2lnbiBjaG9pY2VzIGFyZSBmb3IgUkNVIGluIHRoaXMga2VybmVsIHZlcnNpb24sIGluc3RlYWQgb2YgaGF2aW5nIHRvIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgcmlnaHQgYXdheS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KFRSRUV8VElOWSlfU1JDVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L0tjb25maWc9NDE9Y29uZmlnIFJDVV9FWFBFUlRcbi0tXG5rZXJuZWwvcmN1L0tjb25maWctNTUtXG5rZXJuZWwvcmN1L0tjb25maWc6NTY6Y29uZmlnIFRJTllfU1JDVVxua2VybmVsL3JjdS9LY29uZmlnLTU3LVx0Ym9vbFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy02MS1cbmtlcm5lbC9yY3UvS2NvbmZpZzo2Mjpjb25maWcgVFJFRV9TUkNVXG5rZXJuZWwvcmN1L0tjb25maWctNjMtXHRib29sXG4tLVxua2VybmVsL3JjdS9LY29uZmlnPTY4PWNvbmZpZyBGT1JDRV9ORUVEX1NSQ1VfTk1JX1NBRkVcbmtlcm5lbC9yY3UvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Rm9yY2Ugc2VsZWN0aW9uIG9mIE5FRURfU1JDVV9OTUlfU0FGRVwmIzM0O1xua2VybmVsL3JjdS9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiAhVElOWV9TUkNVXG5rZXJuZWwvcmN1L0tjb25maWctNzEtXHRkZXBlbmRzIG9uIFJDVV9FWFBFUlRcbi0tXG5rZXJuZWwvcmN1L0tjb25maWc9ODE9Y29uZmlnIE5FRURfU1JDVV9OTUlfU0FGRVxua2VybmVsL3JjdS9LY29uZmlnOjgyOlx0ZGVmX2Jvb2wgSEFWRV9OTUkgXHUwMDI2XHUwMDI2ICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFUSU5ZX1NSQ1Vcbmtlcm5lbC9yY3UvS2NvbmZpZy04My1cbi0tXG5rZXJuZWwvcmN1L0tjb25maWc9MTc2PWNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1Rcbmtlcm5lbC9yY3UvS2NvbmZpZzoxNzc6XHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG5rZXJuZWwvcmN1L0tjb25maWctMTc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcHJvY2VzcyBvZiBzZWxlY3Rpb24sIGFuZCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKlRoZSBMb2N1cyBvZiBTZWxlY3Rpb246IEEgQ3JpdGljYWwgUXVlc3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGlzOiAqV2hlcmUqIGRvZXMgc2VsZWN0aW9uIGFjdHVhbGx5IGhhcHBlbj8gSXTigJlzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24sIGFuZCBvbmUgSSBvZnRlbiBncmFwcGxlIHdpdGggaW4gbXkgd29yay4gSXQmIzM5O3Mgbm90IGp1c3QgYSBtYXR0ZXIgb2YgaWRlbnRpZnlpbmcgdGhlICp3aGF0KiBpcyBzZWxlY3RlZDsgdW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaXNtLCB0aGUgY29uc3RyYWludHMsIGFuZCB0aGUgZXZvbHV0aW9uYXJ5IGR5bmFtaWNzIGludm9sdmVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzZWxlY3Rpb24gYXQgdGhlIGxldmVsIG9mIHRoZSBpbmRpdmlkdWFsLCB0aGUgZ2VuZSwgdGhlIGdyb3VwLCBvciBldmVuIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggYW5kIG11bHRpLXRpZXJlZD8gVGhpcyBpc24mIzM5O3QgYSBzaW1wbGUgJiMzNDtjaGVjayB0aGUgYm94JiMzNDsgc2NlbmFyaW8uIEVhY2ggbGV2ZWwgcHJlc2VudHMgaXRzIG93biBjaGFsbGVuZ2VzLiBXaGF0IGFyZSB0aGUgc2VsZWN0aXZlIHByZXNzdXJlcyBhdCBwbGF5PyBIb3cgZG8gZGlmZmVyZW50IGxldmVscyBpbnRlcmFjdD8gSG93IGRvIHdlIGVtcGlyaWNhbGx5IG1lYXN1cmUgdGhlIGVmZmVjdHMgb2Ygc2VsZWN0aW9uIGFjcm9zcyBkaWZmZXJlbnQgc2NhbGVzPyBUaGlua2luZyBhYm91dCBzcGF0aWFsIGNvbnRleHQgaGVyZS4gSWYgd2UgYXJlIHRhbGtpbmcgYWJvdXQgc2VsZWN0aW9uIG9mIHNwZWNpZXMsIHRoaXMgaXMgdGhlIGVjb2xvZ2ljYWwgbmljaGUsIGFuZCB0aGUgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIG9yZ2FuaXNtcyBpbiB0aGF0IG5pY2hlLiBUaGlzIGlzIGFsbCByZWFsbHkgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBrZWVwIHByb2JpbmcgdGhpcyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgaXQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCAoVFJFRXxUSU5ZKV9TUkNVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIHRoZSAmIzM5O2RlZmF1bHQmIzM5OyBPcHRpb24qKgoKSG1tLCB0aGlua2luZyBhYm91dCB0aGlzLi4uIGNvdWxkIGBkZWZhdWx0YCBiZSB0aGUgYW5zd2VyPyBJdCYjMzk7cyB0aGF0IG5hZ2dpbmcgcG9zc2liaWxpdHkgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSSYjMzk7bSB0cnlpbmcgdG8gd2VpZ2ggYWxsIHRoZSBvcHRpb25zLCBjb25zaWRlcmluZyBlZGdlIGNhc2VzLCBhbmQgbG9va2luZyBmb3IgZWxlZ2FuY2UgYW5kIG1haW50YWluYWJpbGl0eSBpbiB0aGUgc29sdXRpb24sIGFuZCB0aGF0ICYjMzQ7ZGVmYXVsdCYjMzQ7IG9wdGlvbiBrZWVwcyBwb3BwaW5nIHVwLiBJdCYjMzk7cyBvZnRlbiB0aGUgc2ltcGxlc3QgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIGl0IHRydWx5IGNvdmVycyB0aGUgaW50ZW5kZWQgc2NlbmFyaW8gYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgY29ybmVyIGNhc2VzLiBJJiMzOTttIGV4cGxvcmluZyBpZiB0aGlzIG9mZmVycyB0aGUgY29ycmVjdCBmbGV4aWJpbGl0eSB3aGlsZSBzdGlsbCByZW1haW5pbmcgZWZmaWNpZW50IGFuZCByZWFkYWJsZS4gTmVlZCB0byBiZSBzdXJlIGl0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmF1bHQuKihUUkVFfFRJTlkpX1NSQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIFJDVSBjb25maWd1cmF0aW9uLCBmb2N1c2luZyBvbiBgVElOWV9TUkNVYCBhbmQgYFRSRUVfU1JDVWA6CgoqKkRlbHZpbmcgaW50byBSQ1UgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL3JjdS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNtYWxsZXIsIG1vcmUgc3BlY2lhbGl6ZWQgUkNVIGltcGxlbWVudGF0aW9ucywgc3BlY2lmaWNhbGx5IGBUSU5ZX1NSQ1VgIGFuZCBgVFJFRV9TUkNVYC4gSSBrbm93IHRoZXkgb2ZmZXIgdHJhZGUtb2ZmcyBjb21wYXJlZCB0byB0aGUgc3RhbmRhcmQgUkNVLCBidXQgSSBzaG91bGQgY29uc2lkZXIgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB3aGVyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWNvbWUgcHJlZmVyYWJsZS4gYFRJTllfU1JDVWAsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpcyBwcm9iYWJseSBnZWFyZWQgdG93YXJkcyBzeXN0ZW1zIHdpdGggcmVhbGx5IHJlc291cmNlIGNvbnN0cmFpbnRzLCBvciBwb3NzaWJseSB0aG9zZSBoZWF2aWx5IHV0aWxpemluZyBzaW5nbGUtd3JpdGVyIHNpdHVhdGlvbnMuIFRoZW4sIGBUUkVFX1NSQ1VgLi4uIEkgdGhpbmsgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBhbmQgbWlnaHQgb2ZmZXIgaW1wcm92ZW1lbnRzIGluIGNlcnRhaW4gY29uY3VycmVuY3kgc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCBkZXBlbmRlbmNpZXMgdGhlc2UgY29uZmlndXJhdGlvbnMgaGF2ZSwgd2hhdCB0aGVpciBkZWZhdWx0IHN0YXRlcyBhcmUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIGNvbW1lbnRzIGluIHRoZSBLY29uZmlnIGZpbGUgZnJhbWUgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgZWFjaC4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoaXMgYW5kIGZpcm0gdXAgbXkgbWVudGFsIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdCAgb2JzY3VyZSBSQ1Ugb3B0aW9ucyB0byBiZSBzZXQgdXAuXG4gIDUxOlx0XG4gIDUyOlx0XHQgIFNheSBZIGlmIHlvdSBuZWVkIHRvIG1ha2UgZXhwZXJ0LWxldmVsIGFkanVzdG1lbnRzIHRvIFJDVS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFRJTllfU1JDVVxuICA1NzpcdFx0Ym9vbFxuICA1ODpcdFx0ZGVmYXVsdCB5IGlmIFRJTllfUkNVXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIHNpbmdsZS1DUFUgbm9uLXByZWVtcHRpYmxlIHZlcnNpb24gb2YgU1JDVS5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgVFJFRV9TUkNVXG4gIDYzOlx0XHRib29sXG4gIDY0Olx0XHRkZWZhdWx0IHkgaWYgIVRJTllfUkNVXG4gIDY1Olx0XHRoZWxwXG4gIDY2Olx0XHQgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGZ1bGwtZmxlZGdlZCB2ZXJzaW9uIG9mIFNSQ1UuXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEZPUkNFX05FRURfU1JDVV9OTUlfU0FGRVxuICA2OTpcdFx0Ym9vbCBcJiMzNDtGb3JjZSBzZWxlY3Rpb24gb2YgTkVFRF9TUkNVX05NSV9TQUZFXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDUKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTUkNVIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmUgQWRkaXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBzaW1wbGlmaWVzIHRoZSBTUkNVIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGBTUkNVYCBpcyBhbHdheXMgZW5hYmxlZCBub3csIGVpdGhlciB0aHJvdWdoIGBUSU5ZX1JDVWAgb3IgYFRSRUVfUkNVYC4gSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgY29uZmlndXJhdGlvbnMuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgbmVlZGluZyBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAgYnV0IG5vLCBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAgYXJlIGltcGxpY2l0bHkgZW5hYmxlZCBiYXNlZCBvbiB0aGUgYFRJTllfUkNVYCBzZXR0aW5nLiBgVElOWV9SQ1VgIGlzIGZvciB1bmlwcm9jZXNzb3IsIGBUUkVFX1JDVWAgaXMgZm9yIFNNUCBzeXN0ZW1zLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4gVGhpcyBpcyBhICptYWpvciogYWRkaXRpb24g4oCTIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgd2l0aGluIHRoZSBrZXJuZWwuIEl0cyBhIGZhc3QtcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMsIG1ha2luZyBpdCBhIGNyaXRpY2FsIHByaW1pdGl2ZSBmb3IgdGhlIGtlcm5lbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4gSSBuZWVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMuCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG5ldyBmdW5jdGlvbiBhZGRlZC4uLiB5ZXAsIGp1c3QgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4KClNpbmNlIGBUUkVFX1NSQ1VgIGlzIHRoZSBkZWZhdWx0IGFuZCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQsIEkgY2FuIGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciB0aGUgZnV6emVyIGNvbmZpZ3VyYXRpb24uIEkgY291bGQgcHV0IGBUUkVFX1NSQ1VgIHNpbmNlIGl0IG1ha2VzIHRoZSBkZXBlbmRlbmN5IGV4cGxpY2l0LiBTbyBJJiMzOTtsbCBwdXQgYFRSRUVfU1JDVWAgdG8gYmUgY2xlYXIuCgpBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3N5bmNocm9uaXplX3NyY3UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfc3luY2hyb25pemVfc3JjdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBgc3luY2hyb25pemVfc3JjdWAgd2hlbiB0aGVyZSBhcmUgbm8gcmVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBSQ1UvU1JDVSBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgYnkgYW55IGtlcm5lbCBtb2R1bGUgb3Igc3Vic3lzdGVtIHVzaW5nIFNSQ1UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHJlYWRlci1mcmVlIHN0YXRlcyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIFNSQ1UgZ3JhY2UgcGVyaW9kcyB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVhZGVycy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWFkaW5nIFNSQ1UgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBwYXJzaW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBvcmRlcmluZyB2aW9sYXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNjNDY3ODhhZDdhYjJiY2ViODUyZmU0MzU2N2UwY2M5ODEyZjBlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtOTEsNiAmIzQzOzkxLDcgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOwogdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiYjNDM7Ym9vbCB0cnlfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMjYwLDYgJiM0MzsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiAKJiM0MzsvKioKJiM0MzsgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3QKJiM0MzsgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLgomIzQzOyAqCiYjNDM7ICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlCiYjNDM7ICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0CiYjNDM7ICogc2xlZXBpbmcuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlIHRoZSBjYWxsZXIgbXVzdCBmYWxsCiYjNDM7ICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuCiYjNDM7ICoKJiM0MzsgKiBPbiAhU01QIGEgcmVhZGVyIGNhbiBvbmx5IGJlIG1pZC1jcml0aWNhbC1zZWN0aW9uIGlmIGl0IHdhcwomIzQzOyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW4KJiM0MzsgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nCiYjNDM7ICogemVybyB0aGVyZWZvcmUgcHJvdmVzIHRoYXQgbm8gcmVhZGVyIGV4aXN0cywgYW5kIGFueSByZWFkZXIgd2hpY2gKJiM0MzsgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpcwomIzQzOyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJcmV0dXJuICFSRUFEX09OQ0Uoc3NwLSZndDtzcmN1X2xvY2tfbmVzdGluZ1swXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIVJFQURfT05DRShzc3AtJmd0O3NyY3VfbG9ja19uZXN0aW5nWzFdKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpOwomIzQzOwogLyoKICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwpAQCAtMTU4MCw2ICYjNDM7MTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTsKIAomIzQzOy8qKgomIzQzOyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdAomIzQzOyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuCiYjNDM7ICoKJiM0MzsgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGUKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXQKJiM0MzsgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0CiYjNDM7ICogYWR2YW5jaW5nIHRoZSBncmFjZS1wZXJpb2Qgc2VxdWVuY2UuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbgomIzQzOyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3IKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsCiYjNDM7ICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhbgomIzQzOyAqIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgY29zdHMgdHdvIHRyaXBzIHRocm91Z2ggdGhlIHdvcmtxdWV1ZSBhbmQgYW4KJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZQomIzQzOyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LgomIzQzOyAqCiYjNDM7ICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKCkKJiM0MzsgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlCiYjNDM7ICogZXZlciBiZWVuIHVzZWQgb24gQHNzcCwgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB1bmxvY2tzMCwgdW5sb2NrczE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmRtMCwgcmRtMTsKJiM0MzsKJiM0MzsJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHByaW9yIHN0b3JlcyBiZWZvcmUgdGhlIGNvdW50ZXIgcmVhZHMgYmVsb3cuCiYjNDM7CSAqIFBhaXJzIChzdG9yZS1idWZmZXJpbmcgcGF0dGVybikgd2l0aCB0aGUgc21wX21iKCkgaW4KJiM0MzsJICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdAomIzQzOwkgKiBvYnNlcnZlZCBieSB0aGUgc3VtcyBiZWxvdyBpcyBndWFyYW50ZWVkIHRvIG9ic2VydmUsIHdpdGhpbiBpdHMKJiM0MzsJICogY3JpdGljYWwgc2VjdGlvbiwgZXZlcnkgc3RvcmUgdGhlIGNhbGxlciBtYWRlIGJlZm9yZSBjYWxsaW5nCiYjNDM7CSAqIHRoaXMgZnVuY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsKJiM0MzsJdW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsICZhbXA7cmRtMCk7CiYjNDM7CXVubG9ja3MxID0gc3JjdV9yZWFkZXJzX3VubG9ja19pZHgoc3NwLCAxLCAmYW1wO3JkbTEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFkZXIgZmxhdm9ycyB3aGljaCBlbGlkZSB0aGUgcmVhZC1zaWRlIHNtcF9tYigpIHRoYXQgdGhlCiYjNDM7CSAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTsKJiM0MzsJICogdGhleSBuZWVkIGEgcmVhbCBncmFjZSBwZXJpb2QuCiYjNDM7CSAqLwomIzQzOwlpZiAoKHJkbTAgfCByZG0xKSAmYW1wOyBTUkNVX1JFQURfRkxBVk9SX1NMT1dHUCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgaW4gc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHhfY2hlY2soKTogZW5zdXJlIHRoYXQgYSBsb2NrIGlzCiYjNDM7CSAqIGFsd2F5cyBjb3VudGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHVubG9jayBpcyBjb3VudGVkLCBzbyB0aGF0CiYjNDM7CSAqIGEgcmVhZGVyIHJhY2luZyB3aXRoIHRoZXNlIHN1bXMgY2FuIG9ubHkgaW5mbGF0ZSB0aGUgbG9jayBzdW0KJiM0MzsJICogYW5kIGZvcmNlIHRoZSAoc2FmZSkgZmFsbGJhY2suIFN1bW1pbmcgYm90aCBlcG9jaHMgbWVhbnMgbm8KJiM0MzsJICogaW5kZXggZmxpcCBpcyBuZWVkZWQ6IGEgc3RhYmxlIGVxdWFsaXR5IHByb3ZlcyB0aGVyZSB3YXMgYQomIzQzOwkgKiBtb21lbnQgaW4gdGhpcyBmdW5jdGlvbiBhdCB3aGljaCBubyByZWFkZXJzIGV4aXN0ZWQgYXQgYWxsLgomIzQzOwkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CiYjNDM7CWlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMCwgZmFsc2UsIHVubG9ja3MwKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAxLCBmYWxzZSwgdW5sb2NrczEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTsKJiM0MzsKIC8qKgogICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llCiAgKiBAc3NwOiBzcmN1X3N0cnVjdCB0byBwcm92aWRlIGNvb2tpZSBmb3IuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY0CgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHRvIGBzcmN1dGlueS5jYCBhbmQgYHNyY3V0cmVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhaW1pbmcgZm9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIFNSQ1Ugc3luY2hyb25pemF0aW9uLCBvZmZlcmluZyBhIHF1aWNrZXIgcGF0aCB3aGVuIHRoZXJlIGFyZSBubyByZWFkZXJzLiBUaGlzIGFsaWducyB3aXRoIGEgY29tbW9uIHN0cmF0ZWd5IOKAkyBvcHRpbWlzdGljYWxseSBjaGVja2luZyBmb3IgYW4gZWFzeSBjYXNlIGJlZm9yZSBnb2luZyBkb3duIHRoZSBzbG93ZXIsIG1vcmUgZ2VuZXJhbCByb3V0ZS4KCkZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZC4gQWxzbywgdGhlcmUmIzM5O3Mgbm8gcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIG9yIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGF0JiMzOTtzIGEgaHVnZSByZWxpZWYuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgcmVhZGluZyBhbmQgbW9kaWZ5aW5nIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgbWVtb3J5IGJhcnJpZXJzIGNvbmZpcm1zIHRoaXMgaXMgcHVyZWx5IGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4KCkkgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLCBzbyBJJiMzOTtsbCBxdWlja2x5IGxvb2sgb3ZlciB0aGUgY29kZS4gSSBzZWUgdGhhdCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHJlYWRzIGBzc3AtJmd0O3NyY3VfbG9ja19uZXN0aW5nWzBdYCBhbmQgYHNzcC0mZ3Q7c3JjdV9sb2NrX25lc3RpbmdbMV1gIGluIHRoZSBgc3JjdXRpbnkuY2Agc2lkZSwgYW5kIEkgc2VlIGNhbGxzIHRvIGBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeGAgYW5kIGBzcmN1X3JlYWRlcnNfbG9ja19pZHhgIGluIGBzcmN1dHJlZS5jYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgYW5kIGNvbmZpcm1zIG15IGFzc2Vzc21lbnQ6IHRoZXJlJiMzOTtzIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFueXdoZXJlLCBzbyBLTVNBTiBzaG91bGQgYmUgaXJyZWxldmFudCBoZXJlLgoKQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYW55IGJ1Z3MgaW4gdGhpcyBwYXRjaCBhcmUgbGlrZWx5IHRvIGJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgcHJvYmxlbXMsIHN1YnRsZSBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLCBvciB0aGUgZHJlYWRlZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuIEhvd2V2ZXIsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBraW5kcyBvZiBidWdzIHNob3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gU28sIHRoZSBrZXJuZWwmIzM5O3MgZXhpc3Rpbmcgc2FmZXR5IG1lY2hhbmlzbXMgYXJlIHdlbGwtc3VpdGVkIHRvIGRldGVjdCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgaXMgYSBsb3ctcmlzaywgaGlnaC1yZXdhcmQgb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjAxLjYwMzUwNDI1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjMxODMwNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9zeW5jaHJvbml6ZV9zcmN1XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MDEuNjAzNTA5NjczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUzNTc2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Y2M0Njc4OGFkN2FiMmJjZWI4NTJmZTQzNTY3ZTBjYzk4MTJmMGVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdS5oIGIvaW5jbHVkZS9saW51eC9zcmN1LmhcXG5pbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1LmhcXG5AQCAtOTEsNiArOTEsNyBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpoZWFkLFxcbiBcXHRcXHR2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7XFxuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XFxuIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XFxuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbiBcXG4gI2RlZmluZSBTUkNVX0dFVF9TVEFURV9DT01QTEVURUQgMHgxXFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcXG5pbmRleCBhMmUyZDUxNmU1MWI5Li5mMDcxNTljYWUyNDE5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbkBAIC0yNjAsNiArMjYwLDI5IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qKlxcbisgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3RcXG4rICogQHNzcDogc3JjdV9zdHJ1Y3Qgd2l0aCB3aGljaCB0byBzeW5jaHJvbml6ZS5cXG4rICpcXG4rICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlXFxuKyAqIHN5bmNocm9uaXplX3NyY3UoKSBndWFyYW50ZWUgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseSwgd2l0aG91dFxcbisgKiBzbGVlcGluZy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGxcXG4rICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuXFxuKyAqXFxuKyAqIE9uICFTTVAgYSByZWFkZXIgY2FuIG9ubHkgYmUgbWlkLWNyaXRpY2FsLXNlY3Rpb24gaWYgaXQgd2FzXFxuKyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW5cXG4rICogd2hpY2ggY2FzZSBpdHMgbmVzdGluZyBjb3VudCBpcyB2aXNpYmx5IG5vbi16ZXJvLiBCb3RoIGNvdW50cyBiZWluZ1xcbisgKiB6ZXJvIHRoZXJlZm9yZSBwcm92ZXMgdGhhdCBubyByZWFkZXIgZXhpc3RzLCBhbmQgYW55IHJlYWRlciB3aGljaFxcbisgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpc1xcbisgKiBzb2xlIENQVSwgb2JzZXJ2ZSBldmVyeSBzdG9yZSB0aGUgY2FsbGVyIG1hZGUgYmVmb3JlIGNhbGxpbmcgaXQuXFxuKyAqL1xcbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbit7XFxuK1xcdHJldHVybiAhUkVBRF9PTkNFKHNzcC1cXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAhUkVBRF9PTkNFKHNzcC1cXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMV0pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTtcXG4rXFxuIC8qXFxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXFxuaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG5AQCAtMTU4MCw2ICsxNTgwLDc2IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qKlxcbisgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3RcXG4rICogQHNzcDogc3JjdV9zdHJ1Y3Qgd2l0aCB3aGljaCB0byBzeW5jaHJvbml6ZS5cXG4rICpcXG4rICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlXFxuKyAqIHN5bmNocm9uaXplX3NyY3UoKSBndWFyYW50ZWUgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseTogd2l0aG91dFxcbisgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0XFxuKyAqIGFkdmFuY2luZyB0aGUgZ3JhY2UtcGVyaW9kIHNlcXVlbmNlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzczsgb25cXG4rICogZmFpbHVyZSB0aGUgY2FsbGVyIG11c3QgZmFsbCBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKSBvclxcbisgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLlxcbisgKlxcbisgKiBUaGlzIHNlcnZlcyBkZWRpY2F0ZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyB3aG9zZSByZWFkLXNpZGUgY3JpdGljYWxcXG4rICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhblxcbisgKiBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kIGNvc3RzIHR3byB0cmlwcyB0aHJvdWdoIHRoZSB3b3JrcXVldWUgYW5kIGFuXFxuKyAqIHVuY29uZGl0aW9uYWwgc2xlZXAgb2YgdGhlIGNhbGxlciwgdGhyZWUgb3JkZXJzIG9mIG1hZ25pdHVkZSBtb3JlXFxuKyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LlxcbisgKlxcbisgKiBPbmx5IHJlYWRlcnMgb2YgdGhlIHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF9sb2NrX25taXNhZmUoKVxcbisgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlXFxuKyAqIGV2ZXIgYmVlbiB1c2VkIG9uIEBzc3AsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZmFsc2UuXFxuKyAqL1xcbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdW5sb2NrczAsIHVubG9ja3MxO1xcbitcXHR1bnNpZ25lZCBsb25nIHJkbTAsIHJkbTE7XFxuK1xcbitcXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBPcmRlciB0aGUgY2FsbGVyJ3MgcHJpb3Igc3RvcmVzIGJlZm9yZSB0aGUgY291bnRlciByZWFkcyBiZWxvdy5cXG4rXFx0ICogUGFpcnMgKHN0b3JlLWJ1ZmZlcmluZyBwYXR0ZXJuKSB3aXRoIHRoZSBzbXBfbWIoKSBpblxcbitcXHQgKiBfX3NyY3VfcmVhZF9sb2NrKCk6IGFueSByZWFkZXIgd2hvc2UgbG9jayBpbmNyZW1lbnQgaXMgbm90XFxuK1xcdCAqIG9ic2VydmVkIGJ5IHRoZSBzdW1zIGJlbG93IGlzIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZSwgd2l0aGluIGl0c1xcbitcXHQgKiBjcml0aWNhbCBzZWN0aW9uLCBldmVyeSBzdG9yZSB0aGUgY2FsbGVyIG1hZGUgYmVmb3JlIGNhbGxpbmdcXG4rXFx0ICogdGhpcyBmdW5jdGlvbi5cXG4rXFx0ICovXFxuK1xcdHNtcF9tYigpO1xcbitcXG4rXFx0dW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsIFxcdTAwMjZyZG0wKTtcXG4rXFx0dW5sb2NrczEgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDEsIFxcdTAwMjZyZG0xKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWRlciBmbGF2b3JzIHdoaWNoIGVsaWRlIHRoZSByZWFkLXNpZGUgc21wX21iKCkgdGhhdCB0aGVcXG4rXFx0ICogcGFpcmluZyBhYm92ZSBkZXBlbmRzIG9uIGNhbm5vdCBiZSBwcm92ZW4gYWJzZW50IHRoaXMgd2F5O1xcbitcXHQgKiB0aGV5IG5lZWQgYSByZWFsIGdyYWNlIHBlcmlvZC5cXG4rXFx0ICovXFxuK1xcdGlmICgocmRtMCB8IHJkbTEpIFxcdTAwMjYgU1JDVV9SRUFEX0ZMQVZPUl9TTE9XR1ApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIGluIHNyY3VfcmVhZGVyc19hY3RpdmVfaWR4X2NoZWNrKCk6IGVuc3VyZSB0aGF0IGEgbG9jayBpc1xcbitcXHQgKiBhbHdheXMgY291bnRlZCBpZiB0aGUgY29ycmVzcG9uZGluZyB1bmxvY2sgaXMgY291bnRlZCwgc28gdGhhdFxcbitcXHQgKiBhIHJlYWRlciByYWNpbmcgd2l0aCB0aGVzZSBzdW1zIGNhbiBvbmx5IGluZmxhdGUgdGhlIGxvY2sgc3VtXFxuK1xcdCAqIGFuZCBmb3JjZSB0aGUgKHNhZmUpIGZhbGxiYWNrLiBTdW1taW5nIGJvdGggZXBvY2hzIG1lYW5zIG5vXFxuK1xcdCAqIGluZGV4IGZsaXAgaXMgbmVlZGVkOiBhIHN0YWJsZSBlcXVhbGl0eSBwcm92ZXMgdGhlcmUgd2FzIGFcXG4rXFx0ICogbW9tZW50IGluIHRoaXMgZnVuY3Rpb24gYXQgd2hpY2ggbm8gcmVhZGVycyBleGlzdGVkIGF0IGFsbC5cXG4rXFx0ICovXFxuK1xcdHNtcF9tYigpO1xcbitcXG4rXFx0aWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAwLCBmYWxzZSwgdW5sb2NrczApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMSwgZmFsc2UsIHVubG9ja3MxKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogT3JkZXIgdGhlIGNhbGxlcidzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpO1xcbitcXG4gLyoqXFxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxcbiAgKiBAc3NwOiBzcmN1X3N0cnVjdCB0byBwcm92aWRlIGNvb2tpZSBmb3IuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjAyLjA0OTYyMjY4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1MDE1MzQ0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9zeW5jaHJvbml6ZV9zcmN1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNjNDY3ODhhZDdhYjJiY2ViODUyZmU0MzU2N2UwY2M5ODEyZjBlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuaW5kZXggYTU0Y2U5ZTgwOGI5Mi4uMGQ3NTQzYzdiZWNjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuQEAgLTkxLDYgKzkxLDcgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqaGVhZCxcbiBcdFx0dm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpO1xuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbiBcbiAjZGVmaW5lIFNSQ1VfR0VUX1NUQVRFX0NPTVBMRVRFRCAweDFcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbmluZGV4IGEyZTJkNTE2ZTUxYjkuLmYwNzE1OWNhZTI0MTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuQEAgLTI2MCw2ICsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbisvKipcbisgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3RcbisgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLlxuKyAqXG4rICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlXG4rICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0XG4rICogc2xlZXBpbmcuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlIHRoZSBjYWxsZXIgbXVzdCBmYWxsXG4rICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuXG4rICpcbisgKiBPbiAhU01QIGEgcmVhZGVyIGNhbiBvbmx5IGJlIG1pZC1jcml0aWNhbC1zZWN0aW9uIGlmIGl0IHdhc1xuKyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW5cbisgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nXG4rICogemVybyB0aGVyZWZvcmUgcHJvdmVzIHRoYXQgbm8gcmVhZGVyIGV4aXN0cywgYW5kIGFueSByZWFkZXIgd2hpY2hcbisgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpc1xuKyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC5cbisgKi9cbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuK3tcbitcdHJldHVybiAhUkVBRF9PTkNFKHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1swXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIVJFQURfT05DRShzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMV0pO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh0cnlfc3luY2hyb25pemVfc3JjdSk7XG4rXG4gLypcbiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWVcbiAgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbmluZGV4IDdjMmY3Y2MxMzFmN2EuLmI4NTJmNGQ0MjM5YzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuQEAgLTE1ODAsNiArMTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuKy8qKlxuKyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdFxuKyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuXG4rICpcbisgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGVcbisgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXRcbisgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0XG4rICogYWR2YW5jaW5nIHRoZSBncmFjZS1wZXJpb2Qgc2VxdWVuY2UuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvblxuKyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3JcbisgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLlxuKyAqXG4rICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsXG4rICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhblxuKyAqIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgY29zdHMgdHdvIHRyaXBzIHRocm91Z2ggdGhlIHdvcmtxdWV1ZSBhbmQgYW5cbisgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZVxuKyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LlxuKyAqXG4rICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKClcbisgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlXG4rICogZXZlciBiZWVuIHVzZWQgb24gQHNzcCwgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS5cbisgKi9cbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdW5sb2NrczAsIHVubG9ja3MxO1xuK1x0dW5zaWduZWQgbG9uZyByZG0wLCByZG0xO1xuK1xuK1x0Y2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyIHRoZSBjYWxsZXIncyBwcmlvciBzdG9yZXMgYmVmb3JlIHRoZSBjb3VudGVyIHJlYWRzIGJlbG93LlxuK1x0ICogUGFpcnMgKHN0b3JlLWJ1ZmZlcmluZyBwYXR0ZXJuKSB3aXRoIHRoZSBzbXBfbWIoKSBpblxuK1x0ICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdFxuK1x0ICogb2JzZXJ2ZWQgYnkgdGhlIHN1bXMgYmVsb3cgaXMgZ3VhcmFudGVlZCB0byBvYnNlcnZlLCB3aXRoaW4gaXRzXG4rXHQgKiBjcml0aWNhbCBzZWN0aW9uLCBldmVyeSBzdG9yZSB0aGUgY2FsbGVyIG1hZGUgYmVmb3JlIGNhbGxpbmdcbitcdCAqIHRoaXMgZnVuY3Rpb24uXG4rXHQgKi9cbitcdHNtcF9tYigpO1xuK1xuK1x0dW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsIFx1MDAyNnJkbTApO1xuK1x0dW5sb2NrczEgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDEsIFx1MDAyNnJkbTEpO1xuK1xuK1x0LypcbitcdCAqIFJlYWRlciBmbGF2b3JzIHdoaWNoIGVsaWRlIHRoZSByZWFkLXNpZGUgc21wX21iKCkgdGhhdCB0aGVcbitcdCAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTtcbitcdCAqIHRoZXkgbmVlZCBhIHJlYWwgZ3JhY2UgcGVyaW9kLlxuK1x0ICovXG4rXHRpZiAoKHJkbTAgfCByZG0xKSBcdTAwMjYgU1JDVV9SRUFEX0ZMQVZPUl9TTE9XR1ApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBBcyBpbiBzcmN1X3JlYWRlcnNfYWN0aXZlX2lkeF9jaGVjaygpOiBlbnN1cmUgdGhhdCBhIGxvY2sgaXNcbitcdCAqIGFsd2F5cyBjb3VudGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHVubG9jayBpcyBjb3VudGVkLCBzbyB0aGF0XG4rXHQgKiBhIHJlYWRlciByYWNpbmcgd2l0aCB0aGVzZSBzdW1zIGNhbiBvbmx5IGluZmxhdGUgdGhlIGxvY2sgc3VtXG4rXHQgKiBhbmQgZm9yY2UgdGhlIChzYWZlKSBmYWxsYmFjay4gU3VtbWluZyBib3RoIGVwb2NocyBtZWFucyBub1xuK1x0ICogaW5kZXggZmxpcCBpcyBuZWVkZWQ6IGEgc3RhYmxlIGVxdWFsaXR5IHByb3ZlcyB0aGVyZSB3YXMgYVxuK1x0ICogbW9tZW50IGluIHRoaXMgZnVuY3Rpb24gYXQgd2hpY2ggbm8gcmVhZGVycyBleGlzdGVkIGF0IGFsbC5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXG4rXHRpZiAoIXNyY3VfcmVhZGVyc19sb2NrX2lkeChzc3AsIDAsIGZhbHNlLCB1bmxvY2tzMCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMSwgZmFsc2UsIHVubG9ja3MxKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogT3JkZXIgdGhlIGNhbGxlcidzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqL1xuK1x0c21wX21iKCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpO1xuK1xuIC8qKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IHRvIHByb3ZpZGUgY29va2llIGZvci5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjAyLjA0OTYyNDA4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjI0Njg2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTmV3IFNSQ1UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSBhZGRpbmcgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCB0byBTUkNVLCByaWdodD8gQW5kIGl0J3MgaW1wbGVtZW50ZWQgaW4gYm90aCBgc3JjdXRpbnkuY2AgYW5kIGBzcmN1dHJlZS5jYCDigJMgdGhhdCdzIGEga2V5IGluZGljYXRvciBvZiBpdHMgc2lnbmlmaWNhbmNlLiBUaGlzIGlzIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYXQgaXRzIGNvcmUsIHNvIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHNjcnV0aW55LiBUaGlzIG5ldyBmdW5jdGlvbiwgZXhwb3J0ZWQgYXMgYEVYUE9SVF9TWU1CT0xfR1BMYCwgc291bmRzIGxpa2UgaXQgcHJvdmlkZXMgYSBmYXN0IHBhdGggd2hlbiB0aGVyZSBhcmUgbm8gU1JDVSByZWFkZXJzIHByZXNlbnQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgdGhpcyBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEFic29sdXRlbHksIHRoaXMgaXMgY2hhbmdpbmcgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBsb29rLiBUaGUgZmFjdCB0aGF0IGB0cnlfc3luY2hyb25pemVfc3JjdWAgaXMgYSBuZXcgQVBJIGVudHJ5IHBvaW50IGlzIGFub3RoZXIgcmVkIGZsYWcgb2YgcG90ZW50aWFsIGludGVyZXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgaW50byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2Uga25vdyBgc3JjdXRpbnkuY2AgZ2V0cyBjb21waWxlZCB3aXRoIGBDT05GSUdfVElOWV9TUkNVYCBhbmQgYHNyY3V0cmVlLmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSRUVfU1JDVWAgaXMgZW5hYmxlZC4gSXQncyBsaWtlbHkgdGhhdCBgQ09ORklHX1NSQ1VgIGlzIHRoZSBtYWluIGNvbmZpZyBzZXR0aW5nLCBhbmQgd2lsbCBzZWxlY3Qgb25lIG9mIHRoZSBjaGlsZHJlbi4gSSdsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgaW50byBga2VybmVsL3JjdS9NYWtlZmlsZWAgb3IgYGluaXQvS2NvbmZpZ2AgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgU1JDVSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzowNy43NzIwOTYxNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDQxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXCguKlNSQ1UuKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9NYWtlZmlsZT0xMD1vYmoteSArPSB1cGRhdGUubyBzeW5jLm9cXG5rZXJuZWwvcmN1L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19UUkVFX1NSQ1UpICs9IHNyY3V0cmVlLm9cXG5rZXJuZWwvcmN1L01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19USU5ZX1NSQ1UpICs9IHNyY3V0aW55Lm9cXG5rZXJuZWwvcmN1L01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSArPSByY3V0b3J0dXJlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MDcuODIxMjQ3NTE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDQ3ODc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnM6XG5cbioqQW5hbHl6aW5nIENPTkZJR19UUkVFX1NSQ1UgYW5kIENPTkZJR19USU5ZX1NSQ1UqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19UUkVFX1NSQ1VgIGFuZCBgQ09ORklHX1RJTllfU1JDVWAuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHR3byBvcHRpb25zIGZvciBTUkNVIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGV5IGludGVyZGVwZW5kZW50PyBEbyB0aGV5IGhhdmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgYXV0b21hdGljYWxseSBlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBPciwgYXJlIHRoZXkgc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gc29tZSBjcml0ZXJpYT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEknbSBnb2luZyB0byBjaGVjayBob3cgdGhleeKAmXJlIGRlZmluZWQgYW5kIGlmIGFueXRoaW5nIGZvcmNlcyBvciBleGNsdWRlcyB0aGVtLiBMZXTigJlzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzoxMS40OTU3MjgzOTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NDk5MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKFRSRUV8VElOWSlfU1JDVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9LY29uZmlnPTQxPWNvbmZpZyBSQ1VfRVhQRVJUXFxuLS1cXG5rZXJuZWwvcmN1L0tjb25maWctNTUtXFxua2VybmVsL3JjdS9LY29uZmlnOjU2OmNvbmZpZyBUSU5ZX1NSQ1VcXG5rZXJuZWwvcmN1L0tjb25maWctNTctXFx0Ym9vbFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLTYxLVxcbmtlcm5lbC9yY3UvS2NvbmZpZzo2Mjpjb25maWcgVFJFRV9TUkNVXFxua2VybmVsL3JjdS9LY29uZmlnLTYzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MTQuMDQwNzI2MjIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2OTg3NjUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHMsIGFuZCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlVuZGVyc3RhbmRpbmcgSW1wbGljaXQgQm9vbGVhbiBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGVzZSBcInRoZXlcIiB2YXJpYWJsZXMsIHdoaWNoIGFyZSBkZWZpbmVkIGFzIGBib29sYCAoYm9vbGVhbnMpICp3aXRob3V0KiBhbnkgZGlyZWN0IHByb21wdGluZy4gVGhpcyBpbXBsaWVzIGEgc3BlY2lmaWMgZGVzaWduIGNob2ljZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXkncmUgbm90IGdldHRpbmcgdGhlaXIgdmFsdWUgdGhyb3VnaCBhIGRpcmVjdCB1c2VyIGlucHV0LCBhbiBleHBsaWNpdCBxdWVzdGlvbiBvciBzZWxlY3Rpb24uIEluc3RlYWQsIHRoZWlyIHRydXRoaW5lc3MgaXMgZGVyaXZlZCAqaW1wbGljaXRseSogZnJvbSB0aGUgc2V0dGluZ3MgYW5kIGludGVyYWN0aW9ucyBvZiBvdGhlciwgcG9zc2libHkgbW9yZSBwcm9taW5lbnQsIGNvbmZpZ3MuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBtZWFucyB0aGVzZSBgYm9vbGAgdmFyaWFibGVzIGFyZSAqZGVwZW5kYW50Ki4gVGhlaXIgdmFsdWVzIGFyZSBkZXJpdmVkIGZyb20gc29tZSB1cHN0cmVhbSBsb2dpYywgcGVyaGFwcyBjb25kaXRpb25hbCBzZXR0aW5ncywgY2FsY3VsYXRlZCBmbGFncywgb3IgcHJlLWRlZmluZWQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LlxuXG5UaGlzIGlzIGEgZ29vZCBzaWduLCBwb3RlbnRpYWxseS4gQmVjYXVzZSB0aGlzIGltcGxpY2l0IHNlbGVjdGlvbiBhcHByb2FjaCBjYW4gYmUgbW9yZSBzdHJlYW1saW5lZCBmb3IgdGhlIGVuZC11c2VyLiBJZiBpdCBpcyB3ZWxsLWRlc2lnbmVkLCBpdCBjYW4gcmVkdWNlIGNvZ25pdGl2ZSBsb2FkIGFuZCBwcm92aWRlIGEgc21vb3RoZXIgdXNlciBleHBlcmllbmNlLiBJdCBhbGxvd3MgdGhlIHN5c3RlbSB0byBtYWtlIHNlbnNpYmxlIGFzc3VtcHRpb25zLCByZW1vdmluZyB0aGUgbmVlZCBmb3IgdGhlIHVzZXIgdG8gbWFrZSBjaG9pY2VzIHRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgdW5kZXJzdGFuZCBvciBjYXJlIGFib3V0LiBJdCBhbHNvIGNvdWxkIHN1cHBvcnQgbW9yZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3Mgc2V0dGluZ3MgYW5kIGZlYXR1cmUgdXNlLlxuXG5Ib3dldmVyLCBpbXBsaWNpdCBzZXR0aW5ncyBhbHNvIGNhbiBjcmVhdGUgYSBwb3RlbnRpYWwgZGVidWdnaW5nIGFuZCBtYW5hZ2VtZW50IHByb2JsZW0uIElmIHRoZSBsb2dpYyBpcyBub3Qgd2VsbC1kb2N1bWVudGVkLCB0aGVuIGl0IGNhbiBtYWtlIHRyb3VibGVzaG9vdGluZyBjb21wbGV4IGNvbmZpZyBiZWhhdmlvdXIsIG9yIGFudGljaXBhdGluZyB0aGUgcmVzdWx0IG9mIG90aGVyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcywgZGlmZmljdWx0LiBXZSB3aWxsIGhhdmUgdG8gc3BlbmQgYSBiaXQgbW9yZSB0aW1lIGdldHRpbmcgdG8ga25vdyB0aGVtIHRvIGJldHRlciBhcHByZWNpYXRlIHRoZWlyIGZ1bmN0aW9uLlxuXG5Tbywgd2hpbGUgcG90ZW50aWFsbHkgZWxlZ2FudCwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgZ3JhcGggb2YgdGhlc2UgYGJvb2xgIHZhcmlhYmxlcyB0byBmdWxseSBncmFzcCB0aGVpciBzaWduaWZpY2FuY2UgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjAuMzEwNjA1MTYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjE3Nzg0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IChUUkVFfFRJTlkpX1NSQ1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzoyMC42MDY3OTE3MDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTczOTA3NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipTUkNVIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBgU1JDVWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGxhdGVzdCBzZXR0aW5ncyB0byBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBydW5uaW5nIG9wdGltYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncywgb3IgaWYgdGhlcmUncyBhbnkgY29uZmlndXJhdGlvbiB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3IgSSdtIHNlZWluZy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGluIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXNpcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjI0LjE4MDcwMjE1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTU4NDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTUkNVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjQuMjI4NjA4MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyOTA1OTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlNSQ1UgQ29uZmlndXJhdGlvbiBIdW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFNSQ1UuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIHRoZSBrZXJuZWwgZm9yIHNvbWUgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc21zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBvcHRpb25zLiBMZXQncyBzZWUuLi4gd2hlcmUgd291bGQgdGhvc2Ugc2V0dGluZ3MgbGlrZWx5IGJlPyBHaXZlbiBpdHMgY29yZSBuYXR1cmUsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgc2luY2UgdGhhdCBvZnRlbiBoYW5kbGVzIGZ1bmRhbWVudGFsIGtlcm5lbCBmZWF0dXJlcyBvciB0aGUgYGtlcm5lbC9yY3UvS2NvbmZpZ2AgZmlsZSBzaW5jZSBTUkNVIGlzIGNsZWFybHkgcmVsYXRlZCB0byBSQ1UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHdoYXQgSSBuZWVkIGZyb20gZWl0aGVyIG9mIHRob3NlLiBMZXQncyBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjguMTU3NjcwMjE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk2MTU5NDUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1JDVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjMwLjA1MzgzODcxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI5NjI3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBIdW50IGZvciBSQ1UgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqXG5cbk9rYXksIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzIFJDVSB0aGluZywgbGV0J3MgdGFrZSBhIHF1aWNrIGFuZCBkaXJ0eSBhcHByb2FjaC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUkNVIGlzLCBhbG1vc3QgY2VydGFpbmx5LCBga2VybmVsL3JjdS9LY29uZmlnYC4gU28sIHdoYXQgSSdtIGdvaW5nIHRvIGRvIGlzIGEgc2ltcGxlIHRleHQgc2VhcmNoIGluc2lkZSB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgc3RyaW5ncyBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbmFtZXMgb2YgbGlrZWx5LCBzcGVjaWZpYyBSQ1UgaW1wbGVtZW50YXRpb25zLCBhbmQgS2NvbmZpZyBvcHRpb25zIHVzdWFsbHkgaGF2ZSBhIGRpc3RpbmN0aXZlIG5hbWluZyBjb252ZW50aW9uLiBIb3BlZnVsbHkgdGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBoaWdoLWxldmVsIGRlc2lnbiBjaG9pY2VzIGFyZSBmb3IgUkNVIGluIHRoaXMga2VybmVsIHZlcnNpb24sIGluc3RlYWQgb2YgaGF2aW5nIHRvIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgcmlnaHQgYXdheS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjM0LjU4MzUwNzUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYzODIzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoVFJFRXxUSU5ZKV9TUkNVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L0tjb25maWc9NDE9Y29uZmlnIFJDVV9FWFBFUlRcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy01NS1cXG5rZXJuZWwvcmN1L0tjb25maWc6NTY6Y29uZmlnIFRJTllfU1JDVVxcbmtlcm5lbC9yY3UvS2NvbmZpZy01Ny1cXHRib29sXFxuLS1cXG5rZXJuZWwvcmN1L0tjb25maWctNjEtXFxua2VybmVsL3JjdS9LY29uZmlnOjYyOmNvbmZpZyBUUkVFX1NSQ1VcXG5rZXJuZWwvcmN1L0tjb25maWctNjMtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnPTY4PWNvbmZpZyBGT1JDRV9ORUVEX1NSQ1VfTk1JX1NBRkVcXG5rZXJuZWwvcmN1L0tjb25maWctNjktXFx0Ym9vbCBcXFwiRm9yY2Ugc2VsZWN0aW9uIG9mIE5FRURfU1JDVV9OTUlfU0FGRVxcXCJcXG5rZXJuZWwvcmN1L0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiAhVElOWV9TUkNVXFxua2VybmVsL3JjdS9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gUkNVX0VYUEVSVFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnPTgxPWNvbmZpZyBORUVEX1NSQ1VfTk1JX1NBRkVcXG5rZXJuZWwvcmN1L0tjb25maWc6ODI6XFx0ZGVmX2Jvb2wgSEFWRV9OTUkgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhVElOWV9TUkNVXFxua2VybmVsL3JjdS9LY29uZmlnLTgzLVxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnPTE3Nj1jb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXFxua2VybmVsL3JjdS9LY29uZmlnOjE3NzpcXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXFxua2VybmVsL3JjdS9LY29uZmlnLTE3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MzQuNjMxMTUxNzU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODQyNDQ2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGlua2luZyBhYm91dCB0aGUgcHJvY2VzcyBvZiBzZWxlY3Rpb24sIGFuZCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqVGhlIExvY3VzIG9mIFNlbGVjdGlvbjogQSBDcml0aWNhbCBRdWVzdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpczogKldoZXJlKiBkb2VzIHNlbGVjdGlvbiBhY3R1YWxseSBoYXBwZW4/IEl04oCZcyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uLCBhbmQgb25lIEkgb2Z0ZW4gZ3JhcHBsZSB3aXRoIGluIG15IHdvcmsuIEl0J3Mgbm90IGp1c3QgYSBtYXR0ZXIgb2YgaWRlbnRpZnlpbmcgdGhlICp3aGF0KiBpcyBzZWxlY3RlZDsgdW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaXNtLCB0aGUgY29uc3RyYWludHMsIGFuZCB0aGUgZXZvbHV0aW9uYXJ5IGR5bmFtaWNzIGludm9sdmVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzZWxlY3Rpb24gYXQgdGhlIGxldmVsIG9mIHRoZSBpbmRpdmlkdWFsLCB0aGUgZ2VuZSwgdGhlIGdyb3VwLCBvciBldmVuIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggYW5kIG11bHRpLXRpZXJlZD8gVGhpcyBpc24ndCBhIHNpbXBsZSBcImNoZWNrIHRoZSBib3hcIiBzY2VuYXJpby4gRWFjaCBsZXZlbCBwcmVzZW50cyBpdHMgb3duIGNoYWxsZW5nZXMuIFdoYXQgYXJlIHRoZSBzZWxlY3RpdmUgcHJlc3N1cmVzIGF0IHBsYXk/IEhvdyBkbyBkaWZmZXJlbnQgbGV2ZWxzIGludGVyYWN0PyBIb3cgZG8gd2UgZW1waXJpY2FsbHkgbWVhc3VyZSB0aGUgZWZmZWN0cyBvZiBzZWxlY3Rpb24gYWNyb3NzIGRpZmZlcmVudCBzY2FsZXM/IFRoaW5raW5nIGFib3V0IHNwYXRpYWwgY29udGV4dCBoZXJlLiBJZiB3ZSBhcmUgdGFsa2luZyBhYm91dCBzZWxlY3Rpb24gb2Ygc3BlY2llcywgdGhpcyBpcyB0aGUgZWNvbG9naWNhbCBuaWNoZSwgYW5kIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgb3JnYW5pc21zIGluIHRoYXQgbmljaGUuIFRoaXMgaXMgYWxsIHJlYWxseSBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGtlZXAgcHJvYmluZyB0aGlzIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjQ1LjQ3MzYwMTM3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2OTU5MTU5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IChUUkVFfFRJTlkpX1NSQ1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo0OC4xNDMyMDEwNzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDU5MTgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gdGhlICdkZWZhdWx0JyBPcHRpb24qKlxuXG5IbW0sIHRoaW5raW5nIGFib3V0IHRoaXMuLi4gY291bGQgYGRlZmF1bHRgIGJlIHRoZSBhbnN3ZXI/IEl0J3MgdGhhdCBuYWdnaW5nIHBvc3NpYmlsaXR5IGF0IHRoZSBiYWNrIG9mIG15IG1pbmQuIEknbSB0cnlpbmcgdG8gd2VpZ2ggYWxsIHRoZSBvcHRpb25zLCBjb25zaWRlcmluZyBlZGdlIGNhc2VzLCBhbmQgbG9va2luZyBmb3IgZWxlZ2FuY2UgYW5kIG1haW50YWluYWJpbGl0eSBpbiB0aGUgc29sdXRpb24sIGFuZCB0aGF0IFwiZGVmYXVsdFwiIG9wdGlvbiBrZWVwcyBwb3BwaW5nIHVwLiBJdCdzIG9mdGVuIHRoZSBzaW1wbGVzdCBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgaXQgdHJ1bHkgY292ZXJzIHRoZSBpbnRlbmRlZCBzY2VuYXJpbyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIGNvcm5lciBjYXNlcy4gSSdtIGV4cGxvcmluZyBpZiB0aGlzIG9mZmVycyB0aGUgY29ycmVjdCBmbGV4aWJpbGl0eSB3aGlsZSBzdGlsbCByZW1haW5pbmcgZWZmaWNpZW50IGFuZCByZWFkYWJsZS4gTmVlZCB0byBiZSBzdXJlIGl0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo1MS4zNDc3OTU5NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTUzNzMyNTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmF1bHQuKihUUkVFfFRJTlkpX1NSQ1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo1My44NjMxNzg3MTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNzIzMDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtlcm5lbCBSQ1UgY29uZmlndXJhdGlvbiwgZm9jdXNpbmcgb24gYFRJTllfU1JDVWAgYW5kIGBUUkVFX1NSQ1VgOlxuXG4qKkRlbHZpbmcgaW50byBSQ1UgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9yY3UvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzbWFsbGVyLCBtb3JlIHNwZWNpYWxpemVkIFJDVSBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBgVElOWV9TUkNVYCBhbmQgYFRSRUVfU1JDVWAuIEkga25vdyB0aGV5IG9mZmVyIHRyYWRlLW9mZnMgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkIFJDVSwgYnV0IEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBwcmVjaXNlIGNvbmRpdGlvbnMgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbnMgYmVjb21lIHByZWZlcmFibGUuIGBUSU5ZX1NSQ1VgLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaXMgcHJvYmFibHkgZ2VhcmVkIHRvd2FyZHMgc3lzdGVtcyB3aXRoIHJlYWxseSByZXNvdXJjZSBjb25zdHJhaW50cywgb3IgcG9zc2libHkgdGhvc2UgaGVhdmlseSB1dGlsaXppbmcgc2luZ2xlLXdyaXRlciBzaXR1YXRpb25zLiBUaGVuLCBgVFJFRV9TUkNVYC4uLiBJIHRoaW5rIHRoYXQncyByZWxhdGVkIHRvIHNvbWUgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBhbmQgbWlnaHQgb2ZmZXIgaW1wcm92ZW1lbnRzIGluIGNlcnRhaW4gY29uY3VycmVuY3kgc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCBkZXBlbmRlbmNpZXMgdGhlc2UgY29uZmlndXJhdGlvbnMgaGF2ZSwgd2hhdCB0aGVpciBkZWZhdWx0IHN0YXRlcyBhcmUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIGNvbW1lbnRzIGluIHRoZSBLY29uZmlnIGZpbGUgZnJhbWUgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgZWFjaC4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoaXMgYW5kIGZpcm0gdXAgbXkgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6NTguMDAwNDExOTE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHQgIG9ic2N1cmUgUkNVIG9wdGlvbnMgdG8gYmUgc2V0IHVwLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHQgIFNheSBZIGlmIHlvdSBuZWVkIHRvIG1ha2UgZXhwZXJ0LWxldmVsIGFkanVzdG1lbnRzIHRvIFJDVS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIFRJTllfU1JDVVxcbiAgNTc6XFx0XFx0Ym9vbFxcbiAgNTg6XFx0XFx0ZGVmYXVsdCB5IGlmIFRJTllfUkNVXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIHNpbmdsZS1DUFUgbm9uLXByZWVtcHRpYmxlIHZlcnNpb24gb2YgU1JDVS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIFRSRUVfU1JDVVxcbiAgNjM6XFx0XFx0Ym9vbFxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCB5IGlmICFUSU5ZX1JDVVxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBmdWxsLWZsZWRnZWQgdmVyc2lvbiBvZiBTUkNVLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgRk9SQ0VfTkVFRF9TUkNVX05NSV9TQUZFXFxuICA2OTpcXHRcXHRib29sIFxcXCJGb3JjZSBzZWxlY3Rpb24gb2YgTkVFRF9TUkNVX05NSV9TQUZFXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo1OC4wMDA1MTEyMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA2NDQxODMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU1JDVSBTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlIEFkZGl0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzaW1wbGlmaWVzIHRoZSBTUkNVIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGBTUkNVYCBpcyBhbHdheXMgZW5hYmxlZCBub3csIGVpdGhlciB0aHJvdWdoIGBUSU5ZX1JDVWAgb3IgYFRSRUVfUkNVYC4gSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBjb25maWd1cmF0aW9ucy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBuZWVkaW5nIGBUUkVFX1NSQ1VgIGFuZCBgVElOWV9TUkNVYCBidXQgbm8sIGBUUkVFX1NSQ1VgIGFuZCBgVElOWV9TUkNVYCBhcmUgaW1wbGljaXRseSBlbmFibGVkIGJhc2VkIG9uIHRoZSBgVElOWV9SQ1VgIHNldHRpbmcuIGBUSU5ZX1JDVWAgaXMgZm9yIHVuaXByb2Nlc3NvciwgYFRSRUVfUkNVYCBpcyBmb3IgU01QIHN5c3RlbXMuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgdGhlIGFkZGl0aW9uIG9mIGB0cnlfc3luY2hyb25pemVfc3JjdWAuIFRoaXMgaXMgYSAqbWFqb3IqIGFkZGl0aW9uIOKAkyBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHdpdGhpbiB0aGUga2VybmVsLiBJdHMgYSBmYXN0LXBhdGggZm9yIGBzeW5jaHJvbml6ZV9zcmN1YCB3aGVuIHRoZXJlIGFyZSBubyByZWFkZXJzLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBwcmltaXRpdmUgZm9yIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4gSSBuZWVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cblxuTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG5ldyBmdW5jdGlvbiBhZGRlZC4uLiB5ZXAsIGp1c3QgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC5cblxuU2luY2UgYFRSRUVfU1JDVWAgaXMgdGhlIGRlZmF1bHQgYW5kIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCwgSSBjYW4ganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgZm9yIHRoZSBmdXp6ZXIgY29uZmlndXJhdGlvbi4gSSBjb3VsZCBwdXQgYFRSRUVfU1JDVWAgc2luY2UgaXQgbWFrZXMgdGhlIGRlcGVuZGVuY3kgZXhwbGljaXQuIFNvIEknbGwgcHV0IGBUUkVFX1NSQ1VgIHRvIGJlIGNsZWFyLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ1LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQ0OjA3LjA2NDkzMzk4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3N5bmNocm9uaXplX3NyY3VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBgc3luY2hyb25pemVfc3JjdWAgd2hlbiB0aGVyZSBhcmUgbm8gcmVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBSQ1UvU1JDVSBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgYnkgYW55IGtlcm5lbCBtb2R1bGUgb3Igc3Vic3lzdGVtIHVzaW5nIFNSQ1UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHJlYWRlci1mcmVlIHN0YXRlcyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9zeW5jaHJvbml6ZV9zcmN1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MDcuMDY0OTcwNDkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTcwMzUxMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MDcuMDY1NTM3ODIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgxNjk3NzkwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIFNSQ1UgZ3JhY2UgcGVyaW9kcyB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVhZGVycy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWFkaW5nIFNSQ1UgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBwYXJzaW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBvcmRlcmluZyB2aW9sYXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Y2M0Njc4OGFkN2FiMmJjZWI4NTJmZTQzNTY3ZTBjYzk4MTJmMGVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDM6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3UuaCBiL2luY2x1ZGUvbGludXgvc3JjdS5oXG5pbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdS5oXG5AQCAtOTEsNiArOTEsNyBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpoZWFkLFxuIFx0XHR2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7XG4gdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbiB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIFxuICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuKysrIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5AQCAtMjYwLDYgKzI2MCwyOSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuKy8qKlxuKyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdFxuKyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuXG4rICpcbisgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGVcbisgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHksIHdpdGhvdXRcbisgKiBzbGVlcGluZy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGxcbisgKiBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKS5cbisgKlxuKyAqIE9uICFTTVAgYSByZWFkZXIgY2FuIG9ubHkgYmUgbWlkLWNyaXRpY2FsLXNlY3Rpb24gaWYgaXQgd2FzXG4rICogcHJlZW1wdGVkIChvciBpcyBydW5uaW5nIGluIGFuIGludGVycnVwdCB3aGljaCBwcmVlbXB0ZWQgdXMpLCBpblxuKyAqIHdoaWNoIGNhc2UgaXRzIG5lc3RpbmcgY291bnQgaXMgdmlzaWJseSBub24temVyby4gQm90aCBjb3VudHMgYmVpbmdcbisgKiB6ZXJvIHRoZXJlZm9yZSBwcm92ZXMgdGhhdCBubyByZWFkZXIgZXhpc3RzLCBhbmQgYW55IHJlYWRlciB3aGljaFxuKyAqIGJlZ2lucyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2lsbCwgYnkgcHJvZ3JhbSBvcmRlciBvbiB0aGlzXG4rICogc29sZSBDUFUsIG9ic2VydmUgZXZlcnkgc3RvcmUgdGhlIGNhbGxlciBtYWRlIGJlZm9yZSBjYWxsaW5nIGl0LlxuKyAqL1xuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4re1xuK1x0cmV0dXJuICFSRUFEX09OQ0Uoc3NwLVx1MDAzZXNyY3VfbG9ja19uZXN0aW5nWzBdKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhUkVBRF9PTkNFKHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1sxXSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTtcbitcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuKysrIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMTU4MCw2ICsxNTgwLDc2IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4rLyoqXG4rICogdHJ5X3N5bmNocm9uaXplX3NyY3UgLSBpbmxpbmUgZ3JhY2UgcGVyaW9kIGZvciBhIHJlYWRlci1mcmVlIHNyY3Vfc3RydWN0XG4rICogQHNzcDogc3JjdV9zdHJ1Y3Qgd2l0aCB3aGljaCB0byBzeW5jaHJvbml6ZS5cbisgKlxuKyAqIElmIEBzc3AgcHJvdmFibHkgaGFzIG5vIHJlYWRlcnMgaW4gZWl0aGVyIGVwb2NoLCBwcm92aWRlIHRoZVxuKyAqIHN5bmNocm9uaXplX3NyY3UoKSBndWFyYW50ZWUgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseTogd2l0aG91dFxuKyAqIHNsZWVwaW5nLCB3aXRob3V0IGEgdHJpcCB0aHJvdWdoIHRoZSBTUkNVIHdvcmtxdWV1ZSwgYW5kIHdpdGhvdXRcbisgKiBhZHZhbmNpbmcgdGhlIGdyYWNlLXBlcmlvZCBzZXF1ZW5jZS4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uXG4rICogZmFpbHVyZSB0aGUgY2FsbGVyIG11c3QgZmFsbCBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKSBvclxuKyAqIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkuXG4rICpcbisgKiBUaGlzIHNlcnZlcyBkZWRpY2F0ZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyB3aG9zZSByZWFkLXNpZGUgY3JpdGljYWxcbisgKiBzZWN0aW9ucyBhcmUgc2hvcnQsIGF0b21pYywgYW5kIHVzdWFsbHkgYWJzZW50IOKAlCB3aGVyZSBldmVuIGFuXG4rICogZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCBjb3N0cyB0d28gdHJpcHMgdGhyb3VnaCB0aGUgd29ya3F1ZXVlIGFuZCBhblxuKyAqIHVuY29uZGl0aW9uYWwgc2xlZXAgb2YgdGhlIGNhbGxlciwgdGhyZWUgb3JkZXJzIG9mIG1hZ25pdHVkZSBtb3JlXG4rICogdGhhbiB0aGUgY2hlY2sgYmVsb3cuXG4rICpcbisgKiBPbmx5IHJlYWRlcnMgb2YgdGhlIHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF9sb2NrX25taXNhZmUoKVxuKyAqIGZsYXZvcnMgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIHByb29mOyBpZiB0aGUgX2Zhc3QoKSBmbGF2b3JzIGhhdmVcbisgKiBldmVyIGJlZW4gdXNlZCBvbiBAc3NwLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLlxuKyAqL1xuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4re1xuK1x0dW5zaWduZWQgbG9uZyB1bmxvY2tzMCwgdW5sb2NrczE7XG4rXHR1bnNpZ25lZCBsb25nIHJkbTAsIHJkbTE7XG4rXG4rXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4rXG4rXHQvKlxuK1x0ICogT3JkZXIgdGhlIGNhbGxlcidzIHByaW9yIHN0b3JlcyBiZWZvcmUgdGhlIGNvdW50ZXIgcmVhZHMgYmVsb3cuXG4rXHQgKiBQYWlycyAoc3RvcmUtYnVmZmVyaW5nIHBhdHRlcm4pIHdpdGggdGhlIHNtcF9tYigpIGluXG4rXHQgKiBfX3NyY3VfcmVhZF9sb2NrKCk6IGFueSByZWFkZXIgd2hvc2UgbG9jayBpbmNyZW1lbnQgaXMgbm90XG4rXHQgKiBvYnNlcnZlZCBieSB0aGUgc3VtcyBiZWxvdyBpcyBndWFyYW50ZWVkIHRvIG9ic2VydmUsIHdpdGhpbiBpdHNcbitcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZ1xuK1x0ICogdGhpcyBmdW5jdGlvbi5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXG4rXHR1bmxvY2tzMCA9IHNyY3VfcmVhZGVyc191bmxvY2tfaWR4KHNzcCwgMCwgXHUwMDI2cmRtMCk7XG4rXHR1bmxvY2tzMSA9IHNyY3VfcmVhZGVyc191bmxvY2tfaWR4KHNzcCwgMSwgXHUwMDI2cmRtMSk7XG4rXG4rXHQvKlxuK1x0ICogUmVhZGVyIGZsYXZvcnMgd2hpY2ggZWxpZGUgdGhlIHJlYWQtc2lkZSBzbXBfbWIoKSB0aGF0IHRoZVxuK1x0ICogcGFpcmluZyBhYm92ZSBkZXBlbmRzIG9uIGNhbm5vdCBiZSBwcm92ZW4gYWJzZW50IHRoaXMgd2F5O1xuK1x0ICogdGhleSBuZWVkIGEgcmVhbCBncmFjZSBwZXJpb2QuXG4rXHQgKi9cbitcdGlmICgocmRtMCB8IHJkbTEpIFx1MDAyNiBTUkNVX1JFQURfRkxBVk9SX1NMT1dHUClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIEFzIGluIHNyY3VfcmVhZGVyc19hY3RpdmVfaWR4X2NoZWNrKCk6IGVuc3VyZSB0aGF0IGEgbG9jayBpc1xuK1x0ICogYWx3YXlzIGNvdW50ZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgdW5sb2NrIGlzIGNvdW50ZWQsIHNvIHRoYXRcbitcdCAqIGEgcmVhZGVyIHJhY2luZyB3aXRoIHRoZXNlIHN1bXMgY2FuIG9ubHkgaW5mbGF0ZSB0aGUgbG9jayBzdW1cbitcdCAqIGFuZCBmb3JjZSB0aGUgKHNhZmUpIGZhbGxiYWNrLiBTdW1taW5nIGJvdGggZXBvY2hzIG1lYW5zIG5vXG4rXHQgKiBpbmRleCBmbGlwIGlzIG5lZWRlZDogYSBzdGFibGUgZXF1YWxpdHkgcHJvdmVzIHRoZXJlIHdhcyBhXG4rXHQgKiBtb21lbnQgaW4gdGhpcyBmdW5jdGlvbiBhdCB3aGljaCBubyByZWFkZXJzIGV4aXN0ZWQgYXQgYWxsLlxuK1x0ICovXG4rXHRzbXBfbWIoKTtcbitcbitcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMCwgZmFsc2UsIHVubG9ja3MwKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAxLCBmYWxzZSwgdW5sb2NrczEpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBPcmRlciB0aGUgY2FsbGVyJ3Mgc3Vic2VxdWVudCBhY2Nlc3NlcyBhZnRlciB0aGUgcHJvb2YuICovXG4rXHRzbXBfbWIoKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh0cnlfc3luY2hyb25pemVfc3JjdSk7XG4rXG4gLyoqXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXG4gICogQHNzcDogc3JjdV9zdHJ1Y3QgdG8gcHJvdmlkZSBjb29raWUgZm9yLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MDcuMDY1NTM5MjUxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNjk3NTU4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHRvIGBzcmN1dGlueS5jYCBhbmQgYHNyY3V0cmVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGFpbWluZyBmb3IgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaW4gU1JDVSBzeW5jaHJvbml6YXRpb24sIG9mZmVyaW5nIGEgcXVpY2tlciBwYXRoIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgYWxpZ25zIHdpdGggYSBjb21tb24gc3RyYXRlZ3kg4oCTIG9wdGltaXN0aWNhbGx5IGNoZWNraW5nIGZvciBhbiBlYXN5IGNhc2UgYmVmb3JlIGdvaW5nIGRvd24gdGhlIHNsb3dlciwgbW9yZSBnZW5lcmFsIHJvdXRlLlxuXG5Gcm9tIGEgc2FmZXR5IHBlcnNwZWN0aXZlLCBJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGdvb2QuIEFsc28sIHRoZXJlJ3Mgbm8gcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIG9yIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCByZWFkaW5nIGFuZCBtb2RpZnlpbmcgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBtZW1vcnkgYmFycmllcnMgY29uZmlybXMgdGhpcyBpcyBwdXJlbHkgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucywgc28gSSdsbCBxdWlja2x5IGxvb2sgb3ZlciB0aGUgY29kZS4gSSBzZWUgdGhhdCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHJlYWRzIGBzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF1gIGFuZCBgc3NwLVx1MDAzZXNyY3VfbG9ja19uZXN0aW5nWzFdYCBpbiB0aGUgYHNyY3V0aW55LmNgIHNpZGUsIGFuZCBJIHNlZSBjYWxscyB0byBgc3JjdV9yZWFkZXJzX3VubG9ja19pZHhgIGFuZCBgc3JjdV9yZWFkZXJzX2xvY2tfaWR4YCBpbiBgc3JjdXRyZWUuY2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgYW5kIGNvbmZpcm1zIG15IGFzc2Vzc21lbnQ6IHRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW55d2hlcmUsIHNvIEtNU0FOIHNob3VsZCBiZSBpcnJlbGV2YW50IGhlcmUuXG5cbkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGFueSBidWdzIGluIHRoaXMgcGF0Y2ggYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IHByb2JsZW1zLCBzdWJ0bGUgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcywgb3IgdGhlIGRyZWFkZWQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBIb3dldmVyLCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlc2Uga2luZHMgb2YgYnVncyBzaG91bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFNvLCB0aGUga2VybmVsJ3MgZXhpc3Rpbmcgc2FmZXR5IG1lY2hhbmlzbXMgYXJlIHdlbGwtc3VpdGVkIHRvIGRldGVjdCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgaXMgYSBsb3ctcmlzaywgaGlnaC1yZXdhcmQgb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY0LCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQ0OjE1LjIzNTI5ODQ1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgU1JDVSBncmFjZSBwZXJpb2RzIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWFkZXJzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlYWRpbmcgU1JDVSBsb2NrIG5lc3RpbmcgY291bnRlcnMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IGJhcnJpZXJzLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHBhcnNpbmcgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IG9yZGVyaW5nIHZpb2xhdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIFNSQ1UgZ3JhY2UgcGVyaW9kcyB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVhZGVycy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWFkaW5nIFNSQ1UgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBwYXJzaW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBvcmRlcmluZyB2aW9sYXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdfd4k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 12:40:58 +0000 UTC FinishedAt: 2026-08-12 12:44:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "series_id": "f431f705-2be1-4fda-b504-7ceac8c57fa9" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "try_synchronize_srcu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3N5bmNocm9uaXplX3NyY3UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIGBzeW5jaHJvbml6ZV9zcmN1YCB3aGVuIHRoZXJlIGFyZSBubyByZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFJDVS9TUkNVIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBieSBhbnkga2VybmVsIG1vZHVsZSBvciBzdWJzeXN0ZW0gdXNpbmcgU1JDVS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGlkZW50aWZpZXMgcmVhZGVyLWZyZWUgc3RhdGVzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4Y2M0Njc4OGFkN2FiMmJjZWI4NTJmZTQzNTY3ZTBjYzk4MTJmMGVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDM6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuaW5kZXggYTU0Y2U5ZTgwOGI5Mi4uMGQ3NTQzYzdiZWNjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsXG4gXHRcdHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTtcbiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4mIzQzO2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIFxuICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5AQCAtMjYwLDYgJiM0MzsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdFxuJiM0MzsgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGVcbiYjNDM7ICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0XG4mIzQzOyAqIHNsZWVwaW5nLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzczsgb24gZmFpbHVyZSB0aGUgY2FsbGVyIG11c3QgZmFsbFxuJiM0MzsgKiBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKS5cbiYjNDM7ICpcbiYjNDM7ICogT24gIVNNUCBhIHJlYWRlciBjYW4gb25seSBiZSBtaWQtY3JpdGljYWwtc2VjdGlvbiBpZiBpdCB3YXNcbiYjNDM7ICogcHJlZW1wdGVkIChvciBpcyBydW5uaW5nIGluIGFuIGludGVycnVwdCB3aGljaCBwcmVlbXB0ZWQgdXMpLCBpblxuJiM0MzsgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nXG4mIzQzOyAqIHplcm8gdGhlcmVmb3JlIHByb3ZlcyB0aGF0IG5vIHJlYWRlciBleGlzdHMsIGFuZCBhbnkgcmVhZGVyIHdoaWNoXG4mIzQzOyAqIGJlZ2lucyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2lsbCwgYnkgcHJvZ3JhbSBvcmRlciBvbiB0aGlzXG4mIzQzOyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIVJFQURfT05DRShzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhUkVBRF9PTkNFKHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1sxXSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpO1xuJiM0MztcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMTU4MCw2ICYjNDM7MTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogdHJ5X3N5bmNocm9uaXplX3NyY3UgLSBpbmxpbmUgZ3JhY2UgcGVyaW9kIGZvciBhIHJlYWRlci1mcmVlIHNyY3Vfc3RydWN0XG4mIzQzOyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuXG4mIzQzOyAqXG4mIzQzOyAqIElmIEBzc3AgcHJvdmFibHkgaGFzIG5vIHJlYWRlcnMgaW4gZWl0aGVyIGVwb2NoLCBwcm92aWRlIHRoZVxuJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXRcbiYjNDM7ICogc2xlZXBpbmcsIHdpdGhvdXQgYSB0cmlwIHRocm91Z2ggdGhlIFNSQ1Ugd29ya3F1ZXVlLCBhbmQgd2l0aG91dFxuJiM0MzsgKiBhZHZhbmNpbmcgdGhlIGdyYWNlLXBlcmlvZCBzZXF1ZW5jZS4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uXG4mIzQzOyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3JcbiYjNDM7ICogc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsXG4mIzQzOyAqIHNlY3Rpb25zIGFyZSBzaG9ydCwgYXRvbWljLCBhbmQgdXN1YWxseSBhYnNlbnQg4oCUIHdoZXJlIGV2ZW4gYW5cbiYjNDM7ICogZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCBjb3N0cyB0d28gdHJpcHMgdGhyb3VnaCB0aGUgd29ya3F1ZXVlIGFuZCBhblxuJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZVxuJiM0MzsgKiB0aGFuIHRoZSBjaGVjayBiZWxvdy5cbiYjNDM7ICpcbiYjNDM7ICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKClcbiYjNDM7ICogZmxhdm9ycyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgcHJvb2Y7IGlmIHRoZSBfZmFzdCgpIGZsYXZvcnMgaGF2ZVxuJiM0MzsgKiBldmVyIGJlZW4gdXNlZCBvbiBAc3NwLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCB0cnlfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdW5sb2NrczAsIHVubG9ja3MxO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmRtMCwgcmRtMTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9yZGVyIHRoZSBjYWxsZXImIzM5O3MgcHJpb3Igc3RvcmVzIGJlZm9yZSB0aGUgY291bnRlciByZWFkcyBiZWxvdy5cbiYjNDM7XHQgKiBQYWlycyAoc3RvcmUtYnVmZmVyaW5nIHBhdHRlcm4pIHdpdGggdGhlIHNtcF9tYigpIGluXG4mIzQzO1x0ICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdFxuJiM0MztcdCAqIG9ic2VydmVkIGJ5IHRoZSBzdW1zIGJlbG93IGlzIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZSwgd2l0aGluIGl0c1xuJiM0MztcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZ1xuJiM0MztcdCAqIHRoaXMgZnVuY3Rpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1xuJiM0MztcdHVubG9ja3MwID0gc3JjdV9yZWFkZXJzX3VubG9ja19pZHgoc3NwLCAwLCBcdTAwMjZyZG0wKTtcbiYjNDM7XHR1bmxvY2tzMSA9IHNyY3VfcmVhZGVyc191bmxvY2tfaWR4KHNzcCwgMSwgXHUwMDI2cmRtMSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhZGVyIGZsYXZvcnMgd2hpY2ggZWxpZGUgdGhlIHJlYWQtc2lkZSBzbXBfbWIoKSB0aGF0IHRoZVxuJiM0MztcdCAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTtcbiYjNDM7XHQgKiB0aGV5IG5lZWQgYSByZWFsIGdyYWNlIHBlcmlvZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHJkbTAgfCByZG0xKSBcdTAwMjYgU1JDVV9SRUFEX0ZMQVZPUl9TTE9XR1ApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgaW4gc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHhfY2hlY2soKTogZW5zdXJlIHRoYXQgYSBsb2NrIGlzXG4mIzQzO1x0ICogYWx3YXlzIGNvdW50ZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgdW5sb2NrIGlzIGNvdW50ZWQsIHNvIHRoYXRcbiYjNDM7XHQgKiBhIHJlYWRlciByYWNpbmcgd2l0aCB0aGVzZSBzdW1zIGNhbiBvbmx5IGluZmxhdGUgdGhlIGxvY2sgc3VtXG4mIzQzO1x0ICogYW5kIGZvcmNlIHRoZSAoc2FmZSkgZmFsbGJhY2suIFN1bW1pbmcgYm90aCBlcG9jaHMgbWVhbnMgbm9cbiYjNDM7XHQgKiBpbmRleCBmbGlwIGlzIG5lZWRlZDogYSBzdGFibGUgZXF1YWxpdHkgcHJvdmVzIHRoZXJlIHdhcyBhXG4mIzQzO1x0ICogbW9tZW50IGluIHRoaXMgZnVuY3Rpb24gYXQgd2hpY2ggbm8gcmVhZGVycyBleGlzdGVkIGF0IGFsbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAwLCBmYWxzZSwgdW5sb2NrczApKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMSwgZmFsc2UsIHVubG9ja3MxKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogT3JkZXIgdGhlIGNhbGxlciYjMzk7cyBzdWJzZXF1ZW50IGFjY2Vzc2VzIGFmdGVyIHRoZSBwcm9vZi4gKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0cnlfc3luY2hyb25pemVfc3JjdSk7XG4mIzQzO1xuIC8qKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IHRvIHByb3ZpZGUgY29va2llIGZvci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfc3luY2hyb25pemVfc3JjdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBgc3luY2hyb25pemVfc3JjdWAgd2hlbiB0aGVyZSBhcmUgbm8gcmVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBSQ1UvU1JDVSBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgYnkgYW55IGtlcm5lbCBtb2R1bGUgb3Igc3Vic3lzdGVtIHVzaW5nIFNSQ1UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHJlYWRlci1mcmVlIHN0YXRlcyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNjNDY3ODhhZDdhYjJiY2ViODUyZmU0MzU2N2UwY2M5ODEyZjBlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtOTEsNiAmIzQzOzkxLDcgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOwogdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiYjNDM7Ym9vbCB0cnlfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMjYwLDYgJiM0MzsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiAKJiM0MzsvKioKJiM0MzsgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3QKJiM0MzsgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLgomIzQzOyAqCiYjNDM7ICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlCiYjNDM7ICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0CiYjNDM7ICogc2xlZXBpbmcuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlIHRoZSBjYWxsZXIgbXVzdCBmYWxsCiYjNDM7ICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuCiYjNDM7ICoKJiM0MzsgKiBPbiAhU01QIGEgcmVhZGVyIGNhbiBvbmx5IGJlIG1pZC1jcml0aWNhbC1zZWN0aW9uIGlmIGl0IHdhcwomIzQzOyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW4KJiM0MzsgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nCiYjNDM7ICogemVybyB0aGVyZWZvcmUgcHJvdmVzIHRoYXQgbm8gcmVhZGVyIGV4aXN0cywgYW5kIGFueSByZWFkZXIgd2hpY2gKJiM0MzsgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpcwomIzQzOyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJcmV0dXJuICFSRUFEX09OQ0Uoc3NwLSZndDtzcmN1X2xvY2tfbmVzdGluZ1swXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIVJFQURfT05DRShzc3AtJmd0O3NyY3VfbG9ja19uZXN0aW5nWzFdKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpOwomIzQzOwogLyoKICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwpAQCAtMTU4MCw2ICYjNDM7MTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTsKIAomIzQzOy8qKgomIzQzOyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdAomIzQzOyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuCiYjNDM7ICoKJiM0MzsgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGUKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXQKJiM0MzsgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0CiYjNDM7ICogYWR2YW5jaW5nIHRoZSBncmFjZS1wZXJpb2Qgc2VxdWVuY2UuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbgomIzQzOyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3IKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsCiYjNDM7ICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhbgomIzQzOyAqIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgY29zdHMgdHdvIHRyaXBzIHRocm91Z2ggdGhlIHdvcmtxdWV1ZSBhbmQgYW4KJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZQomIzQzOyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LgomIzQzOyAqCiYjNDM7ICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKCkKJiM0MzsgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlCiYjNDM7ICogZXZlciBiZWVuIHVzZWQgb24gQHNzcCwgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB1bmxvY2tzMCwgdW5sb2NrczE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmRtMCwgcmRtMTsKJiM0MzsKJiM0MzsJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHByaW9yIHN0b3JlcyBiZWZvcmUgdGhlIGNvdW50ZXIgcmVhZHMgYmVsb3cuCiYjNDM7CSAqIFBhaXJzIChzdG9yZS1idWZmZXJpbmcgcGF0dGVybikgd2l0aCB0aGUgc21wX21iKCkgaW4KJiM0MzsJICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdAomIzQzOwkgKiBvYnNlcnZlZCBieSB0aGUgc3VtcyBiZWxvdyBpcyBndWFyYW50ZWVkIHRvIG9ic2VydmUsIHdpdGhpbiBpdHMKJiM0MzsJICogY3JpdGljYWwgc2VjdGlvbiwgZXZlcnkgc3RvcmUgdGhlIGNhbGxlciBtYWRlIGJlZm9yZSBjYWxsaW5nCiYjNDM7CSAqIHRoaXMgZnVuY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsKJiM0MzsJdW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsICZhbXA7cmRtMCk7CiYjNDM7CXVubG9ja3MxID0gc3JjdV9yZWFkZXJzX3VubG9ja19pZHgoc3NwLCAxLCAmYW1wO3JkbTEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFkZXIgZmxhdm9ycyB3aGljaCBlbGlkZSB0aGUgcmVhZC1zaWRlIHNtcF9tYigpIHRoYXQgdGhlCiYjNDM7CSAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTsKJiM0MzsJICogdGhleSBuZWVkIGEgcmVhbCBncmFjZSBwZXJpb2QuCiYjNDM7CSAqLwomIzQzOwlpZiAoKHJkbTAgfCByZG0xKSAmYW1wOyBTUkNVX1JFQURfRkxBVk9SX1NMT1dHUCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgaW4gc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHhfY2hlY2soKTogZW5zdXJlIHRoYXQgYSBsb2NrIGlzCiYjNDM7CSAqIGFsd2F5cyBjb3VudGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHVubG9jayBpcyBjb3VudGVkLCBzbyB0aGF0CiYjNDM7CSAqIGEgcmVhZGVyIHJhY2luZyB3aXRoIHRoZXNlIHN1bXMgY2FuIG9ubHkgaW5mbGF0ZSB0aGUgbG9jayBzdW0KJiM0MzsJICogYW5kIGZvcmNlIHRoZSAoc2FmZSkgZmFsbGJhY2suIFN1bW1pbmcgYm90aCBlcG9jaHMgbWVhbnMgbm8KJiM0MzsJICogaW5kZXggZmxpcCBpcyBuZWVkZWQ6IGEgc3RhYmxlIGVxdWFsaXR5IHByb3ZlcyB0aGVyZSB3YXMgYQomIzQzOwkgKiBtb21lbnQgaW4gdGhpcyBmdW5jdGlvbiBhdCB3aGljaCBubyByZWFkZXJzIGV4aXN0ZWQgYXQgYWxsLgomIzQzOwkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CiYjNDM7CWlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMCwgZmFsc2UsIHVubG9ja3MwKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAxLCBmYWxzZSwgdW5sb2NrczEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTsKJiM0MzsKIC8qKgogICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llCiAgKiBAc3NwOiBzcmN1X3N0cnVjdCB0byBwcm92aWRlIGNvb2tpZSBmb3IuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTmV3IFNSQ1UgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIGFkZGluZyBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHRvIFNSQ1UsIHJpZ2h0PyBBbmQgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaW4gYm90aCBgc3JjdXRpbnkuY2AgYW5kIGBzcmN1dHJlZS5jYCDigJMgdGhhdCYjMzk7cyBhIGtleSBpbmRpY2F0b3Igb2YgaXRzIHNpZ25pZmljYW5jZS4gVGhpcyBpcyBrZXJuZWwgc3luY2hyb25pemF0aW9uIGF0IGl0cyBjb3JlLCBzbyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3Igc2NydXRpbnkuIFRoaXMgbmV3IGZ1bmN0aW9uLCBleHBvcnRlZCBhcyBgRVhQT1JUX1NZTUJPTF9HUExgLCBzb3VuZHMgbGlrZSBpdCBwcm92aWRlcyBhIGZhc3QgcGF0aCB3aGVuIHRoZXJlIGFyZSBubyBTUkNVIHJlYWRlcnMgcHJlc2VudC4KCkFscmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgdGhpcyBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEFic29sdXRlbHksIHRoaXMgaXMgY2hhbmdpbmcgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBsb29rLiBUaGUgZmFjdCB0aGF0IGB0cnlfc3luY2hyb25pemVfc3JjdWAgaXMgYSBuZXcgQVBJIGVudHJ5IHBvaW50IGlzIGFub3RoZXIgcmVkIGZsYWcgb2YgcG90ZW50aWFsIGludGVyZXN0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBXZSBrbm93IGBzcmN1dGlueS5jYCBnZXRzIGNvbXBpbGVkIHdpdGggYENPTkZJR19USU5ZX1NSQ1VgIGFuZCBgc3JjdXRyZWUuY2AgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfVFJFRV9TUkNVYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgQ09ORklHX1NSQ1VgIGlzIHRoZSBtYWluIGNvbmZpZyBzZXR0aW5nLCBhbmQgd2lsbCBzZWxlY3Qgb25lIG9mIHRoZSBjaGlsZHJlbi4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaWdnaW5nIGludG8gYGtlcm5lbC9yY3UvTWFrZWZpbGVgIG9yIGBpbml0L0tjb25maWdgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIFNSQ1UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXCguKlNSQ1UuKlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9NYWtlZmlsZT0xMD1vYmoteSAmIzQzOz0gdXBkYXRlLm8gc3luYy5vXG5rZXJuZWwvcmN1L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19UUkVFX1NSQ1UpICYjNDM7PSBzcmN1dHJlZS5vXG5rZXJuZWwvcmN1L01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19USU5ZX1NSQ1UpICYjNDM7PSBzcmN1dGlueS5vXG5rZXJuZWwvcmN1L01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSAmIzQzOz0gcmN1dG9ydHVyZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnM6CgoqKkFuYWx5emluZyBDT05GSUdfVFJFRV9TUkNVIGFuZCBDT05GSUdfVElOWV9TUkNVKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19UUkVFX1NSQ1VgIGFuZCBgQ09ORklHX1RJTllfU1JDVWAuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHR3byBvcHRpb25zIGZvciBTUkNVIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGV5IGludGVyZGVwZW5kZW50PyBEbyB0aGV5IGhhdmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgYXV0b21hdGljYWxseSBlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBPciwgYXJlIHRoZXkgc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gc29tZSBjcml0ZXJpYT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IHRoZXnigJlyZSBkZWZpbmVkIGFuZCBpZiBhbnl0aGluZyBmb3JjZXMgb3IgZXhjbHVkZXMgdGhlbS4gTGV04oCZcyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoVFJFRXxUSU5ZKV9TUkNVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZz00MT1jb25maWcgUkNVX0VYUEVSVFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy01NS1cbmtlcm5lbC9yY3UvS2NvbmZpZzo1Njpjb25maWcgVElOWV9TUkNVXG5rZXJuZWwvcmN1L0tjb25maWctNTctXHRib29sXG4tLVxua2VybmVsL3JjdS9LY29uZmlnLTYxLVxua2VybmVsL3JjdS9LY29uZmlnOjYyOmNvbmZpZyBUUkVFX1NSQ1Vcbmtlcm5lbC9yY3UvS2NvbmZpZy02My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0cywgYW5kIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlVuZGVyc3RhbmRpbmcgSW1wbGljaXQgQm9vbGVhbiBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZXNlICYjMzQ7dGhleSYjMzQ7IHZhcmlhYmxlcywgd2hpY2ggYXJlIGRlZmluZWQgYXMgYGJvb2xgIChib29sZWFucykgKndpdGhvdXQqIGFueSBkaXJlY3QgcHJvbXB0aW5nLiBUaGlzIGltcGxpZXMgYSBzcGVjaWZpYyBkZXNpZ24gY2hvaWNlIGluIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhleSYjMzk7cmUgbm90IGdldHRpbmcgdGhlaXIgdmFsdWUgdGhyb3VnaCBhIGRpcmVjdCB1c2VyIGlucHV0LCBhbiBleHBsaWNpdCBxdWVzdGlvbiBvciBzZWxlY3Rpb24uIEluc3RlYWQsIHRoZWlyIHRydXRoaW5lc3MgaXMgZGVyaXZlZCAqaW1wbGljaXRseSogZnJvbSB0aGUgc2V0dGluZ3MgYW5kIGludGVyYWN0aW9ucyBvZiBvdGhlciwgcG9zc2libHkgbW9yZSBwcm9taW5lbnQsIGNvbmZpZ3MuCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgbWVhbnMgdGhlc2UgYGJvb2xgIHZhcmlhYmxlcyBhcmUgKmRlcGVuZGFudCouIFRoZWlyIHZhbHVlcyBhcmUgZGVyaXZlZCBmcm9tIHNvbWUgdXBzdHJlYW0gbG9naWMsIHBlcmhhcHMgY29uZGl0aW9uYWwgc2V0dGluZ3MsIGNhbGN1bGF0ZWQgZmxhZ3MsIG9yIHByZS1kZWZpbmVkIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4KClRoaXMgaXMgYSBnb29kIHNpZ24sIHBvdGVudGlhbGx5LiBCZWNhdXNlIHRoaXMgaW1wbGljaXQgc2VsZWN0aW9uIGFwcHJvYWNoIGNhbiBiZSBtb3JlIHN0cmVhbWxpbmVkIGZvciB0aGUgZW5kLXVzZXIuIElmIGl0IGlzIHdlbGwtZGVzaWduZWQsIGl0IGNhbiByZWR1Y2UgY29nbml0aXZlIGxvYWQgYW5kIHByb3ZpZGUgYSBzbW9vdGhlciB1c2VyIGV4cGVyaWVuY2UuIEl0IGFsbG93cyB0aGUgc3lzdGVtIHRvIG1ha2Ugc2Vuc2libGUgYXNzdW1wdGlvbnMsIHJlbW92aW5nIHRoZSBuZWVkIGZvciB0aGUgdXNlciB0byBtYWtlIGNob2ljZXMgdGhleSBkb24mIzM5O3QgbmVjZXNzYXJpbHkgdW5kZXJzdGFuZCBvciBjYXJlIGFib3V0LiBJdCBhbHNvIGNvdWxkIHN1cHBvcnQgbW9yZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3Mgc2V0dGluZ3MgYW5kIGZlYXR1cmUgdXNlLgoKSG93ZXZlciwgaW1wbGljaXQgc2V0dGluZ3MgYWxzbyBjYW4gY3JlYXRlIGEgcG90ZW50aWFsIGRlYnVnZ2luZyBhbmQgbWFuYWdlbWVudCBwcm9ibGVtLiBJZiB0aGUgbG9naWMgaXMgbm90IHdlbGwtZG9jdW1lbnRlZCwgdGhlbiBpdCBjYW4gbWFrZSB0cm91Ymxlc2hvb3RpbmcgY29tcGxleCBjb25maWcgYmVoYXZpb3VyLCBvciBhbnRpY2lwYXRpbmcgdGhlIHJlc3VsdCBvZiBvdGhlciBjb25maWd1cmF0aW9uIGNob2ljZXMsIGRpZmZpY3VsdC4gV2Ugd2lsbCBoYXZlIHRvIHNwZW5kIGEgYml0IG1vcmUgdGltZSBnZXR0aW5nIHRvIGtub3cgdGhlbSB0byBiZXR0ZXIgYXBwcmVjaWF0ZSB0aGVpciBmdW5jdGlvbi4KClNvLCB3aGlsZSBwb3RlbnRpYWxseSBlbGVnYW50LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgZ3JhcGggb2YgdGhlc2UgYGJvb2xgIHZhcmlhYmxlcyB0byBmdWxseSBncmFzcCB0aGVpciBzaWduaWZpY2FuY2UgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IChUUkVFfFRJTlkpX1NSQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzczoKCioqU1JDVSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBgU1JDVWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGxhdGVzdCBzZXR0aW5ncyB0byBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgcnVubmluZyBvcHRpbWFsbHksIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MsIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgY3VycmVudCBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGluIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXNpcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTUkNVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipTUkNVIENvbmZpZ3VyYXRpb24gSHVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gU1JDVS4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIHRoZSBrZXJuZWwgZm9yIHNvbWUgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc21zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHdoZXJlIHdvdWxkIHRob3NlIHNldHRpbmdzIGxpa2VseSBiZT8gR2l2ZW4gaXRzIGNvcmUgbmF0dXJlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNpbmNlIHRoYXQgb2Z0ZW4gaGFuZGxlcyBmdW5kYW1lbnRhbCBrZXJuZWwgZmVhdHVyZXMgb3IgdGhlIGBrZXJuZWwvcmN1L0tjb25maWdgIGZpbGUgc2luY2UgU1JDVSBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gUkNVLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCB3aGF0IEkgbmVlZCBmcm9tIGVpdGhlciBvZiB0aG9zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNSQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzUyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSHVudCBmb3IgUkNVIEltcGxlbWVudGF0aW9uIERldGFpbHMqKgoKT2theSwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMgUkNVIHRoaW5nLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGFuZCBkaXJ0eSBhcHByb2FjaC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFJDVSBpcywgYWxtb3N0IGNlcnRhaW5seSwgYGtlcm5lbC9yY3UvS2NvbmZpZ2AuIFNvLCB3aGF0IEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgYSBzaW1wbGUgdGV4dCBzZWFyY2ggaW5zaWRlIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgc3RyaW5ncyBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbmFtZXMgb2YgbGlrZWx5LCBzcGVjaWZpYyBSQ1UgaW1wbGVtZW50YXRpb25zLCBhbmQgS2NvbmZpZyBvcHRpb25zIHVzdWFsbHkgaGF2ZSBhIGRpc3RpbmN0aXZlIG5hbWluZyBjb252ZW50aW9uLiBIb3BlZnVsbHkgdGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBoaWdoLWxldmVsIGRlc2lnbiBjaG9pY2VzIGFyZSBmb3IgUkNVIGluIHRoaXMga2VybmVsIHZlcnNpb24sIGluc3RlYWQgb2YgaGF2aW5nIHRvIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgcmlnaHQgYXdheS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KFRSRUV8VElOWSlfU1JDVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L0tjb25maWc9NDE9Y29uZmlnIFJDVV9FWFBFUlRcbi0tXG5rZXJuZWwvcmN1L0tjb25maWctNTUtXG5rZXJuZWwvcmN1L0tjb25maWc6NTY6Y29uZmlnIFRJTllfU1JDVVxua2VybmVsL3JjdS9LY29uZmlnLTU3LVx0Ym9vbFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy02MS1cbmtlcm5lbC9yY3UvS2NvbmZpZzo2Mjpjb25maWcgVFJFRV9TUkNVXG5rZXJuZWwvcmN1L0tjb25maWctNjMtXHRib29sXG4tLVxua2VybmVsL3JjdS9LY29uZmlnPTY4PWNvbmZpZyBGT1JDRV9ORUVEX1NSQ1VfTk1JX1NBRkVcbmtlcm5lbC9yY3UvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Rm9yY2Ugc2VsZWN0aW9uIG9mIE5FRURfU1JDVV9OTUlfU0FGRVwmIzM0O1xua2VybmVsL3JjdS9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiAhVElOWV9TUkNVXG5rZXJuZWwvcmN1L0tjb25maWctNzEtXHRkZXBlbmRzIG9uIFJDVV9FWFBFUlRcbi0tXG5rZXJuZWwvcmN1L0tjb25maWc9ODE9Y29uZmlnIE5FRURfU1JDVV9OTUlfU0FGRVxua2VybmVsL3JjdS9LY29uZmlnOjgyOlx0ZGVmX2Jvb2wgSEFWRV9OTUkgXHUwMDI2XHUwMDI2ICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFUSU5ZX1NSQ1Vcbmtlcm5lbC9yY3UvS2NvbmZpZy04My1cbi0tXG5rZXJuZWwvcmN1L0tjb25maWc9MTc2PWNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1Rcbmtlcm5lbC9yY3UvS2NvbmZpZzoxNzc6XHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG5rZXJuZWwvcmN1L0tjb25maWctMTc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcHJvY2VzcyBvZiBzZWxlY3Rpb24sIGFuZCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKlRoZSBMb2N1cyBvZiBTZWxlY3Rpb246IEEgQ3JpdGljYWwgUXVlc3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGlzOiAqV2hlcmUqIGRvZXMgc2VsZWN0aW9uIGFjdHVhbGx5IGhhcHBlbj8gSXTigJlzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24sIGFuZCBvbmUgSSBvZnRlbiBncmFwcGxlIHdpdGggaW4gbXkgd29yay4gSXQmIzM5O3Mgbm90IGp1c3QgYSBtYXR0ZXIgb2YgaWRlbnRpZnlpbmcgdGhlICp3aGF0KiBpcyBzZWxlY3RlZDsgdW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaXNtLCB0aGUgY29uc3RyYWludHMsIGFuZCB0aGUgZXZvbHV0aW9uYXJ5IGR5bmFtaWNzIGludm9sdmVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzZWxlY3Rpb24gYXQgdGhlIGxldmVsIG9mIHRoZSBpbmRpdmlkdWFsLCB0aGUgZ2VuZSwgdGhlIGdyb3VwLCBvciBldmVuIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggYW5kIG11bHRpLXRpZXJlZD8gVGhpcyBpc24mIzM5O3QgYSBzaW1wbGUgJiMzNDtjaGVjayB0aGUgYm94JiMzNDsgc2NlbmFyaW8uIEVhY2ggbGV2ZWwgcHJlc2VudHMgaXRzIG93biBjaGFsbGVuZ2VzLiBXaGF0IGFyZSB0aGUgc2VsZWN0aXZlIHByZXNzdXJlcyBhdCBwbGF5PyBIb3cgZG8gZGlmZmVyZW50IGxldmVscyBpbnRlcmFjdD8gSG93IGRvIHdlIGVtcGlyaWNhbGx5IG1lYXN1cmUgdGhlIGVmZmVjdHMgb2Ygc2VsZWN0aW9uIGFjcm9zcyBkaWZmZXJlbnQgc2NhbGVzPyBUaGlua2luZyBhYm91dCBzcGF0aWFsIGNvbnRleHQgaGVyZS4gSWYgd2UgYXJlIHRhbGtpbmcgYWJvdXQgc2VsZWN0aW9uIG9mIHNwZWNpZXMsIHRoaXMgaXMgdGhlIGVjb2xvZ2ljYWwgbmljaGUsIGFuZCB0aGUgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIG9yZ2FuaXNtcyBpbiB0aGF0IG5pY2hlLiBUaGlzIGlzIGFsbCByZWFsbHkgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBrZWVwIHByb2JpbmcgdGhpcyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgaXQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCAoVFJFRXxUSU5ZKV9TUkNVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIHRoZSAmIzM5O2RlZmF1bHQmIzM5OyBPcHRpb24qKgoKSG1tLCB0aGlua2luZyBhYm91dCB0aGlzLi4uIGNvdWxkIGBkZWZhdWx0YCBiZSB0aGUgYW5zd2VyPyBJdCYjMzk7cyB0aGF0IG5hZ2dpbmcgcG9zc2liaWxpdHkgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSSYjMzk7bSB0cnlpbmcgdG8gd2VpZ2ggYWxsIHRoZSBvcHRpb25zLCBjb25zaWRlcmluZyBlZGdlIGNhc2VzLCBhbmQgbG9va2luZyBmb3IgZWxlZ2FuY2UgYW5kIG1haW50YWluYWJpbGl0eSBpbiB0aGUgc29sdXRpb24sIGFuZCB0aGF0ICYjMzQ7ZGVmYXVsdCYjMzQ7IG9wdGlvbiBrZWVwcyBwb3BwaW5nIHVwLiBJdCYjMzk7cyBvZnRlbiB0aGUgc2ltcGxlc3QgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIGl0IHRydWx5IGNvdmVycyB0aGUgaW50ZW5kZWQgc2NlbmFyaW8gYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgY29ybmVyIGNhc2VzLiBJJiMzOTttIGV4cGxvcmluZyBpZiB0aGlzIG9mZmVycyB0aGUgY29ycmVjdCBmbGV4aWJpbGl0eSB3aGlsZSBzdGlsbCByZW1haW5pbmcgZWZmaWNpZW50IGFuZCByZWFkYWJsZS4gTmVlZCB0byBiZSBzdXJlIGl0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmF1bHQuKihUUkVFfFRJTlkpX1NSQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIFJDVSBjb25maWd1cmF0aW9uLCBmb2N1c2luZyBvbiBgVElOWV9TUkNVYCBhbmQgYFRSRUVfU1JDVWA6CgoqKkRlbHZpbmcgaW50byBSQ1UgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL3JjdS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNtYWxsZXIsIG1vcmUgc3BlY2lhbGl6ZWQgUkNVIGltcGxlbWVudGF0aW9ucywgc3BlY2lmaWNhbGx5IGBUSU5ZX1NSQ1VgIGFuZCBgVFJFRV9TUkNVYC4gSSBrbm93IHRoZXkgb2ZmZXIgdHJhZGUtb2ZmcyBjb21wYXJlZCB0byB0aGUgc3RhbmRhcmQgUkNVLCBidXQgSSBzaG91bGQgY29uc2lkZXIgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB3aGVyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWNvbWUgcHJlZmVyYWJsZS4gYFRJTllfU1JDVWAsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpcyBwcm9iYWJseSBnZWFyZWQgdG93YXJkcyBzeXN0ZW1zIHdpdGggcmVhbGx5IHJlc291cmNlIGNvbnN0cmFpbnRzLCBvciBwb3NzaWJseSB0aG9zZSBoZWF2aWx5IHV0aWxpemluZyBzaW5nbGUtd3JpdGVyIHNpdHVhdGlvbnMuIFRoZW4sIGBUUkVFX1NSQ1VgLi4uIEkgdGhpbmsgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBhbmQgbWlnaHQgb2ZmZXIgaW1wcm92ZW1lbnRzIGluIGNlcnRhaW4gY29uY3VycmVuY3kgc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCBkZXBlbmRlbmNpZXMgdGhlc2UgY29uZmlndXJhdGlvbnMgaGF2ZSwgd2hhdCB0aGVpciBkZWZhdWx0IHN0YXRlcyBhcmUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIGNvbW1lbnRzIGluIHRoZSBLY29uZmlnIGZpbGUgZnJhbWUgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgZWFjaC4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoaXMgYW5kIGZpcm0gdXAgbXkgbWVudGFsIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdCAgb2JzY3VyZSBSQ1Ugb3B0aW9ucyB0byBiZSBzZXQgdXAuXG4gIDUxOlx0XG4gIDUyOlx0XHQgIFNheSBZIGlmIHlvdSBuZWVkIHRvIG1ha2UgZXhwZXJ0LWxldmVsIGFkanVzdG1lbnRzIHRvIFJDVS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFRJTllfU1JDVVxuICA1NzpcdFx0Ym9vbFxuICA1ODpcdFx0ZGVmYXVsdCB5IGlmIFRJTllfUkNVXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIHNpbmdsZS1DUFUgbm9uLXByZWVtcHRpYmxlIHZlcnNpb24gb2YgU1JDVS5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgVFJFRV9TUkNVXG4gIDYzOlx0XHRib29sXG4gIDY0Olx0XHRkZWZhdWx0IHkgaWYgIVRJTllfUkNVXG4gIDY1Olx0XHRoZWxwXG4gIDY2Olx0XHQgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGZ1bGwtZmxlZGdlZCB2ZXJzaW9uIG9mIFNSQ1UuXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEZPUkNFX05FRURfU1JDVV9OTUlfU0FGRVxuICA2OTpcdFx0Ym9vbCBcJiMzNDtGb3JjZSBzZWxlY3Rpb24gb2YgTkVFRF9TUkNVX05NSV9TQUZFXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDUKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTUkNVIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmUgQWRkaXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBzaW1wbGlmaWVzIHRoZSBTUkNVIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGBTUkNVYCBpcyBhbHdheXMgZW5hYmxlZCBub3csIGVpdGhlciB0aHJvdWdoIGBUSU5ZX1JDVWAgb3IgYFRSRUVfUkNVYC4gSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgY29uZmlndXJhdGlvbnMuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgbmVlZGluZyBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAgYnV0IG5vLCBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAgYXJlIGltcGxpY2l0bHkgZW5hYmxlZCBiYXNlZCBvbiB0aGUgYFRJTllfUkNVYCBzZXR0aW5nLiBgVElOWV9SQ1VgIGlzIGZvciB1bmlwcm9jZXNzb3IsIGBUUkVFX1JDVWAgaXMgZm9yIFNNUCBzeXN0ZW1zLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4gVGhpcyBpcyBhICptYWpvciogYWRkaXRpb24g4oCTIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgd2l0aGluIHRoZSBrZXJuZWwuIEl0cyBhIGZhc3QtcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMsIG1ha2luZyBpdCBhIGNyaXRpY2FsIHByaW1pdGl2ZSBmb3IgdGhlIGtlcm5lbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4gSSBuZWVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMuCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG5ldyBmdW5jdGlvbiBhZGRlZC4uLiB5ZXAsIGp1c3QgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4KClNpbmNlIGBUUkVFX1NSQ1VgIGlzIHRoZSBkZWZhdWx0IGFuZCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQsIEkgY2FuIGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciB0aGUgZnV6emVyIGNvbmZpZ3VyYXRpb24uIEkgY291bGQgcHV0IGBUUkVFX1NSQ1VgIHNpbmNlIGl0IG1ha2VzIHRoZSBkZXBlbmRlbmN5IGV4cGxpY2l0LiBTbyBJJiMzOTtsbCBwdXQgYFRSRUVfU1JDVWAgdG8gYmUgY2xlYXIuCgpBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3N5bmNocm9uaXplX3NyY3UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfc3luY2hyb25pemVfc3JjdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBgc3luY2hyb25pemVfc3JjdWAgd2hlbiB0aGVyZSBhcmUgbm8gcmVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBSQ1UvU1JDVSBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgYnkgYW55IGtlcm5lbCBtb2R1bGUgb3Igc3Vic3lzdGVtIHVzaW5nIFNSQ1UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHJlYWRlci1mcmVlIHN0YXRlcyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIFNSQ1UgZ3JhY2UgcGVyaW9kcyB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVhZGVycy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWFkaW5nIFNSQ1UgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBwYXJzaW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBvcmRlcmluZyB2aW9sYXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNjNDY3ODhhZDdhYjJiY2ViODUyZmU0MzU2N2UwY2M5ODEyZjBlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtOTEsNiAmIzQzOzkxLDcgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOwogdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiYjNDM7Ym9vbCB0cnlfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMjYwLDYgJiM0MzsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiAKJiM0MzsvKioKJiM0MzsgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3QKJiM0MzsgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLgomIzQzOyAqCiYjNDM7ICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlCiYjNDM7ICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0CiYjNDM7ICogc2xlZXBpbmcuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlIHRoZSBjYWxsZXIgbXVzdCBmYWxsCiYjNDM7ICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuCiYjNDM7ICoKJiM0MzsgKiBPbiAhU01QIGEgcmVhZGVyIGNhbiBvbmx5IGJlIG1pZC1jcml0aWNhbC1zZWN0aW9uIGlmIGl0IHdhcwomIzQzOyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW4KJiM0MzsgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nCiYjNDM7ICogemVybyB0aGVyZWZvcmUgcHJvdmVzIHRoYXQgbm8gcmVhZGVyIGV4aXN0cywgYW5kIGFueSByZWFkZXIgd2hpY2gKJiM0MzsgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpcwomIzQzOyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJcmV0dXJuICFSRUFEX09OQ0Uoc3NwLSZndDtzcmN1X2xvY2tfbmVzdGluZ1swXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIVJFQURfT05DRShzc3AtJmd0O3NyY3VfbG9ja19uZXN0aW5nWzFdKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpOwomIzQzOwogLyoKICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwpAQCAtMTU4MCw2ICYjNDM7MTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTsKIAomIzQzOy8qKgomIzQzOyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdAomIzQzOyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuCiYjNDM7ICoKJiM0MzsgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGUKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXQKJiM0MzsgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0CiYjNDM7ICogYWR2YW5jaW5nIHRoZSBncmFjZS1wZXJpb2Qgc2VxdWVuY2UuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbgomIzQzOyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3IKJiM0MzsgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsCiYjNDM7ICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhbgomIzQzOyAqIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgY29zdHMgdHdvIHRyaXBzIHRocm91Z2ggdGhlIHdvcmtxdWV1ZSBhbmQgYW4KJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZQomIzQzOyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LgomIzQzOyAqCiYjNDM7ICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKCkKJiM0MzsgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlCiYjNDM7ICogZXZlciBiZWVuIHVzZWQgb24gQHNzcCwgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4KJiM0MzsgKi8KJiM0Mztib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB1bmxvY2tzMCwgdW5sb2NrczE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmRtMCwgcmRtMTsKJiM0MzsKJiM0MzsJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHByaW9yIHN0b3JlcyBiZWZvcmUgdGhlIGNvdW50ZXIgcmVhZHMgYmVsb3cuCiYjNDM7CSAqIFBhaXJzIChzdG9yZS1idWZmZXJpbmcgcGF0dGVybikgd2l0aCB0aGUgc21wX21iKCkgaW4KJiM0MzsJICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdAomIzQzOwkgKiBvYnNlcnZlZCBieSB0aGUgc3VtcyBiZWxvdyBpcyBndWFyYW50ZWVkIHRvIG9ic2VydmUsIHdpdGhpbiBpdHMKJiM0MzsJICogY3JpdGljYWwgc2VjdGlvbiwgZXZlcnkgc3RvcmUgdGhlIGNhbGxlciBtYWRlIGJlZm9yZSBjYWxsaW5nCiYjNDM7CSAqIHRoaXMgZnVuY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsKJiM0MzsJdW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsICZhbXA7cmRtMCk7CiYjNDM7CXVubG9ja3MxID0gc3JjdV9yZWFkZXJzX3VubG9ja19pZHgoc3NwLCAxLCAmYW1wO3JkbTEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFkZXIgZmxhdm9ycyB3aGljaCBlbGlkZSB0aGUgcmVhZC1zaWRlIHNtcF9tYigpIHRoYXQgdGhlCiYjNDM7CSAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTsKJiM0MzsJICogdGhleSBuZWVkIGEgcmVhbCBncmFjZSBwZXJpb2QuCiYjNDM7CSAqLwomIzQzOwlpZiAoKHJkbTAgfCByZG0xKSAmYW1wOyBTUkNVX1JFQURfRkxBVk9SX1NMT1dHUCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgaW4gc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHhfY2hlY2soKTogZW5zdXJlIHRoYXQgYSBsb2NrIGlzCiYjNDM7CSAqIGFsd2F5cyBjb3VudGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHVubG9jayBpcyBjb3VudGVkLCBzbyB0aGF0CiYjNDM7CSAqIGEgcmVhZGVyIHJhY2luZyB3aXRoIHRoZXNlIHN1bXMgY2FuIG9ubHkgaW5mbGF0ZSB0aGUgbG9jayBzdW0KJiM0MzsJICogYW5kIGZvcmNlIHRoZSAoc2FmZSkgZmFsbGJhY2suIFN1bW1pbmcgYm90aCBlcG9jaHMgbWVhbnMgbm8KJiM0MzsJICogaW5kZXggZmxpcCBpcyBuZWVkZWQ6IGEgc3RhYmxlIGVxdWFsaXR5IHByb3ZlcyB0aGVyZSB3YXMgYQomIzQzOwkgKiBtb21lbnQgaW4gdGhpcyBmdW5jdGlvbiBhdCB3aGljaCBubyByZWFkZXJzIGV4aXN0ZWQgYXQgYWxsLgomIzQzOwkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CiYjNDM7CWlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMCwgZmFsc2UsIHVubG9ja3MwKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAxLCBmYWxzZSwgdW5sb2NrczEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPcmRlciB0aGUgY2FsbGVyJiMzOTtzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqLwomIzQzOwlzbXBfbWIoKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTsKJiM0MzsKIC8qKgogICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llCiAgKiBAc3NwOiBzcmN1X3N0cnVjdCB0byBwcm92aWRlIGNvb2tpZSBmb3IuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY0CgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHRvIGBzcmN1dGlueS5jYCBhbmQgYHNyY3V0cmVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhaW1pbmcgZm9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIFNSQ1Ugc3luY2hyb25pemF0aW9uLCBvZmZlcmluZyBhIHF1aWNrZXIgcGF0aCB3aGVuIHRoZXJlIGFyZSBubyByZWFkZXJzLiBUaGlzIGFsaWducyB3aXRoIGEgY29tbW9uIHN0cmF0ZWd5IOKAkyBvcHRpbWlzdGljYWxseSBjaGVja2luZyBmb3IgYW4gZWFzeSBjYXNlIGJlZm9yZSBnb2luZyBkb3duIHRoZSBzbG93ZXIsIG1vcmUgZ2VuZXJhbCByb3V0ZS4KCkZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZC4gQWxzbywgdGhlcmUmIzM5O3Mgbm8gcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIG9yIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGF0JiMzOTtzIGEgaHVnZSByZWxpZWYuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgcmVhZGluZyBhbmQgbW9kaWZ5aW5nIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgbWVtb3J5IGJhcnJpZXJzIGNvbmZpcm1zIHRoaXMgaXMgcHVyZWx5IGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4KCkkgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLCBzbyBJJiMzOTtsbCBxdWlja2x5IGxvb2sgb3ZlciB0aGUgY29kZS4gSSBzZWUgdGhhdCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHJlYWRzIGBzc3AtJmd0O3NyY3VfbG9ja19uZXN0aW5nWzBdYCBhbmQgYHNzcC0mZ3Q7c3JjdV9sb2NrX25lc3RpbmdbMV1gIGluIHRoZSBgc3JjdXRpbnkuY2Agc2lkZSwgYW5kIEkgc2VlIGNhbGxzIHRvIGBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeGAgYW5kIGBzcmN1X3JlYWRlcnNfbG9ja19pZHhgIGluIGBzcmN1dHJlZS5jYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgYW5kIGNvbmZpcm1zIG15IGFzc2Vzc21lbnQ6IHRoZXJlJiMzOTtzIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFueXdoZXJlLCBzbyBLTVNBTiBzaG91bGQgYmUgaXJyZWxldmFudCBoZXJlLgoKQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYW55IGJ1Z3MgaW4gdGhpcyBwYXRjaCBhcmUgbGlrZWx5IHRvIGJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgcHJvYmxlbXMsIHN1YnRsZSBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLCBvciB0aGUgZHJlYWRlZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuIEhvd2V2ZXIsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBraW5kcyBvZiBidWdzIHNob3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gU28sIHRoZSBrZXJuZWwmIzM5O3MgZXhpc3Rpbmcgc2FmZXR5IG1lY2hhbmlzbXMgYXJlIHdlbGwtc3VpdGVkIHRvIGRldGVjdCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgaXMgYSBsb3ctcmlzaywgaGlnaC1yZXdhcmQgb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjAxLjYwMzUwNDI1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjMxODMwNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9zeW5jaHJvbml6ZV9zcmN1XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBTUkNVIGdyYWNlIHBlcmlvZHMgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlYWRlcnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVhZGluZyBTUkNVIGxvY2sgbmVzdGluZyBjb3VudGVycyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgYmFycmllcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggcGFyc2luZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgb3JkZXJpbmcgdmlvbGF0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MDEuNjAzNTA5NjczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUzNTc2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Y2M0Njc4OGFkN2FiMmJjZWI4NTJmZTQzNTY3ZTBjYzk4MTJmMGVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdS5oIGIvaW5jbHVkZS9saW51eC9zcmN1LmhcXG5pbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1LmhcXG5AQCAtOTEsNiArOTEsNyBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpoZWFkLFxcbiBcXHRcXHR2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7XFxuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XFxuIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XFxuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbiBcXG4gI2RlZmluZSBTUkNVX0dFVF9TVEFURV9DT01QTEVURUQgMHgxXFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcXG5pbmRleCBhMmUyZDUxNmU1MWI5Li5mMDcxNTljYWUyNDE5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbkBAIC0yNjAsNiArMjYwLDI5IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qKlxcbisgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3RcXG4rICogQHNzcDogc3JjdV9zdHJ1Y3Qgd2l0aCB3aGljaCB0byBzeW5jaHJvbml6ZS5cXG4rICpcXG4rICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlXFxuKyAqIHN5bmNocm9uaXplX3NyY3UoKSBndWFyYW50ZWUgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseSwgd2l0aG91dFxcbisgKiBzbGVlcGluZy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGxcXG4rICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuXFxuKyAqXFxuKyAqIE9uICFTTVAgYSByZWFkZXIgY2FuIG9ubHkgYmUgbWlkLWNyaXRpY2FsLXNlY3Rpb24gaWYgaXQgd2FzXFxuKyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW5cXG4rICogd2hpY2ggY2FzZSBpdHMgbmVzdGluZyBjb3VudCBpcyB2aXNpYmx5IG5vbi16ZXJvLiBCb3RoIGNvdW50cyBiZWluZ1xcbisgKiB6ZXJvIHRoZXJlZm9yZSBwcm92ZXMgdGhhdCBubyByZWFkZXIgZXhpc3RzLCBhbmQgYW55IHJlYWRlciB3aGljaFxcbisgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpc1xcbisgKiBzb2xlIENQVSwgb2JzZXJ2ZSBldmVyeSBzdG9yZSB0aGUgY2FsbGVyIG1hZGUgYmVmb3JlIGNhbGxpbmcgaXQuXFxuKyAqL1xcbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbit7XFxuK1xcdHJldHVybiAhUkVBRF9PTkNFKHNzcC1cXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAhUkVBRF9PTkNFKHNzcC1cXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMV0pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTtcXG4rXFxuIC8qXFxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXFxuaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG5AQCAtMTU4MCw2ICsxNTgwLDc2IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qKlxcbisgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3RcXG4rICogQHNzcDogc3JjdV9zdHJ1Y3Qgd2l0aCB3aGljaCB0byBzeW5jaHJvbml6ZS5cXG4rICpcXG4rICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlXFxuKyAqIHN5bmNocm9uaXplX3NyY3UoKSBndWFyYW50ZWUgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseTogd2l0aG91dFxcbisgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0XFxuKyAqIGFkdmFuY2luZyB0aGUgZ3JhY2UtcGVyaW9kIHNlcXVlbmNlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzczsgb25cXG4rICogZmFpbHVyZSB0aGUgY2FsbGVyIG11c3QgZmFsbCBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKSBvclxcbisgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLlxcbisgKlxcbisgKiBUaGlzIHNlcnZlcyBkZWRpY2F0ZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyB3aG9zZSByZWFkLXNpZGUgY3JpdGljYWxcXG4rICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhblxcbisgKiBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kIGNvc3RzIHR3byB0cmlwcyB0aHJvdWdoIHRoZSB3b3JrcXVldWUgYW5kIGFuXFxuKyAqIHVuY29uZGl0aW9uYWwgc2xlZXAgb2YgdGhlIGNhbGxlciwgdGhyZWUgb3JkZXJzIG9mIG1hZ25pdHVkZSBtb3JlXFxuKyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LlxcbisgKlxcbisgKiBPbmx5IHJlYWRlcnMgb2YgdGhlIHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF9sb2NrX25taXNhZmUoKVxcbisgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlXFxuKyAqIGV2ZXIgYmVlbiB1c2VkIG9uIEBzc3AsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZmFsc2UuXFxuKyAqL1xcbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdW5sb2NrczAsIHVubG9ja3MxO1xcbitcXHR1bnNpZ25lZCBsb25nIHJkbTAsIHJkbTE7XFxuK1xcbitcXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBPcmRlciB0aGUgY2FsbGVyJ3MgcHJpb3Igc3RvcmVzIGJlZm9yZSB0aGUgY291bnRlciByZWFkcyBiZWxvdy5cXG4rXFx0ICogUGFpcnMgKHN0b3JlLWJ1ZmZlcmluZyBwYXR0ZXJuKSB3aXRoIHRoZSBzbXBfbWIoKSBpblxcbitcXHQgKiBfX3NyY3VfcmVhZF9sb2NrKCk6IGFueSByZWFkZXIgd2hvc2UgbG9jayBpbmNyZW1lbnQgaXMgbm90XFxuK1xcdCAqIG9ic2VydmVkIGJ5IHRoZSBzdW1zIGJlbG93IGlzIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZSwgd2l0aGluIGl0c1xcbitcXHQgKiBjcml0aWNhbCBzZWN0aW9uLCBldmVyeSBzdG9yZSB0aGUgY2FsbGVyIG1hZGUgYmVmb3JlIGNhbGxpbmdcXG4rXFx0ICogdGhpcyBmdW5jdGlvbi5cXG4rXFx0ICovXFxuK1xcdHNtcF9tYigpO1xcbitcXG4rXFx0dW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsIFxcdTAwMjZyZG0wKTtcXG4rXFx0dW5sb2NrczEgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDEsIFxcdTAwMjZyZG0xKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWRlciBmbGF2b3JzIHdoaWNoIGVsaWRlIHRoZSByZWFkLXNpZGUgc21wX21iKCkgdGhhdCB0aGVcXG4rXFx0ICogcGFpcmluZyBhYm92ZSBkZXBlbmRzIG9uIGNhbm5vdCBiZSBwcm92ZW4gYWJzZW50IHRoaXMgd2F5O1xcbitcXHQgKiB0aGV5IG5lZWQgYSByZWFsIGdyYWNlIHBlcmlvZC5cXG4rXFx0ICovXFxuK1xcdGlmICgocmRtMCB8IHJkbTEpIFxcdTAwMjYgU1JDVV9SRUFEX0ZMQVZPUl9TTE9XR1ApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIGluIHNyY3VfcmVhZGVyc19hY3RpdmVfaWR4X2NoZWNrKCk6IGVuc3VyZSB0aGF0IGEgbG9jayBpc1xcbitcXHQgKiBhbHdheXMgY291bnRlZCBpZiB0aGUgY29ycmVzcG9uZGluZyB1bmxvY2sgaXMgY291bnRlZCwgc28gdGhhdFxcbitcXHQgKiBhIHJlYWRlciByYWNpbmcgd2l0aCB0aGVzZSBzdW1zIGNhbiBvbmx5IGluZmxhdGUgdGhlIGxvY2sgc3VtXFxuK1xcdCAqIGFuZCBmb3JjZSB0aGUgKHNhZmUpIGZhbGxiYWNrLiBTdW1taW5nIGJvdGggZXBvY2hzIG1lYW5zIG5vXFxuK1xcdCAqIGluZGV4IGZsaXAgaXMgbmVlZGVkOiBhIHN0YWJsZSBlcXVhbGl0eSBwcm92ZXMgdGhlcmUgd2FzIGFcXG4rXFx0ICogbW9tZW50IGluIHRoaXMgZnVuY3Rpb24gYXQgd2hpY2ggbm8gcmVhZGVycyBleGlzdGVkIGF0IGFsbC5cXG4rXFx0ICovXFxuK1xcdHNtcF9tYigpO1xcbitcXG4rXFx0aWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAwLCBmYWxzZSwgdW5sb2NrczApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMSwgZmFsc2UsIHVubG9ja3MxKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogT3JkZXIgdGhlIGNhbGxlcidzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpO1xcbitcXG4gLyoqXFxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxcbiAgKiBAc3NwOiBzcmN1X3N0cnVjdCB0byBwcm92aWRlIGNvb2tpZSBmb3IuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjAyLjA0OTYyMjY4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1MDE1MzQ0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9zeW5jaHJvbml6ZV9zcmN1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNjNDY3ODhhZDdhYjJiY2ViODUyZmU0MzU2N2UwY2M5ODEyZjBlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQzOjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuaW5kZXggYTU0Y2U5ZTgwOGI5Mi4uMGQ3NTQzYzdiZWNjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaFxuQEAgLTkxLDYgKzkxLDcgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqaGVhZCxcbiBcdFx0dm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpO1xuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbiBcbiAjZGVmaW5lIFNSQ1VfR0VUX1NUQVRFX0NPTVBMRVRFRCAweDFcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbmluZGV4IGEyZTJkNTE2ZTUxYjkuLmYwNzE1OWNhZTI0MTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuQEAgLTI2MCw2ICsyNjAsMjkgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbisvKipcbisgKiB0cnlfc3luY2hyb25pemVfc3JjdSAtIGlubGluZSBncmFjZSBwZXJpb2QgZm9yIGEgcmVhZGVyLWZyZWUgc3JjdV9zdHJ1Y3RcbisgKiBAc3NwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLlxuKyAqXG4rICogSWYgQHNzcCBwcm92YWJseSBoYXMgbm8gcmVhZGVycyBpbiBlaXRoZXIgZXBvY2gsIHByb3ZpZGUgdGhlXG4rICogc3luY2hyb25pemVfc3JjdSgpIGd1YXJhbnRlZSB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LCB3aXRob3V0XG4rICogc2xlZXBpbmcuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlIHRoZSBjYWxsZXIgbXVzdCBmYWxsXG4rICogYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkuXG4rICpcbisgKiBPbiAhU01QIGEgcmVhZGVyIGNhbiBvbmx5IGJlIG1pZC1jcml0aWNhbC1zZWN0aW9uIGlmIGl0IHdhc1xuKyAqIHByZWVtcHRlZCAob3IgaXMgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgd2hpY2ggcHJlZW1wdGVkIHVzKSwgaW5cbisgKiB3aGljaCBjYXNlIGl0cyBuZXN0aW5nIGNvdW50IGlzIHZpc2libHkgbm9uLXplcm8uIEJvdGggY291bnRzIGJlaW5nXG4rICogemVybyB0aGVyZWZvcmUgcHJvdmVzIHRoYXQgbm8gcmVhZGVyIGV4aXN0cywgYW5kIGFueSByZWFkZXIgd2hpY2hcbisgKiBiZWdpbnMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwsIGJ5IHByb2dyYW0gb3JkZXIgb24gdGhpc1xuKyAqIHNvbGUgQ1BVLCBvYnNlcnZlIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZyBpdC5cbisgKi9cbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuK3tcbitcdHJldHVybiAhUkVBRF9PTkNFKHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1swXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIVJFQURfT05DRShzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMV0pO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh0cnlfc3luY2hyb25pemVfc3JjdSk7XG4rXG4gLypcbiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWVcbiAgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbmluZGV4IDdjMmY3Y2MxMzFmN2EuLmI4NTJmNGQ0MjM5YzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuQEAgLTE1ODAsNiArMTU4MCw3NiBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuKy8qKlxuKyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdFxuKyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuXG4rICpcbisgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGVcbisgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHk6IHdpdGhvdXRcbisgKiBzbGVlcGluZywgd2l0aG91dCBhIHRyaXAgdGhyb3VnaCB0aGUgU1JDVSB3b3JrcXVldWUsIGFuZCB3aXRob3V0XG4rICogYWR2YW5jaW5nIHRoZSBncmFjZS1wZXJpb2Qgc2VxdWVuY2UuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvblxuKyAqIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBzeW5jaHJvbml6ZV9zcmN1KCkgb3JcbisgKiBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLlxuKyAqXG4rICogVGhpcyBzZXJ2ZXMgZGVkaWNhdGVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgd2hvc2UgcmVhZC1zaWRlIGNyaXRpY2FsXG4rICogc2VjdGlvbnMgYXJlIHNob3J0LCBhdG9taWMsIGFuZCB1c3VhbGx5IGFic2VudCDigJQgd2hlcmUgZXZlbiBhblxuKyAqIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgY29zdHMgdHdvIHRyaXBzIHRocm91Z2ggdGhlIHdvcmtxdWV1ZSBhbmQgYW5cbisgKiB1bmNvbmRpdGlvbmFsIHNsZWVwIG9mIHRoZSBjYWxsZXIsIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUgbW9yZVxuKyAqIHRoYW4gdGhlIGNoZWNrIGJlbG93LlxuKyAqXG4rICogT25seSByZWFkZXJzIG9mIHRoZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfbG9ja19ubWlzYWZlKClcbisgKiBmbGF2b3JzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9vZjsgaWYgdGhlIF9mYXN0KCkgZmxhdm9ycyBoYXZlXG4rICogZXZlciBiZWVuIHVzZWQgb24gQHNzcCwgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS5cbisgKi9cbitib29sIHRyeV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdW5sb2NrczAsIHVubG9ja3MxO1xuK1x0dW5zaWduZWQgbG9uZyByZG0wLCByZG0xO1xuK1xuK1x0Y2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyIHRoZSBjYWxsZXIncyBwcmlvciBzdG9yZXMgYmVmb3JlIHRoZSBjb3VudGVyIHJlYWRzIGJlbG93LlxuK1x0ICogUGFpcnMgKHN0b3JlLWJ1ZmZlcmluZyBwYXR0ZXJuKSB3aXRoIHRoZSBzbXBfbWIoKSBpblxuK1x0ICogX19zcmN1X3JlYWRfbG9jaygpOiBhbnkgcmVhZGVyIHdob3NlIGxvY2sgaW5jcmVtZW50IGlzIG5vdFxuK1x0ICogb2JzZXJ2ZWQgYnkgdGhlIHN1bXMgYmVsb3cgaXMgZ3VhcmFudGVlZCB0byBvYnNlcnZlLCB3aXRoaW4gaXRzXG4rXHQgKiBjcml0aWNhbCBzZWN0aW9uLCBldmVyeSBzdG9yZSB0aGUgY2FsbGVyIG1hZGUgYmVmb3JlIGNhbGxpbmdcbitcdCAqIHRoaXMgZnVuY3Rpb24uXG4rXHQgKi9cbitcdHNtcF9tYigpO1xuK1xuK1x0dW5sb2NrczAgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDAsIFx1MDAyNnJkbTApO1xuK1x0dW5sb2NrczEgPSBzcmN1X3JlYWRlcnNfdW5sb2NrX2lkeChzc3AsIDEsIFx1MDAyNnJkbTEpO1xuK1xuK1x0LypcbitcdCAqIFJlYWRlciBmbGF2b3JzIHdoaWNoIGVsaWRlIHRoZSByZWFkLXNpZGUgc21wX21iKCkgdGhhdCB0aGVcbitcdCAqIHBhaXJpbmcgYWJvdmUgZGVwZW5kcyBvbiBjYW5ub3QgYmUgcHJvdmVuIGFic2VudCB0aGlzIHdheTtcbitcdCAqIHRoZXkgbmVlZCBhIHJlYWwgZ3JhY2UgcGVyaW9kLlxuK1x0ICovXG4rXHRpZiAoKHJkbTAgfCByZG0xKSBcdTAwMjYgU1JDVV9SRUFEX0ZMQVZPUl9TTE9XR1ApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBBcyBpbiBzcmN1X3JlYWRlcnNfYWN0aXZlX2lkeF9jaGVjaygpOiBlbnN1cmUgdGhhdCBhIGxvY2sgaXNcbitcdCAqIGFsd2F5cyBjb3VudGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHVubG9jayBpcyBjb3VudGVkLCBzbyB0aGF0XG4rXHQgKiBhIHJlYWRlciByYWNpbmcgd2l0aCB0aGVzZSBzdW1zIGNhbiBvbmx5IGluZmxhdGUgdGhlIGxvY2sgc3VtXG4rXHQgKiBhbmQgZm9yY2UgdGhlIChzYWZlKSBmYWxsYmFjay4gU3VtbWluZyBib3RoIGVwb2NocyBtZWFucyBub1xuK1x0ICogaW5kZXggZmxpcCBpcyBuZWVkZWQ6IGEgc3RhYmxlIGVxdWFsaXR5IHByb3ZlcyB0aGVyZSB3YXMgYVxuK1x0ICogbW9tZW50IGluIHRoaXMgZnVuY3Rpb24gYXQgd2hpY2ggbm8gcmVhZGVycyBleGlzdGVkIGF0IGFsbC5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXG4rXHRpZiAoIXNyY3VfcmVhZGVyc19sb2NrX2lkeChzc3AsIDAsIGZhbHNlLCB1bmxvY2tzMCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMSwgZmFsc2UsIHVubG9ja3MxKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogT3JkZXIgdGhlIGNhbGxlcidzIHN1YnNlcXVlbnQgYWNjZXNzZXMgYWZ0ZXIgdGhlIHByb29mLiAqL1xuK1x0c21wX21iKCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodHJ5X3N5bmNocm9uaXplX3NyY3UpO1xuK1xuIC8qKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IHRvIHByb3ZpZGUgY29va2llIGZvci5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjAyLjA0OTYyNDA4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjI0Njg2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTmV3IFNSQ1UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSBhZGRpbmcgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCB0byBTUkNVLCByaWdodD8gQW5kIGl0J3MgaW1wbGVtZW50ZWQgaW4gYm90aCBgc3JjdXRpbnkuY2AgYW5kIGBzcmN1dHJlZS5jYCDigJMgdGhhdCdzIGEga2V5IGluZGljYXRvciBvZiBpdHMgc2lnbmlmaWNhbmNlLiBUaGlzIGlzIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYXQgaXRzIGNvcmUsIHNvIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHNjcnV0aW55LiBUaGlzIG5ldyBmdW5jdGlvbiwgZXhwb3J0ZWQgYXMgYEVYUE9SVF9TWU1CT0xfR1BMYCwgc291bmRzIGxpa2UgaXQgcHJvdmlkZXMgYSBmYXN0IHBhdGggd2hlbiB0aGVyZSBhcmUgbm8gU1JDVSByZWFkZXJzIHByZXNlbnQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgdGhpcyBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEFic29sdXRlbHksIHRoaXMgaXMgY2hhbmdpbmcgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBsb29rLiBUaGUgZmFjdCB0aGF0IGB0cnlfc3luY2hyb25pemVfc3JjdWAgaXMgYSBuZXcgQVBJIGVudHJ5IHBvaW50IGlzIGFub3RoZXIgcmVkIGZsYWcgb2YgcG90ZW50aWFsIGludGVyZXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgaW50byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2Uga25vdyBgc3JjdXRpbnkuY2AgZ2V0cyBjb21waWxlZCB3aXRoIGBDT05GSUdfVElOWV9TUkNVYCBhbmQgYHNyY3V0cmVlLmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSRUVfU1JDVWAgaXMgZW5hYmxlZC4gSXQncyBsaWtlbHkgdGhhdCBgQ09ORklHX1NSQ1VgIGlzIHRoZSBtYWluIGNvbmZpZyBzZXR0aW5nLCBhbmQgd2lsbCBzZWxlY3Qgb25lIG9mIHRoZSBjaGlsZHJlbi4gSSdsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgaW50byBga2VybmVsL3JjdS9NYWtlZmlsZWAgb3IgYGluaXQvS2NvbmZpZ2AgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgU1JDVSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzowNy43NzIwOTYxNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDQxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXCguKlNSQ1UuKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9NYWtlZmlsZT0xMD1vYmoteSArPSB1cGRhdGUubyBzeW5jLm9cXG5rZXJuZWwvcmN1L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19UUkVFX1NSQ1UpICs9IHNyY3V0cmVlLm9cXG5rZXJuZWwvcmN1L01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19USU5ZX1NSQ1UpICs9IHNyY3V0aW55Lm9cXG5rZXJuZWwvcmN1L01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSArPSByY3V0b3J0dXJlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MDcuODIxMjQ3NTE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDQ3ODc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnM6XG5cbioqQW5hbHl6aW5nIENPTkZJR19UUkVFX1NSQ1UgYW5kIENPTkZJR19USU5ZX1NSQ1UqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19UUkVFX1NSQ1VgIGFuZCBgQ09ORklHX1RJTllfU1JDVWAuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHR3byBvcHRpb25zIGZvciBTUkNVIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGV5IGludGVyZGVwZW5kZW50PyBEbyB0aGV5IGhhdmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgYXV0b21hdGljYWxseSBlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBPciwgYXJlIHRoZXkgc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gc29tZSBjcml0ZXJpYT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEknbSBnb2luZyB0byBjaGVjayBob3cgdGhleeKAmXJlIGRlZmluZWQgYW5kIGlmIGFueXRoaW5nIGZvcmNlcyBvciBleGNsdWRlcyB0aGVtLiBMZXTigJlzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzoxMS40OTU3MjgzOTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NDk5MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKFRSRUV8VElOWSlfU1JDVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9LY29uZmlnPTQxPWNvbmZpZyBSQ1VfRVhQRVJUXFxuLS1cXG5rZXJuZWwvcmN1L0tjb25maWctNTUtXFxua2VybmVsL3JjdS9LY29uZmlnOjU2OmNvbmZpZyBUSU5ZX1NSQ1VcXG5rZXJuZWwvcmN1L0tjb25maWctNTctXFx0Ym9vbFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLTYxLVxcbmtlcm5lbC9yY3UvS2NvbmZpZzo2Mjpjb25maWcgVFJFRV9TUkNVXFxua2VybmVsL3JjdS9LY29uZmlnLTYzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MTQuMDQwNzI2MjIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2OTg3NjUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHMsIGFuZCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlVuZGVyc3RhbmRpbmcgSW1wbGljaXQgQm9vbGVhbiBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGVzZSBcInRoZXlcIiB2YXJpYWJsZXMsIHdoaWNoIGFyZSBkZWZpbmVkIGFzIGBib29sYCAoYm9vbGVhbnMpICp3aXRob3V0KiBhbnkgZGlyZWN0IHByb21wdGluZy4gVGhpcyBpbXBsaWVzIGEgc3BlY2lmaWMgZGVzaWduIGNob2ljZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXkncmUgbm90IGdldHRpbmcgdGhlaXIgdmFsdWUgdGhyb3VnaCBhIGRpcmVjdCB1c2VyIGlucHV0LCBhbiBleHBsaWNpdCBxdWVzdGlvbiBvciBzZWxlY3Rpb24uIEluc3RlYWQsIHRoZWlyIHRydXRoaW5lc3MgaXMgZGVyaXZlZCAqaW1wbGljaXRseSogZnJvbSB0aGUgc2V0dGluZ3MgYW5kIGludGVyYWN0aW9ucyBvZiBvdGhlciwgcG9zc2libHkgbW9yZSBwcm9taW5lbnQsIGNvbmZpZ3MuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBtZWFucyB0aGVzZSBgYm9vbGAgdmFyaWFibGVzIGFyZSAqZGVwZW5kYW50Ki4gVGhlaXIgdmFsdWVzIGFyZSBkZXJpdmVkIGZyb20gc29tZSB1cHN0cmVhbSBsb2dpYywgcGVyaGFwcyBjb25kaXRpb25hbCBzZXR0aW5ncywgY2FsY3VsYXRlZCBmbGFncywgb3IgcHJlLWRlZmluZWQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LlxuXG5UaGlzIGlzIGEgZ29vZCBzaWduLCBwb3RlbnRpYWxseS4gQmVjYXVzZSB0aGlzIGltcGxpY2l0IHNlbGVjdGlvbiBhcHByb2FjaCBjYW4gYmUgbW9yZSBzdHJlYW1saW5lZCBmb3IgdGhlIGVuZC11c2VyLiBJZiBpdCBpcyB3ZWxsLWRlc2lnbmVkLCBpdCBjYW4gcmVkdWNlIGNvZ25pdGl2ZSBsb2FkIGFuZCBwcm92aWRlIGEgc21vb3RoZXIgdXNlciBleHBlcmllbmNlLiBJdCBhbGxvd3MgdGhlIHN5c3RlbSB0byBtYWtlIHNlbnNpYmxlIGFzc3VtcHRpb25zLCByZW1vdmluZyB0aGUgbmVlZCBmb3IgdGhlIHVzZXIgdG8gbWFrZSBjaG9pY2VzIHRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgdW5kZXJzdGFuZCBvciBjYXJlIGFib3V0LiBJdCBhbHNvIGNvdWxkIHN1cHBvcnQgbW9yZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3Mgc2V0dGluZ3MgYW5kIGZlYXR1cmUgdXNlLlxuXG5Ib3dldmVyLCBpbXBsaWNpdCBzZXR0aW5ncyBhbHNvIGNhbiBjcmVhdGUgYSBwb3RlbnRpYWwgZGVidWdnaW5nIGFuZCBtYW5hZ2VtZW50IHByb2JsZW0uIElmIHRoZSBsb2dpYyBpcyBub3Qgd2VsbC1kb2N1bWVudGVkLCB0aGVuIGl0IGNhbiBtYWtlIHRyb3VibGVzaG9vdGluZyBjb21wbGV4IGNvbmZpZyBiZWhhdmlvdXIsIG9yIGFudGljaXBhdGluZyB0aGUgcmVzdWx0IG9mIG90aGVyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcywgZGlmZmljdWx0LiBXZSB3aWxsIGhhdmUgdG8gc3BlbmQgYSBiaXQgbW9yZSB0aW1lIGdldHRpbmcgdG8ga25vdyB0aGVtIHRvIGJldHRlciBhcHByZWNpYXRlIHRoZWlyIGZ1bmN0aW9uLlxuXG5Tbywgd2hpbGUgcG90ZW50aWFsbHkgZWxlZ2FudCwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgZ3JhcGggb2YgdGhlc2UgYGJvb2xgIHZhcmlhYmxlcyB0byBmdWxseSBncmFzcCB0aGVpciBzaWduaWZpY2FuY2UgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjAuMzEwNjA1MTYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjE3Nzg0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IChUUkVFfFRJTlkpX1NSQ1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzoyMC42MDY3OTE3MDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTczOTA3NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipTUkNVIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBgU1JDVWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGxhdGVzdCBzZXR0aW5ncyB0byBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBydW5uaW5nIG9wdGltYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncywgb3IgaWYgdGhlcmUncyBhbnkgY29uZmlndXJhdGlvbiB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3IgSSdtIHNlZWluZy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGluIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXNpcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjI0LjE4MDcwMjE1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTU4NDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTUkNVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjQuMjI4NjA4MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyOTA1OTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlNSQ1UgQ29uZmlndXJhdGlvbiBIdW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFNSQ1UuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIHRoZSBrZXJuZWwgZm9yIHNvbWUgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc21zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBvcHRpb25zLiBMZXQncyBzZWUuLi4gd2hlcmUgd291bGQgdGhvc2Ugc2V0dGluZ3MgbGlrZWx5IGJlPyBHaXZlbiBpdHMgY29yZSBuYXR1cmUsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgc2luY2UgdGhhdCBvZnRlbiBoYW5kbGVzIGZ1bmRhbWVudGFsIGtlcm5lbCBmZWF0dXJlcyBvciB0aGUgYGtlcm5lbC9yY3UvS2NvbmZpZ2AgZmlsZSBzaW5jZSBTUkNVIGlzIGNsZWFybHkgcmVsYXRlZCB0byBSQ1UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHdoYXQgSSBuZWVkIGZyb20gZWl0aGVyIG9mIHRob3NlLiBMZXQncyBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjguMTU3NjcwMjE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk2MTU5NDUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1JDVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjMwLjA1MzgzODcxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI5NjI3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBIdW50IGZvciBSQ1UgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqXG5cbk9rYXksIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzIFJDVSB0aGluZywgbGV0J3MgdGFrZSBhIHF1aWNrIGFuZCBkaXJ0eSBhcHByb2FjaC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUkNVIGlzLCBhbG1vc3QgY2VydGFpbmx5LCBga2VybmVsL3JjdS9LY29uZmlnYC4gU28sIHdoYXQgSSdtIGdvaW5nIHRvIGRvIGlzIGEgc2ltcGxlIHRleHQgc2VhcmNoIGluc2lkZSB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgc3RyaW5ncyBgVFJFRV9TUkNVYCBhbmQgYFRJTllfU1JDVWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbmFtZXMgb2YgbGlrZWx5LCBzcGVjaWZpYyBSQ1UgaW1wbGVtZW50YXRpb25zLCBhbmQgS2NvbmZpZyBvcHRpb25zIHVzdWFsbHkgaGF2ZSBhIGRpc3RpbmN0aXZlIG5hbWluZyBjb252ZW50aW9uLiBIb3BlZnVsbHkgdGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBoaWdoLWxldmVsIGRlc2lnbiBjaG9pY2VzIGFyZSBmb3IgUkNVIGluIHRoaXMga2VybmVsIHZlcnNpb24sIGluc3RlYWQgb2YgaGF2aW5nIHRvIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgcmlnaHQgYXdheS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjM0LjU4MzUwNzUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYzODIzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoVFJFRXxUSU5ZKV9TUkNVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L0tjb25maWc9NDE9Y29uZmlnIFJDVV9FWFBFUlRcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy01NS1cXG5rZXJuZWwvcmN1L0tjb25maWc6NTY6Y29uZmlnIFRJTllfU1JDVVxcbmtlcm5lbC9yY3UvS2NvbmZpZy01Ny1cXHRib29sXFxuLS1cXG5rZXJuZWwvcmN1L0tjb25maWctNjEtXFxua2VybmVsL3JjdS9LY29uZmlnOjYyOmNvbmZpZyBUUkVFX1NSQ1VcXG5rZXJuZWwvcmN1L0tjb25maWctNjMtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnPTY4PWNvbmZpZyBGT1JDRV9ORUVEX1NSQ1VfTk1JX1NBRkVcXG5rZXJuZWwvcmN1L0tjb25maWctNjktXFx0Ym9vbCBcXFwiRm9yY2Ugc2VsZWN0aW9uIG9mIE5FRURfU1JDVV9OTUlfU0FGRVxcXCJcXG5rZXJuZWwvcmN1L0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiAhVElOWV9TUkNVXFxua2VybmVsL3JjdS9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gUkNVX0VYUEVSVFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnPTgxPWNvbmZpZyBORUVEX1NSQ1VfTk1JX1NBRkVcXG5rZXJuZWwvcmN1L0tjb25maWc6ODI6XFx0ZGVmX2Jvb2wgSEFWRV9OTUkgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhVElOWV9TUkNVXFxua2VybmVsL3JjdS9LY29uZmlnLTgzLVxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnPTE3Nj1jb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXFxua2VybmVsL3JjdS9LY29uZmlnOjE3NzpcXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXFxua2VybmVsL3JjdS9LY29uZmlnLTE3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MzQuNjMxMTUxNzU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODQyNDQ2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGlua2luZyBhYm91dCB0aGUgcHJvY2VzcyBvZiBzZWxlY3Rpb24sIGFuZCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqVGhlIExvY3VzIG9mIFNlbGVjdGlvbjogQSBDcml0aWNhbCBRdWVzdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpczogKldoZXJlKiBkb2VzIHNlbGVjdGlvbiBhY3R1YWxseSBoYXBwZW4/IEl04oCZcyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uLCBhbmQgb25lIEkgb2Z0ZW4gZ3JhcHBsZSB3aXRoIGluIG15IHdvcmsuIEl0J3Mgbm90IGp1c3QgYSBtYXR0ZXIgb2YgaWRlbnRpZnlpbmcgdGhlICp3aGF0KiBpcyBzZWxlY3RlZDsgdW5kZXJzdGFuZGluZyB0aGUgKndoZXJlKiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaXNtLCB0aGUgY29uc3RyYWludHMsIGFuZCB0aGUgZXZvbHV0aW9uYXJ5IGR5bmFtaWNzIGludm9sdmVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzZWxlY3Rpb24gYXQgdGhlIGxldmVsIG9mIHRoZSBpbmRpdmlkdWFsLCB0aGUgZ2VuZSwgdGhlIGdyb3VwLCBvciBldmVuIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggYW5kIG11bHRpLXRpZXJlZD8gVGhpcyBpc24ndCBhIHNpbXBsZSBcImNoZWNrIHRoZSBib3hcIiBzY2VuYXJpby4gRWFjaCBsZXZlbCBwcmVzZW50cyBpdHMgb3duIGNoYWxsZW5nZXMuIFdoYXQgYXJlIHRoZSBzZWxlY3RpdmUgcHJlc3N1cmVzIGF0IHBsYXk/IEhvdyBkbyBkaWZmZXJlbnQgbGV2ZWxzIGludGVyYWN0PyBIb3cgZG8gd2UgZW1waXJpY2FsbHkgbWVhc3VyZSB0aGUgZWZmZWN0cyBvZiBzZWxlY3Rpb24gYWNyb3NzIGRpZmZlcmVudCBzY2FsZXM/IFRoaW5raW5nIGFib3V0IHNwYXRpYWwgY29udGV4dCBoZXJlLiBJZiB3ZSBhcmUgdGFsa2luZyBhYm91dCBzZWxlY3Rpb24gb2Ygc3BlY2llcywgdGhpcyBpcyB0aGUgZWNvbG9naWNhbCBuaWNoZSwgYW5kIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgb3JnYW5pc21zIGluIHRoYXQgbmljaGUuIFRoaXMgaXMgYWxsIHJlYWxseSBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGtlZXAgcHJvYmluZyB0aGlzIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjQ1LjQ3MzYwMTM3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2OTU5MTU5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IChUUkVFfFRJTlkpX1NSQ1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo0OC4xNDMyMDEwNzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDU5MTgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gdGhlICdkZWZhdWx0JyBPcHRpb24qKlxuXG5IbW0sIHRoaW5raW5nIGFib3V0IHRoaXMuLi4gY291bGQgYGRlZmF1bHRgIGJlIHRoZSBhbnN3ZXI/IEl0J3MgdGhhdCBuYWdnaW5nIHBvc3NpYmlsaXR5IGF0IHRoZSBiYWNrIG9mIG15IG1pbmQuIEknbSB0cnlpbmcgdG8gd2VpZ2ggYWxsIHRoZSBvcHRpb25zLCBjb25zaWRlcmluZyBlZGdlIGNhc2VzLCBhbmQgbG9va2luZyBmb3IgZWxlZ2FuY2UgYW5kIG1haW50YWluYWJpbGl0eSBpbiB0aGUgc29sdXRpb24sIGFuZCB0aGF0IFwiZGVmYXVsdFwiIG9wdGlvbiBrZWVwcyBwb3BwaW5nIHVwLiBJdCdzIG9mdGVuIHRoZSBzaW1wbGVzdCBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgaXQgdHJ1bHkgY292ZXJzIHRoZSBpbnRlbmRlZCBzY2VuYXJpbyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIGNvcm5lciBjYXNlcy4gSSdtIGV4cGxvcmluZyBpZiB0aGlzIG9mZmVycyB0aGUgY29ycmVjdCBmbGV4aWJpbGl0eSB3aGlsZSBzdGlsbCByZW1haW5pbmcgZWZmaWNpZW50IGFuZCByZWFkYWJsZS4gTmVlZCB0byBiZSBzdXJlIGl0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo1MS4zNDc3OTU5NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTUzNzMyNTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmF1bHQuKihUUkVFfFRJTlkpX1NSQ1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo1My44NjMxNzg3MTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNzIzMDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtlcm5lbCBSQ1UgY29uZmlndXJhdGlvbiwgZm9jdXNpbmcgb24gYFRJTllfU1JDVWAgYW5kIGBUUkVFX1NSQ1VgOlxuXG4qKkRlbHZpbmcgaW50byBSQ1UgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9yY3UvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzbWFsbGVyLCBtb3JlIHNwZWNpYWxpemVkIFJDVSBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBgVElOWV9TUkNVYCBhbmQgYFRSRUVfU1JDVWAuIEkga25vdyB0aGV5IG9mZmVyIHRyYWRlLW9mZnMgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkIFJDVSwgYnV0IEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBwcmVjaXNlIGNvbmRpdGlvbnMgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbnMgYmVjb21lIHByZWZlcmFibGUuIGBUSU5ZX1NSQ1VgLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaXMgcHJvYmFibHkgZ2VhcmVkIHRvd2FyZHMgc3lzdGVtcyB3aXRoIHJlYWxseSByZXNvdXJjZSBjb25zdHJhaW50cywgb3IgcG9zc2libHkgdGhvc2UgaGVhdmlseSB1dGlsaXppbmcgc2luZ2xlLXdyaXRlciBzaXR1YXRpb25zLiBUaGVuLCBgVFJFRV9TUkNVYC4uLiBJIHRoaW5rIHRoYXQncyByZWxhdGVkIHRvIHNvbWUgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBhbmQgbWlnaHQgb2ZmZXIgaW1wcm92ZW1lbnRzIGluIGNlcnRhaW4gY29uY3VycmVuY3kgc2NlbmFyaW9zLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCBkZXBlbmRlbmNpZXMgdGhlc2UgY29uZmlndXJhdGlvbnMgaGF2ZSwgd2hhdCB0aGVpciBkZWZhdWx0IHN0YXRlcyBhcmUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIGNvbW1lbnRzIGluIHRoZSBLY29uZmlnIGZpbGUgZnJhbWUgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgZWFjaC4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoaXMgYW5kIGZpcm0gdXAgbXkgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6NTguMDAwNDExOTE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHQgIG9ic2N1cmUgUkNVIG9wdGlvbnMgdG8gYmUgc2V0IHVwLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHQgIFNheSBZIGlmIHlvdSBuZWVkIHRvIG1ha2UgZXhwZXJ0LWxldmVsIGFkanVzdG1lbnRzIHRvIFJDVS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIFRJTllfU1JDVVxcbiAgNTc6XFx0XFx0Ym9vbFxcbiAgNTg6XFx0XFx0ZGVmYXVsdCB5IGlmIFRJTllfUkNVXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIHNpbmdsZS1DUFUgbm9uLXByZWVtcHRpYmxlIHZlcnNpb24gb2YgU1JDVS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIFRSRUVfU1JDVVxcbiAgNjM6XFx0XFx0Ym9vbFxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCB5IGlmICFUSU5ZX1JDVVxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBmdWxsLWZsZWRnZWQgdmVyc2lvbiBvZiBTUkNVLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgRk9SQ0VfTkVFRF9TUkNVX05NSV9TQUZFXFxuICA2OTpcXHRcXHRib29sIFxcXCJGb3JjZSBzZWxlY3Rpb24gb2YgTkVFRF9TUkNVX05NSV9TQUZFXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0Mzo1OC4wMDA1MTEyMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA2NDQxODMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU1JDVSBTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlIEFkZGl0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzaW1wbGlmaWVzIHRoZSBTUkNVIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGBTUkNVYCBpcyBhbHdheXMgZW5hYmxlZCBub3csIGVpdGhlciB0aHJvdWdoIGBUSU5ZX1JDVWAgb3IgYFRSRUVfUkNVYC4gSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBjb25maWd1cmF0aW9ucy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBuZWVkaW5nIGBUUkVFX1NSQ1VgIGFuZCBgVElOWV9TUkNVYCBidXQgbm8sIGBUUkVFX1NSQ1VgIGFuZCBgVElOWV9TUkNVYCBhcmUgaW1wbGljaXRseSBlbmFibGVkIGJhc2VkIG9uIHRoZSBgVElOWV9SQ1VgIHNldHRpbmcuIGBUSU5ZX1JDVWAgaXMgZm9yIHVuaXByb2Nlc3NvciwgYFRSRUVfUkNVYCBpcyBmb3IgU01QIHN5c3RlbXMuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgdGhlIGFkZGl0aW9uIG9mIGB0cnlfc3luY2hyb25pemVfc3JjdWAuIFRoaXMgaXMgYSAqbWFqb3IqIGFkZGl0aW9uIOKAkyBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHdpdGhpbiB0aGUga2VybmVsLiBJdHMgYSBmYXN0LXBhdGggZm9yIGBzeW5jaHJvbml6ZV9zcmN1YCB3aGVuIHRoZXJlIGFyZSBubyByZWFkZXJzLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBwcmltaXRpdmUgZm9yIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC4gSSBuZWVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cblxuTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG5ldyBmdW5jdGlvbiBhZGRlZC4uLiB5ZXAsIGp1c3QgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YC5cblxuU2luY2UgYFRSRUVfU1JDVWAgaXMgdGhlIGRlZmF1bHQgYW5kIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCwgSSBjYW4ganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgZm9yIHRoZSBmdXp6ZXIgY29uZmlndXJhdGlvbi4gSSBjb3VsZCBwdXQgYFRSRUVfU1JDVWAgc2luY2UgaXQgbWFrZXMgdGhlIGRlcGVuZGVuY3kgZXhwbGljaXQuIFNvIEknbGwgcHV0IGBUUkVFX1NSQ1VgIHRvIGJlIGNsZWFyLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ1LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQ0OjA3LjA2NDkzMzk4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3N5bmNocm9uaXplX3NyY3VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGB0cnlfc3luY2hyb25pemVfc3JjdWAsIHdoaWNoIHByb3ZpZGVzIGEgZmFzdCBwYXRoIGZvciBgc3luY2hyb25pemVfc3JjdWAgd2hlbiB0aGVyZSBhcmUgbm8gcmVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBSQ1UvU1JDVSBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgYnkgYW55IGtlcm5lbCBtb2R1bGUgb3Igc3Vic3lzdGVtIHVzaW5nIFNSQ1UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHJlYWRlci1mcmVlIHN0YXRlcyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9zeW5jaHJvbml6ZV9zcmN1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgYHN5bmNocm9uaXplX3NyY3VgIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgUkNVL1NSQ1Ugc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGFueSBrZXJuZWwgbW9kdWxlIG9yIHN1YnN5c3RlbSB1c2luZyBTUkNVLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaWRlbnRpZmllcyByZWFkZXItZnJlZSBzdGF0ZXMgYW5kIGRvZXMgbm90IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MDcuMDY0OTcwNDkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTcwMzUxMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MDcuMDY1NTM3ODIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgxNjk3NzkwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIFNSQ1UgZ3JhY2UgcGVyaW9kcyB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVhZGVycy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWFkaW5nIFNSQ1UgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBwYXJzaW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBvcmRlcmluZyB2aW9sYXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Y2M0Njc4OGFkN2FiMmJjZWI4NTJmZTQzNTY3ZTBjYzk4MTJmMGVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDM6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3UuaCBiL2luY2x1ZGUvbGludXgvc3JjdS5oXG5pbmRleCBhNTRjZTllODA4YjkyLi4wZDc1NDNjN2JlY2NhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdS5oXG5AQCAtOTEsNiArOTEsNyBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpoZWFkLFxuIFx0XHR2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7XG4gdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbiB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIFxuICNkZWZpbmUgU1JDVV9HRVRfU1RBVEVfQ09NUExFVEVEIDB4MVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuaW5kZXggYTJlMmQ1MTZlNTFiOS4uZjA3MTU5Y2FlMjQxOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuKysrIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5AQCAtMjYwLDYgKzI2MCwyOSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuKy8qKlxuKyAqIHRyeV9zeW5jaHJvbml6ZV9zcmN1IC0gaW5saW5lIGdyYWNlIHBlcmlvZCBmb3IgYSByZWFkZXItZnJlZSBzcmN1X3N0cnVjdFxuKyAqIEBzc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuXG4rICpcbisgKiBJZiBAc3NwIHByb3ZhYmx5IGhhcyBubyByZWFkZXJzIGluIGVpdGhlciBlcG9jaCwgcHJvdmlkZSB0aGVcbisgKiBzeW5jaHJvbml6ZV9zcmN1KCkgZ3VhcmFudGVlIHRvIHRoZSBjYWxsZXIgaW1tZWRpYXRlbHksIHdpdGhvdXRcbisgKiBzbGVlcGluZy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmUgdGhlIGNhbGxlciBtdXN0IGZhbGxcbisgKiBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKS5cbisgKlxuKyAqIE9uICFTTVAgYSByZWFkZXIgY2FuIG9ubHkgYmUgbWlkLWNyaXRpY2FsLXNlY3Rpb24gaWYgaXQgd2FzXG4rICogcHJlZW1wdGVkIChvciBpcyBydW5uaW5nIGluIGFuIGludGVycnVwdCB3aGljaCBwcmVlbXB0ZWQgdXMpLCBpblxuKyAqIHdoaWNoIGNhc2UgaXRzIG5lc3RpbmcgY291bnQgaXMgdmlzaWJseSBub24temVyby4gQm90aCBjb3VudHMgYmVpbmdcbisgKiB6ZXJvIHRoZXJlZm9yZSBwcm92ZXMgdGhhdCBubyByZWFkZXIgZXhpc3RzLCBhbmQgYW55IHJlYWRlciB3aGljaFxuKyAqIGJlZ2lucyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2lsbCwgYnkgcHJvZ3JhbSBvcmRlciBvbiB0aGlzXG4rICogc29sZSBDUFUsIG9ic2VydmUgZXZlcnkgc3RvcmUgdGhlIGNhbGxlciBtYWRlIGJlZm9yZSBjYWxsaW5nIGl0LlxuKyAqL1xuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4re1xuK1x0cmV0dXJuICFSRUFEX09OQ0Uoc3NwLVx1MDAzZXNyY3VfbG9ja19uZXN0aW5nWzBdKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhUkVBRF9PTkNFKHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1sxXSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyeV9zeW5jaHJvbml6ZV9zcmN1KTtcbitcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggN2MyZjdjYzEzMWY3YS4uYjg1MmY0ZDQyMzljNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuKysrIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMTU4MCw2ICsxNTgwLDc2IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4rLyoqXG4rICogdHJ5X3N5bmNocm9uaXplX3NyY3UgLSBpbmxpbmUgZ3JhY2UgcGVyaW9kIGZvciBhIHJlYWRlci1mcmVlIHNyY3Vfc3RydWN0XG4rICogQHNzcDogc3JjdV9zdHJ1Y3Qgd2l0aCB3aGljaCB0byBzeW5jaHJvbml6ZS5cbisgKlxuKyAqIElmIEBzc3AgcHJvdmFibHkgaGFzIG5vIHJlYWRlcnMgaW4gZWl0aGVyIGVwb2NoLCBwcm92aWRlIHRoZVxuKyAqIHN5bmNocm9uaXplX3NyY3UoKSBndWFyYW50ZWUgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseTogd2l0aG91dFxuKyAqIHNsZWVwaW5nLCB3aXRob3V0IGEgdHJpcCB0aHJvdWdoIHRoZSBTUkNVIHdvcmtxdWV1ZSwgYW5kIHdpdGhvdXRcbisgKiBhZHZhbmNpbmcgdGhlIGdyYWNlLXBlcmlvZCBzZXF1ZW5jZS4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3M7IG9uXG4rICogZmFpbHVyZSB0aGUgY2FsbGVyIG11c3QgZmFsbCBiYWNrIHRvIHN5bmNocm9uaXplX3NyY3UoKSBvclxuKyAqIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkuXG4rICpcbisgKiBUaGlzIHNlcnZlcyBkZWRpY2F0ZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyB3aG9zZSByZWFkLXNpZGUgY3JpdGljYWxcbisgKiBzZWN0aW9ucyBhcmUgc2hvcnQsIGF0b21pYywgYW5kIHVzdWFsbHkgYWJzZW50IOKAlCB3aGVyZSBldmVuIGFuXG4rICogZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCBjb3N0cyB0d28gdHJpcHMgdGhyb3VnaCB0aGUgd29ya3F1ZXVlIGFuZCBhblxuKyAqIHVuY29uZGl0aW9uYWwgc2xlZXAgb2YgdGhlIGNhbGxlciwgdGhyZWUgb3JkZXJzIG9mIG1hZ25pdHVkZSBtb3JlXG4rICogdGhhbiB0aGUgY2hlY2sgYmVsb3cuXG4rICpcbisgKiBPbmx5IHJlYWRlcnMgb2YgdGhlIHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF9sb2NrX25taXNhZmUoKVxuKyAqIGZsYXZvcnMgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIHByb29mOyBpZiB0aGUgX2Zhc3QoKSBmbGF2b3JzIGhhdmVcbisgKiBldmVyIGJlZW4gdXNlZCBvbiBAc3NwLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLlxuKyAqL1xuK2Jvb2wgdHJ5X3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4re1xuK1x0dW5zaWduZWQgbG9uZyB1bmxvY2tzMCwgdW5sb2NrczE7XG4rXHR1bnNpZ25lZCBsb25nIHJkbTAsIHJkbTE7XG4rXG4rXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4rXG4rXHQvKlxuK1x0ICogT3JkZXIgdGhlIGNhbGxlcidzIHByaW9yIHN0b3JlcyBiZWZvcmUgdGhlIGNvdW50ZXIgcmVhZHMgYmVsb3cuXG4rXHQgKiBQYWlycyAoc3RvcmUtYnVmZmVyaW5nIHBhdHRlcm4pIHdpdGggdGhlIHNtcF9tYigpIGluXG4rXHQgKiBfX3NyY3VfcmVhZF9sb2NrKCk6IGFueSByZWFkZXIgd2hvc2UgbG9jayBpbmNyZW1lbnQgaXMgbm90XG4rXHQgKiBvYnNlcnZlZCBieSB0aGUgc3VtcyBiZWxvdyBpcyBndWFyYW50ZWVkIHRvIG9ic2VydmUsIHdpdGhpbiBpdHNcbitcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGV2ZXJ5IHN0b3JlIHRoZSBjYWxsZXIgbWFkZSBiZWZvcmUgY2FsbGluZ1xuK1x0ICogdGhpcyBmdW5jdGlvbi5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXG4rXHR1bmxvY2tzMCA9IHNyY3VfcmVhZGVyc191bmxvY2tfaWR4KHNzcCwgMCwgXHUwMDI2cmRtMCk7XG4rXHR1bmxvY2tzMSA9IHNyY3VfcmVhZGVyc191bmxvY2tfaWR4KHNzcCwgMSwgXHUwMDI2cmRtMSk7XG4rXG4rXHQvKlxuK1x0ICogUmVhZGVyIGZsYXZvcnMgd2hpY2ggZWxpZGUgdGhlIHJlYWQtc2lkZSBzbXBfbWIoKSB0aGF0IHRoZVxuK1x0ICogcGFpcmluZyBhYm92ZSBkZXBlbmRzIG9uIGNhbm5vdCBiZSBwcm92ZW4gYWJzZW50IHRoaXMgd2F5O1xuK1x0ICogdGhleSBuZWVkIGEgcmVhbCBncmFjZSBwZXJpb2QuXG4rXHQgKi9cbitcdGlmICgocmRtMCB8IHJkbTEpIFx1MDAyNiBTUkNVX1JFQURfRkxBVk9SX1NMT1dHUClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIEFzIGluIHNyY3VfcmVhZGVyc19hY3RpdmVfaWR4X2NoZWNrKCk6IGVuc3VyZSB0aGF0IGEgbG9jayBpc1xuK1x0ICogYWx3YXlzIGNvdW50ZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgdW5sb2NrIGlzIGNvdW50ZWQsIHNvIHRoYXRcbitcdCAqIGEgcmVhZGVyIHJhY2luZyB3aXRoIHRoZXNlIHN1bXMgY2FuIG9ubHkgaW5mbGF0ZSB0aGUgbG9jayBzdW1cbitcdCAqIGFuZCBmb3JjZSB0aGUgKHNhZmUpIGZhbGxiYWNrLiBTdW1taW5nIGJvdGggZXBvY2hzIG1lYW5zIG5vXG4rXHQgKiBpbmRleCBmbGlwIGlzIG5lZWRlZDogYSBzdGFibGUgZXF1YWxpdHkgcHJvdmVzIHRoZXJlIHdhcyBhXG4rXHQgKiBtb21lbnQgaW4gdGhpcyBmdW5jdGlvbiBhdCB3aGljaCBubyByZWFkZXJzIGV4aXN0ZWQgYXQgYWxsLlxuK1x0ICovXG4rXHRzbXBfbWIoKTtcbitcbitcdGlmICghc3JjdV9yZWFkZXJzX2xvY2tfaWR4KHNzcCwgMCwgZmFsc2UsIHVubG9ja3MwKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFzcmN1X3JlYWRlcnNfbG9ja19pZHgoc3NwLCAxLCBmYWxzZSwgdW5sb2NrczEpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBPcmRlciB0aGUgY2FsbGVyJ3Mgc3Vic2VxdWVudCBhY2Nlc3NlcyBhZnRlciB0aGUgcHJvb2YuICovXG4rXHRzbXBfbWIoKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh0cnlfc3luY2hyb25pemVfc3JjdSk7XG4rXG4gLyoqXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXG4gICogQHNzcDogc3JjdV9zdHJ1Y3QgdG8gcHJvdmlkZSBjb29raWUgZm9yLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MDcuMDY1NTM5MjUxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNjk3NTU4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHRvIGBzcmN1dGlueS5jYCBhbmQgYHNyY3V0cmVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGFpbWluZyBmb3IgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaW4gU1JDVSBzeW5jaHJvbml6YXRpb24sIG9mZmVyaW5nIGEgcXVpY2tlciBwYXRoIHdoZW4gdGhlcmUgYXJlIG5vIHJlYWRlcnMuIFRoaXMgYWxpZ25zIHdpdGggYSBjb21tb24gc3RyYXRlZ3kg4oCTIG9wdGltaXN0aWNhbGx5IGNoZWNraW5nIGZvciBhbiBlYXN5IGNhc2UgYmVmb3JlIGdvaW5nIGRvd24gdGhlIHNsb3dlciwgbW9yZSBnZW5lcmFsIHJvdXRlLlxuXG5Gcm9tIGEgc2FmZXR5IHBlcnNwZWN0aXZlLCBJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGdvb2QuIEFsc28sIHRoZXJlJ3Mgbm8gcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIG9yIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCByZWFkaW5nIGFuZCBtb2RpZnlpbmcgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBtZW1vcnkgYmFycmllcnMgY29uZmlybXMgdGhpcyBpcyBwdXJlbHkgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucywgc28gSSdsbCBxdWlja2x5IGxvb2sgb3ZlciB0aGUgY29kZS4gSSBzZWUgdGhhdCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgIHJlYWRzIGBzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF1gIGFuZCBgc3NwLVx1MDAzZXNyY3VfbG9ja19uZXN0aW5nWzFdYCBpbiB0aGUgYHNyY3V0aW55LmNgIHNpZGUsIGFuZCBJIHNlZSBjYWxscyB0byBgc3JjdV9yZWFkZXJzX3VubG9ja19pZHhgIGFuZCBgc3JjdV9yZWFkZXJzX2xvY2tfaWR4YCBpbiBgc3JjdXRyZWUuY2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgYW5kIGNvbmZpcm1zIG15IGFzc2Vzc21lbnQ6IHRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgYW55d2hlcmUsIHNvIEtNU0FOIHNob3VsZCBiZSBpcnJlbGV2YW50IGhlcmUuXG5cbkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGFueSBidWdzIGluIHRoaXMgcGF0Y2ggYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IHByb2JsZW1zLCBzdWJ0bGUgbWVtb3J5IG9yZGVyaW5nIGlzc3Vlcywgb3IgdGhlIGRyZWFkZWQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBIb3dldmVyLCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlc2Uga2luZHMgb2YgYnVncyBzaG91bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFNvLCB0aGUga2VybmVsJ3MgZXhpc3Rpbmcgc2FmZXR5IG1lY2hhbmlzbXMgYXJlIHdlbGwtc3VpdGVkIHRvIGRldGVjdCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgaXMgYSBsb3ctcmlzaywgaGlnaC1yZXdhcmQgb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY0LCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQ0OjE1LjIzNTI5ODQ1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgdHJ5X3N5bmNocm9uaXplX3NyY3VgLCB3aGljaCBwcm92aWRlcyBhIGZhc3QgcGF0aCBmb3IgU1JDVSBncmFjZSBwZXJpb2RzIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWFkZXJzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlYWRpbmcgU1JDVSBsb2NrIG5lc3RpbmcgY291bnRlcnMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IGJhcnJpZXJzLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHBhcnNpbmcgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IG9yZGVyaW5nIHZpb2xhdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSwgYHRyeV9zeW5jaHJvbml6ZV9zcmN1YCwgd2hpY2ggcHJvdmlkZXMgYSBmYXN0IHBhdGggZm9yIFNSQ1UgZ3JhY2UgcGVyaW9kcyB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVhZGVycy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWFkaW5nIFNSQ1UgbG9jayBuZXN0aW5nIGNvdW50ZXJzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBwYXJzaW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBvcmRlcmluZyB2aW9sYXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdfd4k[1] Phase: Succeeded StartedAt: 2026-08-12 12:44:26 +0000 UTC FinishedAt: 2026-08-12 12:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 12:44:26 +0000 UTC FinishedAt: 2026-08-12 12:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2] Phase: Succeeded StartedAt: 2026-08-12 12:44:26 +0000 UTC FinishedAt: 2026-08-12 16:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 12:44:26 +0000 UTC FinishedAt: 2026-08-12 16:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 12:44:26 +0000 UTC FinishedAt: 2026-08-12 12:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 12:44:26 +0000 UTC FinishedAt: 2026-08-12 12:44:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowdfd4k/series-workflowdfd4k-convert-artifact-2830288078/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 12:44:37 +0000 UTC FinishedAt: 2026-08-12 13:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 12:44:37 +0000 UTC FinishedAt: 2026-08-12 13:06:01 +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:*d5cd9b59-142c-42a9-8b6e-604d2bef2625,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-workflowdfd4k/series-workflowdfd4k-convert-artifact-2830288078/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": "854ed494-4871-4e71-81ed-5c85652786fa", "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-workflowdfd4k/series-workflowdfd4k-build-action-297348404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 12:44:37 +0000 UTC FinishedAt: 2026-08-12 13:05:38 +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:*d5cd9b59-142c-42a9-8b6e-604d2bef2625,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-workflowdfd4k/series-workflowdfd4k-convert-artifact-2830288078/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": "854ed494-4871-4e71-81ed-5c85652786fa", "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-workflowdfd4k/series-workflowdfd4k-build-action-297348404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 13:06:01 +0000 UTC FinishedAt: 2026-08-12 13:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 13:06:01 +0000 UTC FinishedAt: 2026-08-12 13:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 13:06:01 +0000 UTC FinishedAt: 2026-08-12 13:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 13:06:01 +0000 UTC FinishedAt: 2026-08-12 13:06:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowdfd4k/series-workflowdfd4k-convert-artifact-2089616321/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 13:06:29 +0000 UTC FinishedAt: 2026-08-12 13:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 13:06:29 +0000 UTC FinishedAt: 2026-08-12 13:08:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*854ed494-4871-4e71-81ed-5c85652786fa,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-workflowdfd4k/series-workflowdfd4k-build-action-297348404/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-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 13:08:43 +0000 UTC FinishedAt: 2026-08-12 13:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 13:08:43 +0000 UTC FinishedAt: 2026-08-12 13:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 13:08:43 +0000 UTC FinishedAt: 2026-08-12 13:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 13:08:43 +0000 UTC FinishedAt: 2026-08-12 13:28:50 +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:*d5cd9b59-142c-42a9-8b6e-604d2bef2625,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-workflowdfd4k/series-workflowdfd4k-convert-artifact-2089616321/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": "03756284-3222-49cc-9b4f-c5514fb0dbfd", "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-workflowdfd4k/series-workflowdfd4k-build-action-577707341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 13:08:43 +0000 UTC FinishedAt: 2026-08-12 13:28:39 +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:*d5cd9b59-142c-42a9-8b6e-604d2bef2625,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-workflowdfd4k/series-workflowdfd4k-convert-artifact-2089616321/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": "03756284-3222-49cc-9b4f-c5514fb0dbfd", "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-workflowdfd4k/series-workflowdfd4k-build-action-577707341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 13:28:50 +0000 UTC FinishedAt: 2026-08-12 13:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 13:28:50 +0000 UTC FinishedAt: 2026-08-12 13:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 13:28:50 +0000 UTC FinishedAt: 2026-08-12 13:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 13:28:50 +0000 UTC FinishedAt: 2026-08-12 13:30:46 +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:*03756284-3222-49cc-9b4f-c5514fb0dbfd,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-workflowdfd4k/series-workflowdfd4k-build-action-577707341/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-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 16:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 16:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"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:*854ed494-4871-4e71-81ed-5c85652786fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03756284-3222-49cc-9b4f-c5514fb0dbfd,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-workflowdfd4k/series-workflowdfd4k-build-action-297348404/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-workflowdfd4k/series-workflowdfd4k-build-action-577707341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 13:31:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 13:31:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"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-workflowdfd4k/series-workflowdfd4k-convert-artifact-3651507798/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 13:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 13:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 13:30:56 +0000 UTC FinishedAt: 2026-08-12 13:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 13:31:24 +0000 UTC FinishedAt: 2026-08-12 16:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfd4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["try_synchronize_srcu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","series_id":"f431f705-2be1-4fda-b504-7ceac8c57fa9","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 13:31:24 +0000 UTC FinishedAt: 2026-08-12 16:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*854ed494-4871-4e71-81ed-5c85652786fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03756284-3222-49cc-9b4f-c5514fb0dbfd,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-workflowdfd4k/series-workflowdfd4k-build-action-297348404/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-workflowdfd4k/series-workflowdfd4k-build-action-577707341/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-workflowdfd4k/series-workflowdfd4k-convert-artifact-3651507798/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,}