Name: series-workflow7bxjv Phase: Succeeded StartedAt: 2026-09-06 16:08:34 +0000 UTC FinishedAt: 2026-09-06 20:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[0] Phase: Succeeded StartedAt: 2026-09-06 16:08:34 +0000 UTC FinishedAt: 2026-09-06 17:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 16:08:34 +0000 UTC FinishedAt: 2026-09-06 17:13:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "5f763992-20ce-47ac-a239-8d711ebcf296" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__swap_cache_del_folio", "swap_cache_del_folio", "__remove_mapping", "__memcg1_swapout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fcmVtb3ZlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXG5cblRoaXMgY2hhbmdlIGludm9sdmVzIHB1cmVseSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWM6XG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxuMi4gVGhlIG5ldyBgc3dhcG91dGAgYm9vbGVhbiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBhIGNvbnN0YW50IChgdHJ1ZWAgaW4gYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgZmFsc2VgIGluIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2ApLCBzbyBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBObyBkYXRhIGlzIGNvcGllZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSBieSBtb3ZpbmcgdGhlIF9fbWVtY2cxX3N3YXBvdXQgaW52b2NhdGlvbiBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyB3aGVuIHN3YXBwaW5nIG91dC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgY2FjaGUgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9zd2FwX3N0YXRlLmMgYW5kIG1tL3Ztc2Nhbi5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzA5MmJiYTAzMjg3NzBhMTg2NGFmNzI1ZDlhN2FkOTcxZTdiMjE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTI6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC0zMTksNyAmIzQzOzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuJiM0MztcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgc3dhcG91dCk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTtcbiBcbkBAIC00NTIsNyAmIzQzOzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbiYjNDM7XHRcdGJvb2wgc3dhcG91dClcbiB7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uMzg5MTZlYTk2YWM1NSAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMzA2LDIxICYjNDM7MzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4mIzQzOyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gICpcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4mIzQzOyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcbiYjNDM7ICogc2hvdWxkIGJlIGRpc2FibGVkLlxuICAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuJiM0MztcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChzd2Fwb3V0KVxuJiM0MztcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuJiM0MztcbiYjNDM7XHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gfVxuIFxuIC8qKlxuQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4mIzQzO1x0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc1NSw4ICYjNDM7NzU1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4tXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbi1cdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG4mIzQzO1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9tYXBwaW5nJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSBieSBtb3ZpbmcgdGhlIF9fbWVtY2cxX3N3YXBvdXQgaW52b2NhdGlvbiBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyB3aGVuIHN3YXBwaW5nIG91dC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgY2FjaGUgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9zd2FwX3N0YXRlLmMgYW5kIG1tL3Ztc2Nhbi5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzA5MmJiYTAzMjg3NzBhMTg2NGFmNzI1ZDlhN2FkOTcxZTdiMjE1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTc6MTI6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpOwomIzQzOwkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJCSAgICBib29sIHN3YXBvdXQpOwogdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCXN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7CiAKQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJYm9vbCBzd2Fwb3V0KQogewogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uMzg5MTZlYTk2YWM1NSAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzA2LDIxICYjNDM7MzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIEBmb2xpbzogVGhlIGZvbGlvLgogICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by4KICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby4KICAqCiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuCiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LgogICoKICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZQogICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy4KJiM0MzsgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzCiYjNDM7ICogc2hvdWxkIGJlIGRpc2FibGVkLgogICovCiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAotCV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwlpZiAoc3dhcG91dCkKJiM0MzsJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKJiM0MzsKJiM0MzsJX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogfQogCiAvKioKQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tJmd0O3N3YXA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7CiYjNDM7CV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCiAJZm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc1NSw4ICYjNDM7NzU1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKLQkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwotCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKJiM0MzsJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpOwogCQlzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCBob3cgSSYjMzk7ZCBhcHByb2FjaCBpdCwgYXMgdGhvdWdoIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOgoKKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyBldmVuICp3b3J0aCogZnV6emluZy4gSXMgaXQgdG91Y2hpbmcgY29kZSB0aGF0JiMzOTtzIGxpa2VseSB0byBiZSB2dWxuZXJhYmxlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJiMzOTtsbCBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjaGFuZ2VzLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgcGF0Y2gsIGxvb2tpbmcgYXQgdGhlIGdpdCBkaWZmLCBhbmQgaW1tZWRpYXRlbHkgc2NvcGluZyBvdXQgdGhlIGludm9sdmVkIGZpbGVzLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCBgbW0vc3dhcC5oYC4gVGhhdCBtYWtlcyBtZSB0aGluayBtZW1vcnkgbWFuYWdlbWVudCwgc3dhcHBpbmcsIGFuZCB2aXJ0dWFsIG1lbW9yeS4gVGhvc2UgYXJlICphbHdheXMqIGludGVyZXN0aW5nIHRhcmdldHMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIGhvdyB0aGUgZGF0YSBmbG93cyB0aHJvdWdoIHRoZW0sIGFuZCB3aGVyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgYXJlLiBUaGF0JiMzOTtzIGhvdyBJIGNhbiBjaG9vc2Ugd2hhdCB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgZm9yIGZ1enppbmcsIGFuZCBJIGNhbiBzdGFydCB0byBkZXZlbG9wIHRoZSByaWdodCBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjAtXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIyLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMTgtICovXG5tbS9zd2FwX3N0YXRlLmM6MzE5OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMyMC1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMzYtICpcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG5tbS9zd2FwX3N0YXRlLmMtMzM4LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzQzPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQ4LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbm1tL3N3YXBfc3RhdGUuYzozNDk6XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzU3LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYzo3NTg6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xubW0vdm1zY2FuLmMtNzU5LVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBTd2FwIENhY2hpbmcgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN3YXAgY2FjaGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGluZ3MgYXJlIGhhbmRsZWQgd2hlbiBwYWdlcyBhcmUgc3dhcHBlZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgKGxpa2VseSBoYW5kbGluZyB0aGUgZGVsZXRpb24gb3IgaW52YWxpZGF0aW9uIG9mIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSkgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCAod2hpY2gsIGZyb20gaXRzIG5hbWluZywgaXMgcHJvYmFibHkgdGhlIGNvcmUgc3dhcC1vdXQgZnVuY3Rpb24sIHBvdGVudGlhbGx5IHdpdGggTWVtQ0ctc3BlY2lmaWMgYXNwZWN0cykuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIGNyaXRpY2FsIHBpZWNlcyBvZiB0aGUgcHV6emxlIHdoZW4gZGVhbGluZyB3aXRoIHBhZ2UgcmVjbGFpbWluZy4KCkkmIzM5O20gc3RhcnRpbmcgbXkgaW52ZXN0aWdhdGlvbiBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rIGZvciB0aGUgY29yZSBzd2FwIG9wZXJhdGlvbnMgYW5kIHRoZSBWTSBzY2FubmluZyBsb2dpYywgd2hlcmUgdGhlIGV2aWN0aW9uIGFuZCBzd2FwLW91dCBkZWNpc2lvbnMgYXJlIG1hZGUuIEkgbmVlZCB0byBzZWUgaG93IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBjYWxsZWQsIGFuZCB3aGF0IHRoZSBjb250ZXh0IGlzLiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgaXQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpdCBpbnRlcmFjdGluZyB3aXRoPwoKTGlrZXdpc2UsIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBvZiBgX19tZW1jZzFfc3dhcG91dGAuIFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQgYXJlIGl0cyBzaWRlIGVmZmVjdHM/IElzIGl0IGRpcmVjdGx5IGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG9yIGFyZSB0aGVyZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zPyBXaGF0JiMzOTtzIHRoZSBvdmVyYWxsIGZsb3cgb2YgcGFnZSBldmljdGlvbiBpbiByZWxhdGlvbiB0byBzd2FwIGNhY2hlIGludmFsaWRhdGlvbj8gVWx0aW1hdGVseSBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCB3aGVyZSB0aGUgc3dhcCBjYWNoZSBpcyBiZWluZyB1cGRhdGVkIGFuZCBjbGVhcmVkLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBsaWZlY3ljbGUgb2YgYSBzd2FwcGVkIHBhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdC8qKlxuIDM1NjpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NzpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU4Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTk6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuIDM2MDpcdCAqXG4gMzYxOlx0ICogUmVwbGFjZSBhbiBleGlzdGluZyBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSB3aXRoIGEgbmV3IGZvbGlvLiBUaGVcbiAzNjI6XHQgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5ldyBmb2xpbyYjMzk7cyBmbGFnIGFuZCBzd2FwXG4gMzYzOlx0ICogZW50cmllcy4gUmVwbGFjZW1lbnQgd2lsbCB0YWtlIHRoZSBuZXcgZm9saW8mIzM5O3Mgc3dhcCBlbnRyeSB2YWx1ZSBhc1xuIDM2NDpcdCAqIHRoZSBzdGFydGluZyBvZmZzZXQgdG8gb3ZlcnJpZGUgYWxsIHNsb3RzIGNvdmVyZWQgYnkgdGhlIG5ldyBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19yZW1vdmVfbWFwcGluZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsYXllciBpbiB0aGUga2VybmVsIGhhbmRsZXMgdW5tYXBwaW5nLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBsb29rIGF0IGBfX3JlbW92ZV9tYXBwaW5nYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWdlIHJlY2xhbWF0aW9uIGFuZCBwb3RlbnRpYWxseSwgdGhlIGNvbXBsZXhpdGllcyBvZiBjbGVhbmluZyB1cCBtYXBwaW5ncyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhY2NvdW50aW5nIGZvciByZWZlcmVuY2UgY291bnRzLCBhbmQgcG9zc2libHkgZGVhbGluZyB3aXRoIGRpcnR5IHBhZ2VzIGFuZCBzd2FwIGVudHJpZXMuIFRoZSAmIzM0O3Ztc2NhbiYjMzQ7IGNvbnRleHQgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBwYWdlIHNjYW5uZXIsIHBlcmhhcHMgZHVyaW5nIGJhY2tncm91bmQgbWVtb3J5IHByZXNzdXJlIHJlY292ZXJ5LiBJdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiBhbnkgbG9jayBvcmRlcmluZyBpcyBpbnZvbHZlZDsgSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGlmIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGFyZSBpbiBwbGFjZSB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZSBpcyBzaGFyZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHJvdXRpbmUgaXMgcmVhbGx5IGRvaW5nIHdpdGggdGhlIFZNIHN0cnVjdHVyZSwgdGhlIHBhZ2UgZmxhZ3MsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChmaWxlLWJhY2tlZCwgYW5vbnltb3VzLCBodWdlIHBhZ2VzLCBldGMuKS4gSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgdW5tYXBwaW5nIGFjdHVhbGx5IGltcGFjdHMgdGhlIHByb2Nlc3MmIzM5O3MgcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCB3aGVyZSB0aGF0ICYjMzQ7bWFwcGluZyYjMzQ7IHRvIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgcmVmZXJyaW5nIGFjdHVhbGx5IHNpdHMgd2l0aGluIHRoZSBvdmVyYWxsIFZNIGxhbmRzY2FwZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFzIHdlbGwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRcdCAqXG4gNzQxOlx0XHQgKiBOb3RlIHRoYXQgaWYgdGhlIGRpcnR5IGZsYWcgaXMgYWx3YXlzIHNldCB2aWEgZm9saW9fbWFya19kaXJ0eSxcbiA3NDI6XHRcdCAqIGFuZCB0aHVzIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuXG4gNzQzOlx0XHQgKi9cbiA3NDQ6XHRcdHJlZmNvdW50ID0gMSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gNzQ1Olx0XHRpZiAoIWZvbGlvX3JlZl9mcmVlemUoZm9saW8sIHJlZmNvdW50KSlcbiA3NDY6XHRcdFx0Z290byBjYW5ub3RfZnJlZTtcbiA3NDc6XHRcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cbiA3NDg6XHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcbiA3NDk6XHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XG4gNzUwOlx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XG4gNzUzOlx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4gNzU0Olx0XHRcdHN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDc1NTpcdFxuIDc1NjpcdFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIDc1NzpcdFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gNzU4Olx0XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIDc1OTpcdFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gNzYwOlx0XHR9IGVsc2Uge1xuIDc2MTpcdFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIDc2MjpcdFxuIDc2MzpcdFx0XHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvO1xuIDc2NDpcdFx0XHQvKlxuIDc2NTpcdFx0XHQgKiBSZW1lbWJlciBhIHNoYWRvdyBlbnRyeSBmb3IgcmVjbGFpbWVkIGZpbGUgY2FjaGUgaW5cbiA3NjY6XHRcdFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXG4gNzY3Olx0XHRcdCAqXG4gNzY4Olx0XHRcdCAqIEJ1dCBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcbiA3Njk6XHRcdFx0ICogYWxyZWFkeSBleGl0aW5nLiAgVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb24sXG4gNzcwOlx0XHRcdCAqIGlub2RlIHJlY2xhaW0gbmVlZHMgdG8gZW1wdHkgb3V0IHRoZSByYWRpeCB0cmVlIG9yXG4gNzcxOlx0XHRcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbiYjMzk7dCBwbGFudCBzaGFkb3dzIGJlaGluZCBpdHNcbiA3NzI6XHRcdFx0ICogYmFjay5cbiA3NzM6XHRcdFx0ICpcbiA3NzQ6XHRcdFx0ICogV2UgYWxzbyBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBmb3IgREFYIG1hcHBpbmdzIGJlY2F1c2UgdGhlXG4gNzc1Olx0XHRcdCAqIG9ubHkgcGFnZSBjYWNoZSBmb2xpb3MgZm91bmQgaW4gdGhlc2UgYXJlIHplcm8gcGFnZXNcbiA3NzY6XHRcdFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbiYjMzk7dCB3YW50IHRvIG1peCBEQVhcbiA3Nzc6XHRcdFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXG4gNzc4Olx0XHRcdCAqIHNhbWUgYWRkcmVzc19zcGFjZS5cbiA3Nzk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fbWVtY2cxX3N3YXBvdXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19tZW1jZzFfc3dhcG91dGAuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLCBwcm9iYWJseSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSXMgaXQgYSBrZXJuZWwtaW50ZXJuYWwgZnVuY3Rpb24/IElzIGl0IGV4cG9zZWQgdmlhIGEgaGVhZGVyIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgZXNzZW50aWFsLiBPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hhdCBpdCBpcyBhY3R1YWxseSBkb2luZy4gSG93IGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGEgY29udHJvbCBncm91cD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc3dhcC1vdXQgYmVoYXZpb3Igd2l0aGluIGEgbWVtY2c/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NjpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MzM9dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTUxLVx0ICogRXhjbHVkZSBzd2FwY2FjaGU6IG9yaWdpbmFsbHkgdG8gYXZvaWQgYSBjb3JydXB0IGRlZmVycmVkIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jOjQ1NTI6XHQgKiBxdWV1ZS4gTm93YWRheXMgdGhhdCBpcyBmdWxseSBwcmV2ZW50ZWQgYnkgX19tZW1jZzFfc3dhcG91dCgpO1xubW0vaHVnZV9tZW1vcnkuYy00NTUzLVx0ICogYnV0IGlmIHBhZ2UgcmVjbGFpbSBpcyBhbHJlYWR5IGhhbmRsaW5nIHRoZSBzYW1lIGZvbGlvLCBpdCBpc1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNDc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI1OC0vKipcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTk6ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjAtICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjY4LSAqL1xubW0vbWVtY29udHJvbC12MS5jOjI2OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbm1tL21lbWNvbnRyb2wtdjEuYy0yNzAte1xuLS1cbm1tL3N3YXBfc3RhdGUuYz0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMyNy1cdGlmIChzd2Fwb3V0KVxubW0vc3dhcF9zdGF0ZS5jOjMyODpcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xubW0vc3dhcF9zdGF0ZS5jLTMyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBTd2Fwb3V0IExvZ2ljKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN3YXBvdXQgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBtbS9tZW1jb250cm9sLXYxLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBmb2N1cyBvbiB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBzd2FwcGluZyBvdXQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGEgbWVtb3J5IGNncm91cCBsaWtlbHkgcmVzaWRlcyBpbiB0aGlzIG9sZGVyIHZlcnNpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIGxvb2sgZm9yIGhvdyB0aGV5IGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgdmVyc2lvbnMgSSB3b3JrZWQgd2l0aCwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZ290Y2hhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIHBhZ2UgcmVwbGFjZW1lbnQgbWVjaGFuaXNtcyBhbmQgdGhlIG92ZXJhbGwgc3dhcC1yZWxhdGVkIGNvZGUuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGluaXRpYXRlIHRoZSBzd2FwLW91dCBwcm9jZXNzIGZyb20gYSBwYXJ0aWN1bGFyIG1lbW9yeSBjb250cm9sIGdyb3VwLiBJIHdpbGwgcXVpY2tseSBzY2FuIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSB0eXBlcyAoYW5vbnltb3VzLCBmaWxlLWJhY2tlZCksIGFueSBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBpdCB1c2VzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcmVjbGFpbS4gTXkgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgcHJvY2VzcyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdCNpZmRlZiBDT05GSUdfU1dBUFxuIDI1ODpcdC8qKlxuIDI1OTpcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG4gMjYwOlx0ICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcbiAyNjE6XHQgKiBAY2k6IHRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyIGhvbGRpbmcgdGhlIHN3YXAgZW50cmllc1xuIDI2MjpcdCAqXG4gMjYzOlx0ICogVHJhbnNmZXIgdGhlIG1lbXN3IGNoYXJnZSBvZiBAZm9saW8gdG8gdGhlIHN3YXAgZW50cnkgc3RvcmVkIGluXG4gMjY0Olx0ICogZm9saW8tXHUwMDNlc3dhcC5cbiAyNjU6XHQgKlxuIDI2NjpcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cbiAyNjc6XHQgKiBiZSBmcmVlZCwgYW5kIGNhbGxlciBtdXN0IGRpc2FibGUgSVJRcyBhbmQgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2suXG4gMjY4Olx0ICovXG4gMjY5Olx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gMjcwOlx0e1xuIDI3MTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZztcbiAyNzI6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiAyNzM6XHRcdHVuc2lnbmVkIGludCBucl9lbnRyaWVzO1xuIDI3NDpcdFxuIDI3NTpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbiAyNzY6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gMjc3Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4gMjc4Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuIDI3OTpcdFxuIDI4MDpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiAyODE6XHRcdFx0cmV0dXJuO1xuIDI4MjpcdFxuIDI4MzpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXG4gMjg0Olx0XHRcdHJldHVybjtcbiAyODU6XHRcbiAyODY6XHRcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuIDI4NzpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xuIDI4ODpcdFx0aWYgKCFvYmpjZylcbiAyODk6XHRcdFx0cmV0dXJuO1xuIDI5MDpcdFxuIDI5MTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDI5MjpcdFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiAyOTM6XHRcdC8qXG4gMjk0Olx0XHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJiMzOTt0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3dhcCBDYWNoZSBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYF9fbWVtY2cxX3N3YXBvdXRgIGFuZCBJIHNlZSB0aGF0IGl0JiMzOTtzIG5vdyAqaW5zaWRlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHNwZWNpZmljYWxseSBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBUaGUga2V5IGlzIHRoYXQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGNsZWFycyB0aGUgc3dhcGNhY2hlIGZsYWcsIHdoaWNoIG1lYW5zIHRoZSBmb2xpbyBpcyBlZmZlY3RpdmVseSByZW1vdmVkIGZyb20gdGhlIHN3YXAgY2FjaGUuICBJIHVuZGVyc3RhbmQgbm93OyBwcmV2aW91c2x5LCBgX19tZW1jZzFfc3dhcG91dGAgd2FzIGNhbGxlZCAqYmVmb3JlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZHVyaW5nIHRoZSByZW1vdmFsIHByb2Nlc3MuIE5vdywgYnkgcGFzc2luZyBgc3dhcG91dCA9IHRydWVgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYF9fbWVtY2cxX3N3YXBvdXRgIGV4ZWN1dGVzIGludGVybmFsbHksIGJlZm9yZSB0aGUgZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGUuCgpOb3csIGlzIHRoaXMgYSB3b3J0aHdoaWxlIGFyZWEgdG8gdGFyZ2V0IHdpdGggZnV6emluZz8gRGVmaW5pdGVseS4gIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBjYWNoZSBhbmQgc3dhcG91dCBsb2dpYywgaW5jbHVkaW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gSXQgdG91Y2hlcyBkaXJlY3RseSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBtbWAsIHNvIEkmIzM5O20gcHV0dGluZyBhICYjMzQ7eWVzJiMzNDsgb24gdGhhdC4KCkkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19TV0FQYCwgb2J2aW91c2x5LiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgQ09ORklHX01FTUNHYCBvciBgQ09ORklHX01FTUNHX1YxYCBhcmUgcmVxdWlyZWQsIGdpdmVuIHRoZSBwcmVzZW5jZSBvZiBgX19tZW1jZzFfc3dhcG91dGAuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGNsYXJpZmljYXRpb24gYnkgbG9va2luZyBpbnRvIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGRlZmluZWQgYW5kIHJlbGF0ZWQgdG8gYF9fbWVtY2cxX3N3YXBvdXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NjpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBtZW1jb250cm9sLmgqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG1lbW9yeSBjb250cm9sIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvciB0cmFja2luZyBpcyBjYXVzaW5nIHRoZSBwcm9ibGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDE5NTAgdG8gMTk3MC4gVGhhdCBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgb3BlcmF0aW9ucywgcG90ZW50aWFsbHkgdGhlIHN0YXRzIGdhdGhlcmluZyBvciByZXNvdXJjZSBsaW1pdGluZyBhc3BlY3RzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIHJhbmdlIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgc28gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBhIGZsYXcgaW4gdGhlIGFjY291bnRpbmcgbG9naWMgdGhhdCBpcyB0cmlnZ2VyaW5nIHRoZSBwcm9ibGVtIEkmIzM5O20gc2VlaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk0NTpcdHtcbjE5NDY6XHRcdHJldHVybiBmYWxzZTtcbjE5NDc6XHR9XG4xOTQ4Olx0XG4xOTQ5Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZW50ZXJfdXNlcl9mYXVsdCh2b2lkKVxuMTk1MDpcdHtcbjE5NTE6XHR9XG4xOTUyOlx0XG4xOTUzOlx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4xOTU0Olx0e1xuMTk1NTpcdH1cbjE5NTY6XHRcbjE5NTc6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4xOTU4Olx0XG4xOTU5Olx0I2lmIGRlZmluZWQoQ09ORklHX01FTUNHX1YxKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcbjE5NjA6XHRcbjE5NjE6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XG4xOTYyOlx0dm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuMTk2MzpcdFxuMTk2NDpcdCNlbHNlXG4xOTY1Olx0XG4xOTY2Olx0c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbjE5Njc6XHRcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbjE5Njg6XHR7XG4xOTY5Olx0fVxuMTk3MDpcdFxuMTk3MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xOTcyOlx0e1xuMTk3MzpcdH1cbjE5NzQ6XHQjZW5kaWZcbjE5NzU6XHRcbjE5NzY6XHQjZW5kaWYgLyogX0xJTlVYX01FTUNPTlRST0xfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGNydWNpYWwgS2NvbmZpZyBzeW1ib2xzIHRoYXQgYXJlIGhpZ2hseSByZWxldmFudCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGhlcmUuIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGNoZWNrIGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIGFuIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbnZlc3RpZ2F0aW9uIGludG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBwb3RlbnRpYWxseSBsZWdhY3kgc3RhdHVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHYxIGlzIGVuYWJsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV3ZXIgdjIgaW1wbGVtZW50YXRpb24gaWYgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBzY2VuYXJpby4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfU1dBUGAuIFN3YXAgYWx3YXlzIGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY29uc3RyYWludHMsIGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgc3dhcCBjYW4gYmUgdHJpY2t5LiBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBvZiBgQ09ORklHX1NXQVBgIGlzIGNyaXRpY2FsIHRvIGtub3dpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgcmVzb3VyY2UgbGltaXRzIGVuZm9yY2VkIGJ5IGFueSBtZW1vcnkgY29udHJvbCBncm91cHMgdGhhdCBhcmUgZW5hYmxlZC4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gYXJlIHdvcmtpbmcgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHX1YxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHX1YxIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgTUVNQ0dfVjFgIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGxpa2VseSB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2gsIGlzIHRvIHVzZSBgZ3JlcGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLCBhcyB0aG9zZSBhcmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gZmluZCBtZW1vcnkgY29udHJvbCBncm91cCBvcHRpb25zLiBJIGZpZ3VyZSBlaXRoZXIgaXQmIzM5O3MgZGlyZWN0bHkgZGVmaW5lZCB0aGVyZSwgb3IgaXQmIzM5O3MgaW5jbHVkZWQgd2l0aGluIGFub3RoZXIgY29uZmlnIGZpbGUgdGhhdCAqaXMqIGRlZmluZWQgdGhlcmUuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIHRhcmdldGVkIHNlYXJjaDsgaG9wZWZ1bGx5LCBpdCB5aWVsZHMgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCByaWdodCBhd2F5LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgZGVlcGVyIGRpdmUsIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgYXJvdW5kIHRoaXMgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA3LVxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGxpbmVzIGZyb20gYGluaXQvS2NvbmZpZ2AgeW91IG1lbnRpb25lZDoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIFNlY3Rpb24gb24gUmVzb3VyY2UgQ29udHJvbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDEwODAgdGhyb3VnaCAxMTIwIG9mIGBpbml0L0tjb25maWdgLiBSaWdodCwgdGhpcyBpcyB3aGVyZSB0aGV5JiMzOTtyZSBkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gcmVzb3VyY2UgY29udHJvbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHNlZWluZyB0aGUgY29uZGl0aW9uYWwgbG9naWMgZm9yIGBDT05GSUdfUkVTT1VSQ0VfQ09OVFJPTGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgaWRlYSBpcyBlbmFibGluZyB0aGUgYWJpbGl0eSB0byBjb250cm9sIHJlc291cmNlcywgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBzZWN0aW9uIGxpa2VseSBwZXJ0YWlucyB0byBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIENQVSwgbWVtb3J5LCBvciBJL08gYWNjZXNzIGluIGEgbW9yZSBncmFudWxhciB3YXkuCgpUaGV5JiMzOTtyZSBjaGVja2luZyBhIGZldyB0aGluZ3MgZmlyc3QuIGBERUZBVUxUIHlgIGlzIHNldCwgd2hpY2ggaW1wbGllcyB0aGF0IGl0JiMzOTtzIGFjdGl2ZSBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyBwcm9iYWJseSBiZWVuIHRlc3RlZC4gSXQgc2VlbXMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19DR1JPVVBTYC4gQWgsIHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBSZXNvdXJjZSBjb250cm9sIGlzIGJ1aWx0IG9uIGNncm91cHMuIE5vdywgSSBzZWUgdGhlIGBzZWxlY3RgIHN0YXRlbWVudHMsIHdoaWNoIGFyZSBjcnVjaWFsLiBgc2VsZWN0IFJFU09VUkNFX0NPTlRST0xfQ1BVYCBhbmQgYHNlbGVjdCBSRVNPVVJDRV9DT05UUk9MX01FTU9SWWAgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgaXMgc2V0IHVwIHRoaXMgd2F5LCB0ZWxscyBtZSB0aGF0IHRoZXJlIGlzIGFuIGV4cGVjdGF0aW9uIHRoYXQgaWYgcmVzb3VyY2UgY29udHJvbCBpcyBlbmFibGVkLCBib3RoIENQVSBhbmQgbWVtb3J5IGNvbnRyb2wgd2lsbCBiZSBuZWVkZWQuIEhvd2V2ZXIsIHRoZSBleGFjdCBtZWNoYW5pc21zIGZvciBtYW5hZ2luZyB0aG9zZSByZXNvdXJjZXMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlLCB2aWEgdGhlIHNlbGVjdGVkIG9wdGlvbnMuIFRoaXMgcmVpbmZvcmNlcyB0aGUgbW9kdWxhcml0eSBvZiB0aGUga2VybmVsIGRlc2lnbjsgcmVzb3VyY2UgY29udHJvbCBpcyBhIGhpZ2gtbGV2ZWwgZW5hYmxlci4KClRoZXkmIzM5O3ZlIGV2ZW4gaGFuZGxlZCB0aGUgYGhlbHBgIHNlY3Rpb24gY2xlYXJseSBzdGF0aW5nIHRoZSBpbnRlbnQgb2YgdGhlIGNvbnRyb2wuIEl0IHN0YXRlcyB0aGF0IHRoZSBvcHRpb25zIGNvbmZpZ3VyZSByZXNvdXJjZSBhbGxvY2F0aW9uIHRvIGFsbG93IGZvciBtb3JlIGdyYW51bGFyIGNvbnRyb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA4MTpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MjpcdFxuMTA4MzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHXG4xMDg2Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg3Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg4Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA5MDpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkxOlx0XHRoZWxwXG4xMDkyOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNjpcdFx0ZGVmYXVsdCB5XG4xMTA3Olx0XG4xMTA4Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA5Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMTA6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTE6XHRcdGRlZmF1bHQgblxuMTExMjpcdFx0aGVscFxuMTExMzpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTQ6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMTU6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTE2Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExNzpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTg6XHRcbjExMTk6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gU3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIHRoZSBiYXNpY3MuIEJ1dCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgcmVhbGx5IGRvdWJsZS1jaGVjayB0aGUgc3dhcCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdvIGludG8gS2NvbmZpZyBhbmQgZXhwbGljaXRseSBsb29rIGZvciBgQ09ORklHX1NXQVBgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byBob3cgc3dhcHBpbmcgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIHNldHRpbmcuIEFsd2F5cyBpbXBvcnRhbnQgdG8gYmUgbWV0aWN1bG91cyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGtlcm5lbCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVAkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFN3YXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGl0IHRvdWNoZXMgYENPTkZJR19TV0FQYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19NRU1DR2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gc2VlIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBkaWZmIG9ubHkgYWZmZWN0cyBhIGhhbmRmdWwgb2YgZmlsZXM6IGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gSW4gYG1tL3N3YXBfc3RhdGUuY2AsIEkgc2VlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBiZWluZyBtb2RpZmllZC4gT3ZlciBpbiBgbW0vdm1zY2FuLmNgLCB0aGVyZSYjMzk7cyBgX19yZW1vdmVfbWFwcGluZ2AuIEFuZCwgbG9va2luZyBhdCB0aGUgY2FsbCBwYXRoLCBgX19tZW1jZzFfc3dhcG91dGAgaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4KClRoZSBrZXkgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHViaXF1aXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXNlIGNvbW1vbiByb3V0aW5lcywgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gc3dhcCBjYWNoZSBvcGVyYXRpb25zPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93LiAgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBjbGVhcmx5IHN3YXAtY2FjaGUgc3BlY2lmaWM7IG5vIHN1cnByaXNlIHRoZXJlLiBCdXQgYF9fcmVtb3ZlX21hcHBpbmdgIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHVzZWQgaW4gcGFnZSByZWNsYWltLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHZtc2NhbiBhbmQgaXMgYWxzbyBjYWxsZWQgdGhyb3VnaCBgcmVtb3ZlX21hcHBpbmdgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIGJvdGggYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTExMjU9c3RhdGljIGludCBtZV9zd2FwY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXG5tbS9tZW1vcnktZmFpbHVyZS5jOjExMzA6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXG4tLVxubW0vbWVtb3J5LmM9NDg0ND12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MDc2LVx0XHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXG5tbS9tZW1vcnkuYzo1MDc3Olx0XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL21lbW9yeS5jLTUwNzgtXHRcdGdvdG8gb3V0X25vbWFwO1xuLS1cbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xOTQxLVx0XHQvKlxubW0vc2htZW0uYzoxOTQyOlx0XHQgKiBUaGUgc3dhcF9jYWNoZV9kZWxfZm9saW8oKSBiZWxvdyBjb3VsZCBiZSBsZWZ0IGZvclxubW0vc2htZW0uYy0xOTQzLVx0XHQgKiBzaHJpbmtfZm9saW9fbGlzdCgpJiMzOTtzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XG4tLVxubW0vc2htZW0uYy0xOTQ3LVx0XHQgKi9cbm1tL3NobWVtLmM6MTk0ODpcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc2htZW0uYy0xOTQ5LVx0XHRnb3RvIHJlZGlydHk7XG4tLVxubW0vc2htZW0uYz0yMzUxPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTIzNjgtXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XG5tbS9zaG1lbS5jOjIzNjk6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zaG1lbS5jLTIzNzAtXHQvKlxuLS1cbm1tL3NobWVtLmM9MjQ1Nj1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjU5OC1cdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcbm1tL3NobWVtLmM6MjU5OTpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3NobWVtLmMtMjYwMC1cdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLS1cbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMTQ6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL3N3YXAuaC0zMTUtc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjAtXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIyLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcC5oLTQ1MC1cbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwLmgtNDUyLXtcbi0tXG5tbS9zd2FwLmgtNDU0LVxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTQ1Ni1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzAzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwX3N0YXRlLmMtMzIwLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMzMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMzQ6ICogc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zMzUtICogQGZvbGlvOiBUaGUgZm9saW8uXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqXG5tbS9zd2FwX3N0YXRlLmM6MzM3OiAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0Mi0gKi9cbm1tL3N3YXBfc3RhdGUuYzozNDM6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcF9zdGF0ZS5jLTM0NC17XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9zd2FwX3N0YXRlLmM6MzQ5Olx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG5tbS9zd2FwX3N0YXRlLmMtMzUwLVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xOTg9c3RhdGljIGludCBfX3RyeV90b19yZWNsYWltX3N3YXAoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMjUxLVxubW0vc3dhcGZpbGUuYzoyNTI6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTI1My1cdGZvbGlvX3NldF9kaXJ0eShmb2xpbyk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNjE4LVx0XHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcbm1tL3N3YXBmaWxlLmM6MTYxOTpcdFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxubW0vc3dhcGZpbGUuYy0xNjIwLVx0XHQgKi9cbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDI9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3ODAtXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xubW0vc3dhcGZpbGUuYzoxNzgxOlx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTE3ODItXHRcdGdvdG8gZmFpbGVkO1xuLS1cbm1tL3N3YXBmaWxlLmM9MjExND1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjEyMC1cbm1tL3N3YXBmaWxlLmM6MjEyMTpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMjEyMi1cdGZvbGlvX3NldF9kaXJ0eShmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9NzAyPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy03NTctXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbm1tL3Ztc2Nhbi5jOjc1ODpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG5tbS92bXNjYW4uYy03NTktXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbi0tXG5tbS96c3dhcC5jPTk3ND1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtMTA0NC1cdGlmIChyZXQpIHtcbm1tL3pzd2FwLmM6MTA0NTpcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0venN3YXAuYy0xMDQ2LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3MAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLiBJIHNlZSB0aGF0IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyB0aGUgcHJpbWFyeSBDIGZ1bmN0aW9uIGltcGFjdGVkLCB3aXRoIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBfX3JlbW92ZV9tYXBwaW5nYCBhbHNvIG1vZGlmaWVkLiBJbnRlcmVzdGluZy4gVGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBjYWxsIGlzIGJlaW5nIGludGVncmF0ZWQgZGlyZWN0bHkgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgcG9pbnQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIHBhdGhzLCBzbyB0aGlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGNvdmVyZWQuIFllcywgd2UgaGF2ZSBDT05GSUdfU1dBUCwgd2hpY2ggaXMgbmVjZXNzYXJ5LCBhbmQgYWxzbyBDT05GSUdfTUVNQ0cgYW5kIENPTkZJR19NRU1DR19WMSwgd2hpY2ggYXJlIGV4cGVjdGVkIGZvciB0aGUgbWVtY2cgaW50ZXJhY3Rpb24gdmlhIGBfX21lbWNnMV9zd2Fwb3V0YC4gR29vZC4gTGV0IG1lIHRyaXBsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgc3ltYm9scyBhcmUgY2xlYW46ICYjMzQ7U1dBUCwmIzM0OyAmIzM0O01FTUNHLCYjMzQ7IGFuZCAmIzM0O01FTUNHX1YxLiYjMzQ7IFllcCwgdGhvc2UgYXJlIGNvcnJlY3QuCgpGaW5hbGx5LCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyB0byBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIGltcG9ydGFudCBwaWVjZXMgaW4gcGxhY2UgZm9yIHRoZSBmdXp6ZXIuIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLCBnaXZlbiB0aGUgY29yZSBtZW1vcnkgY2hhbmdlcy4gVGhlIHJlYXNvbmluZyBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBjaGFuZ2VzOyBpbnRlZ3JhdGluZyBgX19tZW1jZzFfc3dhcG91dGAgaW50byB0aGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uIHRvdWNoZXMgcmVjbGFpbSBhbmQgc3dhcCBwYXRocy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBhcHByb3ByaWF0ZWx5IGxpc3RlZCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQuCgpBbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIExldCYjMzk7cyBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXG5cblRoaXMgY2hhbmdlIGludm9sdmVzIHB1cmVseSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWM6XG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxuMi4gVGhlIG5ldyBgc3dhcG91dGAgYm9vbGVhbiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBhIGNvbnN0YW50IChgdHJ1ZWAgaW4gYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgZmFsc2VgIGluIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2ApLCBzbyBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBObyBkYXRhIGlzIGNvcGllZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMwOTJiYmEwMzI4NzcwYTE4NjRhZjcyNWQ5YTdhZDk3MWU3YjIxNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE3OjEyOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMxOSw3ICYjNDM7MzE5LDggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKLQkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTsKJiM0MzsJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywKJiM0MzsJCQkgICAgYm9vbCBzd2Fwb3V0KTsKIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCQlzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpOwogCkBAIC00NTIsNyAmIzQzOzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywKJiM0MzsJCWJvb2wgc3dhcG91dCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDMwNTg3N2UxZjRkN2IuLjM4OTE2ZWE5NmFjNTUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTMwNiwyMSAmIzQzOzMwNiwyOCBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiBAZm9saW86IFRoZSBmb2xpby4KICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uCiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLgomIzQzOyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uCiAgKgogICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLgogICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC4KICAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUKICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCiYjNDM7ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRcwomIzQzOyAqIHNob3VsZCBiZSBkaXNhYmxlZC4KICAqLwogdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdykKJiM0MzsJCQkgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KQogewogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKLQlfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7CiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTsKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTsKJiM0MzsKJiM0MzsJaWYgKHN3YXBvdXQpCiYjNDM7CQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7CiYjNDM7CiYjNDM7CV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIH0KIAogLyoqCkBAIC0zMzksNyAmIzQzOzM0Niw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTsKLQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpOwomIzQzOwlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAogCWZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI0NWY2OGM3NWIyODkuLjI5YmNlZDQzYjBjZTYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC03NTUsOCAmIzQzOzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSkKIAkJCXNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7Ci0JCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKLQkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7CiYjNDM7CQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTsKIAkJc3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpOwogCX0gZWxzZSB7CiAJCXZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBzY29wZS4gVGhpcyBsb29rcyBsaWtlIGEgc2VjdXJpdHkgYW5hbHlzaXMvdHJpYWdlIG9mIGEgTGludXgga2VybmVsIHBhdGNoLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYXBwbGljYWJpbGl0eSBvZiBLQVNBTiB2ZXJzdXMgS01TQU4uIEdvb2QsIHRoaXMgaXMgYSBzYWZlLCBkZWZlbnNpdmUgY29kZSByZXZpZXcgYW5kIHNhbml0aXplciBhc3Nlc3NtZW50LCBub3RoaW5nIHRvbyByaXNreS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZGlmZiB0YXJnZXRzIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBtbS92bXNjYW4uY2Agd2l0aGluIHRoZSBgX19yZW1vdmVfbWFwcGluZygpYCBmdW5jdGlvbi4gSXQgYXBwZWFycyBhIGZ1bmN0aW9uIGNhbGwsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IGEgbmV3IGJvb2xlYW4gYHN3YXBvdXRgLiBJbiBgbW0vc3dhcF9zdGF0ZS5jYCwgSSBzZWUgaG93IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBub3cgcmVvcmRlcmVkLCB3aXRoIGBfX21lbWNnMV9zd2Fwb3V0YCBwb3RlbnRpYWxseSBiZWluZyBjb25kaXRpb25hbGx5IGNhbGxlZC4gVGhlIGxvZ2ljIGlzIHRoYXQgdGhlcmUgaXMgYSBndWFyZCBhcm91bmQgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgIHVzaW5nIHRoZSBuZXcgYm9vbGVhbi4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoaXMgcmVvcmRlcmluZyBhbmQgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgd2h5IGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgdGhpcyB3YXkuIFRpbWUgdG8gdXNlIGBncmVwcGVyYCBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3Ztc2Nhbi5jYCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEhvcGVmdWxseSwgdGhpcyBjb250ZXh0IHdpbGwgaGVscCBtZSBkZWNpZGUgaWYgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMganVzdGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjctXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjg6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIEZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLXYxLmNgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBfX21lbWNnMV9zd2Fwb3V0YC4gTGV0JiMzOTtzIGdyYWIgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGhlYWQgb3ZlciB0byBhcm91bmQgbGluZSAyNTguIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIG1lbW9yeSBjb250cm9sLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBtZW1vcnkgaXMgc3dhcHBlZCBvdXQgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcyAoY2dyb3VwcykuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlRyaWdnZXIgQ29uZGl0aW9uczoqKiBXaGF0ICpjYXVzZXMqIHRoZSBzeXN0ZW0gdG8gY2FsbCB0aGlzIGZ1bmN0aW9uPyBJcyBpdCBhIGxvdy1tZW1vcnkgc2l0dWF0aW9uIHdpdGhpbiB0aGUgY2dyb3VwLCBhIHByb2FjdGl2ZSBzd2Fwb3V0IHN0cmF0ZWd5LCBvciBzb21ldGhpbmcgZWxzZT8KKiAgICoqVGFyZ2V0IE1lbW9yeToqKiBXaGljaCBtZW1vcnkgcmVnaW9ucyBvciBwYWdlcyBkb2VzIHRoaXMgZnVuY3Rpb24gYXR0ZW1wdCB0byBzd2FwIG91dD8gSXMgaXQgcHJpbWFyaWx5IGFub255bW91cyBwYWdlcywgZmlsZS1iYWNrZWQgcGFnZXMsIG9yIGEgbWl4PyBEb2VzIGl0IGFjY291bnQgZm9yIGRpZmZlcmVudCBtZW1vcnkgem9uZXMgb3IgTlVNQSBub2Rlcz8KKiAgICoqU3dhcC1PdXQgTWVjaGFuaXNtOioqIFdoYXQmIzM5O3MgdGhlICphY3R1YWwqIHN3YXAtb3V0IHByb2NlZHVyZT8gRG9lcyBpdCBpbnZvbHZlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgcGFnZSB0YWJsZXMsIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgY2FjaGUsIG9yIGNhbGxzIHRvIHNwZWNpZmljIHN3YXAgb3BlcmF0aW9ucz8KKiAgICoqQ2dyb3VwIEludGVncmF0aW9uOioqIEhvdyBleGFjdGx5IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIGNncm91cCYjMzk7cyBtZW1vcnkgYWNjb3VudGluZz8gRG9lcyBpdCB1cGRhdGUgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3MsIGFuZCBpcyB0aGVyZSBhbnkgcHJvdGVjdGlvbiBvZiB0aGUgY2dyb3VwJiMzOTtzIG1lbW9yeSBmb290cHJpbnQ/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgd2l0aGluIHRoZSBmdW5jdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGluZ3MgZ28gd3JvbmcgZHVyaW5nIHRoZSBzd2FwIHByb2Nlc3M/CiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgZnVuY3Rpb25zOioqIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBzeXN0ZW0gY2FsbCBvciBpbnRlcmFjdCB3aXRoIGl0LgoKSSYjMzk7bGwgYmUgcmVhZGluZyBmb3IgdW5kZXJzdGFuZGluZywgc28gdGhlc2UgYXJlIGp1c3QgbXkgaW5pdGlhbCBnb2Fscy4gQXMgYSBzZWFzb25lZCBleHBlcnQsIEkmIzM5O20gZXhwZWN0aW5nIGEgY2xlYW4sIG9yZ2FuaXplZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSB0cnlpbmcgdG8gZ2F1Z2UgaWYgYW55IG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkLCBhbmQgaWYgbm90LCB3aGVyZSBJIG1pZ2h0IGxvb2sgdG8gb3B0aW1pemUgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0XG4gMjUxOlx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMjUyOlx0XHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMjUzOlx0XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiAyNTQ6XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0I2lmZGVmIENPTkZJR19TV0FQXG4gMjU4Olx0LyoqXG4gMjU5Olx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbiAyNjA6XHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxuIDI2MTpcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXG4gMjYyOlx0ICpcbiAyNjM6XHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cbiAyNjQ6XHQgKiBmb2xpby1cdTAwM2Vzd2FwLlxuIDI2NTpcdCAqXG4gMjY2Olx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xuIDI2NzpcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cbiAyNjg6XHQgKi9cbiAyNjk6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuIDI3MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDI3MzpcdFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gMjc0Olx0XG4gMjc1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIDI3NjpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiAyNzc6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiAyNzg6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gMjc5Olx0XG4gMjgwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDI4MTpcdFx0XHRyZXR1cm47XG4gMjgyOlx0XG4gMjgzOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcbiAyODQ6XHRcdFx0cmV0dXJuO1xuIDI4NTpcdFxuIDI4NjpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG4gMjg3Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG4gMjg4Olx0XHRpZiAoIW9iamNnKVxuIDI4OTpcdFx0XHRyZXR1cm47XG4gMjkwOlx0XG4gMjkxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMjkyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIDI5MzpcdFx0LypcbiAyOTQ6XHRcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3RcbiAyOTU6XHRcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcbiAyOTY6XHRcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5JiM0Mztzd2FwIGNoYXJnZS5cbiAyOTc6XHRcdCAqL1xuIDI5ODpcdFx0bnJfZW50cmllcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiAyOTk6XHRcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ2FjaGUgRGVsZXRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWxldGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgc3dhcCBjYWNoZSBhIGJpdCBiZXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMwMCB3aXRoaW4gYG1tL3N3YXBfc3RhdGUuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnNpZGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byByZW1vdmluZyBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZSwgYW5kIGEgZGV0YWlsZWQgbG9vayBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgZGVsZXRpb24gd29ya2Zsb3cuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgb3Igb3B0aW1pemF0aW9ucyB0aGV5IG1pZ2h0IGVtcGxveS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTc1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdHJvdWJsZXNob290aW5nIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHdlIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYCBhcm91bmQgbGluZSA3NTUuIFRoYXQgYXJlYSwgYXMgSSByZWNhbGwsIGxpa2VseSBkZWFscyB3aXRoIHRoZSBwYWdlIHJlY2xhaW0gcHJvY2VzcywgcG90ZW50aWFsbHkgd2hlcmUgdGhlIHpvbmUgcmVjbGFpbWluZyBsb2dpYyBjb21lcyBpbnRvIHBsYXkuIEl0JiMzOTtzIGEga2V5IGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwmIzM5O3MgZGVjaWRpbmcgd2hhdCBwYWdlcyB0byBldmljdCwgaG93IGl0IHByaW9yaXRpemVzIHRob3NlIHBhZ2VzLCBhbmQgd2hhdCBmYWN0b3JzIGFyZSBpbmZsdWVuY2luZyB0aGF0IGRlY2lzaW9uLiBHaXZlbiB0aGUgbnVhbmNlcyBvZiBtZW1vcnkgcmVjbGFpbSwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgc3lzdGVtLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQwOlx0XHQgKlxuIDc0MTpcdFx0ICogTm90ZSB0aGF0IGlmIHRoZSBkaXJ0eSBmbGFnIGlzIGFsd2F5cyBzZXQgdmlhIGZvbGlvX21hcmtfZGlydHksXG4gNzQyOlx0XHQgKiBhbmQgdGh1cyB1bmRlciB0aGUgaV9wYWdlcyBsb2NrLCB0aGVuIHRoaXMgb3JkZXJpbmcgaXMgbm90IHJlcXVpcmVkLlxuIDc0MzpcdFx0ICovXG4gNzQ0Olx0XHRyZWZjb3VudCA9IDEgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDc0NTpcdFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXG4gNzQ2Olx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzQ3Olx0XHQvKiBub3RlOiBhdG9taWNfY21weGNoZyBpbiBmb2xpb19yZWZfZnJlZXplIHByb3ZpZGVzIHRoZSBzbXBfcm1iICovXG4gNzQ4Olx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7XG4gNzQ5Olx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xuIDc1MDpcdFx0XHRnb3RvIGNhbm5vdF9mcmVlO1xuIDc1MTpcdFx0fVxuIDc1MjpcdFxuIDc1MzpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIDc1NDpcdFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiA3NTU6XHRcbiA3NTY6XHRcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiA3NTc6XHRcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIDc1ODpcdFx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiA3NTk6XHRcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIDc2MDpcdFx0fSBlbHNlIHtcbiA3NjE6XHRcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiA3NjI6XHRcbiA3NjM6XHRcdFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZnJlZV9mb2xpbztcbiA3NjQ6XHRcdFx0LypcbiA3NjU6XHRcdFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXG4gNzY2Olx0XHRcdCAqIG9yZGVyIHRvIGRldGVjdCByZWZhdWx0cywgdGh1cyB0aHJhc2hpbmcsIGxhdGVyIG9uLlxuIDc2NzpcdFx0XHQgKlxuIDc2ODpcdFx0XHQgKiBCdXQgZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXG4gNzY5Olx0XHRcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxuIDc3MDpcdFx0XHQgKiBpbm9kZSByZWNsYWltIG5lZWRzIHRvIGVtcHR5IG91dCB0aGUgcmFkaXggdHJlZSBvclxuIDc3MTpcdFx0XHQgKiB0aGUgbm9kZXMgYXJlIGxvc3QuICBEb24mIzM5O3QgcGxhbnQgc2hhZG93cyBiZWhpbmQgaXRzXG4gNzcyOlx0XHRcdCAqIGJhY2suXG4gNzczOlx0XHRcdCAqXG4gNzc0Olx0XHRcdCAqIFdlIGFsc28gZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxuIDc3NTpcdFx0XHQgKiBvbmx5IHBhZ2UgY2FjaGUgZm9saW9zIGZvdW5kIGluIHRoZXNlIGFyZSB6ZXJvIHBhZ2VzXG4gNzc2Olx0XHRcdCAqIGNvdmVyaW5nIGhvbGVzLCBhbmQgYmVjYXVzZSB3ZSBkb24mIzM5O3Qgd2FudCB0byBtaXggREFYXG4gNzc3Olx0XHRcdCAqIGV4Y2VwdGlvbmFsIGVudHJpZXMgYW5kIHNoYWRvdyBleGNlcHRpb25hbCBlbnRyaWVzIGluIHRoZVxuIDc3ODpcdFx0XHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXG4gNzc5Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcXVlc3Rpb246CgoqKkRlY29uc3RydWN0aW5nIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBDYWxsZXJzKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBzd2FwIGNhY2hlIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5LCB3aGVyZSBlcnJvcnMgb3IgdW51c3VhbCBzaXR1YXRpb25zIGNvdWxkIGFyaXNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgY29kZSBhcmNoYWVvbG9neSBhbmQgc2VlIHdoYXQgZnVuY3Rpb25zIHVzZSBpdCBhbmQgaW4gd2hhdCBjb250ZXh0LiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNhbGxlcnMgdG9vPyBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYmVnaW4gbXkgZXhwbG9yYXRpb24uIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIChmb2xpYWdlLCBzd2FwIGNhY2hlKSB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93LiBEZXBlbmRpbmcgb24gdGhlIGNvZGViYXNlLCBJIGNhbiBwcm9iYWJseSB1c2UgbXkgSURFJiMzOTtzICYjMzQ7ZmluZCB1c2FnZXMmIzM0OyBvciBhIHNpbWlsYXIgZmVhdHVyZSB0byBnZXQgYSBxdWljayBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBlYWNoIGNhbGxlciwgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgcGxhY2VzIHdoZXJlIHRoZSBjYWxsIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBndWFyZGVkIGJ5IGVycm9yIGNoZWNrcz8gVGhpcyBjYW4gcHJvdmlkZSBpbnNpZ2h0IGludG8gcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGluIHRoZSBzeXN0ZW0uCiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgaXMgdGhlIGFjY2VzcyB0byB0aGUgc3dhcCBjYWNoZSBzeW5jaHJvbml6ZWQgYXJvdW5kIHRoZSBjYWxsIHRvIGRlbGV0ZSBhIGZvbGlvPyBBcmUgdGhlcmUgbG9ja3Mgb3IgYXRvbWljIG9wZXJhdGlvbnMgaW52b2x2ZWQ/CiogICAqKkNvbnRleHQ6KiogV2hhdCBpcyB0aGUgaGlnaC1sZXZlbCBvcGVyYXRpb24gdGhlIGNvZGUgaXMgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2hlbiBpdCBkZWxldGVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZT8gSXMgaXQgcmVsYXRlZCB0byBwYWdlIHJlY2xhaW0sIHdyaXRlYmFjaywgb3Igc29tZXRoaW5nIGVsc2U/CiogICAqKkNvbmN1cnJlbmN5OioqIEFueSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgc3dhcCBjYWNoZT8KKiAgICoqUmFjZSBDb25kaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8KKiAgICoqRG91YmxlIEZyZWUgUG9zc2liaWxpdGllczoqKiBJcyBpdCBwb3NzaWJsZSBmb3IgYSBmb2xpbyB0byBiZSBkZWxldGVkIHR3aWNlPwoqICAgKipNZW1vcnkgTGVha3M6KiogQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgdGhlIGZvbGlvIGlzIGluY29ycmVjdGx5IHJlbGVhc2VkPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcHJvY2VzcywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiwgYW5kIEkgbXVzdCBub3QgYWxsb3cgYW55IGFzc3VtcHRpb25zIHRvIGNyZWVwIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIwLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5tbS9zd2FwLmg6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwLmg9NDUxPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXAuaC00NTQtXG5tbS9zd2FwLmg6NDU1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtNDU2LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zMDUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjMxOTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqXG5tbS9zd2FwX3N0YXRlLmM6MzM3OiAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTM0Mz12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9zd2FwX3N0YXRlLmM6MzQ5Olx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG5tbS9zd2FwX3N0YXRlLmMtMzUwLVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNjE4LVx0XHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcbm1tL3N3YXBmaWxlLmM6MTYxOTpcdFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxubW0vc3dhcGZpbGUuYy0xNjIwLVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYz03MDI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTc1Ny1cdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xubW0vdm1zY2FuLmM6NzU4Olx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTc1OS1cdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzgyCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uIG9mIFN3YXAgQ2FjaGUgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IG1vdmluZyB0aGUgY2FsbCB0byBgX19tZW1jZzFfc3dhcG91dGAgd2l0aGluIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCB3aGVuIGBzd2Fwb3V0YCBpcyB0cnVlLiBQcmV2aW91c2x5LCBpdCB3YXMgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gYF9fcmVtb3ZlX21hcHBpbmdgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGEgcmVhcnJhbmdlbWVudCBvZiB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwcm9jZXNzLCB3aXRoIHRoZSBpbXBvcnRhbnQgYml0IGJlaW5nIHRoYXQgYF9fbWVtY2cxX3N3YXBvdXRgIG5vdyBoYXBwZW5zICpiZWZvcmUqIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd2FycmFudCBhIEtNU0FOIHJ1bj8gTGV0JiMzOTtzIGFuYWx5emUuIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIGFyZSBkZWVwIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbHMuIFRoZXkmIzM5O3JlIHRvdWNoaW5nIHBhZ2Ugc3RhdGVzLCBjZ3JvdXAgYWNjb3VudGluZywgYW5kIHRoZSBzd2FwIGNhY2hlIHN0cnVjdHVyZXMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgdGhleSYjMzk7cmUgZG9pbmcgYW55dGhpbmcgdGhhdCB3b3VsZCB0cmlnZ2VyIEtNU0FOLiBUaGV5JiMzOTtyZSBub3QgYWxsb2NhdGluZyBuZXcgYnVmZmVycywgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlIGFyZSBubyBicmFuY2hlcyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoZSBwYXRjaCBpcywgYXQgaXRzIGNvcmUsIGEgcmVmYWN0b3JpbmcsIGNoYW5naW5nIHRoZSAqb3JkZXIqIG9mIG9wZXJhdGlvbnMsIG5vdCB0aGUgKm5hdHVyZSogb2YgdGhlIGRhdGEgYmVpbmcgbWFuaXB1bGF0ZWQuCgpUaGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgbmV3IHN0cnVjdHVyZXMsIHJlYWRpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSBzdHJhaWdodCByZWZhY3RvciB3aGVyZSB0aGUgdmFsdWVzIHBhc3NlZCB0byBmdW5jdGlvbnMgYXJlIGFscmVhZHkgd2VsbCBkZWZpbmVkLCBzbyB0aGVyZSBhcmUgbm8gdW5rbm93bnMgb24gd2hpY2ggdG8gdHJpZ2dlciBLTVNBTiwgYXQgYWxsLiBBbnkgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG1lY2hhbmlzbXMsIHN1Y2ggYXMgS0FTQU4gYW5kIExPQ0tERVAsIHNob3VsZCBjYXRjaCBhbnkgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIGlzc3Vlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0ICpjb3VsZCogYmUgaW50cm9kdWNlZCBkdWUgdG8gdGhlIHNoaWZ0IGluIG9yZGVyaW5nLiBJbiBvdGhlciB3b3JkcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBzdGFuZGFyZCBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFNvLCB0aGUgY29uY2x1c2lvbiBpczogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHBhdGggYnkgYWRkaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIgYHN3YXBvdXRgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGFuZCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKWAgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpYC5cblxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcbjEuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBUaGUgbmV3IGBzd2Fwb3V0YCBib29sZWFuIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGEgY29uc3RhbnQgKGB0cnVlYCBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIGBmYWxzZWAgaW4gYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCksIHNvIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgcmVsYXRlIHRvIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIG9yIG1lbWNnIHN0YXRlIGNvbnNpc3RlbmN5LCB3aGljaCBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIGludGVybmFsIFZNIGFzc2VydGlvbnMgKGBWTV9CVUdfT05fRk9MSU9gLCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCkuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHBhdGggYnkgYWRkaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIgYHN3YXBvdXRgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGFuZCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKWAgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpYC5cblxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcbjEuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBUaGUgbmV3IGBzd2Fwb3V0YCBib29sZWFuIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGEgY29uc3RhbnQgKGB0cnVlYCBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIGBmYWxzZWAgaW4gYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCksIHNvIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgcmVsYXRlIHRvIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIG9yIG1lbWNnIHN0YXRlIGNvbnNpc3RlbmN5LCB3aGljaCBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIGludGVybmFsIFZNIGFzc2VydGlvbnMgKGBWTV9CVUdfT05fRk9MSU9gLCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCkuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjowOC44NzYyODk2NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzMyMTg3NjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHBhdGggYnkgYWRkaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIgYHN3YXBvdXRgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGFuZCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKWAgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpYC5cXG5cXG5UaGlzIGNoYW5nZSBpbnZvbHZlcyBwdXJlbHkgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljOlxcbjEuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXFxuMi4gVGhlIG5ldyBgc3dhcG91dGAgYm9vbGVhbiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBhIGNvbnN0YW50IChgdHJ1ZWAgaW4gYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgZmFsc2VgIGluIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2ApLCBzbyBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuMy4gTm8gZGF0YSBpcyBjb3BpZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBldGMuKS5cXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgcmVsYXRlIHRvIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIG9yIG1lbWNnIHN0YXRlIGNvbnNpc3RlbmN5LCB3aGljaCBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIGludGVybmFsIFZNIGFzc2VydGlvbnMgKGBWTV9CVUdfT05fRk9MSU9gLCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCkuXFxuXFxuVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSBieSBtb3ZpbmcgdGhlIF9fbWVtY2cxX3N3YXBvdXQgaW52b2NhdGlvbiBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyB3aGVuIHN3YXBwaW5nIG91dC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgY2FjaGUgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9zd2FwX3N0YXRlLmMgYW5kIG1tL3Ztc2Nhbi5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjowOC44NzYyOTQ0NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg1NDc3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMDkyYmJhMDMyODc3MGExODY0YWY3MjVkOWE3YWQ5NzFlN2IyMTU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTI6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdFxcdCAgICBib29sIHN3YXBvdXQpO1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XFxuIFxcbkBAIC00NTIsNyArNDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdGJvb2wgc3dhcG91dClcXG4ge1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi4zODkxNmVhOTZhYzU1IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0zMDYsMjEgKzMwNiwyOCBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbisgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAgKlxcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuICAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAgKlxcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcXG4gICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xcbisgKiBzaG91bGQgYmUgZGlzYWJsZWQuXFxuICAqL1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuK1xcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFxuLVxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XFxuK1xcbitcXHRpZiAoc3dhcG91dClcXG4rXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbitcXG4rXFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzM5LDcgKzM0Niw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XFxuK1xcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFxuIFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4tXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbi1cXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG4rXFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MTAuNDY1NDk0MzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTQzOTUxNjIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDkyYmJhMDMyODc3MGExODY0YWY3MjVkOWE3YWQ5NzFlN2IyMTU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzoxMjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjM4OTE2ZWE5NmFjNTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiwyMSArMzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuKyAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4rXG4rXHRpZiAoc3dhcG91dClcbitcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuK1xuK1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyArMzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4rXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuK1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjEwLjQ2NTQ5NTYwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNTk1MTkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgaG93IEknZCBhcHByb2FjaCBpdCwgYXMgdGhvdWdoIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOlxuXG4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiAqd29ydGgqIGZ1enppbmcuIElzIGl0IHRvdWNoaW5nIGNvZGUgdGhhdCdzIGxpa2VseSB0byBiZSB2dWxuZXJhYmxlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJ2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNoYW5nZXMuXG5cbkknbSB6ZXJvaW5nIGluIG9uIHRoaXMgcGF0Y2gsIGxvb2tpbmcgYXQgdGhlIGdpdCBkaWZmLCBhbmQgaW1tZWRpYXRlbHkgc2NvcGluZyBvdXQgdGhlIGludm9sdmVkIGZpbGVzLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3Ztc2Nhbi5jYCwgYW5kIGBtbS9zd2FwLmhgLiBUaGF0IG1ha2VzIG1lIHRoaW5rIG1lbW9yeSBtYW5hZ2VtZW50LCBzd2FwcGluZywgYW5kIHZpcnR1YWwgbWVtb3J5LiBUaG9zZSBhcmUgKmFsd2F5cyogaW50ZXJlc3RpbmcgdGFyZ2V0cy5cblxuTm93LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgaXMgd2hlcmUgSSdsbCBwcm9iYWJseSBzdGFydCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIGhvdyB0aGUgZGF0YSBmbG93cyB0aHJvdWdoIHRoZW0sIGFuZCB3aGVyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgYXJlLiBUaGF0J3MgaG93IEkgY2FuIGNob29zZSB3aGF0IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBmb3IgZnV6emluZywgYW5kIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgdGhlIHJpZ2h0IGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjE0LjgyNTAxNzU0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNTk1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NTQtXFxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC00NTYtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jLTMyMC1cXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQzPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5tbS9zd2FwX3N0YXRlLmM6MzQ5OlxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYxOC1cXHRcXHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcXG5tbS9zd2FwZmlsZS5jOjE2MTk6XFx0XFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxcbm1tL3N3YXBmaWxlLmMtMTYyMC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MTcuMDc4NjE3NzY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAyNjI5MzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU3dhcCBDYWNoaW5nIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gc3dhcCBjYWNoaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyBhcmUgaGFuZGxlZCB3aGVuIHBhZ2VzIGFyZSBzd2FwcGVkIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCAobGlrZWx5IGhhbmRsaW5nIHRoZSBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24gb2YgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlKSBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgICh3aGljaCwgZnJvbSBpdHMgbmFtaW5nLCBpcyBwcm9iYWJseSB0aGUgY29yZSBzd2FwLW91dCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgd2l0aCBNZW1DRy1zcGVjaWZpYyBhc3BlY3RzKS4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSBjcml0aWNhbCBwaWVjZXMgb2YgdGhlIHB1enpsZSB3aGVuIGRlYWxpbmcgd2l0aCBwYWdlIHJlY2xhaW1pbmcuXG5cbkknbSBzdGFydGluZyBteSBpbnZlc3RpZ2F0aW9uIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHRvIGxvb2sgZm9yIHRoZSBjb3JlIHN3YXAgb3BlcmF0aW9ucyBhbmQgdGhlIFZNIHNjYW5uaW5nIGxvZ2ljLCB3aGVyZSB0aGUgZXZpY3Rpb24gYW5kIHN3YXAtb3V0IGRlY2lzaW9ucyBhcmUgbWFkZS4gSSBuZWVkIHRvIHNlZSBob3cgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGNvbnRleHQgaXMuIFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGl0IGludGVyYWN0aW5nIHdpdGg/XG5cbkxpa2V3aXNlLCBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBvZiBgX19tZW1jZzFfc3dhcG91dGAuIFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQgYXJlIGl0cyBzaWRlIGVmZmVjdHM/IElzIGl0IGRpcmVjdGx5IGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG9yIGFyZSB0aGVyZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zPyBXaGF0J3MgdGhlIG92ZXJhbGwgZmxvdyBvZiBwYWdlIGV2aWN0aW9uIGluIHJlbGF0aW9uIHRvIHN3YXAgY2FjaGUgaW52YWxpZGF0aW9uPyBVbHRpbWF0ZWx5IEknbSB0cnlpbmcgdG8gcGlucG9pbnQgd2hlcmUgdGhlIHN3YXAgY2FjaGUgaXMgYmVpbmcgdXBkYXRlZCBhbmQgY2xlYXJlZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGlmZWN5Y2xlIG9mIGEgc3dhcHBlZCBwYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MjAuMTA0OTEzNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwX3N0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcdFxcdGNpX29mZiA9IGNpX3N0YXJ0O1xcbiAyOTY6XFx0XFx0XFx0ZG8ge1xcbiAyOTc6XFx0XFx0XFx0XFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xcbiAyOTk6XFx0XFx0XFx0fSB3aGlsZSAoKytjaV9vZmYgXFx1MDAzYyBjaV9lbmQpO1xcbiAzMDA6XFx0XFx0fVxcbiAzMDE6XFx0fVxcbiAzMDI6XFx0XFxuIDMwMzpcXHQvKipcXG4gMzA0OlxcdCAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG4gMzA1OlxcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuIDMwNjpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzA3OlxcdCAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXFxuIDMwODpcXHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDk6XFx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cXG4gMzEwOlxcdCAqXFxuIDMxMTpcXHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuIDMxMjpcXHQgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cXG4gMzEzOlxcdCAqXFxuIDMxNDpcXHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcXG4gMzE1OlxcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuIDMxNjpcXHQgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzXFxuIDMxNzpcXHQgKiBzaG91bGQgYmUgZGlzYWJsZWQuXFxuIDMxODpcXHQgKi9cXG4gMzE5OlxcdHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAzMjA6XFx0XFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XFxuIDMyNTpcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0aWYgKHN3YXBvdXQpXFxuIDMyODpcXHRcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gMzMxOlxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0LyoqXFxuIDMzNDpcXHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMzU6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMzNjpcXHQgKlxcbiAzMzc6XFx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxuIDMzODpcXHQgKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuIDMzOTpcXHQgKiBlcXVhbCB0byB6ZXJvLCBvciBpdCBtYXkgY2F1c2UgZGF0YSBsb3NzLlxcbiAzNDA6XFx0ICpcXG4gMzQxOlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzQyOlxcdCAqL1xcbiAzNDM6XFx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4gMzQ2OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuIDM0OTpcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcXG4gMzUwOlxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiAzNTM6XFx0fVxcbiAzNTQ6XFx0XFxuIDM1NTpcXHQvKipcXG4gMzU2OlxcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNTc6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzU4OlxcdCAqIEBvbGQ6IFRoZSBvbGQgZm9saW8gdG8gYmUgcmVwbGFjZWQuXFxuIDM1OTpcXHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxcbiAzNjA6XFx0ICpcXG4gMzYxOlxcdCAqIFJlcGxhY2UgYW4gZXhpc3RpbmcgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgd2l0aCBhIG5ldyBmb2xpby4gVGhlXFxuIDM2MjpcXHQgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5ldyBmb2xpbydzIGZsYWcgYW5kIHN3YXBcXG4gMzYzOlxcdCAqIGVudHJpZXMuIFJlcGxhY2VtZW50IHdpbGwgdGFrZSB0aGUgbmV3IGZvbGlvJ3Mgc3dhcCBlbnRyeSB2YWx1ZSBhc1xcbiAzNjQ6XFx0ICogdGhlIHN0YXJ0aW5nIG9mZnNldCB0byBvdmVycmlkZSBhbGwgc2xvdHMgY292ZXJlZCBieSB0aGUgbmV3IGZvbGlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyMC4xMDUwMDA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU0OTM2MzMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19yZW1vdmVfbWFwcGluZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyIGluIHRoZSBrZXJuZWwgaGFuZGxlcyB1bm1hcHBpbmcuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGxvb2sgYXQgYF9fcmVtb3ZlX21hcHBpbmdgIGluIGBtbS92bXNjYW4uY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcywgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcGFnZSByZWNsYW1hdGlvbiBhbmQgcG90ZW50aWFsbHksIHRoZSBjb21wbGV4aXRpZXMgb2YgY2xlYW5pbmcgdXAgbWFwcGluZ3MgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhY2NvdW50aW5nIGZvciByZWZlcmVuY2UgY291bnRzLCBhbmQgcG9zc2libHkgZGVhbGluZyB3aXRoIGRpcnR5IHBhZ2VzIGFuZCBzd2FwIGVudHJpZXMuIFRoZSBcInZtc2NhblwiIGNvbnRleHQgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBwYWdlIHNjYW5uZXIsIHBlcmhhcHMgZHVyaW5nIGJhY2tncm91bmQgbWVtb3J5IHByZXNzdXJlIHJlY292ZXJ5LiBJdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiBhbnkgbG9jayBvcmRlcmluZyBpcyBpbnZvbHZlZDsgSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgaWYgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgYXJlIGluIHBsYWNlIHdoZW4gdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlIGlzIHNoYXJlZC4gTGV0J3Mgc2VlIHdoYXQgdGhpcyByb3V0aW5lIGlzIHJlYWxseSBkb2luZyB3aXRoIHRoZSBWTSBzdHJ1Y3R1cmUsIHRoZSBwYWdlIGZsYWdzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHR5cGVzIG9mIG1lbW9yeSAoZmlsZS1iYWNrZWQsIGFub255bW91cywgaHVnZSBwYWdlcywgZXRjLikuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIHVubWFwcGluZyBhY3R1YWxseSBpbXBhY3RzIHRoZSBwcm9jZXNzJ3MgcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCB3aGVyZSB0aGF0IFwibWFwcGluZ1wiIHRvIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgcmVmZXJyaW5nIGFjdHVhbGx5IHNpdHMgd2l0aGluIHRoZSBvdmVyYWxsIFZNIGxhbmRzY2FwZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgYXMgd2VsbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyMy42NTQzNjU5MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdFxcdCAqXFxuIDc0MTpcXHRcXHQgKiBOb3RlIHRoYXQgaWYgdGhlIGRpcnR5IGZsYWcgaXMgYWx3YXlzIHNldCB2aWEgZm9saW9fbWFya19kaXJ0eSxcXG4gNzQyOlxcdFxcdCAqIGFuZCB0aHVzIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuXFxuIDc0MzpcXHRcXHQgKi9cXG4gNzQ0OlxcdFxcdHJlZmNvdW50ID0gMSArIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gNzQ1OlxcdFxcdGlmICghZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgcmVmY291bnQpKVxcbiA3NDY6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzQ3OlxcdFxcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cXG4gNzQ4OlxcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcXG4gNzQ5OlxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xcbiA3NTA6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzUxOlxcdFxcdH1cXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbiA3NTQ6XFx0XFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiA3NTU6XFx0XFxuIDc1NjpcXHRcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuIDc1NzpcXHRcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbiA3NTg6XFx0XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIDc1OTpcXHRcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuIDc2MDpcXHRcXHR9IGVsc2Uge1xcbiA3NjE6XFx0XFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0XFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvO1xcbiA3NjQ6XFx0XFx0XFx0LypcXG4gNzY1OlxcdFxcdFxcdCAqIFJlbWVtYmVyIGEgc2hhZG93IGVudHJ5IGZvciByZWNsYWltZWQgZmlsZSBjYWNoZSBpblxcbiA3NjY6XFx0XFx0XFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXFxuIDc2NzpcXHRcXHRcXHQgKlxcbiA3Njg6XFx0XFx0XFx0ICogQnV0IGRvbid0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXFxuIDc2OTpcXHRcXHRcXHQgKiBhbHJlYWR5IGV4aXRpbmcuICBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbixcXG4gNzcwOlxcdFxcdFxcdCAqIGlub2RlIHJlY2xhaW0gbmVlZHMgdG8gZW1wdHkgb3V0IHRoZSByYWRpeCB0cmVlIG9yXFxuIDc3MTpcXHRcXHRcXHQgKiB0aGUgbm9kZXMgYXJlIGxvc3QuICBEb24ndCBwbGFudCBzaGFkb3dzIGJlaGluZCBpdHNcXG4gNzcyOlxcdFxcdFxcdCAqIGJhY2suXFxuIDc3MzpcXHRcXHRcXHQgKlxcbiA3NzQ6XFx0XFx0XFx0ICogV2UgYWxzbyBkb24ndCBzdG9yZSBzaGFkb3dzIGZvciBEQVggbWFwcGluZ3MgYmVjYXVzZSB0aGVcXG4gNzc1OlxcdFxcdFxcdCAqIG9ubHkgcGFnZSBjYWNoZSBmb2xpb3MgZm91bmQgaW4gdGhlc2UgYXJlIHplcm8gcGFnZXNcXG4gNzc2OlxcdFxcdFxcdCAqIGNvdmVyaW5nIGhvbGVzLCBhbmQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIG1peCBEQVhcXG4gNzc3OlxcdFxcdFxcdCAqIGV4Y2VwdGlvbmFsIGVudHJpZXMgYW5kIHNoYWRvdyBleGNlcHRpb25hbCBlbnRyaWVzIGluIHRoZVxcbiA3Nzg6XFx0XFx0XFx0ICogc2FtZSBhZGRyZXNzX3NwYWNlLlxcbiA3Nzk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjIzLjY1NDYzMjYxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDI4Mzc3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fbWVtY2cxX3N3YXBvdXRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYF9fbWVtY2cxX3N3YXBvdXRgLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgaXRzIGRlZmluaXRpb24sIHByb2JhYmx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSXMgaXQgYSBrZXJuZWwtaW50ZXJuYWwgZnVuY3Rpb24/IElzIGl0IGV4cG9zZWQgdmlhIGEgaGVhZGVyIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgZXNzZW50aWFsLiBPbmNlIEkndmUgZ290IHRoYXQsIEknbGwgbmVlZCB0byBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgZG9pbmcuIEhvdyBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBhIGNvbnRyb2wgZ3JvdXA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHN3YXAtb3V0IGJlaGF2aW9yIHdpdGhpbiBhIG1lbWNnP1xuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyNS40NTc0NzM0MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjUzNDYxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZzFfc3dhcG91dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUzPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTYxOnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NjpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDUzMz12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cXHQgKiBFeGNsdWRlIHN3YXBjYWNoZTogb3JpZ2luYWxseSB0byBhdm9pZCBhIGNvcnJ1cHQgZGVmZXJyZWQgc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jOjQ1NTI6XFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NTMtXFx0ICogYnV0IGlmIHBhZ2UgcmVjbGFpbSBpcyBhbHJlYWR5IGhhbmRsaW5nIHRoZSBzYW1lIGZvbGlvLCBpdCBpc1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI0Nz12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXFxubW0vbWVtY29udHJvbC12MS5jOjI1OTogKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjAtICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjgtICovXFxubW0vbWVtY29udHJvbC12MS5jOjI2OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzI3LVxcdGlmIChzd2Fwb3V0KVxcbm1tL3N3YXBfc3RhdGUuYzozMjg6XFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjI2Ljk4MjgyNTczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDIzMTc0NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IENvbnRyb2wgU3dhcG91dCBMb2dpYyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc3dhcG91dCB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIHN1YnN5c3RlbS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byBkcmlsbCBkb3duIGludG8gYG1tL21lbWNvbnRyb2wtdjEuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGZvY3VzIG9uIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHN3YXBwaW5nIG91dCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1vcnkgY2dyb3VwIGxpa2VseSByZXNpZGVzIGluIHRoaXMgb2xkZXIgdmVyc2lvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSwgbG9vayBmb3IgaG93IHRoZXkgY2hhbmdlZCBmcm9tIHRoZSBwcmV2aW91cyB2ZXJzaW9ucyBJIHdvcmtlZCB3aXRoLCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgcGFnZSByZXBsYWNlbWVudCBtZWNoYW5pc21zIGFuZCB0aGUgb3ZlcmFsbCBzd2FwLXJlbGF0ZWQgY29kZS4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gaW5pdGlhdGUgdGhlIHN3YXAtb3V0IHByb2Nlc3MgZnJvbSBhIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgZ3JvdXAuIEkgd2lsbCBxdWlja2x5IHNjYW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHR5cGVzIChhbm9ueW1vdXMsIGZpbGUtYmFja2VkKSwgYW55IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGl0IHVzZXMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCByZWNsYWltLiBNeSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyOS4wMDYwMDI4NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wtdjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0fVxcbiAyNTY6XFx0XFxuIDI1NzpcXHQjaWZkZWYgQ09ORklHX1NXQVBcXG4gMjU4OlxcdC8qKlxcbiAyNTk6XFx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcXG4gMjYwOlxcdCAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXFxuIDI2MTpcXHQgKiBAY2k6IHRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyIGhvbGRpbmcgdGhlIHN3YXAgZW50cmllc1xcbiAyNjI6XFx0ICpcXG4gMjYzOlxcdCAqIFRyYW5zZmVyIHRoZSBtZW1zdyBjaGFyZ2Ugb2YgQGZvbGlvIHRvIHRoZSBzd2FwIGVudHJ5IHN0b3JlZCBpblxcbiAyNjQ6XFx0ICogZm9saW8tXFx1MDAzZXN3YXAuXFxuIDI2NTpcXHQgKlxcbiAyNjY6XFx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xcbiAyNjc6XFx0ICogYmUgZnJlZWQsIGFuZCBjYWxsZXIgbXVzdCBkaXNhYmxlIElSUXMgYW5kIGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrLlxcbiAyNjg6XFx0ICovXFxuIDI2OTpcXHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4gMjcwOlxcdHtcXG4gMjcxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XFxuIDI3MjpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIDI3MzpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfZW50cmllcztcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gMjc2OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIDI3NzpcXHRcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuIDI3ODpcXHRcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiAyODE6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcXG4gMjg0OlxcdFxcdFxcdHJldHVybjtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XFxuIDI4NzpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XFxuIDI4ODpcXHRcXHRpZiAoIW9iamNnKVxcbiAyODk6XFx0XFx0XFx0cmV0dXJuO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDI5MjpcXHRcXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiAyOTM6XFx0XFx0LypcXG4gMjk0OlxcdFxcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24ndFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyOS4wMDYxMjkxNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI1NzM1MTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTd2FwIENhY2hlIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBgX19tZW1jZzFfc3dhcG91dGAgYW5kIEkgc2VlIHRoYXQgaXQncyBub3cgKmluc2lkZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBzcGVjaWZpY2FsbHkgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhlIGtleSBpcyB0aGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBjbGVhcnMgdGhlIHN3YXBjYWNoZSBmbGFnLCB3aGljaCBtZWFucyB0aGUgZm9saW8gaXMgZWZmZWN0aXZlbHkgcmVtb3ZlZCBmcm9tIHRoZSBzd2FwIGNhY2hlLiAgSSB1bmRlcnN0YW5kIG5vdzsgcHJldmlvdXNseSwgYF9fbWVtY2cxX3N3YXBvdXRgIHdhcyBjYWxsZWQgKmJlZm9yZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGR1cmluZyB0aGUgcmVtb3ZhbCBwcm9jZXNzLiBOb3csIGJ5IHBhc3NpbmcgYHN3YXBvdXQgPSB0cnVlYCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBfX21lbWNnMV9zd2Fwb3V0YCBleGVjdXRlcyBpbnRlcm5hbGx5LCBiZWZvcmUgdGhlIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlLlxuXG5Ob3csIGlzIHRoaXMgYSB3b3J0aHdoaWxlIGFyZWEgdG8gdGFyZ2V0IHdpdGggZnV6emluZz8gRGVmaW5pdGVseS4gIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBjYWNoZSBhbmQgc3dhcG91dCBsb2dpYywgaW5jbHVkaW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gSXQgdG91Y2hlcyBkaXJlY3RseSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBtbWAsIHNvIEknbSBwdXR0aW5nIGEgXCJ5ZXNcIiBvbiB0aGF0LlxuXG5JJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEknbSBhc3N1bWluZyB3ZSdsbCBuZWVkIGBDT05GSUdfU1dBUGAsIG9idmlvdXNseS4gVGhlbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1DR19WMWAgYXJlIHJlcXVpcmVkLCBnaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYF9fbWVtY2cxX3N3YXBvdXRgLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBjbGFyaWZpY2F0aW9uIGJ5IGxvb2tpbmcgaW50byBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCB0byBzZWUgaG93IHRob3NlIGFyZSBkZWZpbmVkIGFuZCByZWxhdGVkIHRvIGBfX21lbWNnMV9zd2Fwb3V0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjMzLjI2MzQ4MjU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTYzNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY3LVxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjMzLjM4ODA1MTAyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQzMDkyOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgY29udHJvbCBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3IgdHJhY2tpbmcgaXMgY2F1c2luZyB0aGUgcHJvYmxlbS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDE5NTAgdG8gMTk3MC4gVGhhdCBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgb3BlcmF0aW9ucywgcG90ZW50aWFsbHkgdGhlIHN0YXRzIGdhdGhlcmluZyBvciByZXNvdXJjZSBsaW1pdGluZyBhc3BlY3RzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIHJhbmdlIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgc28gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBhIGZsYXcgaW4gdGhlIGFjY291bnRpbmcgbG9naWMgdGhhdCBpcyB0cmlnZ2VyaW5nIHRoZSBwcm9ibGVtIEknbSBzZWVpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzUuNDMxMTQ3MTQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTQ1OlxcdHtcXG4xOTQ2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xOTQ3OlxcdH1cXG4xOTQ4OlxcdFxcbjE5NDk6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZW50ZXJfdXNlcl9mYXVsdCh2b2lkKVxcbjE5NTA6XFx0e1xcbjE5NTE6XFx0fVxcbjE5NTI6XFx0XFxuMTk1MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4xOTU0OlxcdHtcXG4xOTU1OlxcdH1cXG4xOTU2OlxcdFxcbjE5NTc6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbjE5NTg6XFx0XFxuMTk1OTpcXHQjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXFxuMTk2MDpcXHRcXG4xOTYxOlxcdHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG4xOTYyOlxcdHZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4xOTYzOlxcdFxcbjE5NjQ6XFx0I2Vsc2VcXG4xOTY1OlxcdFxcbjE5NjY6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4xOTY3OlxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuMTk2ODpcXHR7XFxuMTk2OTpcXHR9XFxuMTk3MDpcXHRcXG4xOTcxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTk3MjpcXHR7XFxuMTk3MzpcXHR9XFxuMTk3NDpcXHQjZW5kaWZcXG4xOTc1OlxcdFxcbjE5NzY6XFx0I2VuZGlmIC8qIF9MSU5VWF9NRU1DT05UUk9MX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzUuNDMxMjkyODk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTk1ODE1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgY3J1Y2lhbCBLY29uZmlnIHN5bWJvbHMgdGhhdCBhcmUgaGlnaGx5IHJlbGV2YW50IHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaGVyZS4gRmlyc3QsIEknbSB0aGlua2luZyBJIHNob3VsZCBjaGVjayBgQ09ORklHX01FTUNHX1YxYC4gVGhhdCdzIGFuIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbnZlc3RpZ2F0aW9uIGludG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBwb3RlbnRpYWxseSBsZWdhY3kgc3RhdHVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHYxIGlzIGVuYWJsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV3ZXIgdjIgaW1wbGVtZW50YXRpb24gaWYgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHNjZW5hcmlvLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19TV0FQYC4gU3dhcCBhbHdheXMgY29tZXMgaW50byBwbGF5IHdoZW4geW91J3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGNvbnN0cmFpbnRzLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gbWVtb3J5IGNncm91cHMgYW5kIHN3YXAgY2FuIGJlIHRyaWNreS4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgb2YgYENPTkZJR19TV0FQYCBpcyBjcml0aWNhbCB0byBrbm93aW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHJlc291cmNlIGxpbWl0cyBlbmZvcmNlZCBieSBhbnkgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIHRoYXQgYXJlIGVuYWJsZWQuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdHdvIGFyZSB3b3JraW5nIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzcuNTkwODc2Nzc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc0ODEwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzcuNjM3NjMyMjU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNDMwODk3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgTUVNQ0dfVjEgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYE1FTUNHX1YxYCBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGxpa2VseSB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2gsIGlzIHRvIHVzZSBgZ3JlcGAuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGluIGBpbml0L0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AsIGFzIHRob3NlIGFyZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIG1lbW9yeSBjb250cm9sIGdyb3VwIG9wdGlvbnMuIEkgZmlndXJlIGVpdGhlciBpdCdzIGRpcmVjdGx5IGRlZmluZWQgdGhlcmUsIG9yIGl0J3MgaW5jbHVkZWQgd2l0aGluIGFub3RoZXIgY29uZmlnIGZpbGUgdGhhdCAqaXMqIGRlZmluZWQgdGhlcmUuIEl0J3MgYSBxdWljayBhbmQgdGFyZ2V0ZWQgc2VhcmNoOyBob3BlZnVsbHksIGl0IHlpZWxkcyB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHJpZ2h0IGF3YXkuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBkZWVwZXIgZGl2ZSwgYW5kIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBhcm91bmQgdGhpcyB2YXJpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MzAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjo0MS44ODA3MjQzMjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkzNjEwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjQzLjMxMDA4OTE5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzczNDE1NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBsaW5lcyBmcm9tIGBpbml0L0tjb25maWdgIHlvdSBtZW50aW9uZWQ6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIFNlY3Rpb24gb24gUmVzb3VyY2UgQ29udHJvbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBsaW5lcyAxMDgwIHRocm91Z2ggMTEyMCBvZiBgaW5pdC9LY29uZmlnYC4gUmlnaHQsIHRoaXMgaXMgd2hlcmUgdGhleSdyZSBkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gcmVzb3VyY2UgY29udHJvbC4gU3BlY2lmaWNhbGx5LCBJJ20gc2VlaW5nIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgYENPTkZJR19SRVNPVVJDRV9DT05UUk9MYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpZGVhIGlzIGVuYWJsaW5nIHRoZSBhYmlsaXR5IHRvIGNvbnRyb2wgcmVzb3VyY2VzLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIHNlY3Rpb24gbGlrZWx5IHBlcnRhaW5zIHRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgQ1BVLCBtZW1vcnksIG9yIEkvTyBhY2Nlc3MgaW4gYSBtb3JlIGdyYW51bGFyIHdheS5cblxuVGhleSdyZSBjaGVja2luZyBhIGZldyB0aGluZ3MgZmlyc3QuIGBERUZBVUxUIHlgIGlzIHNldCwgd2hpY2ggaW1wbGllcyB0aGF0IGl0J3MgYWN0aXZlIGJ5IGRlZmF1bHQsIHNvIGl0J3MgcHJvYmFibHkgYmVlbiB0ZXN0ZWQuIEl0IHNlZW1zIHRvIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQU2AuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gUmVzb3VyY2UgY29udHJvbCBpcyBidWlsdCBvbiBjZ3JvdXBzLiBOb3csIEkgc2VlIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCB3aGljaCBhcmUgY3J1Y2lhbC4gYHNlbGVjdCBSRVNPVVJDRV9DT05UUk9MX0NQVWAgYW5kIGBzZWxlY3QgUkVTT1VSQ0VfQ09OVFJPTF9NRU1PUllgIGFyZSB0aGUgb2J2aW91cyBvbmVzLiBUaGUgZmFjdCB0aGF0IHRoZSBjb2RlIGlzIHNldCB1cCB0aGlzIHdheSwgdGVsbHMgbWUgdGhhdCB0aGVyZSBpcyBhbiBleHBlY3RhdGlvbiB0aGF0IGlmIHJlc291cmNlIGNvbnRyb2wgaXMgZW5hYmxlZCwgYm90aCBDUFUgYW5kIG1lbW9yeSBjb250cm9sIHdpbGwgYmUgbmVlZGVkLiBIb3dldmVyLCB0aGUgZXhhY3QgbWVjaGFuaXNtcyBmb3IgbWFuYWdpbmcgdGhvc2UgcmVzb3VyY2VzIGFyZSBoYW5kbGVkIGVsc2V3aGVyZSwgdmlhIHRoZSBzZWxlY3RlZCBvcHRpb25zLiBUaGlzIHJlaW5mb3JjZXMgdGhlIG1vZHVsYXJpdHkgb2YgdGhlIGtlcm5lbCBkZXNpZ247IHJlc291cmNlIGNvbnRyb2wgaXMgYSBoaWdoLWxldmVsIGVuYWJsZXIuXG5cblRoZXkndmUgZXZlbiBoYW5kbGVkIHRoZSBgaGVscGAgc2VjdGlvbiBjbGVhcmx5IHN0YXRpbmcgdGhlIGludGVudCBvZiB0aGUgY29udHJvbC4gSXQgc3RhdGVzIHRoYXQgdGhlIG9wdGlvbnMgY29uZmlndXJlIHJlc291cmNlIGFsbG9jYXRpb24gdG8gYWxsb3cgZm9yIG1vcmUgZ3JhbnVsYXIgY29udHJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjo0Ni4wODM1MDg1NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjQ2LjA4MzY3NTU5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc0Mzc4MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UndmUgYmVlbiBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSdtIHByZXR0eSBzdXJlIHdlJ3ZlIGNvdmVyZWQgdGhlIGJhc2ljcy4gQnV0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ28gaW50byBLY29uZmlnIGFuZCBleHBsaWNpdGx5IGxvb2sgZm9yIGBDT05GSUdfU1dBUGAuIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byBob3cgc3dhcHBpbmcgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIHNldHRpbmcuIEFsd2F5cyBpbXBvcnRhbnQgdG8gYmUgbWV0aWN1bG91cyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGtlcm5lbCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjQ4LjA1ODA1NjcyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODM5NDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUCRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6NTAuMDA2NDU1NjAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MTkwOTMzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCB0b3VjaGVzIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLCB3aGljaCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSB3YW50IHRvIHNlZSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGUgZGlmZiBvbmx5IGFmZmVjdHMgYSBoYW5kZnVsIG9mIGZpbGVzOiBgbW0vc3dhcC5oYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zLiBJbiBgbW0vc3dhcF9zdGF0ZS5jYCwgSSBzZWUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGJlaW5nIG1vZGlmaWVkLiBPdmVyIGluIGBtbS92bXNjYW4uY2AsIHRoZXJlJ3MgYF9fcmVtb3ZlX21hcHBpbmdgLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGNhbGwgcGF0aCwgYF9fbWVtY2cxX3N3YXBvdXRgIGluIGBtbS9tZW1jb250cm9sLXYxLmNgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuXG5cblRoZSBrZXkgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHViaXF1aXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXNlIGNvbW1vbiByb3V0aW5lcywgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gc3dhcCBjYWNoZSBvcGVyYXRpb25zPyBUaGF0J3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGtub3cuICBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgYXJlIGNsZWFybHkgc3dhcC1jYWNoZSBzcGVjaWZpYzsgbm8gc3VycHJpc2UgdGhlcmUuIEJ1dCBgX19yZW1vdmVfbWFwcGluZ2AgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQncyB1c2VkIGluIHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGR1cmluZyB2bXNjYW4gYW5kIGlzIGFsc28gY2FsbGVkIHRocm91Z2ggYHJlbW92ZV9tYXBwaW5nYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIGJvdGggYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjo1My42MjU1NTA5MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDk3NDQ1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXFxuLS1cXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA3Ni1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXFxubW0vbWVtb3J5LmM6NTA3NzpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vbWVtb3J5LmMtNTA3OC1cXHRcXHRnb3RvIG91dF9ub21hcDtcXG4tLVxcbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE5NDEtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjE5NDI6XFx0XFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3JcXG5tbS9zaG1lbS5jLTE5NDMtXFx0XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSdzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XFxuLS1cXG5tbS9zaG1lbS5jLTE5NDctXFx0XFx0ICovXFxubW0vc2htZW0uYzoxOTQ4OlxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTE5NDktXFx0XFx0Z290byByZWRpcnR5O1xcbi0tXFxubW0vc2htZW0uYz0yMzUxPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjM2OC1cXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XFxubW0vc2htZW0uYzoyMzY5OlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTIzNzAtXFx0LypcXG4tLVxcbm1tL3NobWVtLmM9MjQ1Nj1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTk4LVxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jOjI1OTk6XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3NobWVtLmMtMjYwMC1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMC1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwLmgtNDUwLVxcbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTQ1Mi17XFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE5OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMzMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNDogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMzUtICogQGZvbGlvOiBUaGUgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzQyLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNDM6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy0zNDQte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDk6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM1MC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUxLVxcbm1tL3N3YXBmaWxlLmM6MjUyOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1My1cXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDI9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc4MC1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xcbm1tL3N3YXBmaWxlLmM6MTc4MTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vc3dhcGZpbGUuYy0xNzgyLVxcdFxcdGdvdG8gZmFpbGVkO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTE0PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMjAtXFxubW0vc3dhcGZpbGUuYzoyMTIxOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTIxMjItXFx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTc0PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwNDQtXFx0aWYgKHJldCkge1xcbm1tL3pzd2FwLmM6MTA0NTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0venN3YXAuYy0xMDQ2LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjU1Ljc3NTMwMDkxOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTgxNzk1MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcy4gSSBzZWUgdGhhdCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgdGhlIHByaW1hcnkgQyBmdW5jdGlvbiBpbXBhY3RlZCwgd2l0aCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AgYWxzbyBtb2RpZmllZC4gSW50ZXJlc3RpbmcuIFRoZSBgX19tZW1jZzFfc3dhcG91dGAgY2FsbCBpcyBiZWluZyBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHBvaW50LiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIHBhdGhzLCBzbyB0aGlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBjb3ZlcmVkLiBZZXMsIHdlIGhhdmUgQ09ORklHX1NXQVAsIHdoaWNoIGlzIG5lY2Vzc2FyeSwgYW5kIGFsc28gQ09ORklHX01FTUNHIGFuZCBDT05GSUdfTUVNQ0dfVjEsIHdoaWNoIGFyZSBleHBlY3RlZCBmb3IgdGhlIG1lbWNnIGludGVyYWN0aW9uIHZpYSBgX19tZW1jZzFfc3dhcG91dGAuIEdvb2QuIExldCBtZSB0cmlwbGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIHN5bWJvbHMgYXJlIGNsZWFuOiBcIlNXQVAsXCIgXCJNRU1DRyxcIiBhbmQgXCJNRU1DR19WMS5cIiBZZXAsIHRob3NlIGFyZSBjb3JyZWN0LlxuXG5GaW5hbGx5LCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB3ZSBoYXZlIGFsbCB0aGUgaW1wb3J0YW50IHBpZWNlcyBpbiBwbGFjZSBmb3IgdGhlIGZ1enplci4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHRydWUsIGdpdmVuIHRoZSBjb3JlIG1lbW9yeSBjaGFuZ2VzLiBUaGUgcmVhc29uaW5nIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGNoYW5nZXM7IGludGVncmF0aW5nIGBfX21lbWNnMV9zd2Fwb3V0YCBpbnRvIHRoZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZnVuY3Rpb24gdG91Y2hlcyByZWNsYWltIGFuZCBzd2FwIHBhdGhzLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGFwcHJvcHJpYXRlbHkgbGlzdGVkLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZC5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBMZXQncyBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3MCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6NTkuNzU3MDk4Njk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTA4Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6NTkuOTA1MDE0MzYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjI5MzE0NDM3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjU5LjkwNTQ4NjQ5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyMjkyNjY4Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcGF0aCBieSBhZGRpbmcgYSBib29sZWFuIHBhcmFtZXRlciBgc3dhcG91dGAgdG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgYW5kIG1vdmluZyB0aGUgaW52b2NhdGlvbiBvZiBgX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpYCBpbnNpZGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKClgLlxcblxcblRoaXMgY2hhbmdlIGludm9sdmVzIHB1cmVseSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWM6XFxuMS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBUaGUgbmV3IGBzd2Fwb3V0YCBib29sZWFuIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGEgY29uc3RhbnQgKGB0cnVlYCBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIGBmYWxzZWAgaW4gYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCksIHNvIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG4zLiBObyBkYXRhIGlzIGNvcGllZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyByZWZhY3RvcmluZyB3b3VsZCByZWxhdGUgdG8gbG9ja2luZywgcGFnZSByZWZjb3VudGluZywgb3IgbWVtY2cgc3RhdGUgY29uc2lzdGVuY3ksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgaW50ZXJuYWwgVk0gYXNzZXJ0aW9ucyAoYFZNX0JVR19PTl9GT0xJT2AsIGBWTV9XQVJOX09OX09OQ0VfRk9MSU9gKS5cXG5cXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDkyYmJhMDMyODc3MGExODY0YWY3MjVkOWE3YWQ5NzFlN2IyMTU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzoxMjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjM4OTE2ZWE5NmFjNTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiwyMSArMzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuKyAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4rXG4rXHRpZiAoc3dhcG91dClcbitcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuK1xuK1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyArMzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4rXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuK1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjU5LjkwNTQ4NzM3M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDg3ODA4Njk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHNjb3BlLiBUaGlzIGxvb2tzIGxpa2UgYSBzZWN1cml0eSBhbmFseXNpcy90cmlhZ2Ugb2YgYSBMaW51eCBrZXJuZWwgcGF0Y2gsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBhcHBsaWNhYmlsaXR5IG9mIEtBU0FOIHZlcnN1cyBLTVNBTi4gR29vZCwgdGhpcyBpcyBhIHNhZmUsIGRlZmVuc2l2ZSBjb2RlIHJldmlldyBhbmQgc2FuaXRpemVyIGFzc2Vzc21lbnQsIG5vdGhpbmcgdG9vIHJpc2t5LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZGlmZiB0YXJnZXRzIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBtbS92bXNjYW4uY2Agd2l0aGluIHRoZSBgX19yZW1vdmVfbWFwcGluZygpYCBmdW5jdGlvbi4gSXQgYXBwZWFycyBhIGZ1bmN0aW9uIGNhbGwsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IGEgbmV3IGJvb2xlYW4gYHN3YXBvdXRgLiBJbiBgbW0vc3dhcF9zdGF0ZS5jYCwgSSBzZWUgaG93IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBub3cgcmVvcmRlcmVkLCB3aXRoIGBfX21lbWNnMV9zd2Fwb3V0YCBwb3RlbnRpYWxseSBiZWluZyBjb25kaXRpb25hbGx5IGNhbGxlZC4gVGhlIGxvZ2ljIGlzIHRoYXQgdGhlcmUgaXMgYSBndWFyZCBhcm91bmQgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgIHVzaW5nIHRoZSBuZXcgYm9vbGVhbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyByZW9yZGVyaW5nIGFuZCBlbmNhcHN1bGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgIGFuZCB3aHkgaXQncyBiZWluZyBoYW5kbGVkIHRoaXMgd2F5LiBUaW1lIHRvIHVzZSBgZ3JlcHBlcmAgYW5kIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGBtbS92bXNjYW4uY2AgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHksIHRoaXMgY29udGV4dCB3aWxsIGhlbHAgbWUgZGVjaWRlIGlmIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGp1c3RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEzOjEwLjc4MzU3NzE2NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMDA4MzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnMV9zd2Fwb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjItdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTUxLVxcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmM6NDU1MjpcXHQgKiBxdWV1ZS4gTm93YWRheXMgdGhhdCBpcyBmdWxseSBwcmV2ZW50ZWQgYnkgX19tZW1jZzFfc3dhcG91dCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cXHQgKiBidXQgaWYgcGFnZSByZWNsYWltIGlzIGFscmVhZHkgaGFuZGxpbmcgdGhlIHNhbWUgZm9saW8sIGl0IGlzXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI1OC0vKipcXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxubW0vbWVtY29udHJvbC12MS5jLTI2MC0gKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2Zlclxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MjY5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNzAte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFx0aWYgKHN3YXBvdXQpXFxubW0vc3dhcF9zdGF0ZS5jOjMyODpcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxubW0vc3dhcF9zdGF0ZS5jLTMyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MTIuNzgzNjY2OTg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA4ODI2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBGdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC12MS5jYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYF9fbWVtY2cxX3N3YXBvdXRgLiBMZXQncyBncmFiIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBoZWFkIG92ZXIgdG8gYXJvdW5kIGxpbmUgMjU4LiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIG1lbW9yeSBjb250cm9sLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBtZW1vcnkgaXMgc3dhcHBlZCBvdXQgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcyAoY2dyb3VwcykuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipUcmlnZ2VyIENvbmRpdGlvbnM6KiogV2hhdCAqY2F1c2VzKiB0aGUgc3lzdGVtIHRvIGNhbGwgdGhpcyBmdW5jdGlvbj8gSXMgaXQgYSBsb3ctbWVtb3J5IHNpdHVhdGlvbiB3aXRoaW4gdGhlIGNncm91cCwgYSBwcm9hY3RpdmUgc3dhcG91dCBzdHJhdGVneSwgb3Igc29tZXRoaW5nIGVsc2U/XG4qICAgKipUYXJnZXQgTWVtb3J5OioqIFdoaWNoIG1lbW9yeSByZWdpb25zIG9yIHBhZ2VzIGRvZXMgdGhpcyBmdW5jdGlvbiBhdHRlbXB0IHRvIHN3YXAgb3V0PyBJcyBpdCBwcmltYXJpbHkgYW5vbnltb3VzIHBhZ2VzLCBmaWxlLWJhY2tlZCBwYWdlcywgb3IgYSBtaXg/IERvZXMgaXQgYWNjb3VudCBmb3IgZGlmZmVyZW50IG1lbW9yeSB6b25lcyBvciBOVU1BIG5vZGVzP1xuKiAgICoqU3dhcC1PdXQgTWVjaGFuaXNtOioqIFdoYXQncyB0aGUgKmFjdHVhbCogc3dhcC1vdXQgcHJvY2VkdXJlPyBEb2VzIGl0IGludm9sdmUgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBwYWdlIHRhYmxlcywgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3dhcCBjYWNoZSwgb3IgY2FsbHMgdG8gc3BlY2lmaWMgc3dhcCBvcGVyYXRpb25zP1xuKiAgICoqQ2dyb3VwIEludGVncmF0aW9uOioqIEhvdyBleGFjdGx5IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIGNncm91cCdzIG1lbW9yeSBhY2NvdW50aW5nPyBEb2VzIGl0IHVwZGF0ZSBtZW1vcnkgdXNhZ2Ugc3RhdGlzdGljcywgYW5kIGlzIHRoZXJlIGFueSBwcm90ZWN0aW9uIG9mIHRoZSBjZ3JvdXAncyBtZW1vcnkgZm9vdHByaW50P1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGFkZHJlc3NlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaW5ncyBnbyB3cm9uZyBkdXJpbmcgdGhlIHN3YXAgcHJvY2Vzcz9cbiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgZnVuY3Rpb25zOioqIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBzeXN0ZW0gY2FsbCBvciBpbnRlcmFjdCB3aXRoIGl0LlxuXG5JJ2xsIGJlIHJlYWRpbmcgZm9yIHVuZGVyc3RhbmRpbmcsIHNvIHRoZXNlIGFyZSBqdXN0IG15IGluaXRpYWwgZ29hbHMuIEFzIGEgc2Vhc29uZWQgZXhwZXJ0LCBJJ20gZXhwZWN0aW5nIGEgY2xlYW4sIG9yZ2FuaXplZCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBhbHNvIGJlIHRyeWluZyB0byBnYXVnZSBpZiBhbnkgb3B0aW1pemF0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQsIGFuZCBpZiBub3QsIHdoZXJlIEkgbWlnaHQgbG9vayB0byBvcHRpbWl6ZSB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMzoxNi4xODQ1NTIwNzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wtdjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIDI1MjpcXHRcXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDI1MzpcXHRcXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcXG4gMjU0OlxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19TV0FQXFxuIDI1ODpcXHQvKipcXG4gMjU5OlxcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxuIDI2MDpcXHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxcbiAyNjE6XFx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcXG4gMjYyOlxcdCAqXFxuIDI2MzpcXHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cXG4gMjY0OlxcdCAqIGZvbGlvLVxcdTAwM2Vzd2FwLlxcbiAyNjU6XFx0ICpcXG4gMjY2OlxcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cXG4gMjY3OlxcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cXG4gMjY4OlxcdCAqL1xcbiAyNjk6XFx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIDI3MDpcXHR7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xcbiAyNzI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyNzM6XFx0XFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIDI3NjpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNzc6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbiAyNzg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gMjgxOlxcdFxcdFxcdHJldHVybjtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXFxuIDI4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiAyODc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbiAyODg6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyOTI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4gMjkzOlxcdFxcdC8qXFxuIDI5NDpcXHRcXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcXG4gMjk1OlxcdFxcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcXG4gMjk2OlxcdFxcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxcbiAyOTc6XFx0XFx0ICovXFxuIDI5ODpcXHRcXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiAyOTk6XFx0XFx0c3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MTYuMTg0NzY1OTk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDYyMTk0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDYWNoZSBEZWxldGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVsZXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIHN3YXAgY2FjaGUgYSBiaXQgYmV0dGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDAgd2l0aGluIGBtbS9zd2FwX3N0YXRlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbnNpZGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byByZW1vdmluZyBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZSwgYW5kIGEgZGV0YWlsZWQgbG9vayBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgZGVsZXRpb24gd29ya2Zsb3cuIEknbSBrZWVuIHRvIGRpc3NlY3QgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBvciBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgZW1wbG95LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMzoxOC4wOTA5ODg0MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3N3YXBfc3RhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuIDI5NjpcXHRcXHRcXHRkbyB7XFxuIDI5NzpcXHRcXHRcXHRcXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX29mZiwgMSk7XFxuIDI5OTpcXHRcXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHR9XFxuIDMwMjpcXHRcXG4gMzAzOlxcdC8qKlxcbiAzMDQ6XFx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDU6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzA2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMDc6XFx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gMzA4OlxcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDMwOTpcXHQgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAzMTA6XFx0ICpcXG4gMzExOlxcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cXG4gMzEyOlxcdCAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAzMTM6XFx0ICpcXG4gMzE0OlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxcbiAzMTU6XFx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4gMzE2OlxcdCAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcXG4gMzE3OlxcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cXG4gMzE4OlxcdCAqL1xcbiAzMTk6XFx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDMyMDpcXHRcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiAzMjE6XFx0e1xcbiAzMjI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gMzI1OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoc3dhcG91dClcXG4gMzI4OlxcdFxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHQvKipcXG4gMzM0OlxcdCAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMzNTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzM2OlxcdCAqXFxuIDMzNzpcXHQgKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG4gMzM4OlxcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4gMzM5OlxcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXFxuIDM0MDpcXHQgKlxcbiAzNDE6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNDI6XFx0ICovXFxuIDM0MzpcXHR2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM0NDpcXHR7XFxuIDM0NTpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbiAzNDY6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG4gMzQ5OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiAzNTA6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDM1MzpcXHR9XFxuIDM1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MTguMDkxMjAxNTE4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTM2ODI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0cm91Ymxlc2hvb3RpbmcgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgd2Ugc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDc1NS4gVGhhdCBhcmVhLCBhcyBJIHJlY2FsbCwgbGlrZWx5IGRlYWxzIHdpdGggdGhlIHBhZ2UgcmVjbGFpbSBwcm9jZXNzLCBwb3RlbnRpYWxseSB3aGVyZSB0aGUgem9uZSByZWNsYWltaW5nIGxvZ2ljIGNvbWVzIGludG8gcGxheS4gSXQncyBhIGtleSBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsJ3MgZGVjaWRpbmcgd2hhdCBwYWdlcyB0byBldmljdCwgaG93IGl0IHByaW9yaXRpemVzIHRob3NlIHBhZ2VzLCBhbmQgd2hhdCBmYWN0b3JzIGFyZSBpbmZsdWVuY2luZyB0aGF0IGRlY2lzaW9uLiBHaXZlbiB0aGUgbnVhbmNlcyBvZiBtZW1vcnkgcmVjbGFpbSwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgc3lzdGVtLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjAuMDg0ODg4NDQ0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDA6XFx0XFx0ICpcXG4gNzQxOlxcdFxcdCAqIE5vdGUgdGhhdCBpZiB0aGUgZGlydHkgZmxhZyBpcyBhbHdheXMgc2V0IHZpYSBmb2xpb19tYXJrX2RpcnR5LFxcbiA3NDI6XFx0XFx0ICogYW5kIHRodXMgdW5kZXIgdGhlIGlfcGFnZXMgbG9jaywgdGhlbiB0aGlzIG9yZGVyaW5nIGlzIG5vdCByZXF1aXJlZC5cXG4gNzQzOlxcdFxcdCAqL1xcbiA3NDQ6XFx0XFx0cmVmY291bnQgPSAxICsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiA3NDU6XFx0XFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXFxuIDc0NjpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NDc6XFx0XFx0Lyogbm90ZTogYXRvbWljX2NtcHhjaGcgaW4gZm9saW9fcmVmX2ZyZWV6ZSBwcm92aWRlcyB0aGUgc21wX3JtYiAqL1xcbiA3NDg6XFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkge1xcbiA3NDk6XFx0XFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XFxuIDc1MDpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuIDc1NDpcXHRcXHRcXHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gNzU3OlxcdFxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxuIDc1ODpcXHRcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcXG4gNzU5OlxcdFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gNzYwOlxcdFxcdH0gZWxzZSB7XFxuIDc2MTpcXHRcXHRcXHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRcXHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWZyZWVfZm9saW87XFxuIDc2NDpcXHRcXHRcXHQvKlxcbiA3NjU6XFx0XFx0XFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXFxuIDc2NjpcXHRcXHRcXHQgKiBvcmRlciB0byBkZXRlY3QgcmVmYXVsdHMsIHRodXMgdGhyYXNoaW5nLCBsYXRlciBvbi5cXG4gNzY3OlxcdFxcdFxcdCAqXFxuIDc2ODpcXHRcXHRcXHQgKiBCdXQgZG9uJ3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcXG4gNzY5OlxcdFxcdFxcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxcbiA3NzA6XFx0XFx0XFx0ICogaW5vZGUgcmVjbGFpbSBuZWVkcyB0byBlbXB0eSBvdXQgdGhlIHJhZGl4IHRyZWUgb3JcXG4gNzcxOlxcdFxcdFxcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbid0IHBsYW50IHNoYWRvd3MgYmVoaW5kIGl0c1xcbiA3NzI6XFx0XFx0XFx0ICogYmFjay5cXG4gNzczOlxcdFxcdFxcdCAqXFxuIDc3NDpcXHRcXHRcXHQgKiBXZSBhbHNvIGRvbid0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxcbiA3NzU6XFx0XFx0XFx0ICogb25seSBwYWdlIGNhY2hlIGZvbGlvcyBmb3VuZCBpbiB0aGVzZSBhcmUgemVybyBwYWdlc1xcbiA3NzY6XFx0XFx0XFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWl4IERBWFxcbiA3Nzc6XFx0XFx0XFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXFxuIDc3ODpcXHRcXHRcXHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXFxuIDc3OTpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjAuMDg1NTEzMTI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMzg5NTY3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBxdWVzdGlvbjpcblxuKipEZWNvbnN0cnVjdGluZyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgQ2FsbGVycyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBzd2FwIGNhY2hlIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5LCB3aGVyZSBlcnJvcnMgb3IgdW51c3VhbCBzaXR1YXRpb25zIGNvdWxkIGFyaXNlLiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBjb2RlIGFyY2hhZW9sb2d5IGFuZCBzZWUgd2hhdCBmdW5jdGlvbnMgdXNlIGl0IGFuZCBpbiB3aGF0IGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgY2FsbGVycyB0b28/IEknbGwgaGF2ZSB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGJlZ2luIG15IGV4cGxvcmF0aW9uLiBJJ2xsIGxpa2VseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIChmb2xpYWdlLCBzd2FwIGNhY2hlKSB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93LiBEZXBlbmRpbmcgb24gdGhlIGNvZGViYXNlLCBJIGNhbiBwcm9iYWJseSB1c2UgbXkgSURFJ3MgXCJmaW5kIHVzYWdlc1wiIG9yIGEgc2ltaWxhciBmZWF0dXJlIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gZWFjaCBjYWxsZXIsIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgdGhlIGNhbGwgdG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGd1YXJkZWQgYnkgZXJyb3IgY2hlY2tzPyBUaGlzIGNhbiBwcm92aWRlIGluc2lnaHQgaW50byBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgaW4gdGhlIHN5c3RlbS5cbiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgaXMgdGhlIGFjY2VzcyB0byB0aGUgc3dhcCBjYWNoZSBzeW5jaHJvbml6ZWQgYXJvdW5kIHRoZSBjYWxsIHRvIGRlbGV0ZSBhIGZvbGlvPyBBcmUgdGhlcmUgbG9ja3Mgb3IgYXRvbWljIG9wZXJhdGlvbnMgaW52b2x2ZWQ/XG4qICAgKipDb250ZXh0OioqIFdoYXQgaXMgdGhlIGhpZ2gtbGV2ZWwgb3BlcmF0aW9uIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIHdoZW4gaXQgZGVsZXRlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGU/IElzIGl0IHJlbGF0ZWQgdG8gcGFnZSByZWNsYWltLCB3cml0ZWJhY2ssIG9yIHNvbWV0aGluZyBlbHNlP1xuKiAgICoqQ29uY3VycmVuY3k6KiogQW55IGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzd2FwIGNhY2hlP1xuKiAgICoqUmFjZSBDb25kaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz9cbiogICAqKkRvdWJsZSBGcmVlIFBvc3NpYmlsaXRpZXM6KiogSXMgaXQgcG9zc2libGUgZm9yIGEgZm9saW8gdG8gYmUgZGVsZXRlZCB0d2ljZT9cbiogICAqKk1lbW9yeSBMZWFrczoqKiBBcmUgdGhlcmUgYW55IHBsYWNlcyB3aGVyZSB0aGUgZm9saW8gaXMgaW5jb3JyZWN0bHkgcmVsZWFzZWQ/XG5cblVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHByb2Nlc3MsIGl0cyBpbXBsaWNhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGludmVzdGlnYXRpb24sIGFuZCBJIG11c3Qgbm90IGFsbG93IGFueSBhc3N1bXB0aW9ucyB0byBjcmVlcCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjMuMzI0NDcyNTM4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM2MTUyMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NTQtXFxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC00NTYtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jLTMyMC1cXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQzPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5tbS9zd2FwX3N0YXRlLmM6MzQ5OlxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYxOC1cXHRcXHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcXG5tbS9zd2FwZmlsZS5jOjE2MTk6XFx0XFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxcbm1tL3N3YXBmaWxlLmMtMTYyMC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjYuNTYwNjM5NjAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Mzc0OTM5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBTd2FwIENhY2hlIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBtb3ZpbmcgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXRgIHdpdGhpbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2Agd2hlbiBgc3dhcG91dGAgaXMgdHJ1ZS4gUHJldmlvdXNseSwgaXQgd2FzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBfX3JlbW92ZV9tYXBwaW5nYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIHJlYXJyYW5nZW1lbnQgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcHJvY2Vzcywgd2l0aCB0aGUgaW1wb3J0YW50IGJpdCBiZWluZyB0aGF0IGBfX21lbWNnMV9zd2Fwb3V0YCBub3cgaGFwcGVucyAqYmVmb3JlKiBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd2FycmFudCBhIEtNU0FOIHJ1bj8gTGV0J3MgYW5hbHl6ZS4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19tZW1jZzFfc3dhcG91dGAgYXJlIGRlZXAgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFscy4gVGhleSdyZSB0b3VjaGluZyBwYWdlIHN0YXRlcywgY2dyb3VwIGFjY291bnRpbmcsIGFuZCB0aGUgc3dhcCBjYWNoZSBzdHJ1Y3R1cmVzLCBidXQgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhleSdyZSBkb2luZyBhbnl0aGluZyB0aGF0IHdvdWxkIHRyaWdnZXIgS01TQU4uIFRoZXkncmUgbm90IGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIGNvcHlpbmcgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZSBhcmUgbm8gYnJhbmNoZXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGUgcGF0Y2ggaXMsIGF0IGl0cyBjb3JlLCBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zLCBub3QgdGhlICpuYXR1cmUqIG9mIHRoZSBkYXRhIGJlaW5nIG1hbmlwdWxhdGVkLlxuXG5UaGlzIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgc3RydWN0dXJlcywgcmVhZGluZyB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbGVha2luZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIHN0cmFpZ2h0IHJlZmFjdG9yIHdoZXJlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSB3ZWxsIGRlZmluZWQsIHNvIHRoZXJlIGFyZSBubyB1bmtub3ducyBvbiB3aGljaCB0byB0cmlnZ2VyIEtNU0FOLCBhdCBhbGwuIEFueSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcywgc3VjaCBhcyBLQVNBTiBhbmQgTE9DS0RFUCwgc2hvdWxkIGNhdGNoIGFueSByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQgKmNvdWxkKiBiZSBpbnRyb2R1Y2VkIGR1ZSB0byB0aGUgc2hpZnQgaW4gb3JkZXJpbmcuIEluIG90aGVyIHdvcmRzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBTbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZS4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzgyLCJPdXRwdXRUb2tlbnMiOjI5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMzozMi4xOTgxMzk4NjZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXFxuXFxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcXG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxcbjIuIFRoZSBuZXcgYHN3YXBvdXRgIGJvb2xlYW4gYXJndW1lbnQgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgYSBjb25zdGFudCAoYHRydWVgIGluIGBfX3JlbW92ZV9tYXBwaW5nYCBhbmQgYGZhbHNlYCBpbiBgc3dhcF9jYWNoZV9kZWxfZm9saW9gKSwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxcblxcblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXFxuXFxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcXG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxcbjIuIFRoZSBuZXcgYHN3YXBvdXRgIGJvb2xlYW4gYXJndW1lbnQgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgYSBjb25zdGFudCAoYHRydWVgIGluIGBfX3JlbW92ZV9tYXBwaW5nYCBhbmQgYGZhbHNlYCBpbiBgc3dhcF9jYWNoZV9kZWxfZm9saW9gKSwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxcblxcblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 16:08:34 +0000 UTC FinishedAt: 2026-09-06 17:13:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "5f763992-20ce-47ac-a239-8d711ebcf296" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__swap_cache_del_folio", "swap_cache_del_folio", "__remove_mapping", "__memcg1_swapout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fcmVtb3ZlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXG5cblRoaXMgY2hhbmdlIGludm9sdmVzIHB1cmVseSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWM6XG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxuMi4gVGhlIG5ldyBgc3dhcG91dGAgYm9vbGVhbiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBhIGNvbnN0YW50IChgdHJ1ZWAgaW4gYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgZmFsc2VgIGluIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2ApLCBzbyBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBObyBkYXRhIGlzIGNvcGllZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSBieSBtb3ZpbmcgdGhlIF9fbWVtY2cxX3N3YXBvdXQgaW52b2NhdGlvbiBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyB3aGVuIHN3YXBwaW5nIG91dC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgY2FjaGUgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9zd2FwX3N0YXRlLmMgYW5kIG1tL3Ztc2Nhbi5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzA5MmJiYTAzMjg3NzBhMTg2NGFmNzI1ZDlhN2FkOTcxZTdiMjE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTI6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC0zMTksNyAmIzQzOzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuJiM0MztcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgc3dhcG91dCk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTtcbiBcbkBAIC00NTIsNyAmIzQzOzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbiYjNDM7XHRcdGJvb2wgc3dhcG91dClcbiB7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uMzg5MTZlYTk2YWM1NSAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMzA2LDIxICYjNDM7MzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4mIzQzOyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gICpcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4mIzQzOyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcbiYjNDM7ICogc2hvdWxkIGJlIGRpc2FibGVkLlxuICAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuJiM0MztcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChzd2Fwb3V0KVxuJiM0MztcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuJiM0MztcbiYjNDM7XHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gfVxuIFxuIC8qKlxuQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4mIzQzO1x0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc1NSw4ICYjNDM7NzU1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4tXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbi1cdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG4mIzQzO1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9tYXBwaW5nJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSBieSBtb3ZpbmcgdGhlIF9fbWVtY2cxX3N3YXBvdXQgaW52b2NhdGlvbiBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyB3aGVuIHN3YXBwaW5nIG91dC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgY2FjaGUgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9zd2FwX3N0YXRlLmMgYW5kIG1tL3Ztc2Nhbi5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzA5MmJiYTAzMjg3NzBhMTg2NGFmNzI1ZDlhN2FkOTcxZTdiMjE1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTc6MTI6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpOwomIzQzOwkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJCSAgICBib29sIHN3YXBvdXQpOwogdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCXN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7CiAKQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJYm9vbCBzd2Fwb3V0KQogewogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uMzg5MTZlYTk2YWM1NSAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzA2LDIxICYjNDM7MzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIEBmb2xpbzogVGhlIGZvbGlvLgogICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by4KICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby4KICAqCiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuCiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LgogICoKICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZQogICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy4KJiM0MzsgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzCiYjNDM7ICogc2hvdWxkIGJlIGRpc2FibGVkLgogICovCiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAotCV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwlpZiAoc3dhcG91dCkKJiM0MzsJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKJiM0MzsKJiM0MzsJX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogfQogCiAvKioKQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tJmd0O3N3YXA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7CiYjNDM7CV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCiAJZm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc1NSw4ICYjNDM7NzU1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKLQkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwotCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKJiM0MzsJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpOwogCQlzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCBob3cgSSYjMzk7ZCBhcHByb2FjaCBpdCwgYXMgdGhvdWdoIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOgoKKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyBldmVuICp3b3J0aCogZnV6emluZy4gSXMgaXQgdG91Y2hpbmcgY29kZSB0aGF0JiMzOTtzIGxpa2VseSB0byBiZSB2dWxuZXJhYmxlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJiMzOTtsbCBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjaGFuZ2VzLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgcGF0Y2gsIGxvb2tpbmcgYXQgdGhlIGdpdCBkaWZmLCBhbmQgaW1tZWRpYXRlbHkgc2NvcGluZyBvdXQgdGhlIGludm9sdmVkIGZpbGVzLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCBgbW0vc3dhcC5oYC4gVGhhdCBtYWtlcyBtZSB0aGluayBtZW1vcnkgbWFuYWdlbWVudCwgc3dhcHBpbmcsIGFuZCB2aXJ0dWFsIG1lbW9yeS4gVGhvc2UgYXJlICphbHdheXMqIGludGVyZXN0aW5nIHRhcmdldHMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIGhvdyB0aGUgZGF0YSBmbG93cyB0aHJvdWdoIHRoZW0sIGFuZCB3aGVyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgYXJlLiBUaGF0JiMzOTtzIGhvdyBJIGNhbiBjaG9vc2Ugd2hhdCB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgZm9yIGZ1enppbmcsIGFuZCBJIGNhbiBzdGFydCB0byBkZXZlbG9wIHRoZSByaWdodCBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjAtXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIyLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMTgtICovXG5tbS9zd2FwX3N0YXRlLmM6MzE5OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMyMC1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMzYtICpcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG5tbS9zd2FwX3N0YXRlLmMtMzM4LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzQzPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQ4LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbm1tL3N3YXBfc3RhdGUuYzozNDk6XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzU3LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYzo3NTg6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xubW0vdm1zY2FuLmMtNzU5LVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBTd2FwIENhY2hpbmcgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN3YXAgY2FjaGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGluZ3MgYXJlIGhhbmRsZWQgd2hlbiBwYWdlcyBhcmUgc3dhcHBlZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgKGxpa2VseSBoYW5kbGluZyB0aGUgZGVsZXRpb24gb3IgaW52YWxpZGF0aW9uIG9mIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSkgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCAod2hpY2gsIGZyb20gaXRzIG5hbWluZywgaXMgcHJvYmFibHkgdGhlIGNvcmUgc3dhcC1vdXQgZnVuY3Rpb24sIHBvdGVudGlhbGx5IHdpdGggTWVtQ0ctc3BlY2lmaWMgYXNwZWN0cykuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIGNyaXRpY2FsIHBpZWNlcyBvZiB0aGUgcHV6emxlIHdoZW4gZGVhbGluZyB3aXRoIHBhZ2UgcmVjbGFpbWluZy4KCkkmIzM5O20gc3RhcnRpbmcgbXkgaW52ZXN0aWdhdGlvbiBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rIGZvciB0aGUgY29yZSBzd2FwIG9wZXJhdGlvbnMgYW5kIHRoZSBWTSBzY2FubmluZyBsb2dpYywgd2hlcmUgdGhlIGV2aWN0aW9uIGFuZCBzd2FwLW91dCBkZWNpc2lvbnMgYXJlIG1hZGUuIEkgbmVlZCB0byBzZWUgaG93IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBjYWxsZWQsIGFuZCB3aGF0IHRoZSBjb250ZXh0IGlzLiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgaXQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpdCBpbnRlcmFjdGluZyB3aXRoPwoKTGlrZXdpc2UsIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBvZiBgX19tZW1jZzFfc3dhcG91dGAuIFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQgYXJlIGl0cyBzaWRlIGVmZmVjdHM/IElzIGl0IGRpcmVjdGx5IGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG9yIGFyZSB0aGVyZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zPyBXaGF0JiMzOTtzIHRoZSBvdmVyYWxsIGZsb3cgb2YgcGFnZSBldmljdGlvbiBpbiByZWxhdGlvbiB0byBzd2FwIGNhY2hlIGludmFsaWRhdGlvbj8gVWx0aW1hdGVseSBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCB3aGVyZSB0aGUgc3dhcCBjYWNoZSBpcyBiZWluZyB1cGRhdGVkIGFuZCBjbGVhcmVkLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBsaWZlY3ljbGUgb2YgYSBzd2FwcGVkIHBhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdC8qKlxuIDM1NjpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NzpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU4Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTk6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuIDM2MDpcdCAqXG4gMzYxOlx0ICogUmVwbGFjZSBhbiBleGlzdGluZyBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSB3aXRoIGEgbmV3IGZvbGlvLiBUaGVcbiAzNjI6XHQgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5ldyBmb2xpbyYjMzk7cyBmbGFnIGFuZCBzd2FwXG4gMzYzOlx0ICogZW50cmllcy4gUmVwbGFjZW1lbnQgd2lsbCB0YWtlIHRoZSBuZXcgZm9saW8mIzM5O3Mgc3dhcCBlbnRyeSB2YWx1ZSBhc1xuIDM2NDpcdCAqIHRoZSBzdGFydGluZyBvZmZzZXQgdG8gb3ZlcnJpZGUgYWxsIHNsb3RzIGNvdmVyZWQgYnkgdGhlIG5ldyBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19yZW1vdmVfbWFwcGluZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsYXllciBpbiB0aGUga2VybmVsIGhhbmRsZXMgdW5tYXBwaW5nLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBsb29rIGF0IGBfX3JlbW92ZV9tYXBwaW5nYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWdlIHJlY2xhbWF0aW9uIGFuZCBwb3RlbnRpYWxseSwgdGhlIGNvbXBsZXhpdGllcyBvZiBjbGVhbmluZyB1cCBtYXBwaW5ncyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhY2NvdW50aW5nIGZvciByZWZlcmVuY2UgY291bnRzLCBhbmQgcG9zc2libHkgZGVhbGluZyB3aXRoIGRpcnR5IHBhZ2VzIGFuZCBzd2FwIGVudHJpZXMuIFRoZSAmIzM0O3Ztc2NhbiYjMzQ7IGNvbnRleHQgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBwYWdlIHNjYW5uZXIsIHBlcmhhcHMgZHVyaW5nIGJhY2tncm91bmQgbWVtb3J5IHByZXNzdXJlIHJlY292ZXJ5LiBJdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiBhbnkgbG9jayBvcmRlcmluZyBpcyBpbnZvbHZlZDsgSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGlmIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGFyZSBpbiBwbGFjZSB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZSBpcyBzaGFyZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHJvdXRpbmUgaXMgcmVhbGx5IGRvaW5nIHdpdGggdGhlIFZNIHN0cnVjdHVyZSwgdGhlIHBhZ2UgZmxhZ3MsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChmaWxlLWJhY2tlZCwgYW5vbnltb3VzLCBodWdlIHBhZ2VzLCBldGMuKS4gSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgdW5tYXBwaW5nIGFjdHVhbGx5IGltcGFjdHMgdGhlIHByb2Nlc3MmIzM5O3MgcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCB3aGVyZSB0aGF0ICYjMzQ7bWFwcGluZyYjMzQ7IHRvIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgcmVmZXJyaW5nIGFjdHVhbGx5IHNpdHMgd2l0aGluIHRoZSBvdmVyYWxsIFZNIGxhbmRzY2FwZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFzIHdlbGwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRcdCAqXG4gNzQxOlx0XHQgKiBOb3RlIHRoYXQgaWYgdGhlIGRpcnR5IGZsYWcgaXMgYWx3YXlzIHNldCB2aWEgZm9saW9fbWFya19kaXJ0eSxcbiA3NDI6XHRcdCAqIGFuZCB0aHVzIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuXG4gNzQzOlx0XHQgKi9cbiA3NDQ6XHRcdHJlZmNvdW50ID0gMSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gNzQ1Olx0XHRpZiAoIWZvbGlvX3JlZl9mcmVlemUoZm9saW8sIHJlZmNvdW50KSlcbiA3NDY6XHRcdFx0Z290byBjYW5ub3RfZnJlZTtcbiA3NDc6XHRcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cbiA3NDg6XHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcbiA3NDk6XHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XG4gNzUwOlx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XG4gNzUzOlx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4gNzU0Olx0XHRcdHN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDc1NTpcdFxuIDc1NjpcdFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIDc1NzpcdFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gNzU4Olx0XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIDc1OTpcdFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gNzYwOlx0XHR9IGVsc2Uge1xuIDc2MTpcdFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIDc2MjpcdFxuIDc2MzpcdFx0XHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvO1xuIDc2NDpcdFx0XHQvKlxuIDc2NTpcdFx0XHQgKiBSZW1lbWJlciBhIHNoYWRvdyBlbnRyeSBmb3IgcmVjbGFpbWVkIGZpbGUgY2FjaGUgaW5cbiA3NjY6XHRcdFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXG4gNzY3Olx0XHRcdCAqXG4gNzY4Olx0XHRcdCAqIEJ1dCBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcbiA3Njk6XHRcdFx0ICogYWxyZWFkeSBleGl0aW5nLiAgVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb24sXG4gNzcwOlx0XHRcdCAqIGlub2RlIHJlY2xhaW0gbmVlZHMgdG8gZW1wdHkgb3V0IHRoZSByYWRpeCB0cmVlIG9yXG4gNzcxOlx0XHRcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbiYjMzk7dCBwbGFudCBzaGFkb3dzIGJlaGluZCBpdHNcbiA3NzI6XHRcdFx0ICogYmFjay5cbiA3NzM6XHRcdFx0ICpcbiA3NzQ6XHRcdFx0ICogV2UgYWxzbyBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBmb3IgREFYIG1hcHBpbmdzIGJlY2F1c2UgdGhlXG4gNzc1Olx0XHRcdCAqIG9ubHkgcGFnZSBjYWNoZSBmb2xpb3MgZm91bmQgaW4gdGhlc2UgYXJlIHplcm8gcGFnZXNcbiA3NzY6XHRcdFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbiYjMzk7dCB3YW50IHRvIG1peCBEQVhcbiA3Nzc6XHRcdFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXG4gNzc4Olx0XHRcdCAqIHNhbWUgYWRkcmVzc19zcGFjZS5cbiA3Nzk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fbWVtY2cxX3N3YXBvdXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19tZW1jZzFfc3dhcG91dGAuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLCBwcm9iYWJseSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSXMgaXQgYSBrZXJuZWwtaW50ZXJuYWwgZnVuY3Rpb24/IElzIGl0IGV4cG9zZWQgdmlhIGEgaGVhZGVyIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgZXNzZW50aWFsLiBPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hhdCBpdCBpcyBhY3R1YWxseSBkb2luZy4gSG93IGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGEgY29udHJvbCBncm91cD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc3dhcC1vdXQgYmVoYXZpb3Igd2l0aGluIGEgbWVtY2c/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NjpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MzM9dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTUxLVx0ICogRXhjbHVkZSBzd2FwY2FjaGU6IG9yaWdpbmFsbHkgdG8gYXZvaWQgYSBjb3JydXB0IGRlZmVycmVkIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jOjQ1NTI6XHQgKiBxdWV1ZS4gTm93YWRheXMgdGhhdCBpcyBmdWxseSBwcmV2ZW50ZWQgYnkgX19tZW1jZzFfc3dhcG91dCgpO1xubW0vaHVnZV9tZW1vcnkuYy00NTUzLVx0ICogYnV0IGlmIHBhZ2UgcmVjbGFpbSBpcyBhbHJlYWR5IGhhbmRsaW5nIHRoZSBzYW1lIGZvbGlvLCBpdCBpc1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNDc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI1OC0vKipcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTk6ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjAtICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjY4LSAqL1xubW0vbWVtY29udHJvbC12MS5jOjI2OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbm1tL21lbWNvbnRyb2wtdjEuYy0yNzAte1xuLS1cbm1tL3N3YXBfc3RhdGUuYz0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMyNy1cdGlmIChzd2Fwb3V0KVxubW0vc3dhcF9zdGF0ZS5jOjMyODpcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xubW0vc3dhcF9zdGF0ZS5jLTMyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBTd2Fwb3V0IExvZ2ljKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN3YXBvdXQgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBtbS9tZW1jb250cm9sLXYxLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBmb2N1cyBvbiB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBzd2FwcGluZyBvdXQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGEgbWVtb3J5IGNncm91cCBsaWtlbHkgcmVzaWRlcyBpbiB0aGlzIG9sZGVyIHZlcnNpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIGxvb2sgZm9yIGhvdyB0aGV5IGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgdmVyc2lvbnMgSSB3b3JrZWQgd2l0aCwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZ290Y2hhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIHBhZ2UgcmVwbGFjZW1lbnQgbWVjaGFuaXNtcyBhbmQgdGhlIG92ZXJhbGwgc3dhcC1yZWxhdGVkIGNvZGUuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGluaXRpYXRlIHRoZSBzd2FwLW91dCBwcm9jZXNzIGZyb20gYSBwYXJ0aWN1bGFyIG1lbW9yeSBjb250cm9sIGdyb3VwLiBJIHdpbGwgcXVpY2tseSBzY2FuIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSB0eXBlcyAoYW5vbnltb3VzLCBmaWxlLWJhY2tlZCksIGFueSBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBpdCB1c2VzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcmVjbGFpbS4gTXkgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgcHJvY2VzcyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdCNpZmRlZiBDT05GSUdfU1dBUFxuIDI1ODpcdC8qKlxuIDI1OTpcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG4gMjYwOlx0ICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcbiAyNjE6XHQgKiBAY2k6IHRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyIGhvbGRpbmcgdGhlIHN3YXAgZW50cmllc1xuIDI2MjpcdCAqXG4gMjYzOlx0ICogVHJhbnNmZXIgdGhlIG1lbXN3IGNoYXJnZSBvZiBAZm9saW8gdG8gdGhlIHN3YXAgZW50cnkgc3RvcmVkIGluXG4gMjY0Olx0ICogZm9saW8tXHUwMDNlc3dhcC5cbiAyNjU6XHQgKlxuIDI2NjpcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cbiAyNjc6XHQgKiBiZSBmcmVlZCwgYW5kIGNhbGxlciBtdXN0IGRpc2FibGUgSVJRcyBhbmQgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2suXG4gMjY4Olx0ICovXG4gMjY5Olx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gMjcwOlx0e1xuIDI3MTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZztcbiAyNzI6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiAyNzM6XHRcdHVuc2lnbmVkIGludCBucl9lbnRyaWVzO1xuIDI3NDpcdFxuIDI3NTpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbiAyNzY6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gMjc3Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4gMjc4Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuIDI3OTpcdFxuIDI4MDpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiAyODE6XHRcdFx0cmV0dXJuO1xuIDI4MjpcdFxuIDI4MzpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXG4gMjg0Olx0XHRcdHJldHVybjtcbiAyODU6XHRcbiAyODY6XHRcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuIDI4NzpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xuIDI4ODpcdFx0aWYgKCFvYmpjZylcbiAyODk6XHRcdFx0cmV0dXJuO1xuIDI5MDpcdFxuIDI5MTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDI5MjpcdFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiAyOTM6XHRcdC8qXG4gMjk0Olx0XHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJiMzOTt0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3dhcCBDYWNoZSBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYF9fbWVtY2cxX3N3YXBvdXRgIGFuZCBJIHNlZSB0aGF0IGl0JiMzOTtzIG5vdyAqaW5zaWRlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHNwZWNpZmljYWxseSBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBUaGUga2V5IGlzIHRoYXQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGNsZWFycyB0aGUgc3dhcGNhY2hlIGZsYWcsIHdoaWNoIG1lYW5zIHRoZSBmb2xpbyBpcyBlZmZlY3RpdmVseSByZW1vdmVkIGZyb20gdGhlIHN3YXAgY2FjaGUuICBJIHVuZGVyc3RhbmQgbm93OyBwcmV2aW91c2x5LCBgX19tZW1jZzFfc3dhcG91dGAgd2FzIGNhbGxlZCAqYmVmb3JlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZHVyaW5nIHRoZSByZW1vdmFsIHByb2Nlc3MuIE5vdywgYnkgcGFzc2luZyBgc3dhcG91dCA9IHRydWVgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYF9fbWVtY2cxX3N3YXBvdXRgIGV4ZWN1dGVzIGludGVybmFsbHksIGJlZm9yZSB0aGUgZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGUuCgpOb3csIGlzIHRoaXMgYSB3b3J0aHdoaWxlIGFyZWEgdG8gdGFyZ2V0IHdpdGggZnV6emluZz8gRGVmaW5pdGVseS4gIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBjYWNoZSBhbmQgc3dhcG91dCBsb2dpYywgaW5jbHVkaW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gSXQgdG91Y2hlcyBkaXJlY3RseSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBtbWAsIHNvIEkmIzM5O20gcHV0dGluZyBhICYjMzQ7eWVzJiMzNDsgb24gdGhhdC4KCkkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19TV0FQYCwgb2J2aW91c2x5LiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgQ09ORklHX01FTUNHYCBvciBgQ09ORklHX01FTUNHX1YxYCBhcmUgcmVxdWlyZWQsIGdpdmVuIHRoZSBwcmVzZW5jZSBvZiBgX19tZW1jZzFfc3dhcG91dGAuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGNsYXJpZmljYXRpb24gYnkgbG9va2luZyBpbnRvIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGRlZmluZWQgYW5kIHJlbGF0ZWQgdG8gYF9fbWVtY2cxX3N3YXBvdXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NjpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBtZW1jb250cm9sLmgqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG1lbW9yeSBjb250cm9sIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvciB0cmFja2luZyBpcyBjYXVzaW5nIHRoZSBwcm9ibGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDE5NTAgdG8gMTk3MC4gVGhhdCBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgb3BlcmF0aW9ucywgcG90ZW50aWFsbHkgdGhlIHN0YXRzIGdhdGhlcmluZyBvciByZXNvdXJjZSBsaW1pdGluZyBhc3BlY3RzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIHJhbmdlIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgc28gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBhIGZsYXcgaW4gdGhlIGFjY291bnRpbmcgbG9naWMgdGhhdCBpcyB0cmlnZ2VyaW5nIHRoZSBwcm9ibGVtIEkmIzM5O20gc2VlaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk0NTpcdHtcbjE5NDY6XHRcdHJldHVybiBmYWxzZTtcbjE5NDc6XHR9XG4xOTQ4Olx0XG4xOTQ5Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZW50ZXJfdXNlcl9mYXVsdCh2b2lkKVxuMTk1MDpcdHtcbjE5NTE6XHR9XG4xOTUyOlx0XG4xOTUzOlx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4xOTU0Olx0e1xuMTk1NTpcdH1cbjE5NTY6XHRcbjE5NTc6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4xOTU4Olx0XG4xOTU5Olx0I2lmIGRlZmluZWQoQ09ORklHX01FTUNHX1YxKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcbjE5NjA6XHRcbjE5NjE6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XG4xOTYyOlx0dm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuMTk2MzpcdFxuMTk2NDpcdCNlbHNlXG4xOTY1Olx0XG4xOTY2Olx0c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbjE5Njc6XHRcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbjE5Njg6XHR7XG4xOTY5Olx0fVxuMTk3MDpcdFxuMTk3MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xOTcyOlx0e1xuMTk3MzpcdH1cbjE5NzQ6XHQjZW5kaWZcbjE5NzU6XHRcbjE5NzY6XHQjZW5kaWYgLyogX0xJTlVYX01FTUNPTlRST0xfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGNydWNpYWwgS2NvbmZpZyBzeW1ib2xzIHRoYXQgYXJlIGhpZ2hseSByZWxldmFudCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGhlcmUuIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGNoZWNrIGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIGFuIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbnZlc3RpZ2F0aW9uIGludG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBwb3RlbnRpYWxseSBsZWdhY3kgc3RhdHVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHYxIGlzIGVuYWJsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV3ZXIgdjIgaW1wbGVtZW50YXRpb24gaWYgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBzY2VuYXJpby4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfU1dBUGAuIFN3YXAgYWx3YXlzIGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY29uc3RyYWludHMsIGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgc3dhcCBjYW4gYmUgdHJpY2t5LiBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBvZiBgQ09ORklHX1NXQVBgIGlzIGNyaXRpY2FsIHRvIGtub3dpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgcmVzb3VyY2UgbGltaXRzIGVuZm9yY2VkIGJ5IGFueSBtZW1vcnkgY29udHJvbCBncm91cHMgdGhhdCBhcmUgZW5hYmxlZC4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gYXJlIHdvcmtpbmcgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHX1YxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHX1YxIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgTUVNQ0dfVjFgIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGxpa2VseSB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2gsIGlzIHRvIHVzZSBgZ3JlcGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLCBhcyB0aG9zZSBhcmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gZmluZCBtZW1vcnkgY29udHJvbCBncm91cCBvcHRpb25zLiBJIGZpZ3VyZSBlaXRoZXIgaXQmIzM5O3MgZGlyZWN0bHkgZGVmaW5lZCB0aGVyZSwgb3IgaXQmIzM5O3MgaW5jbHVkZWQgd2l0aGluIGFub3RoZXIgY29uZmlnIGZpbGUgdGhhdCAqaXMqIGRlZmluZWQgdGhlcmUuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIHRhcmdldGVkIHNlYXJjaDsgaG9wZWZ1bGx5LCBpdCB5aWVsZHMgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCByaWdodCBhd2F5LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgZGVlcGVyIGRpdmUsIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgYXJvdW5kIHRoaXMgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA3LVxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGxpbmVzIGZyb20gYGluaXQvS2NvbmZpZ2AgeW91IG1lbnRpb25lZDoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIFNlY3Rpb24gb24gUmVzb3VyY2UgQ29udHJvbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDEwODAgdGhyb3VnaCAxMTIwIG9mIGBpbml0L0tjb25maWdgLiBSaWdodCwgdGhpcyBpcyB3aGVyZSB0aGV5JiMzOTtyZSBkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gcmVzb3VyY2UgY29udHJvbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHNlZWluZyB0aGUgY29uZGl0aW9uYWwgbG9naWMgZm9yIGBDT05GSUdfUkVTT1VSQ0VfQ09OVFJPTGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgaWRlYSBpcyBlbmFibGluZyB0aGUgYWJpbGl0eSB0byBjb250cm9sIHJlc291cmNlcywgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBzZWN0aW9uIGxpa2VseSBwZXJ0YWlucyB0byBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIENQVSwgbWVtb3J5LCBvciBJL08gYWNjZXNzIGluIGEgbW9yZSBncmFudWxhciB3YXkuCgpUaGV5JiMzOTtyZSBjaGVja2luZyBhIGZldyB0aGluZ3MgZmlyc3QuIGBERUZBVUxUIHlgIGlzIHNldCwgd2hpY2ggaW1wbGllcyB0aGF0IGl0JiMzOTtzIGFjdGl2ZSBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyBwcm9iYWJseSBiZWVuIHRlc3RlZC4gSXQgc2VlbXMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19DR1JPVVBTYC4gQWgsIHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBSZXNvdXJjZSBjb250cm9sIGlzIGJ1aWx0IG9uIGNncm91cHMuIE5vdywgSSBzZWUgdGhlIGBzZWxlY3RgIHN0YXRlbWVudHMsIHdoaWNoIGFyZSBjcnVjaWFsLiBgc2VsZWN0IFJFU09VUkNFX0NPTlRST0xfQ1BVYCBhbmQgYHNlbGVjdCBSRVNPVVJDRV9DT05UUk9MX01FTU9SWWAgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgaXMgc2V0IHVwIHRoaXMgd2F5LCB0ZWxscyBtZSB0aGF0IHRoZXJlIGlzIGFuIGV4cGVjdGF0aW9uIHRoYXQgaWYgcmVzb3VyY2UgY29udHJvbCBpcyBlbmFibGVkLCBib3RoIENQVSBhbmQgbWVtb3J5IGNvbnRyb2wgd2lsbCBiZSBuZWVkZWQuIEhvd2V2ZXIsIHRoZSBleGFjdCBtZWNoYW5pc21zIGZvciBtYW5hZ2luZyB0aG9zZSByZXNvdXJjZXMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlLCB2aWEgdGhlIHNlbGVjdGVkIG9wdGlvbnMuIFRoaXMgcmVpbmZvcmNlcyB0aGUgbW9kdWxhcml0eSBvZiB0aGUga2VybmVsIGRlc2lnbjsgcmVzb3VyY2UgY29udHJvbCBpcyBhIGhpZ2gtbGV2ZWwgZW5hYmxlci4KClRoZXkmIzM5O3ZlIGV2ZW4gaGFuZGxlZCB0aGUgYGhlbHBgIHNlY3Rpb24gY2xlYXJseSBzdGF0aW5nIHRoZSBpbnRlbnQgb2YgdGhlIGNvbnRyb2wuIEl0IHN0YXRlcyB0aGF0IHRoZSBvcHRpb25zIGNvbmZpZ3VyZSByZXNvdXJjZSBhbGxvY2F0aW9uIHRvIGFsbG93IGZvciBtb3JlIGdyYW51bGFyIGNvbnRyb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA4MTpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MjpcdFxuMTA4MzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHXG4xMDg2Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg3Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg4Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA5MDpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkxOlx0XHRoZWxwXG4xMDkyOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNjpcdFx0ZGVmYXVsdCB5XG4xMTA3Olx0XG4xMTA4Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA5Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMTA6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTE6XHRcdGRlZmF1bHQgblxuMTExMjpcdFx0aGVscFxuMTExMzpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTQ6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMTU6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTE2Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExNzpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTg6XHRcbjExMTk6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gU3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIHRoZSBiYXNpY3MuIEJ1dCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgcmVhbGx5IGRvdWJsZS1jaGVjayB0aGUgc3dhcCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdvIGludG8gS2NvbmZpZyBhbmQgZXhwbGljaXRseSBsb29rIGZvciBgQ09ORklHX1NXQVBgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byBob3cgc3dhcHBpbmcgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIHNldHRpbmcuIEFsd2F5cyBpbXBvcnRhbnQgdG8gYmUgbWV0aWN1bG91cyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGtlcm5lbCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVAkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFN3YXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGl0IHRvdWNoZXMgYENPTkZJR19TV0FQYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19NRU1DR2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gc2VlIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBkaWZmIG9ubHkgYWZmZWN0cyBhIGhhbmRmdWwgb2YgZmlsZXM6IGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gSW4gYG1tL3N3YXBfc3RhdGUuY2AsIEkgc2VlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBiZWluZyBtb2RpZmllZC4gT3ZlciBpbiBgbW0vdm1zY2FuLmNgLCB0aGVyZSYjMzk7cyBgX19yZW1vdmVfbWFwcGluZ2AuIEFuZCwgbG9va2luZyBhdCB0aGUgY2FsbCBwYXRoLCBgX19tZW1jZzFfc3dhcG91dGAgaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4KClRoZSBrZXkgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHViaXF1aXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXNlIGNvbW1vbiByb3V0aW5lcywgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gc3dhcCBjYWNoZSBvcGVyYXRpb25zPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93LiAgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBjbGVhcmx5IHN3YXAtY2FjaGUgc3BlY2lmaWM7IG5vIHN1cnByaXNlIHRoZXJlLiBCdXQgYF9fcmVtb3ZlX21hcHBpbmdgIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHVzZWQgaW4gcGFnZSByZWNsYWltLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHZtc2NhbiBhbmQgaXMgYWxzbyBjYWxsZWQgdGhyb3VnaCBgcmVtb3ZlX21hcHBpbmdgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIGJvdGggYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTExMjU9c3RhdGljIGludCBtZV9zd2FwY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXG5tbS9tZW1vcnktZmFpbHVyZS5jOjExMzA6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXG4tLVxubW0vbWVtb3J5LmM9NDg0ND12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MDc2LVx0XHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXG5tbS9tZW1vcnkuYzo1MDc3Olx0XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL21lbW9yeS5jLTUwNzgtXHRcdGdvdG8gb3V0X25vbWFwO1xuLS1cbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xOTQxLVx0XHQvKlxubW0vc2htZW0uYzoxOTQyOlx0XHQgKiBUaGUgc3dhcF9jYWNoZV9kZWxfZm9saW8oKSBiZWxvdyBjb3VsZCBiZSBsZWZ0IGZvclxubW0vc2htZW0uYy0xOTQzLVx0XHQgKiBzaHJpbmtfZm9saW9fbGlzdCgpJiMzOTtzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XG4tLVxubW0vc2htZW0uYy0xOTQ3LVx0XHQgKi9cbm1tL3NobWVtLmM6MTk0ODpcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc2htZW0uYy0xOTQ5LVx0XHRnb3RvIHJlZGlydHk7XG4tLVxubW0vc2htZW0uYz0yMzUxPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTIzNjgtXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XG5tbS9zaG1lbS5jOjIzNjk6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zaG1lbS5jLTIzNzAtXHQvKlxuLS1cbm1tL3NobWVtLmM9MjQ1Nj1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjU5OC1cdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcbm1tL3NobWVtLmM6MjU5OTpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3NobWVtLmMtMjYwMC1cdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLS1cbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMTQ6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL3N3YXAuaC0zMTUtc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjAtXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIyLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcC5oLTQ1MC1cbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwLmgtNDUyLXtcbi0tXG5tbS9zd2FwLmgtNDU0LVxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTQ1Ni1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzAzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwX3N0YXRlLmMtMzIwLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMzMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMzQ6ICogc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zMzUtICogQGZvbGlvOiBUaGUgZm9saW8uXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqXG5tbS9zd2FwX3N0YXRlLmM6MzM3OiAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0Mi0gKi9cbm1tL3N3YXBfc3RhdGUuYzozNDM6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcF9zdGF0ZS5jLTM0NC17XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9zd2FwX3N0YXRlLmM6MzQ5Olx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG5tbS9zd2FwX3N0YXRlLmMtMzUwLVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xOTg9c3RhdGljIGludCBfX3RyeV90b19yZWNsYWltX3N3YXAoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMjUxLVxubW0vc3dhcGZpbGUuYzoyNTI6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTI1My1cdGZvbGlvX3NldF9kaXJ0eShmb2xpbyk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNjE4LVx0XHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcbm1tL3N3YXBmaWxlLmM6MTYxOTpcdFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxubW0vc3dhcGZpbGUuYy0xNjIwLVx0XHQgKi9cbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDI9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3ODAtXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xubW0vc3dhcGZpbGUuYzoxNzgxOlx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTE3ODItXHRcdGdvdG8gZmFpbGVkO1xuLS1cbm1tL3N3YXBmaWxlLmM9MjExND1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjEyMC1cbm1tL3N3YXBmaWxlLmM6MjEyMTpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMjEyMi1cdGZvbGlvX3NldF9kaXJ0eShmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9NzAyPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy03NTctXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbm1tL3Ztc2Nhbi5jOjc1ODpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG5tbS92bXNjYW4uYy03NTktXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbi0tXG5tbS96c3dhcC5jPTk3ND1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtMTA0NC1cdGlmIChyZXQpIHtcbm1tL3pzd2FwLmM6MTA0NTpcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0venN3YXAuYy0xMDQ2LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3MAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLiBJIHNlZSB0aGF0IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyB0aGUgcHJpbWFyeSBDIGZ1bmN0aW9uIGltcGFjdGVkLCB3aXRoIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBfX3JlbW92ZV9tYXBwaW5nYCBhbHNvIG1vZGlmaWVkLiBJbnRlcmVzdGluZy4gVGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBjYWxsIGlzIGJlaW5nIGludGVncmF0ZWQgZGlyZWN0bHkgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgcG9pbnQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIHBhdGhzLCBzbyB0aGlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGNvdmVyZWQuIFllcywgd2UgaGF2ZSBDT05GSUdfU1dBUCwgd2hpY2ggaXMgbmVjZXNzYXJ5LCBhbmQgYWxzbyBDT05GSUdfTUVNQ0cgYW5kIENPTkZJR19NRU1DR19WMSwgd2hpY2ggYXJlIGV4cGVjdGVkIGZvciB0aGUgbWVtY2cgaW50ZXJhY3Rpb24gdmlhIGBfX21lbWNnMV9zd2Fwb3V0YC4gR29vZC4gTGV0IG1lIHRyaXBsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgc3ltYm9scyBhcmUgY2xlYW46ICYjMzQ7U1dBUCwmIzM0OyAmIzM0O01FTUNHLCYjMzQ7IGFuZCAmIzM0O01FTUNHX1YxLiYjMzQ7IFllcCwgdGhvc2UgYXJlIGNvcnJlY3QuCgpGaW5hbGx5LCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyB0byBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIGltcG9ydGFudCBwaWVjZXMgaW4gcGxhY2UgZm9yIHRoZSBmdXp6ZXIuIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLCBnaXZlbiB0aGUgY29yZSBtZW1vcnkgY2hhbmdlcy4gVGhlIHJlYXNvbmluZyBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBjaGFuZ2VzOyBpbnRlZ3JhdGluZyBgX19tZW1jZzFfc3dhcG91dGAgaW50byB0aGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uIHRvdWNoZXMgcmVjbGFpbSBhbmQgc3dhcCBwYXRocy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBhcHByb3ByaWF0ZWx5IGxpc3RlZCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQuCgpBbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIExldCYjMzk7cyBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXG5cblRoaXMgY2hhbmdlIGludm9sdmVzIHB1cmVseSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWM6XG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxuMi4gVGhlIG5ldyBgc3dhcG91dGAgYm9vbGVhbiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBhIGNvbnN0YW50IChgdHJ1ZWAgaW4gYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgZmFsc2VgIGluIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2ApLCBzbyBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBObyBkYXRhIGlzIGNvcGllZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMwOTJiYmEwMzI4NzcwYTE4NjRhZjcyNWQ5YTdhZDk3MWU3YjIxNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE3OjEyOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMxOSw3ICYjNDM7MzE5LDggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKLQkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTsKJiM0MzsJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywKJiM0MzsJCQkgICAgYm9vbCBzd2Fwb3V0KTsKIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCQlzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpOwogCkBAIC00NTIsNyAmIzQzOzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywKJiM0MzsJCWJvb2wgc3dhcG91dCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDMwNTg3N2UxZjRkN2IuLjM4OTE2ZWE5NmFjNTUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTMwNiwyMSAmIzQzOzMwNiwyOCBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiBAZm9saW86IFRoZSBmb2xpby4KICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uCiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLgomIzQzOyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uCiAgKgogICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLgogICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC4KICAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUKICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCiYjNDM7ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRcwomIzQzOyAqIHNob3VsZCBiZSBkaXNhYmxlZC4KICAqLwogdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdykKJiM0MzsJCQkgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KQogewogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKLQlfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7CiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTsKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTsKJiM0MzsKJiM0MzsJaWYgKHN3YXBvdXQpCiYjNDM7CQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7CiYjNDM7CiYjNDM7CV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIH0KIAogLyoqCkBAIC0zMzksNyAmIzQzOzM0Niw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTsKLQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpOwomIzQzOwlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAogCWZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI0NWY2OGM3NWIyODkuLjI5YmNlZDQzYjBjZTYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC03NTUsOCAmIzQzOzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSkKIAkJCXNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7Ci0JCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKLQkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7CiYjNDM7CQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTsKIAkJc3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpOwogCX0gZWxzZSB7CiAJCXZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBzY29wZS4gVGhpcyBsb29rcyBsaWtlIGEgc2VjdXJpdHkgYW5hbHlzaXMvdHJpYWdlIG9mIGEgTGludXgga2VybmVsIHBhdGNoLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYXBwbGljYWJpbGl0eSBvZiBLQVNBTiB2ZXJzdXMgS01TQU4uIEdvb2QsIHRoaXMgaXMgYSBzYWZlLCBkZWZlbnNpdmUgY29kZSByZXZpZXcgYW5kIHNhbml0aXplciBhc3Nlc3NtZW50LCBub3RoaW5nIHRvbyByaXNreS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZGlmZiB0YXJnZXRzIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBtbS92bXNjYW4uY2Agd2l0aGluIHRoZSBgX19yZW1vdmVfbWFwcGluZygpYCBmdW5jdGlvbi4gSXQgYXBwZWFycyBhIGZ1bmN0aW9uIGNhbGwsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IGEgbmV3IGJvb2xlYW4gYHN3YXBvdXRgLiBJbiBgbW0vc3dhcF9zdGF0ZS5jYCwgSSBzZWUgaG93IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBub3cgcmVvcmRlcmVkLCB3aXRoIGBfX21lbWNnMV9zd2Fwb3V0YCBwb3RlbnRpYWxseSBiZWluZyBjb25kaXRpb25hbGx5IGNhbGxlZC4gVGhlIGxvZ2ljIGlzIHRoYXQgdGhlcmUgaXMgYSBndWFyZCBhcm91bmQgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgIHVzaW5nIHRoZSBuZXcgYm9vbGVhbi4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoaXMgcmVvcmRlcmluZyBhbmQgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgd2h5IGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgdGhpcyB3YXkuIFRpbWUgdG8gdXNlIGBncmVwcGVyYCBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3Ztc2Nhbi5jYCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEhvcGVmdWxseSwgdGhpcyBjb250ZXh0IHdpbGwgaGVscCBtZSBkZWNpZGUgaWYgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMganVzdGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjctXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjg6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIEZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLXYxLmNgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBfX21lbWNnMV9zd2Fwb3V0YC4gTGV0JiMzOTtzIGdyYWIgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGhlYWQgb3ZlciB0byBhcm91bmQgbGluZSAyNTguIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIG1lbW9yeSBjb250cm9sLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBtZW1vcnkgaXMgc3dhcHBlZCBvdXQgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcyAoY2dyb3VwcykuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlRyaWdnZXIgQ29uZGl0aW9uczoqKiBXaGF0ICpjYXVzZXMqIHRoZSBzeXN0ZW0gdG8gY2FsbCB0aGlzIGZ1bmN0aW9uPyBJcyBpdCBhIGxvdy1tZW1vcnkgc2l0dWF0aW9uIHdpdGhpbiB0aGUgY2dyb3VwLCBhIHByb2FjdGl2ZSBzd2Fwb3V0IHN0cmF0ZWd5LCBvciBzb21ldGhpbmcgZWxzZT8KKiAgICoqVGFyZ2V0IE1lbW9yeToqKiBXaGljaCBtZW1vcnkgcmVnaW9ucyBvciBwYWdlcyBkb2VzIHRoaXMgZnVuY3Rpb24gYXR0ZW1wdCB0byBzd2FwIG91dD8gSXMgaXQgcHJpbWFyaWx5IGFub255bW91cyBwYWdlcywgZmlsZS1iYWNrZWQgcGFnZXMsIG9yIGEgbWl4PyBEb2VzIGl0IGFjY291bnQgZm9yIGRpZmZlcmVudCBtZW1vcnkgem9uZXMgb3IgTlVNQSBub2Rlcz8KKiAgICoqU3dhcC1PdXQgTWVjaGFuaXNtOioqIFdoYXQmIzM5O3MgdGhlICphY3R1YWwqIHN3YXAtb3V0IHByb2NlZHVyZT8gRG9lcyBpdCBpbnZvbHZlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgcGFnZSB0YWJsZXMsIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgY2FjaGUsIG9yIGNhbGxzIHRvIHNwZWNpZmljIHN3YXAgb3BlcmF0aW9ucz8KKiAgICoqQ2dyb3VwIEludGVncmF0aW9uOioqIEhvdyBleGFjdGx5IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIGNncm91cCYjMzk7cyBtZW1vcnkgYWNjb3VudGluZz8gRG9lcyBpdCB1cGRhdGUgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3MsIGFuZCBpcyB0aGVyZSBhbnkgcHJvdGVjdGlvbiBvZiB0aGUgY2dyb3VwJiMzOTtzIG1lbW9yeSBmb290cHJpbnQ/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgd2l0aGluIHRoZSBmdW5jdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGluZ3MgZ28gd3JvbmcgZHVyaW5nIHRoZSBzd2FwIHByb2Nlc3M/CiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgZnVuY3Rpb25zOioqIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBzeXN0ZW0gY2FsbCBvciBpbnRlcmFjdCB3aXRoIGl0LgoKSSYjMzk7bGwgYmUgcmVhZGluZyBmb3IgdW5kZXJzdGFuZGluZywgc28gdGhlc2UgYXJlIGp1c3QgbXkgaW5pdGlhbCBnb2Fscy4gQXMgYSBzZWFzb25lZCBleHBlcnQsIEkmIzM5O20gZXhwZWN0aW5nIGEgY2xlYW4sIG9yZ2FuaXplZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSB0cnlpbmcgdG8gZ2F1Z2UgaWYgYW55IG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkLCBhbmQgaWYgbm90LCB3aGVyZSBJIG1pZ2h0IGxvb2sgdG8gb3B0aW1pemUgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0XG4gMjUxOlx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMjUyOlx0XHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMjUzOlx0XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiAyNTQ6XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0I2lmZGVmIENPTkZJR19TV0FQXG4gMjU4Olx0LyoqXG4gMjU5Olx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbiAyNjA6XHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxuIDI2MTpcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXG4gMjYyOlx0ICpcbiAyNjM6XHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cbiAyNjQ6XHQgKiBmb2xpby1cdTAwM2Vzd2FwLlxuIDI2NTpcdCAqXG4gMjY2Olx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xuIDI2NzpcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cbiAyNjg6XHQgKi9cbiAyNjk6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuIDI3MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDI3MzpcdFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gMjc0Olx0XG4gMjc1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIDI3NjpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiAyNzc6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiAyNzg6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gMjc5Olx0XG4gMjgwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDI4MTpcdFx0XHRyZXR1cm47XG4gMjgyOlx0XG4gMjgzOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcbiAyODQ6XHRcdFx0cmV0dXJuO1xuIDI4NTpcdFxuIDI4NjpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG4gMjg3Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG4gMjg4Olx0XHRpZiAoIW9iamNnKVxuIDI4OTpcdFx0XHRyZXR1cm47XG4gMjkwOlx0XG4gMjkxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMjkyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIDI5MzpcdFx0LypcbiAyOTQ6XHRcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3RcbiAyOTU6XHRcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcbiAyOTY6XHRcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5JiM0Mztzd2FwIGNoYXJnZS5cbiAyOTc6XHRcdCAqL1xuIDI5ODpcdFx0bnJfZW50cmllcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiAyOTk6XHRcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ2FjaGUgRGVsZXRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWxldGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgc3dhcCBjYWNoZSBhIGJpdCBiZXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMwMCB3aXRoaW4gYG1tL3N3YXBfc3RhdGUuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnNpZGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byByZW1vdmluZyBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZSwgYW5kIGEgZGV0YWlsZWQgbG9vayBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgZGVsZXRpb24gd29ya2Zsb3cuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgb3Igb3B0aW1pemF0aW9ucyB0aGV5IG1pZ2h0IGVtcGxveS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTc1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdHJvdWJsZXNob290aW5nIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHdlIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYCBhcm91bmQgbGluZSA3NTUuIFRoYXQgYXJlYSwgYXMgSSByZWNhbGwsIGxpa2VseSBkZWFscyB3aXRoIHRoZSBwYWdlIHJlY2xhaW0gcHJvY2VzcywgcG90ZW50aWFsbHkgd2hlcmUgdGhlIHpvbmUgcmVjbGFpbWluZyBsb2dpYyBjb21lcyBpbnRvIHBsYXkuIEl0JiMzOTtzIGEga2V5IGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwmIzM5O3MgZGVjaWRpbmcgd2hhdCBwYWdlcyB0byBldmljdCwgaG93IGl0IHByaW9yaXRpemVzIHRob3NlIHBhZ2VzLCBhbmQgd2hhdCBmYWN0b3JzIGFyZSBpbmZsdWVuY2luZyB0aGF0IGRlY2lzaW9uLiBHaXZlbiB0aGUgbnVhbmNlcyBvZiBtZW1vcnkgcmVjbGFpbSwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgc3lzdGVtLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQwOlx0XHQgKlxuIDc0MTpcdFx0ICogTm90ZSB0aGF0IGlmIHRoZSBkaXJ0eSBmbGFnIGlzIGFsd2F5cyBzZXQgdmlhIGZvbGlvX21hcmtfZGlydHksXG4gNzQyOlx0XHQgKiBhbmQgdGh1cyB1bmRlciB0aGUgaV9wYWdlcyBsb2NrLCB0aGVuIHRoaXMgb3JkZXJpbmcgaXMgbm90IHJlcXVpcmVkLlxuIDc0MzpcdFx0ICovXG4gNzQ0Olx0XHRyZWZjb3VudCA9IDEgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDc0NTpcdFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXG4gNzQ2Olx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzQ3Olx0XHQvKiBub3RlOiBhdG9taWNfY21weGNoZyBpbiBmb2xpb19yZWZfZnJlZXplIHByb3ZpZGVzIHRoZSBzbXBfcm1iICovXG4gNzQ4Olx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7XG4gNzQ5Olx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xuIDc1MDpcdFx0XHRnb3RvIGNhbm5vdF9mcmVlO1xuIDc1MTpcdFx0fVxuIDc1MjpcdFxuIDc1MzpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIDc1NDpcdFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiA3NTU6XHRcbiA3NTY6XHRcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiA3NTc6XHRcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIDc1ODpcdFx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiA3NTk6XHRcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIDc2MDpcdFx0fSBlbHNlIHtcbiA3NjE6XHRcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiA3NjI6XHRcbiA3NjM6XHRcdFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZnJlZV9mb2xpbztcbiA3NjQ6XHRcdFx0LypcbiA3NjU6XHRcdFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXG4gNzY2Olx0XHRcdCAqIG9yZGVyIHRvIGRldGVjdCByZWZhdWx0cywgdGh1cyB0aHJhc2hpbmcsIGxhdGVyIG9uLlxuIDc2NzpcdFx0XHQgKlxuIDc2ODpcdFx0XHQgKiBCdXQgZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXG4gNzY5Olx0XHRcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxuIDc3MDpcdFx0XHQgKiBpbm9kZSByZWNsYWltIG5lZWRzIHRvIGVtcHR5IG91dCB0aGUgcmFkaXggdHJlZSBvclxuIDc3MTpcdFx0XHQgKiB0aGUgbm9kZXMgYXJlIGxvc3QuICBEb24mIzM5O3QgcGxhbnQgc2hhZG93cyBiZWhpbmQgaXRzXG4gNzcyOlx0XHRcdCAqIGJhY2suXG4gNzczOlx0XHRcdCAqXG4gNzc0Olx0XHRcdCAqIFdlIGFsc28gZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxuIDc3NTpcdFx0XHQgKiBvbmx5IHBhZ2UgY2FjaGUgZm9saW9zIGZvdW5kIGluIHRoZXNlIGFyZSB6ZXJvIHBhZ2VzXG4gNzc2Olx0XHRcdCAqIGNvdmVyaW5nIGhvbGVzLCBhbmQgYmVjYXVzZSB3ZSBkb24mIzM5O3Qgd2FudCB0byBtaXggREFYXG4gNzc3Olx0XHRcdCAqIGV4Y2VwdGlvbmFsIGVudHJpZXMgYW5kIHNoYWRvdyBleGNlcHRpb25hbCBlbnRyaWVzIGluIHRoZVxuIDc3ODpcdFx0XHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXG4gNzc5Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcXVlc3Rpb246CgoqKkRlY29uc3RydWN0aW5nIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBDYWxsZXJzKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBzd2FwIGNhY2hlIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5LCB3aGVyZSBlcnJvcnMgb3IgdW51c3VhbCBzaXR1YXRpb25zIGNvdWxkIGFyaXNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgY29kZSBhcmNoYWVvbG9neSBhbmQgc2VlIHdoYXQgZnVuY3Rpb25zIHVzZSBpdCBhbmQgaW4gd2hhdCBjb250ZXh0LiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNhbGxlcnMgdG9vPyBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYmVnaW4gbXkgZXhwbG9yYXRpb24uIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIChmb2xpYWdlLCBzd2FwIGNhY2hlKSB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93LiBEZXBlbmRpbmcgb24gdGhlIGNvZGViYXNlLCBJIGNhbiBwcm9iYWJseSB1c2UgbXkgSURFJiMzOTtzICYjMzQ7ZmluZCB1c2FnZXMmIzM0OyBvciBhIHNpbWlsYXIgZmVhdHVyZSB0byBnZXQgYSBxdWljayBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBlYWNoIGNhbGxlciwgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgcGxhY2VzIHdoZXJlIHRoZSBjYWxsIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBndWFyZGVkIGJ5IGVycm9yIGNoZWNrcz8gVGhpcyBjYW4gcHJvdmlkZSBpbnNpZ2h0IGludG8gcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGluIHRoZSBzeXN0ZW0uCiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgaXMgdGhlIGFjY2VzcyB0byB0aGUgc3dhcCBjYWNoZSBzeW5jaHJvbml6ZWQgYXJvdW5kIHRoZSBjYWxsIHRvIGRlbGV0ZSBhIGZvbGlvPyBBcmUgdGhlcmUgbG9ja3Mgb3IgYXRvbWljIG9wZXJhdGlvbnMgaW52b2x2ZWQ/CiogICAqKkNvbnRleHQ6KiogV2hhdCBpcyB0aGUgaGlnaC1sZXZlbCBvcGVyYXRpb24gdGhlIGNvZGUgaXMgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2hlbiBpdCBkZWxldGVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZT8gSXMgaXQgcmVsYXRlZCB0byBwYWdlIHJlY2xhaW0sIHdyaXRlYmFjaywgb3Igc29tZXRoaW5nIGVsc2U/CiogICAqKkNvbmN1cnJlbmN5OioqIEFueSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgc3dhcCBjYWNoZT8KKiAgICoqUmFjZSBDb25kaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8KKiAgICoqRG91YmxlIEZyZWUgUG9zc2liaWxpdGllczoqKiBJcyBpdCBwb3NzaWJsZSBmb3IgYSBmb2xpbyB0byBiZSBkZWxldGVkIHR3aWNlPwoqICAgKipNZW1vcnkgTGVha3M6KiogQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgdGhlIGZvbGlvIGlzIGluY29ycmVjdGx5IHJlbGVhc2VkPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcHJvY2VzcywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiwgYW5kIEkgbXVzdCBub3QgYWxsb3cgYW55IGFzc3VtcHRpb25zIHRvIGNyZWVwIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIwLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5tbS9zd2FwLmg6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwLmg9NDUxPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXAuaC00NTQtXG5tbS9zd2FwLmg6NDU1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtNDU2LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zMDUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjMxOTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqXG5tbS9zd2FwX3N0YXRlLmM6MzM3OiAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTM0Mz12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9zd2FwX3N0YXRlLmM6MzQ5Olx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG5tbS9zd2FwX3N0YXRlLmMtMzUwLVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNjE4LVx0XHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcbm1tL3N3YXBmaWxlLmM6MTYxOTpcdFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxubW0vc3dhcGZpbGUuYy0xNjIwLVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYz03MDI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTc1Ny1cdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xubW0vdm1zY2FuLmM6NzU4Olx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTc1OS1cdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzgyCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uIG9mIFN3YXAgQ2FjaGUgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IG1vdmluZyB0aGUgY2FsbCB0byBgX19tZW1jZzFfc3dhcG91dGAgd2l0aGluIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCB3aGVuIGBzd2Fwb3V0YCBpcyB0cnVlLiBQcmV2aW91c2x5LCBpdCB3YXMgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gYF9fcmVtb3ZlX21hcHBpbmdgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGEgcmVhcnJhbmdlbWVudCBvZiB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwcm9jZXNzLCB3aXRoIHRoZSBpbXBvcnRhbnQgYml0IGJlaW5nIHRoYXQgYF9fbWVtY2cxX3N3YXBvdXRgIG5vdyBoYXBwZW5zICpiZWZvcmUqIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd2FycmFudCBhIEtNU0FOIHJ1bj8gTGV0JiMzOTtzIGFuYWx5emUuIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIGFyZSBkZWVwIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbHMuIFRoZXkmIzM5O3JlIHRvdWNoaW5nIHBhZ2Ugc3RhdGVzLCBjZ3JvdXAgYWNjb3VudGluZywgYW5kIHRoZSBzd2FwIGNhY2hlIHN0cnVjdHVyZXMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgdGhleSYjMzk7cmUgZG9pbmcgYW55dGhpbmcgdGhhdCB3b3VsZCB0cmlnZ2VyIEtNU0FOLiBUaGV5JiMzOTtyZSBub3QgYWxsb2NhdGluZyBuZXcgYnVmZmVycywgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlIGFyZSBubyBicmFuY2hlcyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoZSBwYXRjaCBpcywgYXQgaXRzIGNvcmUsIGEgcmVmYWN0b3JpbmcsIGNoYW5naW5nIHRoZSAqb3JkZXIqIG9mIG9wZXJhdGlvbnMsIG5vdCB0aGUgKm5hdHVyZSogb2YgdGhlIGRhdGEgYmVpbmcgbWFuaXB1bGF0ZWQuCgpUaGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgbmV3IHN0cnVjdHVyZXMsIHJlYWRpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSBzdHJhaWdodCByZWZhY3RvciB3aGVyZSB0aGUgdmFsdWVzIHBhc3NlZCB0byBmdW5jdGlvbnMgYXJlIGFscmVhZHkgd2VsbCBkZWZpbmVkLCBzbyB0aGVyZSBhcmUgbm8gdW5rbm93bnMgb24gd2hpY2ggdG8gdHJpZ2dlciBLTVNBTiwgYXQgYWxsLiBBbnkgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG1lY2hhbmlzbXMsIHN1Y2ggYXMgS0FTQU4gYW5kIExPQ0tERVAsIHNob3VsZCBjYXRjaCBhbnkgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIGlzc3Vlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0ICpjb3VsZCogYmUgaW50cm9kdWNlZCBkdWUgdG8gdGhlIHNoaWZ0IGluIG9yZGVyaW5nLiBJbiBvdGhlciB3b3JkcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBzdGFuZGFyZCBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFNvLCB0aGUgY29uY2x1c2lvbiBpczogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHBhdGggYnkgYWRkaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIgYHN3YXBvdXRgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGFuZCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKWAgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpYC5cblxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcbjEuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBUaGUgbmV3IGBzd2Fwb3V0YCBib29sZWFuIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGEgY29uc3RhbnQgKGB0cnVlYCBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIGBmYWxzZWAgaW4gYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCksIHNvIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgcmVsYXRlIHRvIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIG9yIG1lbWNnIHN0YXRlIGNvbnNpc3RlbmN5LCB3aGljaCBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIGludGVybmFsIFZNIGFzc2VydGlvbnMgKGBWTV9CVUdfT05fRk9MSU9gLCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCkuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHBhdGggYnkgYWRkaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIgYHN3YXBvdXRgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGFuZCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKWAgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpYC5cblxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcbjEuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBUaGUgbmV3IGBzd2Fwb3V0YCBib29sZWFuIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGEgY29uc3RhbnQgKGB0cnVlYCBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIGBmYWxzZWAgaW4gYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCksIHNvIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgcmVsYXRlIHRvIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIG9yIG1lbWNnIHN0YXRlIGNvbnNpc3RlbmN5LCB3aGljaCBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIGludGVybmFsIFZNIGFzc2VydGlvbnMgKGBWTV9CVUdfT05fRk9MSU9gLCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCkuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjowOC44NzYyODk2NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzMyMTg3NjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHBhdGggYnkgYWRkaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIgYHN3YXBvdXRgIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGFuZCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKWAgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpYC5cXG5cXG5UaGlzIGNoYW5nZSBpbnZvbHZlcyBwdXJlbHkgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljOlxcbjEuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXFxuMi4gVGhlIG5ldyBgc3dhcG91dGAgYm9vbGVhbiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBhIGNvbnN0YW50IChgdHJ1ZWAgaW4gYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgZmFsc2VgIGluIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2ApLCBzbyBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuMy4gTm8gZGF0YSBpcyBjb3BpZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBldGMuKS5cXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgcmVsYXRlIHRvIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIG9yIG1lbWNnIHN0YXRlIGNvbnNpc3RlbmN5LCB3aGljaCBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIGludGVybmFsIFZNIGFzc2VydGlvbnMgKGBWTV9CVUdfT05fRk9MSU9gLCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCkuXFxuXFxuVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSBieSBtb3ZpbmcgdGhlIF9fbWVtY2cxX3N3YXBvdXQgaW52b2NhdGlvbiBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyB3aGVuIHN3YXBwaW5nIG91dC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgY2FjaGUgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9zd2FwX3N0YXRlLmMgYW5kIG1tL3Ztc2Nhbi5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjowOC44NzYyOTQ0NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg1NDc3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMDkyYmJhMDMyODc3MGExODY0YWY3MjVkOWE3YWQ5NzFlN2IyMTU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTI6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdFxcdCAgICBib29sIHN3YXBvdXQpO1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XFxuIFxcbkBAIC00NTIsNyArNDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdGJvb2wgc3dhcG91dClcXG4ge1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi4zODkxNmVhOTZhYzU1IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0zMDYsMjEgKzMwNiwyOCBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbisgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAgKlxcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuICAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAgKlxcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcXG4gICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xcbisgKiBzaG91bGQgYmUgZGlzYWJsZWQuXFxuICAqL1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuK1xcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFxuLVxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XFxuK1xcbitcXHRpZiAoc3dhcG91dClcXG4rXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbitcXG4rXFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzM5LDcgKzM0Niw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XFxuK1xcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFxuIFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4tXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbi1cXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG4rXFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MTAuNDY1NDk0MzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTQzOTUxNjIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDkyYmJhMDMyODc3MGExODY0YWY3MjVkOWE3YWQ5NzFlN2IyMTU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzoxMjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjM4OTE2ZWE5NmFjNTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiwyMSArMzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuKyAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4rXG4rXHRpZiAoc3dhcG91dClcbitcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuK1xuK1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyArMzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4rXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuK1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjEwLjQ2NTQ5NTYwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNTk1MTkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgaG93IEknZCBhcHByb2FjaCBpdCwgYXMgdGhvdWdoIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOlxuXG4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiAqd29ydGgqIGZ1enppbmcuIElzIGl0IHRvdWNoaW5nIGNvZGUgdGhhdCdzIGxpa2VseSB0byBiZSB2dWxuZXJhYmxlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJ2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNoYW5nZXMuXG5cbkknbSB6ZXJvaW5nIGluIG9uIHRoaXMgcGF0Y2gsIGxvb2tpbmcgYXQgdGhlIGdpdCBkaWZmLCBhbmQgaW1tZWRpYXRlbHkgc2NvcGluZyBvdXQgdGhlIGludm9sdmVkIGZpbGVzLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3Ztc2Nhbi5jYCwgYW5kIGBtbS9zd2FwLmhgLiBUaGF0IG1ha2VzIG1lIHRoaW5rIG1lbW9yeSBtYW5hZ2VtZW50LCBzd2FwcGluZywgYW5kIHZpcnR1YWwgbWVtb3J5LiBUaG9zZSBhcmUgKmFsd2F5cyogaW50ZXJlc3RpbmcgdGFyZ2V0cy5cblxuTm93LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIFRoaXMgaXMgd2hlcmUgSSdsbCBwcm9iYWJseSBzdGFydCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIGhvdyB0aGUgZGF0YSBmbG93cyB0aHJvdWdoIHRoZW0sIGFuZCB3aGVyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgYXJlLiBUaGF0J3MgaG93IEkgY2FuIGNob29zZSB3aGF0IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBmb3IgZnV6emluZywgYW5kIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgdGhlIHJpZ2h0IGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjE0LjgyNTAxNzU0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNTk1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NTQtXFxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC00NTYtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jLTMyMC1cXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQzPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5tbS9zd2FwX3N0YXRlLmM6MzQ5OlxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYxOC1cXHRcXHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcXG5tbS9zd2FwZmlsZS5jOjE2MTk6XFx0XFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxcbm1tL3N3YXBmaWxlLmMtMTYyMC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MTcuMDc4NjE3NzY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAyNjI5MzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU3dhcCBDYWNoaW5nIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gc3dhcCBjYWNoaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyBhcmUgaGFuZGxlZCB3aGVuIHBhZ2VzIGFyZSBzd2FwcGVkIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCAobGlrZWx5IGhhbmRsaW5nIHRoZSBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24gb2YgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlKSBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgICh3aGljaCwgZnJvbSBpdHMgbmFtaW5nLCBpcyBwcm9iYWJseSB0aGUgY29yZSBzd2FwLW91dCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgd2l0aCBNZW1DRy1zcGVjaWZpYyBhc3BlY3RzKS4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSBjcml0aWNhbCBwaWVjZXMgb2YgdGhlIHB1enpsZSB3aGVuIGRlYWxpbmcgd2l0aCBwYWdlIHJlY2xhaW1pbmcuXG5cbkknbSBzdGFydGluZyBteSBpbnZlc3RpZ2F0aW9uIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHRvIGxvb2sgZm9yIHRoZSBjb3JlIHN3YXAgb3BlcmF0aW9ucyBhbmQgdGhlIFZNIHNjYW5uaW5nIGxvZ2ljLCB3aGVyZSB0aGUgZXZpY3Rpb24gYW5kIHN3YXAtb3V0IGRlY2lzaW9ucyBhcmUgbWFkZS4gSSBuZWVkIHRvIHNlZSBob3cgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGNvbnRleHQgaXMuIFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGl0IGludGVyYWN0aW5nIHdpdGg/XG5cbkxpa2V3aXNlLCBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBvZiBgX19tZW1jZzFfc3dhcG91dGAuIFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQgYXJlIGl0cyBzaWRlIGVmZmVjdHM/IElzIGl0IGRpcmVjdGx5IGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG9yIGFyZSB0aGVyZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zPyBXaGF0J3MgdGhlIG92ZXJhbGwgZmxvdyBvZiBwYWdlIGV2aWN0aW9uIGluIHJlbGF0aW9uIHRvIHN3YXAgY2FjaGUgaW52YWxpZGF0aW9uPyBVbHRpbWF0ZWx5IEknbSB0cnlpbmcgdG8gcGlucG9pbnQgd2hlcmUgdGhlIHN3YXAgY2FjaGUgaXMgYmVpbmcgdXBkYXRlZCBhbmQgY2xlYXJlZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGlmZWN5Y2xlIG9mIGEgc3dhcHBlZCBwYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MjAuMTA0OTEzNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwX3N0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcdFxcdGNpX29mZiA9IGNpX3N0YXJ0O1xcbiAyOTY6XFx0XFx0XFx0ZG8ge1xcbiAyOTc6XFx0XFx0XFx0XFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xcbiAyOTk6XFx0XFx0XFx0fSB3aGlsZSAoKytjaV9vZmYgXFx1MDAzYyBjaV9lbmQpO1xcbiAzMDA6XFx0XFx0fVxcbiAzMDE6XFx0fVxcbiAzMDI6XFx0XFxuIDMwMzpcXHQvKipcXG4gMzA0OlxcdCAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG4gMzA1OlxcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuIDMwNjpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzA3OlxcdCAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXFxuIDMwODpcXHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDk6XFx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cXG4gMzEwOlxcdCAqXFxuIDMxMTpcXHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuIDMxMjpcXHQgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cXG4gMzEzOlxcdCAqXFxuIDMxNDpcXHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcXG4gMzE1OlxcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuIDMxNjpcXHQgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzXFxuIDMxNzpcXHQgKiBzaG91bGQgYmUgZGlzYWJsZWQuXFxuIDMxODpcXHQgKi9cXG4gMzE5OlxcdHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAzMjA6XFx0XFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XFxuIDMyNTpcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0aWYgKHN3YXBvdXQpXFxuIDMyODpcXHRcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gMzMxOlxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0LyoqXFxuIDMzNDpcXHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMzU6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMzNjpcXHQgKlxcbiAzMzc6XFx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxuIDMzODpcXHQgKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuIDMzOTpcXHQgKiBlcXVhbCB0byB6ZXJvLCBvciBpdCBtYXkgY2F1c2UgZGF0YSBsb3NzLlxcbiAzNDA6XFx0ICpcXG4gMzQxOlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzQyOlxcdCAqL1xcbiAzNDM6XFx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4gMzQ2OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuIDM0OTpcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcXG4gMzUwOlxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiAzNTM6XFx0fVxcbiAzNTQ6XFx0XFxuIDM1NTpcXHQvKipcXG4gMzU2OlxcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNTc6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzU4OlxcdCAqIEBvbGQ6IFRoZSBvbGQgZm9saW8gdG8gYmUgcmVwbGFjZWQuXFxuIDM1OTpcXHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxcbiAzNjA6XFx0ICpcXG4gMzYxOlxcdCAqIFJlcGxhY2UgYW4gZXhpc3RpbmcgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgd2l0aCBhIG5ldyBmb2xpby4gVGhlXFxuIDM2MjpcXHQgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5ldyBmb2xpbydzIGZsYWcgYW5kIHN3YXBcXG4gMzYzOlxcdCAqIGVudHJpZXMuIFJlcGxhY2VtZW50IHdpbGwgdGFrZSB0aGUgbmV3IGZvbGlvJ3Mgc3dhcCBlbnRyeSB2YWx1ZSBhc1xcbiAzNjQ6XFx0ICogdGhlIHN0YXJ0aW5nIG9mZnNldCB0byBvdmVycmlkZSBhbGwgc2xvdHMgY292ZXJlZCBieSB0aGUgbmV3IGZvbGlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyMC4xMDUwMDA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU0OTM2MzMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19yZW1vdmVfbWFwcGluZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyIGluIHRoZSBrZXJuZWwgaGFuZGxlcyB1bm1hcHBpbmcuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGxvb2sgYXQgYF9fcmVtb3ZlX21hcHBpbmdgIGluIGBtbS92bXNjYW4uY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcywgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcGFnZSByZWNsYW1hdGlvbiBhbmQgcG90ZW50aWFsbHksIHRoZSBjb21wbGV4aXRpZXMgb2YgY2xlYW5pbmcgdXAgbWFwcGluZ3MgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhY2NvdW50aW5nIGZvciByZWZlcmVuY2UgY291bnRzLCBhbmQgcG9zc2libHkgZGVhbGluZyB3aXRoIGRpcnR5IHBhZ2VzIGFuZCBzd2FwIGVudHJpZXMuIFRoZSBcInZtc2NhblwiIGNvbnRleHQgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBwYWdlIHNjYW5uZXIsIHBlcmhhcHMgZHVyaW5nIGJhY2tncm91bmQgbWVtb3J5IHByZXNzdXJlIHJlY292ZXJ5LiBJdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiBhbnkgbG9jayBvcmRlcmluZyBpcyBpbnZvbHZlZDsgSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgaWYgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgYXJlIGluIHBsYWNlIHdoZW4gdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlIGlzIHNoYXJlZC4gTGV0J3Mgc2VlIHdoYXQgdGhpcyByb3V0aW5lIGlzIHJlYWxseSBkb2luZyB3aXRoIHRoZSBWTSBzdHJ1Y3R1cmUsIHRoZSBwYWdlIGZsYWdzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHR5cGVzIG9mIG1lbW9yeSAoZmlsZS1iYWNrZWQsIGFub255bW91cywgaHVnZSBwYWdlcywgZXRjLikuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIHVubWFwcGluZyBhY3R1YWxseSBpbXBhY3RzIHRoZSBwcm9jZXNzJ3MgcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCB3aGVyZSB0aGF0IFwibWFwcGluZ1wiIHRvIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgcmVmZXJyaW5nIGFjdHVhbGx5IHNpdHMgd2l0aGluIHRoZSBvdmVyYWxsIFZNIGxhbmRzY2FwZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgYXMgd2VsbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyMy42NTQzNjU5MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdFxcdCAqXFxuIDc0MTpcXHRcXHQgKiBOb3RlIHRoYXQgaWYgdGhlIGRpcnR5IGZsYWcgaXMgYWx3YXlzIHNldCB2aWEgZm9saW9fbWFya19kaXJ0eSxcXG4gNzQyOlxcdFxcdCAqIGFuZCB0aHVzIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuXFxuIDc0MzpcXHRcXHQgKi9cXG4gNzQ0OlxcdFxcdHJlZmNvdW50ID0gMSArIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gNzQ1OlxcdFxcdGlmICghZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgcmVmY291bnQpKVxcbiA3NDY6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzQ3OlxcdFxcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cXG4gNzQ4OlxcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcXG4gNzQ5OlxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xcbiA3NTA6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzUxOlxcdFxcdH1cXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbiA3NTQ6XFx0XFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiA3NTU6XFx0XFxuIDc1NjpcXHRcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuIDc1NzpcXHRcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbiA3NTg6XFx0XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIDc1OTpcXHRcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuIDc2MDpcXHRcXHR9IGVsc2Uge1xcbiA3NjE6XFx0XFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0XFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvO1xcbiA3NjQ6XFx0XFx0XFx0LypcXG4gNzY1OlxcdFxcdFxcdCAqIFJlbWVtYmVyIGEgc2hhZG93IGVudHJ5IGZvciByZWNsYWltZWQgZmlsZSBjYWNoZSBpblxcbiA3NjY6XFx0XFx0XFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXFxuIDc2NzpcXHRcXHRcXHQgKlxcbiA3Njg6XFx0XFx0XFx0ICogQnV0IGRvbid0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXFxuIDc2OTpcXHRcXHRcXHQgKiBhbHJlYWR5IGV4aXRpbmcuICBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbixcXG4gNzcwOlxcdFxcdFxcdCAqIGlub2RlIHJlY2xhaW0gbmVlZHMgdG8gZW1wdHkgb3V0IHRoZSByYWRpeCB0cmVlIG9yXFxuIDc3MTpcXHRcXHRcXHQgKiB0aGUgbm9kZXMgYXJlIGxvc3QuICBEb24ndCBwbGFudCBzaGFkb3dzIGJlaGluZCBpdHNcXG4gNzcyOlxcdFxcdFxcdCAqIGJhY2suXFxuIDc3MzpcXHRcXHRcXHQgKlxcbiA3NzQ6XFx0XFx0XFx0ICogV2UgYWxzbyBkb24ndCBzdG9yZSBzaGFkb3dzIGZvciBEQVggbWFwcGluZ3MgYmVjYXVzZSB0aGVcXG4gNzc1OlxcdFxcdFxcdCAqIG9ubHkgcGFnZSBjYWNoZSBmb2xpb3MgZm91bmQgaW4gdGhlc2UgYXJlIHplcm8gcGFnZXNcXG4gNzc2OlxcdFxcdFxcdCAqIGNvdmVyaW5nIGhvbGVzLCBhbmQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIG1peCBEQVhcXG4gNzc3OlxcdFxcdFxcdCAqIGV4Y2VwdGlvbmFsIGVudHJpZXMgYW5kIHNoYWRvdyBleGNlcHRpb25hbCBlbnRyaWVzIGluIHRoZVxcbiA3Nzg6XFx0XFx0XFx0ICogc2FtZSBhZGRyZXNzX3NwYWNlLlxcbiA3Nzk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjIzLjY1NDYzMjYxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDI4Mzc3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fbWVtY2cxX3N3YXBvdXRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYF9fbWVtY2cxX3N3YXBvdXRgLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgaXRzIGRlZmluaXRpb24sIHByb2JhYmx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSXMgaXQgYSBrZXJuZWwtaW50ZXJuYWwgZnVuY3Rpb24/IElzIGl0IGV4cG9zZWQgdmlhIGEgaGVhZGVyIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgZXNzZW50aWFsLiBPbmNlIEkndmUgZ290IHRoYXQsIEknbGwgbmVlZCB0byBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgZG9pbmcuIEhvdyBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBhIGNvbnRyb2wgZ3JvdXA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHN3YXAtb3V0IGJlaGF2aW9yIHdpdGhpbiBhIG1lbWNnP1xuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyNS40NTc0NzM0MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjUzNDYxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZzFfc3dhcG91dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUzPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTYxOnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NjpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDUzMz12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cXHQgKiBFeGNsdWRlIHN3YXBjYWNoZTogb3JpZ2luYWxseSB0byBhdm9pZCBhIGNvcnJ1cHQgZGVmZXJyZWQgc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jOjQ1NTI6XFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NTMtXFx0ICogYnV0IGlmIHBhZ2UgcmVjbGFpbSBpcyBhbHJlYWR5IGhhbmRsaW5nIHRoZSBzYW1lIGZvbGlvLCBpdCBpc1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI0Nz12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXFxubW0vbWVtY29udHJvbC12MS5jOjI1OTogKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjAtICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjgtICovXFxubW0vbWVtY29udHJvbC12MS5jOjI2OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzI3LVxcdGlmIChzd2Fwb3V0KVxcbm1tL3N3YXBfc3RhdGUuYzozMjg6XFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjI2Ljk4MjgyNTczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDIzMTc0NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IENvbnRyb2wgU3dhcG91dCBMb2dpYyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc3dhcG91dCB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIHN1YnN5c3RlbS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byBkcmlsbCBkb3duIGludG8gYG1tL21lbWNvbnRyb2wtdjEuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGZvY3VzIG9uIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHN3YXBwaW5nIG91dCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1vcnkgY2dyb3VwIGxpa2VseSByZXNpZGVzIGluIHRoaXMgb2xkZXIgdmVyc2lvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSwgbG9vayBmb3IgaG93IHRoZXkgY2hhbmdlZCBmcm9tIHRoZSBwcmV2aW91cyB2ZXJzaW9ucyBJIHdvcmtlZCB3aXRoLCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgcGFnZSByZXBsYWNlbWVudCBtZWNoYW5pc21zIGFuZCB0aGUgb3ZlcmFsbCBzd2FwLXJlbGF0ZWQgY29kZS4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gaW5pdGlhdGUgdGhlIHN3YXAtb3V0IHByb2Nlc3MgZnJvbSBhIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgZ3JvdXAuIEkgd2lsbCBxdWlja2x5IHNjYW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHR5cGVzIChhbm9ueW1vdXMsIGZpbGUtYmFja2VkKSwgYW55IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGl0IHVzZXMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCByZWNsYWltLiBNeSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyOS4wMDYwMDI4NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wtdjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0fVxcbiAyNTY6XFx0XFxuIDI1NzpcXHQjaWZkZWYgQ09ORklHX1NXQVBcXG4gMjU4OlxcdC8qKlxcbiAyNTk6XFx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcXG4gMjYwOlxcdCAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXFxuIDI2MTpcXHQgKiBAY2k6IHRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyIGhvbGRpbmcgdGhlIHN3YXAgZW50cmllc1xcbiAyNjI6XFx0ICpcXG4gMjYzOlxcdCAqIFRyYW5zZmVyIHRoZSBtZW1zdyBjaGFyZ2Ugb2YgQGZvbGlvIHRvIHRoZSBzd2FwIGVudHJ5IHN0b3JlZCBpblxcbiAyNjQ6XFx0ICogZm9saW8tXFx1MDAzZXN3YXAuXFxuIDI2NTpcXHQgKlxcbiAyNjY6XFx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xcbiAyNjc6XFx0ICogYmUgZnJlZWQsIGFuZCBjYWxsZXIgbXVzdCBkaXNhYmxlIElSUXMgYW5kIGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrLlxcbiAyNjg6XFx0ICovXFxuIDI2OTpcXHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4gMjcwOlxcdHtcXG4gMjcxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XFxuIDI3MjpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIDI3MzpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfZW50cmllcztcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gMjc2OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIDI3NzpcXHRcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuIDI3ODpcXHRcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiAyODE6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcXG4gMjg0OlxcdFxcdFxcdHJldHVybjtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XFxuIDI4NzpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XFxuIDI4ODpcXHRcXHRpZiAoIW9iamNnKVxcbiAyODk6XFx0XFx0XFx0cmV0dXJuO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDI5MjpcXHRcXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiAyOTM6XFx0XFx0LypcXG4gMjk0OlxcdFxcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24ndFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjoyOS4wMDYxMjkxNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI1NzM1MTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTd2FwIENhY2hlIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBgX19tZW1jZzFfc3dhcG91dGAgYW5kIEkgc2VlIHRoYXQgaXQncyBub3cgKmluc2lkZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBzcGVjaWZpY2FsbHkgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhlIGtleSBpcyB0aGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBjbGVhcnMgdGhlIHN3YXBjYWNoZSBmbGFnLCB3aGljaCBtZWFucyB0aGUgZm9saW8gaXMgZWZmZWN0aXZlbHkgcmVtb3ZlZCBmcm9tIHRoZSBzd2FwIGNhY2hlLiAgSSB1bmRlcnN0YW5kIG5vdzsgcHJldmlvdXNseSwgYF9fbWVtY2cxX3N3YXBvdXRgIHdhcyBjYWxsZWQgKmJlZm9yZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGR1cmluZyB0aGUgcmVtb3ZhbCBwcm9jZXNzLiBOb3csIGJ5IHBhc3NpbmcgYHN3YXBvdXQgPSB0cnVlYCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBfX21lbWNnMV9zd2Fwb3V0YCBleGVjdXRlcyBpbnRlcm5hbGx5LCBiZWZvcmUgdGhlIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlLlxuXG5Ob3csIGlzIHRoaXMgYSB3b3J0aHdoaWxlIGFyZWEgdG8gdGFyZ2V0IHdpdGggZnV6emluZz8gRGVmaW5pdGVseS4gIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBjYWNoZSBhbmQgc3dhcG91dCBsb2dpYywgaW5jbHVkaW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gSXQgdG91Y2hlcyBkaXJlY3RseSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBtbWAsIHNvIEknbSBwdXR0aW5nIGEgXCJ5ZXNcIiBvbiB0aGF0LlxuXG5JJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEknbSBhc3N1bWluZyB3ZSdsbCBuZWVkIGBDT05GSUdfU1dBUGAsIG9idmlvdXNseS4gVGhlbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1DR19WMWAgYXJlIHJlcXVpcmVkLCBnaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYF9fbWVtY2cxX3N3YXBvdXRgLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBjbGFyaWZpY2F0aW9uIGJ5IGxvb2tpbmcgaW50byBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCB0byBzZWUgaG93IHRob3NlIGFyZSBkZWZpbmVkIGFuZCByZWxhdGVkIHRvIGBfX21lbWNnMV9zd2Fwb3V0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjMzLjI2MzQ4MjU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTYzNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY3LVxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjMzLjM4ODA1MTAyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQzMDkyOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgY29udHJvbCBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb3IgdHJhY2tpbmcgaXMgY2F1c2luZyB0aGUgcHJvYmxlbS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDE5NTAgdG8gMTk3MC4gVGhhdCBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgb3BlcmF0aW9ucywgcG90ZW50aWFsbHkgdGhlIHN0YXRzIGdhdGhlcmluZyBvciByZXNvdXJjZSBsaW1pdGluZyBhc3BlY3RzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIHJhbmdlIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgc28gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBhIGZsYXcgaW4gdGhlIGFjY291bnRpbmcgbG9naWMgdGhhdCBpcyB0cmlnZ2VyaW5nIHRoZSBwcm9ibGVtIEknbSBzZWVpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzUuNDMxMTQ3MTQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTQ1OlxcdHtcXG4xOTQ2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xOTQ3OlxcdH1cXG4xOTQ4OlxcdFxcbjE5NDk6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZW50ZXJfdXNlcl9mYXVsdCh2b2lkKVxcbjE5NTA6XFx0e1xcbjE5NTE6XFx0fVxcbjE5NTI6XFx0XFxuMTk1MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4xOTU0OlxcdHtcXG4xOTU1OlxcdH1cXG4xOTU2OlxcdFxcbjE5NTc6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbjE5NTg6XFx0XFxuMTk1OTpcXHQjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXFxuMTk2MDpcXHRcXG4xOTYxOlxcdHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG4xOTYyOlxcdHZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4xOTYzOlxcdFxcbjE5NjQ6XFx0I2Vsc2VcXG4xOTY1OlxcdFxcbjE5NjY6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4xOTY3OlxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuMTk2ODpcXHR7XFxuMTk2OTpcXHR9XFxuMTk3MDpcXHRcXG4xOTcxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTk3MjpcXHR7XFxuMTk3MzpcXHR9XFxuMTk3NDpcXHQjZW5kaWZcXG4xOTc1OlxcdFxcbjE5NzY6XFx0I2VuZGlmIC8qIF9MSU5VWF9NRU1DT05UUk9MX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzUuNDMxMjkyODk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTk1ODE1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgY3J1Y2lhbCBLY29uZmlnIHN5bWJvbHMgdGhhdCBhcmUgaGlnaGx5IHJlbGV2YW50IHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaGVyZS4gRmlyc3QsIEknbSB0aGlua2luZyBJIHNob3VsZCBjaGVjayBgQ09ORklHX01FTUNHX1YxYC4gVGhhdCdzIGFuIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbnZlc3RpZ2F0aW9uIGludG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBwb3RlbnRpYWxseSBsZWdhY3kgc3RhdHVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHYxIGlzIGVuYWJsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV3ZXIgdjIgaW1wbGVtZW50YXRpb24gaWYgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHNjZW5hcmlvLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19TV0FQYC4gU3dhcCBhbHdheXMgY29tZXMgaW50byBwbGF5IHdoZW4geW91J3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGNvbnN0cmFpbnRzLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gbWVtb3J5IGNncm91cHMgYW5kIHN3YXAgY2FuIGJlIHRyaWNreS4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgb2YgYENPTkZJR19TV0FQYCBpcyBjcml0aWNhbCB0byBrbm93aW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHJlc291cmNlIGxpbWl0cyBlbmZvcmNlZCBieSBhbnkgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIHRoYXQgYXJlIGVuYWJsZWQuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdHdvIGFyZSB3b3JraW5nIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzcuNTkwODc2Nzc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc0ODEwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6MzcuNjM3NjMyMjU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNDMwODk3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgTUVNQ0dfVjEgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYE1FTUNHX1YxYCBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGxpa2VseSB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2gsIGlzIHRvIHVzZSBgZ3JlcGAuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGluIGBpbml0L0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AsIGFzIHRob3NlIGFyZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIG1lbW9yeSBjb250cm9sIGdyb3VwIG9wdGlvbnMuIEkgZmlndXJlIGVpdGhlciBpdCdzIGRpcmVjdGx5IGRlZmluZWQgdGhlcmUsIG9yIGl0J3MgaW5jbHVkZWQgd2l0aGluIGFub3RoZXIgY29uZmlnIGZpbGUgdGhhdCAqaXMqIGRlZmluZWQgdGhlcmUuIEl0J3MgYSBxdWljayBhbmQgdGFyZ2V0ZWQgc2VhcmNoOyBob3BlZnVsbHksIGl0IHlpZWxkcyB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHJpZ2h0IGF3YXkuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBkZWVwZXIgZGl2ZSwgYW5kIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBhcm91bmQgdGhpcyB2YXJpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MzAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjo0MS44ODA3MjQzMjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkzNjEwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjQzLjMxMDA4OTE5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzczNDE1NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBsaW5lcyBmcm9tIGBpbml0L0tjb25maWdgIHlvdSBtZW50aW9uZWQ6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIFNlY3Rpb24gb24gUmVzb3VyY2UgQ29udHJvbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBsaW5lcyAxMDgwIHRocm91Z2ggMTEyMCBvZiBgaW5pdC9LY29uZmlnYC4gUmlnaHQsIHRoaXMgaXMgd2hlcmUgdGhleSdyZSBkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gcmVzb3VyY2UgY29udHJvbC4gU3BlY2lmaWNhbGx5LCBJJ20gc2VlaW5nIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgYENPTkZJR19SRVNPVVJDRV9DT05UUk9MYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpZGVhIGlzIGVuYWJsaW5nIHRoZSBhYmlsaXR5IHRvIGNvbnRyb2wgcmVzb3VyY2VzLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIHNlY3Rpb24gbGlrZWx5IHBlcnRhaW5zIHRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgQ1BVLCBtZW1vcnksIG9yIEkvTyBhY2Nlc3MgaW4gYSBtb3JlIGdyYW51bGFyIHdheS5cblxuVGhleSdyZSBjaGVja2luZyBhIGZldyB0aGluZ3MgZmlyc3QuIGBERUZBVUxUIHlgIGlzIHNldCwgd2hpY2ggaW1wbGllcyB0aGF0IGl0J3MgYWN0aXZlIGJ5IGRlZmF1bHQsIHNvIGl0J3MgcHJvYmFibHkgYmVlbiB0ZXN0ZWQuIEl0IHNlZW1zIHRvIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQU2AuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gUmVzb3VyY2UgY29udHJvbCBpcyBidWlsdCBvbiBjZ3JvdXBzLiBOb3csIEkgc2VlIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCB3aGljaCBhcmUgY3J1Y2lhbC4gYHNlbGVjdCBSRVNPVVJDRV9DT05UUk9MX0NQVWAgYW5kIGBzZWxlY3QgUkVTT1VSQ0VfQ09OVFJPTF9NRU1PUllgIGFyZSB0aGUgb2J2aW91cyBvbmVzLiBUaGUgZmFjdCB0aGF0IHRoZSBjb2RlIGlzIHNldCB1cCB0aGlzIHdheSwgdGVsbHMgbWUgdGhhdCB0aGVyZSBpcyBhbiBleHBlY3RhdGlvbiB0aGF0IGlmIHJlc291cmNlIGNvbnRyb2wgaXMgZW5hYmxlZCwgYm90aCBDUFUgYW5kIG1lbW9yeSBjb250cm9sIHdpbGwgYmUgbmVlZGVkLiBIb3dldmVyLCB0aGUgZXhhY3QgbWVjaGFuaXNtcyBmb3IgbWFuYWdpbmcgdGhvc2UgcmVzb3VyY2VzIGFyZSBoYW5kbGVkIGVsc2V3aGVyZSwgdmlhIHRoZSBzZWxlY3RlZCBvcHRpb25zLiBUaGlzIHJlaW5mb3JjZXMgdGhlIG1vZHVsYXJpdHkgb2YgdGhlIGtlcm5lbCBkZXNpZ247IHJlc291cmNlIGNvbnRyb2wgaXMgYSBoaWdoLWxldmVsIGVuYWJsZXIuXG5cblRoZXkndmUgZXZlbiBoYW5kbGVkIHRoZSBgaGVscGAgc2VjdGlvbiBjbGVhcmx5IHN0YXRpbmcgdGhlIGludGVudCBvZiB0aGUgY29udHJvbC4gSXQgc3RhdGVzIHRoYXQgdGhlIG9wdGlvbnMgY29uZmlndXJlIHJlc291cmNlIGFsbG9jYXRpb24gdG8gYWxsb3cgZm9yIG1vcmUgZ3JhbnVsYXIgY29udHJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjo0Ni4wODM1MDg1NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjQ2LjA4MzY3NTU5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc0Mzc4MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UndmUgYmVlbiBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSdtIHByZXR0eSBzdXJlIHdlJ3ZlIGNvdmVyZWQgdGhlIGJhc2ljcy4gQnV0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ28gaW50byBLY29uZmlnIGFuZCBleHBsaWNpdGx5IGxvb2sgZm9yIGBDT05GSUdfU1dBUGAuIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byBob3cgc3dhcHBpbmcgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIHNldHRpbmcuIEFsd2F5cyBpbXBvcnRhbnQgdG8gYmUgbWV0aWN1bG91cyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGtlcm5lbCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjQ4LjA1ODA1NjcyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODM5NDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUCRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6NTAuMDA2NDU1NjAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MTkwOTMzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCB0b3VjaGVzIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLCB3aGljaCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSB3YW50IHRvIHNlZSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGUgZGlmZiBvbmx5IGFmZmVjdHMgYSBoYW5kZnVsIG9mIGZpbGVzOiBgbW0vc3dhcC5oYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zLiBJbiBgbW0vc3dhcF9zdGF0ZS5jYCwgSSBzZWUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGJlaW5nIG1vZGlmaWVkLiBPdmVyIGluIGBtbS92bXNjYW4uY2AsIHRoZXJlJ3MgYF9fcmVtb3ZlX21hcHBpbmdgLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGNhbGwgcGF0aCwgYF9fbWVtY2cxX3N3YXBvdXRgIGluIGBtbS9tZW1jb250cm9sLXYxLmNgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuXG5cblRoZSBrZXkgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHViaXF1aXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXNlIGNvbW1vbiByb3V0aW5lcywgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gc3dhcCBjYWNoZSBvcGVyYXRpb25zPyBUaGF0J3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGtub3cuICBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgYXJlIGNsZWFybHkgc3dhcC1jYWNoZSBzcGVjaWZpYzsgbm8gc3VycHJpc2UgdGhlcmUuIEJ1dCBgX19yZW1vdmVfbWFwcGluZ2AgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQncyB1c2VkIGluIHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGR1cmluZyB2bXNjYW4gYW5kIGlzIGFsc28gY2FsbGVkIHRocm91Z2ggYHJlbW92ZV9tYXBwaW5nYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIGJvdGggYF9fcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMjo1My42MjU1NTA5MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDk3NDQ1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXFxuLS1cXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA3Ni1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXFxubW0vbWVtb3J5LmM6NTA3NzpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vbWVtb3J5LmMtNTA3OC1cXHRcXHRnb3RvIG91dF9ub21hcDtcXG4tLVxcbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE5NDEtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjE5NDI6XFx0XFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3JcXG5tbS9zaG1lbS5jLTE5NDMtXFx0XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSdzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XFxuLS1cXG5tbS9zaG1lbS5jLTE5NDctXFx0XFx0ICovXFxubW0vc2htZW0uYzoxOTQ4OlxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTE5NDktXFx0XFx0Z290byByZWRpcnR5O1xcbi0tXFxubW0vc2htZW0uYz0yMzUxPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjM2OC1cXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XFxubW0vc2htZW0uYzoyMzY5OlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTIzNzAtXFx0LypcXG4tLVxcbm1tL3NobWVtLmM9MjQ1Nj1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTk4LVxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jOjI1OTk6XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3NobWVtLmMtMjYwMC1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMC1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwLmgtNDUwLVxcbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTQ1Mi17XFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE5OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMzMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNDogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMzUtICogQGZvbGlvOiBUaGUgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzQyLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNDM6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy0zNDQte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDk6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM1MC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUxLVxcbm1tL3N3YXBmaWxlLmM6MjUyOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1My1cXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDI9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc4MC1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xcbm1tL3N3YXBmaWxlLmM6MTc4MTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vc3dhcGZpbGUuYy0xNzgyLVxcdFxcdGdvdG8gZmFpbGVkO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTE0PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMjAtXFxubW0vc3dhcGZpbGUuYzoyMTIxOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTIxMjItXFx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTc0PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwNDQtXFx0aWYgKHJldCkge1xcbm1tL3pzd2FwLmM6MTA0NTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0venN3YXAuYy0xMDQ2LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjU1Ljc3NTMwMDkxOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTgxNzk1MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcy4gSSBzZWUgdGhhdCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgdGhlIHByaW1hcnkgQyBmdW5jdGlvbiBpbXBhY3RlZCwgd2l0aCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AgYWxzbyBtb2RpZmllZC4gSW50ZXJlc3RpbmcuIFRoZSBgX19tZW1jZzFfc3dhcG91dGAgY2FsbCBpcyBiZWluZyBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHBvaW50LiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIHBhdGhzLCBzbyB0aGlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBjb3ZlcmVkLiBZZXMsIHdlIGhhdmUgQ09ORklHX1NXQVAsIHdoaWNoIGlzIG5lY2Vzc2FyeSwgYW5kIGFsc28gQ09ORklHX01FTUNHIGFuZCBDT05GSUdfTUVNQ0dfVjEsIHdoaWNoIGFyZSBleHBlY3RlZCBmb3IgdGhlIG1lbWNnIGludGVyYWN0aW9uIHZpYSBgX19tZW1jZzFfc3dhcG91dGAuIEdvb2QuIExldCBtZSB0cmlwbGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIHN5bWJvbHMgYXJlIGNsZWFuOiBcIlNXQVAsXCIgXCJNRU1DRyxcIiBhbmQgXCJNRU1DR19WMS5cIiBZZXAsIHRob3NlIGFyZSBjb3JyZWN0LlxuXG5GaW5hbGx5LCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB3ZSBoYXZlIGFsbCB0aGUgaW1wb3J0YW50IHBpZWNlcyBpbiBwbGFjZSBmb3IgdGhlIGZ1enplci4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHRydWUsIGdpdmVuIHRoZSBjb3JlIG1lbW9yeSBjaGFuZ2VzLiBUaGUgcmVhc29uaW5nIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGNoYW5nZXM7IGludGVncmF0aW5nIGBfX21lbWNnMV9zd2Fwb3V0YCBpbnRvIHRoZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZnVuY3Rpb24gdG91Y2hlcyByZWNsYWltIGFuZCBzd2FwIHBhdGhzLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGFwcHJvcHJpYXRlbHkgbGlzdGVkLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZC5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBMZXQncyBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3MCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6NTkuNzU3MDk4Njk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTA4Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gYnkgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0IGludm9jYXRpb24gaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gd2hlbiBzd2FwcGluZyBvdXQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGNhY2hlIG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vc3dhcF9zdGF0ZS5jIGFuZCBtbS92bXNjYW4uYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTI6NTkuOTA1MDE0MzYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjI5MzE0NDM3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjU5LjkwNTQ4NjQ5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyMjkyNjY4Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcGF0aCBieSBhZGRpbmcgYSBib29sZWFuIHBhcmFtZXRlciBgc3dhcG91dGAgdG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgYW5kIG1vdmluZyB0aGUgaW52b2NhdGlvbiBvZiBgX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpYCBpbnNpZGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKClgLlxcblxcblRoaXMgY2hhbmdlIGludm9sdmVzIHB1cmVseSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWM6XFxuMS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBUaGUgbmV3IGBzd2Fwb3V0YCBib29sZWFuIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGEgY29uc3RhbnQgKGB0cnVlYCBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIGBmYWxzZWAgaW4gYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCksIHNvIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG4zLiBObyBkYXRhIGlzIGNvcGllZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyByZWZhY3RvcmluZyB3b3VsZCByZWxhdGUgdG8gbG9ja2luZywgcGFnZSByZWZjb3VudGluZywgb3IgbWVtY2cgc3RhdGUgY29uc2lzdGVuY3ksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgaW50ZXJuYWwgVk0gYXNzZXJ0aW9ucyAoYFZNX0JVR19PTl9GT0xJT2AsIGBWTV9XQVJOX09OX09OQ0VfRk9MSU9gKS5cXG5cXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDkyYmJhMDMyODc3MGExODY0YWY3MjVkOWE3YWQ5NzFlN2IyMTU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzoxMjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjM4OTE2ZWE5NmFjNTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiwyMSArMzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuKyAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4rXG4rXHRpZiAoc3dhcG91dClcbitcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuK1xuK1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyArMzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4rXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuK1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEyOjU5LjkwNTQ4NzM3M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDg3ODA4Njk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHNjb3BlLiBUaGlzIGxvb2tzIGxpa2UgYSBzZWN1cml0eSBhbmFseXNpcy90cmlhZ2Ugb2YgYSBMaW51eCBrZXJuZWwgcGF0Y2gsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBhcHBsaWNhYmlsaXR5IG9mIEtBU0FOIHZlcnN1cyBLTVNBTi4gR29vZCwgdGhpcyBpcyBhIHNhZmUsIGRlZmVuc2l2ZSBjb2RlIHJldmlldyBhbmQgc2FuaXRpemVyIGFzc2Vzc21lbnQsIG5vdGhpbmcgdG9vIHJpc2t5LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZGlmZiB0YXJnZXRzIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBtbS92bXNjYW4uY2Agd2l0aGluIHRoZSBgX19yZW1vdmVfbWFwcGluZygpYCBmdW5jdGlvbi4gSXQgYXBwZWFycyBhIGZ1bmN0aW9uIGNhbGwsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IGEgbmV3IGJvb2xlYW4gYHN3YXBvdXRgLiBJbiBgbW0vc3dhcF9zdGF0ZS5jYCwgSSBzZWUgaG93IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBub3cgcmVvcmRlcmVkLCB3aXRoIGBfX21lbWNnMV9zd2Fwb3V0YCBwb3RlbnRpYWxseSBiZWluZyBjb25kaXRpb25hbGx5IGNhbGxlZC4gVGhlIGxvZ2ljIGlzIHRoYXQgdGhlcmUgaXMgYSBndWFyZCBhcm91bmQgdGhlIGludm9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgIHVzaW5nIHRoZSBuZXcgYm9vbGVhbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyByZW9yZGVyaW5nIGFuZCBlbmNhcHN1bGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgIGFuZCB3aHkgaXQncyBiZWluZyBoYW5kbGVkIHRoaXMgd2F5LiBUaW1lIHRvIHVzZSBgZ3JlcHBlcmAgYW5kIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGBtbS92bXNjYW4uY2AgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHksIHRoaXMgY29udGV4dCB3aWxsIGhlbHAgbWUgZGVjaWRlIGlmIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGp1c3RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEzOjEwLjc4MzU3NzE2NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMDA4MzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnMV9zd2Fwb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjItdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTUxLVxcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmM6NDU1MjpcXHQgKiBxdWV1ZS4gTm93YWRheXMgdGhhdCBpcyBmdWxseSBwcmV2ZW50ZWQgYnkgX19tZW1jZzFfc3dhcG91dCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cXHQgKiBidXQgaWYgcGFnZSByZWNsYWltIGlzIGFscmVhZHkgaGFuZGxpbmcgdGhlIHNhbWUgZm9saW8sIGl0IGlzXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI1OC0vKipcXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxubW0vbWVtY29udHJvbC12MS5jLTI2MC0gKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2Zlclxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MjY5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNzAte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFx0aWYgKHN3YXBvdXQpXFxubW0vc3dhcF9zdGF0ZS5jOjMyODpcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxubW0vc3dhcF9zdGF0ZS5jLTMyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MTIuNzgzNjY2OTg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA4ODI2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBGdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC12MS5jYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYF9fbWVtY2cxX3N3YXBvdXRgLiBMZXQncyBncmFiIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBoZWFkIG92ZXIgdG8gYXJvdW5kIGxpbmUgMjU4LiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIG1lbW9yeSBjb250cm9sLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBtZW1vcnkgaXMgc3dhcHBlZCBvdXQgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcyAoY2dyb3VwcykuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipUcmlnZ2VyIENvbmRpdGlvbnM6KiogV2hhdCAqY2F1c2VzKiB0aGUgc3lzdGVtIHRvIGNhbGwgdGhpcyBmdW5jdGlvbj8gSXMgaXQgYSBsb3ctbWVtb3J5IHNpdHVhdGlvbiB3aXRoaW4gdGhlIGNncm91cCwgYSBwcm9hY3RpdmUgc3dhcG91dCBzdHJhdGVneSwgb3Igc29tZXRoaW5nIGVsc2U/XG4qICAgKipUYXJnZXQgTWVtb3J5OioqIFdoaWNoIG1lbW9yeSByZWdpb25zIG9yIHBhZ2VzIGRvZXMgdGhpcyBmdW5jdGlvbiBhdHRlbXB0IHRvIHN3YXAgb3V0PyBJcyBpdCBwcmltYXJpbHkgYW5vbnltb3VzIHBhZ2VzLCBmaWxlLWJhY2tlZCBwYWdlcywgb3IgYSBtaXg/IERvZXMgaXQgYWNjb3VudCBmb3IgZGlmZmVyZW50IG1lbW9yeSB6b25lcyBvciBOVU1BIG5vZGVzP1xuKiAgICoqU3dhcC1PdXQgTWVjaGFuaXNtOioqIFdoYXQncyB0aGUgKmFjdHVhbCogc3dhcC1vdXQgcHJvY2VkdXJlPyBEb2VzIGl0IGludm9sdmUgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBwYWdlIHRhYmxlcywgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3dhcCBjYWNoZSwgb3IgY2FsbHMgdG8gc3BlY2lmaWMgc3dhcCBvcGVyYXRpb25zP1xuKiAgICoqQ2dyb3VwIEludGVncmF0aW9uOioqIEhvdyBleGFjdGx5IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIGNncm91cCdzIG1lbW9yeSBhY2NvdW50aW5nPyBEb2VzIGl0IHVwZGF0ZSBtZW1vcnkgdXNhZ2Ugc3RhdGlzdGljcywgYW5kIGlzIHRoZXJlIGFueSBwcm90ZWN0aW9uIG9mIHRoZSBjZ3JvdXAncyBtZW1vcnkgZm9vdHByaW50P1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGFkZHJlc3NlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaW5ncyBnbyB3cm9uZyBkdXJpbmcgdGhlIHN3YXAgcHJvY2Vzcz9cbiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgZnVuY3Rpb25zOioqIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBzeXN0ZW0gY2FsbCBvciBpbnRlcmFjdCB3aXRoIGl0LlxuXG5JJ2xsIGJlIHJlYWRpbmcgZm9yIHVuZGVyc3RhbmRpbmcsIHNvIHRoZXNlIGFyZSBqdXN0IG15IGluaXRpYWwgZ29hbHMuIEFzIGEgc2Vhc29uZWQgZXhwZXJ0LCBJJ20gZXhwZWN0aW5nIGEgY2xlYW4sIG9yZ2FuaXplZCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBhbHNvIGJlIHRyeWluZyB0byBnYXVnZSBpZiBhbnkgb3B0aW1pemF0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQsIGFuZCBpZiBub3QsIHdoZXJlIEkgbWlnaHQgbG9vayB0byBvcHRpbWl6ZSB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMzoxNi4xODQ1NTIwNzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wtdjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIDI1MjpcXHRcXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDI1MzpcXHRcXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcXG4gMjU0OlxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19TV0FQXFxuIDI1ODpcXHQvKipcXG4gMjU5OlxcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxuIDI2MDpcXHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxcbiAyNjE6XFx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcXG4gMjYyOlxcdCAqXFxuIDI2MzpcXHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cXG4gMjY0OlxcdCAqIGZvbGlvLVxcdTAwM2Vzd2FwLlxcbiAyNjU6XFx0ICpcXG4gMjY2OlxcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cXG4gMjY3OlxcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cXG4gMjY4OlxcdCAqL1xcbiAyNjk6XFx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIDI3MDpcXHR7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xcbiAyNzI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyNzM6XFx0XFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIDI3NjpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNzc6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbiAyNzg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gMjgxOlxcdFxcdFxcdHJldHVybjtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXFxuIDI4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiAyODc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbiAyODg6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyOTI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4gMjkzOlxcdFxcdC8qXFxuIDI5NDpcXHRcXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcXG4gMjk1OlxcdFxcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcXG4gMjk2OlxcdFxcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxcbiAyOTc6XFx0XFx0ICovXFxuIDI5ODpcXHRcXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiAyOTk6XFx0XFx0c3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MTYuMTg0NzY1OTk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDYyMTk0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDYWNoZSBEZWxldGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVsZXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIHN3YXAgY2FjaGUgYSBiaXQgYmV0dGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDAgd2l0aGluIGBtbS9zd2FwX3N0YXRlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbnNpZGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byByZW1vdmluZyBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZSwgYW5kIGEgZGV0YWlsZWQgbG9vayBzaG91bGQgcmV2ZWFsIHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgZGVsZXRpb24gd29ya2Zsb3cuIEknbSBrZWVuIHRvIGRpc3NlY3QgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBvciBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgZW1wbG95LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMzoxOC4wOTA5ODg0MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3N3YXBfc3RhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuIDI5NjpcXHRcXHRcXHRkbyB7XFxuIDI5NzpcXHRcXHRcXHRcXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX29mZiwgMSk7XFxuIDI5OTpcXHRcXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHR9XFxuIDMwMjpcXHRcXG4gMzAzOlxcdC8qKlxcbiAzMDQ6XFx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDU6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzA2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMDc6XFx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gMzA4OlxcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDMwOTpcXHQgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAzMTA6XFx0ICpcXG4gMzExOlxcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cXG4gMzEyOlxcdCAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAzMTM6XFx0ICpcXG4gMzE0OlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxcbiAzMTU6XFx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4gMzE2OlxcdCAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcXG4gMzE3OlxcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cXG4gMzE4OlxcdCAqL1xcbiAzMTk6XFx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDMyMDpcXHRcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiAzMjE6XFx0e1xcbiAzMjI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gMzI1OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoc3dhcG91dClcXG4gMzI4OlxcdFxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHQvKipcXG4gMzM0OlxcdCAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMzNTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzM2OlxcdCAqXFxuIDMzNzpcXHQgKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG4gMzM4OlxcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4gMzM5OlxcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXFxuIDM0MDpcXHQgKlxcbiAzNDE6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNDI6XFx0ICovXFxuIDM0MzpcXHR2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM0NDpcXHR7XFxuIDM0NTpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbiAzNDY6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG4gMzQ5OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiAzNTA6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDM1MzpcXHR9XFxuIDM1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MTguMDkxMjAxNTE4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTM2ODI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0cm91Ymxlc2hvb3RpbmcgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgd2Ugc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDc1NS4gVGhhdCBhcmVhLCBhcyBJIHJlY2FsbCwgbGlrZWx5IGRlYWxzIHdpdGggdGhlIHBhZ2UgcmVjbGFpbSBwcm9jZXNzLCBwb3RlbnRpYWxseSB3aGVyZSB0aGUgem9uZSByZWNsYWltaW5nIGxvZ2ljIGNvbWVzIGludG8gcGxheS4gSXQncyBhIGtleSBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsJ3MgZGVjaWRpbmcgd2hhdCBwYWdlcyB0byBldmljdCwgaG93IGl0IHByaW9yaXRpemVzIHRob3NlIHBhZ2VzLCBhbmQgd2hhdCBmYWN0b3JzIGFyZSBpbmZsdWVuY2luZyB0aGF0IGRlY2lzaW9uLiBHaXZlbiB0aGUgbnVhbmNlcyBvZiBtZW1vcnkgcmVjbGFpbSwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgc3lzdGVtLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjAuMDg0ODg4NDQ0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDA6XFx0XFx0ICpcXG4gNzQxOlxcdFxcdCAqIE5vdGUgdGhhdCBpZiB0aGUgZGlydHkgZmxhZyBpcyBhbHdheXMgc2V0IHZpYSBmb2xpb19tYXJrX2RpcnR5LFxcbiA3NDI6XFx0XFx0ICogYW5kIHRodXMgdW5kZXIgdGhlIGlfcGFnZXMgbG9jaywgdGhlbiB0aGlzIG9yZGVyaW5nIGlzIG5vdCByZXF1aXJlZC5cXG4gNzQzOlxcdFxcdCAqL1xcbiA3NDQ6XFx0XFx0cmVmY291bnQgPSAxICsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiA3NDU6XFx0XFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXFxuIDc0NjpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NDc6XFx0XFx0Lyogbm90ZTogYXRvbWljX2NtcHhjaGcgaW4gZm9saW9fcmVmX2ZyZWV6ZSBwcm92aWRlcyB0aGUgc21wX3JtYiAqL1xcbiA3NDg6XFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkge1xcbiA3NDk6XFx0XFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XFxuIDc1MDpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuIDc1NDpcXHRcXHRcXHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gNzU3OlxcdFxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxuIDc1ODpcXHRcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcXG4gNzU5OlxcdFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gNzYwOlxcdFxcdH0gZWxzZSB7XFxuIDc2MTpcXHRcXHRcXHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRcXHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWZyZWVfZm9saW87XFxuIDc2NDpcXHRcXHRcXHQvKlxcbiA3NjU6XFx0XFx0XFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXFxuIDc2NjpcXHRcXHRcXHQgKiBvcmRlciB0byBkZXRlY3QgcmVmYXVsdHMsIHRodXMgdGhyYXNoaW5nLCBsYXRlciBvbi5cXG4gNzY3OlxcdFxcdFxcdCAqXFxuIDc2ODpcXHRcXHRcXHQgKiBCdXQgZG9uJ3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcXG4gNzY5OlxcdFxcdFxcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxcbiA3NzA6XFx0XFx0XFx0ICogaW5vZGUgcmVjbGFpbSBuZWVkcyB0byBlbXB0eSBvdXQgdGhlIHJhZGl4IHRyZWUgb3JcXG4gNzcxOlxcdFxcdFxcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbid0IHBsYW50IHNoYWRvd3MgYmVoaW5kIGl0c1xcbiA3NzI6XFx0XFx0XFx0ICogYmFjay5cXG4gNzczOlxcdFxcdFxcdCAqXFxuIDc3NDpcXHRcXHRcXHQgKiBXZSBhbHNvIGRvbid0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxcbiA3NzU6XFx0XFx0XFx0ICogb25seSBwYWdlIGNhY2hlIGZvbGlvcyBmb3VuZCBpbiB0aGVzZSBhcmUgemVybyBwYWdlc1xcbiA3NzY6XFx0XFx0XFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWl4IERBWFxcbiA3Nzc6XFx0XFx0XFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXFxuIDc3ODpcXHRcXHRcXHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXFxuIDc3OTpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjAuMDg1NTEzMTI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMzg5NTY3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBxdWVzdGlvbjpcblxuKipEZWNvbnN0cnVjdGluZyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgQ2FsbGVycyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBzd2FwIGNhY2hlIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5LCB3aGVyZSBlcnJvcnMgb3IgdW51c3VhbCBzaXR1YXRpb25zIGNvdWxkIGFyaXNlLiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBjb2RlIGFyY2hhZW9sb2d5IGFuZCBzZWUgd2hhdCBmdW5jdGlvbnMgdXNlIGl0IGFuZCBpbiB3aGF0IGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgY2FsbGVycyB0b28/IEknbGwgaGF2ZSB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGJlZ2luIG15IGV4cGxvcmF0aW9uLiBJJ2xsIGxpa2VseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIChmb2xpYWdlLCBzd2FwIGNhY2hlKSB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93LiBEZXBlbmRpbmcgb24gdGhlIGNvZGViYXNlLCBJIGNhbiBwcm9iYWJseSB1c2UgbXkgSURFJ3MgXCJmaW5kIHVzYWdlc1wiIG9yIGEgc2ltaWxhciBmZWF0dXJlIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gZWFjaCBjYWxsZXIsIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgdGhlIGNhbGwgdG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGd1YXJkZWQgYnkgZXJyb3IgY2hlY2tzPyBUaGlzIGNhbiBwcm92aWRlIGluc2lnaHQgaW50byBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgaW4gdGhlIHN5c3RlbS5cbiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgaXMgdGhlIGFjY2VzcyB0byB0aGUgc3dhcCBjYWNoZSBzeW5jaHJvbml6ZWQgYXJvdW5kIHRoZSBjYWxsIHRvIGRlbGV0ZSBhIGZvbGlvPyBBcmUgdGhlcmUgbG9ja3Mgb3IgYXRvbWljIG9wZXJhdGlvbnMgaW52b2x2ZWQ/XG4qICAgKipDb250ZXh0OioqIFdoYXQgaXMgdGhlIGhpZ2gtbGV2ZWwgb3BlcmF0aW9uIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIHdoZW4gaXQgZGVsZXRlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGU/IElzIGl0IHJlbGF0ZWQgdG8gcGFnZSByZWNsYWltLCB3cml0ZWJhY2ssIG9yIHNvbWV0aGluZyBlbHNlP1xuKiAgICoqQ29uY3VycmVuY3k6KiogQW55IGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzd2FwIGNhY2hlP1xuKiAgICoqUmFjZSBDb25kaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz9cbiogICAqKkRvdWJsZSBGcmVlIFBvc3NpYmlsaXRpZXM6KiogSXMgaXQgcG9zc2libGUgZm9yIGEgZm9saW8gdG8gYmUgZGVsZXRlZCB0d2ljZT9cbiogICAqKk1lbW9yeSBMZWFrczoqKiBBcmUgdGhlcmUgYW55IHBsYWNlcyB3aGVyZSB0aGUgZm9saW8gaXMgaW5jb3JyZWN0bHkgcmVsZWFzZWQ/XG5cblVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIHByb2Nlc3MsIGl0cyBpbXBsaWNhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGludmVzdGlnYXRpb24sIGFuZCBJIG11c3Qgbm90IGFsbG93IGFueSBhc3N1bXB0aW9ucyB0byBjcmVlcCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjMuMzI0NDcyNTM4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM2MTUyMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NTQtXFxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC00NTYtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jLTMyMC1cXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQzPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5tbS9zd2FwX3N0YXRlLmM6MzQ5OlxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYxOC1cXHRcXHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcXG5tbS9zd2FwZmlsZS5jOjE2MTk6XFx0XFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxcbm1tL3N3YXBmaWxlLmMtMTYyMC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTM6MjYuNTYwNjM5NjAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Mzc0OTM5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBTd2FwIENhY2hlIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBtb3ZpbmcgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXRgIHdpdGhpbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2Agd2hlbiBgc3dhcG91dGAgaXMgdHJ1ZS4gUHJldmlvdXNseSwgaXQgd2FzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBfX3JlbW92ZV9tYXBwaW5nYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIHJlYXJyYW5nZW1lbnQgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcHJvY2Vzcywgd2l0aCB0aGUgaW1wb3J0YW50IGJpdCBiZWluZyB0aGF0IGBfX21lbWNnMV9zd2Fwb3V0YCBub3cgaGFwcGVucyAqYmVmb3JlKiBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd2FycmFudCBhIEtNU0FOIHJ1bj8gTGV0J3MgYW5hbHl6ZS4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19tZW1jZzFfc3dhcG91dGAgYXJlIGRlZXAgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFscy4gVGhleSdyZSB0b3VjaGluZyBwYWdlIHN0YXRlcywgY2dyb3VwIGFjY291bnRpbmcsIGFuZCB0aGUgc3dhcCBjYWNoZSBzdHJ1Y3R1cmVzLCBidXQgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhleSdyZSBkb2luZyBhbnl0aGluZyB0aGF0IHdvdWxkIHRyaWdnZXIgS01TQU4uIFRoZXkncmUgbm90IGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIGNvcHlpbmcgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZSBhcmUgbm8gYnJhbmNoZXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGUgcGF0Y2ggaXMsIGF0IGl0cyBjb3JlLCBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zLCBub3QgdGhlICpuYXR1cmUqIG9mIHRoZSBkYXRhIGJlaW5nIG1hbmlwdWxhdGVkLlxuXG5UaGlzIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgc3RydWN0dXJlcywgcmVhZGluZyB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbGVha2luZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIHN0cmFpZ2h0IHJlZmFjdG9yIHdoZXJlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSB3ZWxsIGRlZmluZWQsIHNvIHRoZXJlIGFyZSBubyB1bmtub3ducyBvbiB3aGljaCB0byB0cmlnZ2VyIEtNU0FOLCBhdCBhbGwuIEFueSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcywgc3VjaCBhcyBLQVNBTiBhbmQgTE9DS0RFUCwgc2hvdWxkIGNhdGNoIGFueSByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQgKmNvdWxkKiBiZSBpbnRyb2R1Y2VkIGR1ZSB0byB0aGUgc2hpZnQgaW4gb3JkZXJpbmcuIEluIG90aGVyIHdvcmRzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBTbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZS4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzgyLCJPdXRwdXRUb2tlbnMiOjI5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMzozMi4xOTgxMzk4NjZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXFxuXFxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcXG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxcbjIuIFRoZSBuZXcgYHN3YXBvdXRgIGJvb2xlYW4gYXJndW1lbnQgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgYSBjb25zdGFudCAoYHRydWVgIGluIGBfX3JlbW92ZV9tYXBwaW5nYCBhbmQgYGZhbHNlYCBpbiBgc3dhcF9jYWNoZV9kZWxfZm9saW9gKSwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxcblxcblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwYXRoIGJ5IGFkZGluZyBhIGJvb2xlYW4gcGFyYW1ldGVyIGBzd2Fwb3V0YCB0byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBhbmQgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSlgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKWAuXFxuXFxuVGhpcyBjaGFuZ2UgaW52b2x2ZXMgcHVyZWx5IGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYzpcXG4xLiBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLlxcbjIuIFRoZSBuZXcgYHN3YXBvdXRgIGJvb2xlYW4gYXJndW1lbnQgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgYSBjb25zdGFudCAoYHRydWVgIGluIGBfX3JlbW92ZV9tYXBwaW5nYCBhbmQgYGZhbHNlYCBpbiBgc3dhcF9jYWNoZV9kZWxfZm9saW9gKSwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjMuIE5vIGRhdGEgaXMgY29waWVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgZXRjLikuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIHJlbGF0ZSB0byBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCBvciBtZW1jZyBzdGF0ZSBjb25zaXN0ZW5jeSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBpbnRlcm5hbCBWTSBhc3NlcnRpb25zIChgVk1fQlVHX09OX0ZPTElPYCwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2ApLlxcblxcblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[1] Phase: Succeeded StartedAt: 2026-09-06 17:13:44 +0000 UTC FinishedAt: 2026-09-06 17:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 17:13:44 +0000 UTC FinishedAt: 2026-09-06 17:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2] Phase: Succeeded StartedAt: 2026-09-06 17:13:44 +0000 UTC FinishedAt: 2026-09-06 20:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 17:13:44 +0000 UTC FinishedAt: 2026-09-06 20:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 17:13:44 +0000 UTC FinishedAt: 2026-09-06 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 17:13:44 +0000 UTC FinishedAt: 2026-09-06 17:13:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7bxjv/series-workflow7bxjv-convert-artifact-2959805194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:29:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:29:51 +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:*11892e07-5b7e-4f99-9472-26919b71864b,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-workflow7bxjv/series-workflow7bxjv-convert-artifact-2959805194/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": "9ded3be9-cce6-4774-b8fe-4fb30a76d84b", "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-workflow7bxjv/series-workflow7bxjv-build-action-3661346296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:29:41 +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:*11892e07-5b7e-4f99-9472-26919b71864b,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-workflow7bxjv/series-workflow7bxjv-convert-artifact-2959805194/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": "9ded3be9-cce6-4774-b8fe-4fb30a76d84b", "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-workflow7bxjv/series-workflow7bxjv-build-action-3661346296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 17:29:51 +0000 UTC FinishedAt: 2026-09-06 17:29:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 17:29:51 +0000 UTC FinishedAt: 2026-09-06 17:29:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 17:29:51 +0000 UTC FinishedAt: 2026-09-06 17:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 17:29:51 +0000 UTC FinishedAt: 2026-09-06 17:29:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7bxjv/series-workflow7bxjv-convert-artifact-3227553701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 17:30:01 +0000 UTC FinishedAt: 2026-09-06 17:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 17:30:01 +0000 UTC FinishedAt: 2026-09-06 17:31:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ded3be9-cce6-4774-b8fe-4fb30a76d84b,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-workflow7bxjv/series-workflow7bxjv-build-action-3661346296/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-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 17:32:07 +0000 UTC FinishedAt: 2026-09-06 17:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:32:07 +0000 UTC FinishedAt: 2026-09-06 17:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 17:32:07 +0000 UTC FinishedAt: 2026-09-06 17:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 17:32:07 +0000 UTC FinishedAt: 2026-09-06 17:48:13 +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:*11892e07-5b7e-4f99-9472-26919b71864b,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-workflow7bxjv/series-workflow7bxjv-convert-artifact-3227553701/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": "c71f8947-9b48-451d-8b97-d5b074150d63", "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-workflow7bxjv/series-workflow7bxjv-build-action-1469695985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 17:32:07 +0000 UTC FinishedAt: 2026-09-06 17:48:03 +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:*11892e07-5b7e-4f99-9472-26919b71864b,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-workflow7bxjv/series-workflow7bxjv-convert-artifact-3227553701/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": "c71f8947-9b48-451d-8b97-d5b074150d63", "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-workflow7bxjv/series-workflow7bxjv-build-action-1469695985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 17:48:13 +0000 UTC FinishedAt: 2026-09-06 17:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 17:48:13 +0000 UTC FinishedAt: 2026-09-06 17:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 17:48:13 +0000 UTC FinishedAt: 2026-09-06 17:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 17:48:13 +0000 UTC FinishedAt: 2026-09-06 17:50:17 +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:*c71f8947-9b48-451d-8b97-d5b074150d63,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-workflow7bxjv/series-workflow7bxjv-build-action-1469695985/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-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 20:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 20:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9ded3be9-cce6-4774-b8fe-4fb30a76d84b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c71f8947-9b48-451d-8b97-d5b074150d63,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-workflow7bxjv/series-workflow7bxjv-build-action-3661346296/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-workflow7bxjv/series-workflow7bxjv-build-action-1469695985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 17:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 17:50:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7bxjv/series-workflow7bxjv-convert-artifact-2758348074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 17:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 17:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:50:27 +0000 UTC FinishedAt: 2026-09-06 17:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 17:50:37 +0000 UTC FinishedAt: 2026-09-06 20:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bxjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__remove_mapping","__memcg1_swapout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"5f763992-20ce-47ac-a239-8d711ebcf296","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 17:50:37 +0000 UTC FinishedAt: 2026-09-06 20:52:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ded3be9-cce6-4774-b8fe-4fb30a76d84b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c71f8947-9b48-451d-8b97-d5b074150d63,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-workflow7bxjv/series-workflow7bxjv-build-action-3661346296/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-workflow7bxjv/series-workflow7bxjv-build-action-1469695985/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-workflow7bxjv/series-workflow7bxjv-convert-artifact-2758348074/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,}